hue-portal-backend-v2 / backend /GENERAL_CONVERSATION_FIX.md
davidtran999's picture
Push full code from hue-portal-backend folder
519b145

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)
# 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

  1. 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}'
  1. Xem logs:
tail -f /tmp/django_general_conv.log | grep -E "\[RAG\]|\[LLM\]"
  1. 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