Phase 7: Hoàn thiện Modular RAG Backend với FastAPI và Đa LLM Provider
This commit is contained in:
242
doc/5.RAG-Chat-Application-Playbook.md
Normal file
242
doc/5.RAG-Chat-Application-Playbook.md
Normal file
@@ -0,0 +1,242 @@
|
||||
# 5.RAG-Chat-Application-Playbook.md
|
||||
|
||||
> Tài liệu này mô tả **tầng RAG Chat** xây dựng trên Search (file 4). Mục tiêu là:
|
||||
> - Giúp **AI trả lời đúng – có dẫn chứng – không hallucinate**
|
||||
> - Giúp **người dùng cuối dễ hiểu, dễ tin, dễ dùng**
|
||||
> - Có thể dùng làm **tài liệu tham khảo khi soạn Hướng dẫn sử dụng (User Guide)**
|
||||
>
|
||||
> File được viết để **AI agent đọc là triển khai được**, **con người đọc là hiểu và sử dụng được**.
|
||||
|
||||
---
|
||||
|
||||
## Mục lục
|
||||
1. RAG Chat là gì trong hệ thống này?
|
||||
2. Nguyên tắc thiết kế RAG Chat
|
||||
3. Kiến trúc tổng thể RAG Chat
|
||||
4. Vai trò của Search trong RAG
|
||||
5. Luồng xử lý câu hỏi (End‑to‑End)
|
||||
6. Prompt Strategy (Quan trọng nhất)
|
||||
7. Context Assembly & Citation
|
||||
8. Tránh Hallucination & Guardrails
|
||||
9. Trải nghiệm người dùng (UX Guidelines)
|
||||
10. Các chế độ Chat khuyến nghị
|
||||
11. Permission propagation
|
||||
12. Logging & Explainability
|
||||
13. Checklist triển khai & Checklist hướng dẫn sử dụng
|
||||
|
||||
---
|
||||
|
||||
## 1. RAG Chat là gì trong hệ thống này?
|
||||
|
||||
**RAG (Retrieval‑Augmented Generation)** = AI **KHÔNG tự nghĩ**, mà:
|
||||
1. Tìm dữ liệu liên quan trong hệ thống Search
|
||||
2. Chỉ dùng dữ liệu đó để trả lời
|
||||
3. Luôn nói rõ **lấy thông tin từ đâu**
|
||||
|
||||
Trong hệ thống này:
|
||||
- ❌ Chat **không** thay thế Search
|
||||
- ✅ Chat **dựa hoàn toàn trên Search**
|
||||
|
||||
---
|
||||
|
||||
## 2. Nguyên tắc thiết kế RAG Chat
|
||||
|
||||
1. **Search‑first, LLM‑second**
|
||||
2. **Không có dữ liệu → không trả lời**
|
||||
3. **Trả lời = Nội dung + Dẫn chứng**
|
||||
4. **Ngôn ngữ rõ ràng, không học thuật thừa**
|
||||
5. **Người dùng luôn có thể click mở tài liệu gốc**
|
||||
|
||||
---
|
||||
|
||||
## 3. Kiến trúc tổng thể RAG Chat
|
||||
|
||||
```text
|
||||
User Question
|
||||
│
|
||||
▼
|
||||
Query Understanding
|
||||
│
|
||||
▼
|
||||
Search Layer (OpenSearch)
|
||||
│
|
||||
├─ Top K chunks (ACL‑aware)
|
||||
▼
|
||||
Context Assembly
|
||||
│
|
||||
▼
|
||||
LLM (Answer generation)
|
||||
│
|
||||
▼
|
||||
Answer + Citations
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. Vai trò của Search trong RAG
|
||||
|
||||
Search quyết định:
|
||||
- AI **được phép biết gì**
|
||||
- AI **không được phép bịa gì**
|
||||
|
||||
Quy tắc:
|
||||
- LLM **chỉ được dùng context do Search trả về**
|
||||
- Không cho LLM truy cập internet / training data
|
||||
|
||||
---
|
||||
|
||||
## 5. Luồng xử lý câu hỏi (End‑to‑End)
|
||||
|
||||
```text
|
||||
[User hỏi]
|
||||
↓
|
||||
[Normalize câu hỏi]
|
||||
↓
|
||||
[Hybrid Search (keyword + vector)]
|
||||
↓
|
||||
[Lọc theo permission user]
|
||||
↓
|
||||
[Chọn top K chunks]
|
||||
↓
|
||||
[Build context + citation map]
|
||||
↓
|
||||
[LLM sinh câu trả lời]
|
||||
↓
|
||||
[Trả lời + link tài liệu]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. Prompt Strategy (Rất quan trọng)
|
||||
|
||||
### 6.1 System Prompt (bắt buộc)
|
||||
|
||||
```text
|
||||
Bạn là trợ lý tra cứu tài liệu nội bộ.
|
||||
Bạn CHỈ được trả lời dựa trên thông tin được cung cấp trong CONTEXT.
|
||||
Nếu CONTEXT không đủ, hãy trả lời:
|
||||
"Tôi không tìm thấy thông tin trong các tài liệu hiện có."
|
||||
Mỗi câu trả lời phải kèm theo nguồn trích dẫn.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6.2 User Prompt Template
|
||||
|
||||
```text
|
||||
CÂU HỎI:
|
||||
{{user_question}}
|
||||
|
||||
CONTEXT:
|
||||
{{retrieved_chunks}}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6.3 Output Format (khuyến nghị)
|
||||
|
||||
```text
|
||||
TRẢ LỜI NGẮN GỌN:
|
||||
...
|
||||
|
||||
CHI TIẾT:
|
||||
...
|
||||
|
||||
NGUỒN THAM KHẢO:
|
||||
- Tài liệu A – trang 5
|
||||
- Tài liệu B – trang 12
|
||||
```
|
||||
|
||||
➡️ Format này **rất phù hợp để đưa vào User Guide**.
|
||||
|
||||
---
|
||||
|
||||
## 7. Context Assembly & Citation
|
||||
|
||||
### 7.1 Context Assembly
|
||||
- Giữ đúng thứ tự logic
|
||||
- Không quá dài (token budget)
|
||||
- Mỗi chunk có ID và nguồn
|
||||
|
||||
### 7.2 Citation Object
|
||||
|
||||
```json
|
||||
{
|
||||
"chunk_id": "...",
|
||||
"file_name": "...",
|
||||
"page": 7,
|
||||
"url": "..."
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Tránh Hallucination & Guardrails
|
||||
|
||||
✅ BẮT BUỘC:
|
||||
- Nếu không có chunk phù hợp → không trả lời
|
||||
- Không "suy luận thêm" ngoài context
|
||||
|
||||
✅ Câu trả lời chuẩn khi không đủ dữ liệu:
|
||||
> "Hiện tại tôi không tìm thấy thông tin trong các tài liệu nội bộ để trả lời câu hỏi này."
|
||||
|
||||
---
|
||||
|
||||
## 9. Trải nghiệm người dùng (UX Guidelines)
|
||||
|
||||
### 9.1 Người dùng nên cảm nhận gì?
|
||||
- AI **đáng tin**
|
||||
- Nói **giống đồng nghiệp biết tài liệu**, không giống chatbot chung chung
|
||||
|
||||
### 9.2 UX khuyến nghị
|
||||
- Mỗi đoạn trả lời có nút "Mở tài liệu"
|
||||
- Highlight đoạn liên quan trong PDF
|
||||
|
||||
---
|
||||
|
||||
## 10. Các chế độ Chat khuyến nghị
|
||||
|
||||
| Mode | Mô tả | Đối tượng |
|
||||
|----|------|----------|
|
||||
| Tra cứu nhanh | Trả lời ngắn + link | Nhân viên |
|
||||
| Giải thích | Có diễn giải | Đào tạo |
|
||||
| So sánh | So nhiều tài liệu | Quản lý |
|
||||
|
||||
---
|
||||
|
||||
## 11. Permission Propagation
|
||||
|
||||
Nguyên tắc:
|
||||
- Chat **không trả về thứ Search không trả**
|
||||
- Không lộ tên file tồn tại nếu user không có quyền
|
||||
|
||||
---
|
||||
|
||||
## 12. Logging & Explainability
|
||||
|
||||
Lưu lại:
|
||||
- Question
|
||||
- Retrieved chunks
|
||||
- Answer
|
||||
- Citation
|
||||
|
||||
➡️ Phục vụ audit, cải tiến prompt, training nội bộ
|
||||
|
||||
---
|
||||
|
||||
## 13. Checklist triển khai & Checklist hướng dẫn sử dụng
|
||||
|
||||
### 13.1 Checklist kỹ thuật
|
||||
✅ Search trước Chat
|
||||
✅ Prompt chặt chẽ
|
||||
✅ Citation bắt buộc
|
||||
✅ Permission end‑to‑end
|
||||
|
||||
### 13.2 Checklist cho User Guide
|
||||
✅ Giải thích AI làm gì / không làm gì
|
||||
✅ Hướng dẫn đọc citation
|
||||
✅ Cách phản hồi khi AI không tìm thấy dữ liệu
|
||||
|
||||
---
|
||||
|
||||
*Kết thúc RAG Chat Playbook. Đây là tầng trên cùng của hệ thống.*
|
||||
Reference in New Issue
Block a user