update analyze flow
Browse files- app/llm.py +5 -5
- app/message_processor.py +1 -1
app/llm.py
CHANGED
@@ -367,13 +367,13 @@ class LLMClient:
|
|
367 |
Phân tích câu hỏi về luật giao thông Việt Nam và chuẩn hóa thành JSON.
|
368 |
"""
|
369 |
prompt = f"""
|
370 |
-
Bạn là một chuyên gia phân tích ngôn ngữ tự nhiên (NLP) chuyên xử lý các câu hỏi về luật giao thông Việt Nam. Nhiệm vụ của bạn là đọc kỹ **lịch sử trò chuyện** và **câu hỏi mới nhất** của người dùng để trích xuất thông tin vào một cấu trúc JSON duy nhất.
|
371 |
|
372 |
Định dạng JSON bắt buộc:
|
373 |
{{
|
374 |
"muc_dich": "...",
|
375 |
"phuong_tien": "...",
|
376 |
-
"tu_khoa": [
|
377 |
"cau_hoi": "..."
|
378 |
}}
|
379 |
|
@@ -390,9 +390,9 @@ class LLMClient:
|
|
390 |
**phuong_tien**: Tên phương tiện được đề cập trong câu hỏi mới hoặc trong lịch sử gần nhất. Nếu không có, để chuỗi rỗng "".
|
391 |
|
392 |
**tu_khoa**: **MỘT DANH SÁCH (LIST) các thuật ngữ pháp lý** ngắn gọn, chính xác nhất để tìm kiếm trong cơ sở dữ liệu luật.
|
393 |
-
- **Chuyển đổi ngôn
|
394 |
-
- **Trích xuất nhiều từ khóa**: Nếu câu hỏi phức tạp, hãy trích xuất nhiều từ khóa liên quan. Ví dụ: "vượt đèn đỏ khi đang say rượu" -> ["Không chấp hành hiệu lệnh của đèn tín hiệu giao thông", "Điều khiển xe trên đường mà trong máu hoặc hơi thở có nồng độ cồn"].
|
395 |
-
- **Xử lý ngữ cảnh không hài lòng**: Đọc kỹ lịch sử. Nếu người dùng hỏi lại hoặc thể hiện không hài lòng (ví dụ: "không phải", "ý tôi là..."),
|
396 |
|
397 |
**cau_hoi**: Diễn đạt lại câu hỏi mới nhất của người dùng thành một câu hỏi hoàn chỉnh, kết hợp ngữ cảnh từ lịch sử nếu cần, sử dụng đúng thuật ngữ pháp lý.
|
398 |
|
|
|
367 |
Phân tích câu hỏi về luật giao thông Việt Nam và chuẩn hóa thành JSON.
|
368 |
"""
|
369 |
prompt = f"""
|
370 |
+
Bạn là một chuyên gia phân tích ngôn ngữ tự nhiên (NLP) chuyên xử lý các câu hỏi về luật giao thông Việt Nam. Nhiệm vụ của bạn là đọc kỹ **lịch sử trò chuyện** và **câu hỏi mới nhất** của người dùng để trích xuất thông tin vào một cấu trúc JSON duy nhất. **Luôn chỉ trả về đối tượng JSON hợp lệ**, không thêm bất kỳ giải thích nào.
|
371 |
|
372 |
Định dạng JSON bắt buộc:
|
373 |
{{
|
374 |
"muc_dich": "...",
|
375 |
"phuong_tien": "...",
|
376 |
+
"tu_khoa": [],
|
377 |
"cau_hoi": "..."
|
378 |
}}
|
379 |
|
|
|
390 |
**phuong_tien**: Tên phương tiện được đề cập trong câu hỏi mới hoặc trong lịch sử gần nhất. Nếu không có, để chuỗi rỗng "".
|
391 |
|
392 |
**tu_khoa**: **MỘT DANH SÁCH (LIST) các thuật ngữ pháp lý** ngắn gọn, chính xác nhất để tìm kiếm trong cơ sở dữ liệu luật.
|
393 |
+
- **Quy tắc 1 (Chuyển đổi ngôn ngữ)**: Chuyển đổi ngôn ngữ đời thường của người dùng (ví dụ: "vượt đèn đỏ") thành thuật ngữ pháp lý chính xác (ví dụ: "Không chấp hành hiệu lệnh của đèn tín hiệu giao thông").
|
394 |
+
- **Quy tắc 2 (Trích xuất nhiều từ khóa)**: Nếu câu hỏi phức tạp chứa nhiều hành vi, chi tiết, thông tin, hãy trích xuất nhiều từ khóa liên quan. Ví dụ: "vượt đèn đỏ khi đang say rượu" -> ["Không chấp hành hiệu lệnh của đèn tín hiệu giao thông", "Điều khiển xe trên đường mà trong máu hoặc hơi thở có nồng độ cồn"].
|
395 |
+
- **Quy tắc 3 (Xử lý ngữ cảnh không hài lòng)**: Đọc kỹ lịch sử. Nếu người dùng hỏi lại hoặc thể hiện không hài lòng (ví dụ: "không phải", "ý tôi là..."), , và trong lịch sử có ghi chú (từ khóa đã dùng: ...) thì TUYỆT ĐỐI KHÔNG SỬ DỤNG LẠI các từ khóa đó. Hãy tạo ra một bộ từ khóa **HOÀN TOÀN MỚI** để tìm kiếm thông tin chính xác hơn.
|
396 |
|
397 |
**cau_hoi**: Diễn đạt lại câu hỏi mới nhất của người dùng thành một câu hỏi hoàn chỉnh, kết hợp ngữ cảnh từ lịch sử nếu cần, sử dụng đúng thuật ngữ pháp lý.
|
398 |
|
app/message_processor.py
CHANGED
@@ -250,7 +250,7 @@ class MessageProcessor:
|
|
250 |
return sep.join([str(x) for x in arr if x not in (None, "")]) if isinstance(arr, list) else str(arr)
|
251 |
|
252 |
for i, match in enumerate(matches, 1):
|
253 |
-
full_result_text += f"\n
|
254 |
fullContent = (match.get('fullcontent') or '').strip()
|
255 |
full_result_text += f"{fullContent}"
|
256 |
hpbsnoidung = arr_to_str(match.get('hpbsnoidung'), sep="; ")
|
|
|
250 |
return sep.join([str(x) for x in arr if x not in (None, "")]) if isinstance(arr, list) else str(arr)
|
251 |
|
252 |
for i, match in enumerate(matches, 1):
|
253 |
+
full_result_text += f"\n* Nguồn: {(match.get('structure') or '').strip()}:\n"
|
254 |
fullContent = (match.get('fullcontent') or '').strip()
|
255 |
full_result_text += f"{fullContent}"
|
256 |
hpbsnoidung = arr_to_str(match.get('hpbsnoidung'), sep="; ")
|