VietCat commited on
Commit
4acd199
·
1 Parent(s): d79c9dd

update analyze flow

Browse files
Files changed (2) hide show
  1. app/llm.py +5 -5
  2. 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. Chỉ trả về đối tượng JSON, 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,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 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
- - **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à..."), hãy tạo ra một bộ từ khóa **MỚI** và **KHÁC** với các từ khóa đã dùng trong lượt hỏi trước (được ghi trong `(từ khóa đã dùng: ...)` của lịch sử) để 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
 
 
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à..."), , trong lịch sử 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- 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="; ")
 
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="; ")