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ì:
- Chỉ gọi LLM khi có documents → Không thể trả lời general queries
- 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)
# 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)
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
# 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
# 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
- Test với general query:
curl -X POST http://localhost:8000/api/chatbot/chat/ \
-H "Content-Type: application/json" \
-d '{"message":"mấy giờ rồi","reset_session":false}'
- Xem logs:
tail -f /tmp/django_general_conv.log | grep -E "\[RAG\]|\[LLM\]"
- 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