Hỏi đáp
| POST | /chat |
Hỏi và nhận câu trả lời đầy đủ trong một response JSON |
| POST | /chat/stream |
Như trên nhưng trả dần theo SSE, chữ hiện sớm hơn ~3 lần |
| POST | /chat/attach |
Bóc chữ từ tệp (multipart, field file) để làm ngữ cảnh cho một câu hỏi |
| GET | /chat/history/{conversation_id} |
Lịch sử các lượt hỏi đáp của một phiên |
| GET | /chat/conversations?user_id= |
Danh sách phiên trò chuyện của một người dùng |
| GET | /settings/models?combos_only= |
Danh sách model. combos_only=true chỉ trả Combo đã map với 9router |
| GET | /settings/active-combo |
Combo model mà /chat đang thực sự dùng, kèm cờ in_sync phát hiện lệch cấu hình |
Bộ câu hỏi nội bộ
| GET | /faq |
Danh sách câu hỏi. Lọc: ?category= ?search= ?limit= ?offset= |
| GET | /faq/categories |
Danh mục kèm số lượng câu hỏi, đúng thứ tự hiển thị |
| GET | /faq/match?q= |
Tra cứu tức thì, không gọi LLM, gõ không dấu vẫn khớp |
| GET | /faq/{id} |
Chi tiết một câu hỏi |
| POST | /faq |
Thêm câu hỏi mới |
| PATCH | /faq/{id} |
Sửa câu hỏi (chỉ gửi trường cần đổi) |
| DELETE | /faq/{id} |
Xoá câu hỏi |
| POST | /faq/import |
Nhập hàng loạt. replace:true để ghi đè toàn bộ |
| POST | /faq/reseed |
Khôi phục bộ 98 câu gốc |
| PUT | /faq/categories/order |
Sắp lại thứ tự hiển thị danh mục. Body: {"categories":[...]} |
Công cụ tích hợp
| GET | /tools |
Danh sách công cụ kèm is_implemented và config_json mẫu |
| POST | /tools/{code}/run |
Chạy công cụ, tham số truyền thẳng trong body JSON |
| POST | /tools/test |
Chạy thử bằng tham số mẫu trong config_json |
| PATCH | /tools/{tool_id} |
Bật/tắt công cụ hoặc sửa config_json |
| POST | /tools/reseed |
Nạp lại bộ công cụ mặc định |
Đóng góp & phản hồi
| GET | /feedback |
Danh sách góp ý, kèm sẵn luồng phản hồi. Lọc: ?status= ?username= ?search= |
| POST | /feedback |
Nhân viên gửi góp ý / đề xuất câu hỏi mới |
| GET | /feedback/stats |
Đếm theo trạng thái, dùng cho badge “chưa xử lý” |
| GET | /feedback/{id} |
Chi tiết một góp ý |
| PATCH | /feedback/{id} |
Đổi trạng thái hoặc sửa nội dung |
| DELETE | /feedback/{id} |
Xoá góp ý (phản hồi bên trong xoá theo) |
| POST | /feedback/{id}/comments |
Trả lời một góp ý. Tự đẩy new → reviewing |
| DELETE | /feedback/comments/{id} |
Xoá một phản hồi trong luồng |
Response của /feedback
| username | string | null | Tài khoản đăng nhập — khoá nhận dạng ổn định, lọc “góp ý của tôi” bằng cái này |
| user_id | integer | null | Kém ổn định: LDAP sync đánh số lại bảng users nên cùng một người có thể đổi id |
| user_name | string | Họ tên hiển thị, chụp lại lúc gửi nên không đổi về sau |
| status | string | new · reviewing · resolved · rejected |
| comments | array | Có sẵn trong danh sách, không cần gọi thêm. Mỗi phần tử: id, content, user_name, is_admin, created_at |
| comment_count | integer | Số phản hồi trong luồng |
| created_at | string | ISO 8601 có hậu tố Z — trình duyệt tự đổi sang giờ Việt Nam |
Response của /chat
| answer | string | Nội dung câu trả lời (đã bỏ marker nội bộ) |
| source_type | string | "faq" = lấy từ bộ câu hỏi (~12ms) · "rag" = qua LLM |
| faq_match | object | null | Khi source_type="faq": id, category, question, source, score |
| sources | array | Trích dẫn tài liệu: document_id, filename, page |
| confidence | float | 0.0 – 1.0 |
Nguồn hiển thị cho nhân viên: khi source_type="faq", lấy
faq_match.source (mặc định “Phòng nhân sự”); khi "rag" thì dùng mảng
sources.
Thời gian thực: ngày giờ và thời tiết được hệ thống tra cứu thật rồi nạp vào prompt.
Tin tức, tỷ giá thì chatbot sẽ báo không tra cứu được thay vì bịa số liệu.
Khoá API: tắt công tắc phía trên thì mọi request tới /chat và
/chat/stream trả về 503.