⚙️ Config Assistant
Sinh JSON cấu hình từ mô tả nghiệp vụ. Pipeline: config-gen — structured output với JSON Schema.
Hỗ trợ: streaming · tool calls · file/ảnh đính kèm · ghi âm (STT)
🎨 SmartLayout Assistant
Đề xuất bố cục giao diện form/list dựa trên schema. Pipeline: layout-gen.
Hỗ trợ: streaming · tool calls · file/ảnh đính kèm · ghi âm (STT)
📐 Schema Definition Assistant
Tạo / tối ưu schema metadata từ mô tả nghiệp vụ. Pipeline: schema-gen.
Hỗ trợ: streaming · tool calls · đính kèm schema hiện có · ghi âm (STT)
📊 Data Assistant (Business Analyst)
Trợ lý phân tích dữ liệu qua MCP tools. Pipeline: default — đại diện đúng nhất cho frontend chatbox enduser.
Hỗ trợ: streaming · tool calls · file/ảnh đính kèm · ghi âm (STT)
💻 Coding Assistant
Sinh code, refactor, giải thích. Pipeline: default — streaming SSE real-time.
Hỗ trợ: streaming · tool calls · file/ảnh đính kèm · ghi âm (STT)
💬 Chat (Generic Completion)
Hoàn thành thuần (không tool, không session). Dùng để smoke test pipeline cơ bản.
Preset prompts
Phản hồi
👁️ Vision OCR / Image Understanding
Tải ảnh (hóa đơn, biểu đồ, screenshot UI...) → AI đọc text + mô tả nội dung.
Preset instructions
Kết quả
🎤 Speech to Text
Tải file âm thanh → transcribe ra text. Hỗ trợ tiếng Việt qua Whisper.
Tips
Transcription
🔊 Text to Speech
Văn bản → giọng nói tự nhiên. Chọn voice + format + tốc độ.
Preset texts
Audio output
🧠 Memory (Ingest + Semantic Search)
RAG end-to-end: ingest tài liệu vào vector store → search bằng câu hỏi tự nhiên.
Preset corpus
Ingest
Search
🔐 Auth Diagnostics
Probe AIGateway → /mcp với user JWT của bạn. Dùng khi assistant trả lỗi
HTTP 5xx ... 401/403 from /mcp. AIGateway giờ là thin MCP proxy: forward
bearer header của user verbatim — không có service-account hop, không có impersonation
header. Login PKCE ở header bar trước khi probe.
/mcp tools/list probe
POST /api/diag/mcp/tools-list → backend forward Authorization của bạn
sang Application /mcp. Trả về raw HTTP status + tool count + body preview.
Hint giúp phân biệt 401 (JWT bị từ chối / hết hạn) vs 403 (thiếu scope mcp:invoke
— re-login để mint token mới).
4. AssistantToolPolicy resolution
Xem mỗi assistant kind đang được gắn internal plugins nào + có load MCP tools không.
🧩 Skill Manager
Quản lý các Skill (assistant DB-driven). Mỗi Skill có instructions + tool bindings + provider/model override,
publish thành POST /api/skills/{name}/run. 5 skill base + 1 skill-creator seed sẵn.
Click "🪄 Create with AI" để mô tả nhu cầu bằng ngôn ngữ tự nhiên — Skill Creator sẽ tự draft và save.
| Name | Title | Pipeline | MCP | Enabled | System | Actions |
|---|---|---|---|---|---|---|
| (chưa refresh) | ||||||
💭 Conversation Console
Test multi-turn cho 4 assistant chính (BA / Schema / Layout / Config). Mỗi turn ghi lại
history vào ai_conversations Mongo (TTL 7 ngày). Tool calls được hiển thị
chi tiết để verify Layer 2 (MCP) hoạt động đúng tenant.
Cài đặt phiên
Schema mode: truyền JSON schema hiện tại vào ô bên dưới để chạy Refactor mode. Layout mode: SchemaId trong ô bên dưới. Config mode: JSON Schema constraint (optional).
Chat history
Gửi turn mới
📎 Widget Guide — nhúng chat vào trang bất kỳ
Widget cho phép tenant nhúng 1 đoạn <script> vào bất kỳ trang
nào để có chat bubble (Intercom-style) gọi tới aig.qltn.demego.vn. Trang này có
sẵn nút Mount widget bên dưới — bấm để chat thử ngay tại đây.
1. Cấu hình
Mặc định Gateway base = origin của trang này. App base = Application
(OpenIddict issuer). Có thể paste sẵn token để skip PKCE.
2. Snippet — copy vào trang tenant
Snippet auto-update theo cấu hình ở phần 1.
3. Mount widget vào trang này
Bấm Mount để widget thực sự xuất hiện ở góc dưới-phải (hoặc theo
Position đã chọn). Widget chạy trong Shadow DOM nên không xung đột CSS với UI test này.
Chỉ mount được 1 lần / page (reload nếu muốn đổi config).
Public API (sau khi mount, mở DevTools console):
AIGWidget.open(), .close(), .toggle(),
.reset(), .contextId(), .version.
4. Bảng các thuộc tính data-*
| Thuộc tính | Bắt buộc | Default | Mô tả |
|---|---|---|---|
src | ✅ | — | URL bundle: {gateway}/widget/v1/embed.js |
data-app-base | ✅ | https://api.qltn.sandbox.demego.vn | Application URL (OAuth issuer + regcode source) |
data-client-id | — | demego.user | OAuth client_id, public PKCE-enabled |
data-token | — | — | Pre-acquired JWT (skip PKCE). Chỉ dùng khi host page đã có session. |
data-context-id | — | auto-gen | Conversation context. Set cố định để chat liên session. |
data-language | — | vi | Ngôn ngữ phản hồi. Persist theo conversation. |
data-position | — | br | Vị trí bubble: br | bl | tr | tl |
data-theme | — | auto | light | dark | auto (auto = follow OS) |
data-greeting | — | (VN) | Câu chào assistant gửi đầu tiên |
data-history-window | — | 8 | Số turn cũ inject vào prompt (1..100) |
data-title | — | Trợ lý AI | Tiêu đề header panel |
async | — | — | Khuyến nghị bật để không chặn page render |
5. Token resolution (theo thứ tự ưu tiên)
data-tokentrên thẻ script → dùng trực tiếp, skip OIDC.- localStorage
aig-widget-token-{client_id}còn hạn → dùng (decodeexpclaim). - PKCE flow: widget mở popup tới
{app-base}/identity/connect/authorize→ user login → callback.html postMessage code về parent → widget POST/connect/tokenexchange → token lưu vào localStorage cho lần sau.
⚠️ Popup blocker có thể chặn step 3. Widget detect được và sẽ fallback hiển thị thông báo. Trang host nên cho phép popup từ Application domain.
6. Backend endpoints (mọi widget call qua đây)
| Method | Path | Auth | Mục đích |
|---|---|---|---|
| POST | /api/v1/chat/send | JWT | Unary chat (full response JSON) |
| POST | /api/v1/chat/stream | JWT | SSE typewriter |
| GET | /api/v1/chat/history | JWT | Load conversation từ Mongo TTL 7d |
| DELETE | /api/v1/chat/history | JWT | Reset conversation |
Tenant context auto-resolve từ JWT claims (regcode, username,
subjectSchema, subjectId, activeRole) — widget
không gửi tenantId trong body (defense-in-depth).