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