File size: 3,942 Bytes
519b145 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# Sửa Chatbot để Hỗ trợ General Conversation
## Vấn đề
Chatbot không trả lời được như một chatbot AI thông thường vì:
1. **Chỉ gọi LLM khi có documents** → Không thể trả lời general queries
2. **Trả về error message ngay khi không có documents** → Không cho LLM cơ hội trả lời
## Giải pháp đã áp dụng
### 1. Sửa `rag.py` - Cho phép LLM trả lời ngay cả khi không có documents
**File:** `backend/hue_portal/core/rag.py`
**Thay đổi:**
- Trước: Trả về error message ngay khi không có documents
- Sau: Gọi LLM ngay cả khi không có documents (general conversation mode)
```python
# Trước:
if not documents:
return error_message # ← Không gọi LLM
# Sau:
# Gọi LLM trước (ngay cả khi không có documents)
if use_llm:
llm_answer = llm.generate_answer(query, context=context, documents=documents if documents else [])
if llm_answer:
return llm_answer
# Chỉ trả về error nếu không có LLM và không có documents
if not documents:
return error_message
```
### 2. Sửa `llm_integration.py` - Prompt cho general conversation
**File:** `backend/hue_portal/chatbot/llm_integration.py`
**Thay đổi:**
- Nếu có documents → Yêu cầu trả lời dựa trên documents (strict mode)
- Nếu không có documents → Cho phép general conversation (friendly mode)
```python
if documents:
# Strict mode: chỉ trả lời dựa trên documents
prompt_parts.extend([...])
else:
# General conversation mode
prompt_parts.extend([
"- Trả lời câu hỏi một cách tự nhiên và hữu ích như một chatbot AI thông thường",
"- Nếu câu hỏi liên quan đến pháp luật nhưng không có thông tin, hãy nói rõ",
...
])
```
### 3. Sửa `rag_pipeline` - Luôn gọi generate_answer_template
**File:** `backend/hue_portal/core/rag.py`
**Thay đổi:**
- Trước: Trả về error ngay khi không có documents
- Sau: Luôn gọi `generate_answer_template` để cho LLM cơ hội trả lời
```python
# Trước:
if not documents:
return {'answer': error_message, ...} # ← Không gọi LLM
# Sau:
# Luôn gọi generate_answer_template (sẽ gọi LLM nếu có)
answer = generate_answer_template(query, documents, content_type, context=context, use_llm=use_llm)
```
### 4. Sửa `chatbot.py` - Sử dụng answer từ LLM ngay cả khi count=0
**File:** `backend/hue_portal/chatbot/chatbot.py`
**Thay đổi:**
- Trước: Chỉ sử dụng RAG result nếu `count > 0`
- Sau: Sử dụng answer từ LLM ngay cả khi `count = 0`
```python
# Trước:
if rag_result["count"] > 0 and rag_result["confidence"] >= confidence:
# Sử dụng answer
# Sau:
if rag_result.get("answer") and (rag_result["count"] > 0 or rag_result.get("answer", "").strip()):
# Sử dụng answer (kể cả khi count=0)
```
## Kết quả
✅ **LLM được gọi ngay cả khi không có documents**
- Logs cho thấy: `[RAG] Using LLM provider: api`
- Logs cho thấy: `[LLM] 🔗 Calling API: ...`
⚠️ **API trả về 500 error**
- Có thể do HF Spaces API đang gặp lỗi
- Hoặc prompt quá dài
- Cần kiểm tra HF Spaces logs
## Cách test
1. **Test với general query:**
```bash
curl -X POST http://localhost:8000/api/chatbot/chat/ \
-H "Content-Type: application/json" \
-d '{"message":"mấy giờ rồi","reset_session":false}'
```
2. **Xem logs:**
```bash
tail -f /tmp/django_general_conv.log | grep -E "\[RAG\]|\[LLM\]"
```
3. **Kiểm tra LLM có được gọi:**
- Tìm: `[RAG] Using LLM provider: api`
- Tìm: `[LLM] 🔗 Calling API: ...`
## Lưu ý
- **API mode cần HF Spaces hoạt động** → Nếu API trả về 500, cần kiểm tra HF Spaces
- **Local mode** sẽ hoạt động tốt hơn nếu có GPU
- **General conversation** chỉ hoạt động khi LLM available
|