fix vector search
Browse files- app/main.py +53 -35
app/main.py
CHANGED
|
@@ -399,51 +399,63 @@ async def format_search_results(question: str, matches: List[Dict[str, Any]]) ->
|
|
| 399 |
top_result_text = ""
|
| 400 |
full_result_text = ""
|
| 401 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 402 |
for i, match in enumerate(matches, 1):
|
| 403 |
if not top or (match.get('similarity', 0) > top.get('similarity', 0)):
|
| 404 |
top = match
|
| 405 |
|
| 406 |
-
# Chuẩn bị context cho LLM: liệt kê tất cả các item với chú thích rõ ràng
|
| 407 |
full_result_text += f"\nĐoạn {i}:\n"
|
| 408 |
-
|
| 409 |
-
|
| 410 |
-
noidung = (top.get('noidung') or '').strip()
|
| 411 |
hanhvi = (tieude + "\n" + noidung).strip().replace('\n', ' ')
|
| 412 |
full_result_text += f"Thực hiện hành vi:\n{hanhvi}"
|
| 413 |
# Cá nhân bị phạt tiền
|
| 414 |
-
|
| 415 |
-
|
|
|
|
|
|
|
| 416 |
# Tổ chức bị phạt tiền
|
| 417 |
-
|
| 418 |
-
|
|
|
|
|
|
|
| 419 |
# Hình phạt bổ sung
|
| 420 |
-
|
| 421 |
-
|
|
|
|
| 422 |
# Biện pháp khắc phục hậu quả
|
| 423 |
-
|
| 424 |
-
|
| 425 |
-
|
|
|
|
| 426 |
if top and (top.get('tieude') or top.get('noidung')):
|
| 427 |
-
# Thực hiện hành vi
|
| 428 |
tieude = (top.get('tieude') or '').strip()
|
| 429 |
noidung = (top.get('noidung') or '').strip()
|
| 430 |
hanhvi = (tieude + "\n" + noidung).strip().replace('\n', ' ')
|
| 431 |
top_result_text += f"Thực hiện hành vi:\n{hanhvi}"
|
| 432 |
-
|
| 433 |
-
|
| 434 |
-
|
| 435 |
-
|
| 436 |
-
|
| 437 |
-
|
| 438 |
-
|
| 439 |
-
|
| 440 |
-
|
| 441 |
-
|
| 442 |
-
|
| 443 |
-
|
|
|
|
|
|
|
| 444 |
else:
|
| 445 |
result_text = "Không có kết quả phù hợp!"
|
| 446 |
-
|
| 447 |
# Prompt cho LLM
|
| 448 |
prompt = (
|
| 449 |
"Bạn là một trợ lý AI có kiến thức pháp luật, hãy trả lời câu hỏi dựa trên các đoạn luật sau. "
|
|
@@ -471,14 +483,20 @@ async def format_search_results(question: str, matches: List[Dict[str, Any]]) ->
|
|
| 471 |
noidung = (match.get('noidung') or '').strip()
|
| 472 |
if tieude or noidung:
|
| 473 |
fallback += f" - Hành vi: {(tieude + ' ' + noidung).strip()}\n"
|
| 474 |
-
|
| 475 |
-
|
| 476 |
-
if
|
| 477 |
-
fallback += f" -
|
| 478 |
-
|
| 479 |
-
|
| 480 |
-
if
|
| 481 |
-
fallback += f" -
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 482 |
fallback += "\n"
|
| 483 |
return fallback.strip()
|
| 484 |
|
|
|
|
| 399 |
top_result_text = ""
|
| 400 |
full_result_text = ""
|
| 401 |
|
| 402 |
+
def arr_to_str(arr, sep=", "):
|
| 403 |
+
if not arr:
|
| 404 |
+
return ""
|
| 405 |
+
if isinstance(arr, list):
|
| 406 |
+
return sep.join([str(x) for x in arr if x not in (None, "")])
|
| 407 |
+
return str(arr)
|
| 408 |
+
|
| 409 |
for i, match in enumerate(matches, 1):
|
| 410 |
if not top or (match.get('similarity', 0) > top.get('similarity', 0)):
|
| 411 |
top = match
|
| 412 |
|
|
|
|
| 413 |
full_result_text += f"\nĐoạn {i}:\n"
|
| 414 |
+
tieude = (match.get('tieude') or '').strip()
|
| 415 |
+
noidung = (match.get('noidung') or '').strip()
|
|
|
|
| 416 |
hanhvi = (tieude + "\n" + noidung).strip().replace('\n', ' ')
|
| 417 |
full_result_text += f"Thực hiện hành vi:\n{hanhvi}"
|
| 418 |
# Cá nhân bị phạt tiền
|
| 419 |
+
canhanTu = arr_to_str(match.get('canhanTu'))
|
| 420 |
+
canhanDen = arr_to_str(match.get('canhanDen'))
|
| 421 |
+
if canhanTu or canhanDen:
|
| 422 |
+
full_result_text += f"\nCá nhân sẽ bị phạt tiền từ {canhanTu} VNĐ đến {canhanDen} VNĐ"
|
| 423 |
# Tổ chức bị phạt tiền
|
| 424 |
+
tochucTu = arr_to_str(match.get('tochucTu'))
|
| 425 |
+
tochucDen = arr_to_str(match.get('tochucDen'))
|
| 426 |
+
if tochucTu or tochucDen:
|
| 427 |
+
full_result_text += f"\nTổ chức sẽ bị phạt tiền từ {tochucTu} VNĐ đến {tochucDen} VNĐ"
|
| 428 |
# Hình phạt bổ sung
|
| 429 |
+
hpbsNoidung = arr_to_str(match.get('hpbsNoidung'), sep="; ")
|
| 430 |
+
if hpbsNoidung:
|
| 431 |
+
full_result_text += f"\nNgoài việc bị phạt tiền, người vi phạm còn bị: {hpbsNoidung}"
|
| 432 |
# Biện pháp khắc phục hậu quả
|
| 433 |
+
bpkpNoidung = arr_to_str(match.get('bpkpNoidung'), sep="; ")
|
| 434 |
+
if bpkpNoidung:
|
| 435 |
+
full_result_text += f"\nNgoài ra, người vi phạm còn bị buộc: {bpkpNoidung}"
|
| 436 |
+
|
| 437 |
if top and (top.get('tieude') or top.get('noidung')):
|
|
|
|
| 438 |
tieude = (top.get('tieude') or '').strip()
|
| 439 |
noidung = (top.get('noidung') or '').strip()
|
| 440 |
hanhvi = (tieude + "\n" + noidung).strip().replace('\n', ' ')
|
| 441 |
top_result_text += f"Thực hiện hành vi:\n{hanhvi}"
|
| 442 |
+
canhanTu = arr_to_str(top.get('canhanTu'))
|
| 443 |
+
canhanDen = arr_to_str(top.get('canhanDen'))
|
| 444 |
+
if canhanTu or canhanDen:
|
| 445 |
+
top_result_text += f"\nCá nhân sẽ bị phạt tiền từ {canhanTu} VNĐ đến {canhanDen} VNĐ"
|
| 446 |
+
tochucTu = arr_to_str(top.get('tochucTu'))
|
| 447 |
+
tochucDen = arr_to_str(top.get('tochucDen'))
|
| 448 |
+
if tochucTu or tochucDen:
|
| 449 |
+
top_result_text += f"\nTổ chức sẽ bị phạt tiền từ {tochucTu} VNĐ đến {tochucDen} VNĐ"
|
| 450 |
+
hpbsNoidung = arr_to_str(top.get('hpbsNoidung'), sep="; ")
|
| 451 |
+
if hpbsNoidung:
|
| 452 |
+
top_result_text += f"\nNgoài việc bị phạt tiền, người vi phạm còn bị: {hpbsNoidung}"
|
| 453 |
+
bpkpNoidung = arr_to_str(top.get('bpkpNoidung'), sep="; ")
|
| 454 |
+
if bpkpNoidung:
|
| 455 |
+
top_result_text += f"\nNgoài ra, người vi phạm còn bị buộc: {bpkpNoidung}"
|
| 456 |
else:
|
| 457 |
result_text = "Không có kết quả phù hợp!"
|
| 458 |
+
|
| 459 |
# Prompt cho LLM
|
| 460 |
prompt = (
|
| 461 |
"Bạn là một trợ lý AI có kiến thức pháp luật, hãy trả lời câu hỏi dựa trên các đoạn luật sau. "
|
|
|
|
| 483 |
noidung = (match.get('noidung') or '').strip()
|
| 484 |
if tieude or noidung:
|
| 485 |
fallback += f" - Hành vi: {(tieude + ' ' + noidung).strip()}\n"
|
| 486 |
+
canhanTu = arr_to_str(match.get('canhanTu'))
|
| 487 |
+
canhanDen = arr_to_str(match.get('canhanDen'))
|
| 488 |
+
if canhanTu or canhanDen:
|
| 489 |
+
fallback += f" - Cá nhân bị phạt tiền từ {canhanTu} VNĐ đến {canhanDen} VNĐ\n"
|
| 490 |
+
tochucTu = arr_to_str(match.get('tochucTu'))
|
| 491 |
+
tochucDen = arr_to_str(match.get('tochucDen'))
|
| 492 |
+
if tochucTu or tochucDen:
|
| 493 |
+
fallback += f" - Tổ chức bị phạt tiền từ {tochucTu} VNĐ đến {tochucDen} VNĐ\n"
|
| 494 |
+
hpbsNoidung = arr_to_str(match.get('hpbsNoidung'), sep="; ")
|
| 495 |
+
if hpbsNoidung:
|
| 496 |
+
fallback += f" - Hình phạt bổ sung: {hpbsNoidung}\n"
|
| 497 |
+
bpkpNoidung = arr_to_str(match.get('bpkpNoidung'), sep="; ")
|
| 498 |
+
if bpkpNoidung:
|
| 499 |
+
fallback += f" - Biện pháp khắc phục hậu quả: {bpkpNoidung}\n"
|
| 500 |
fallback += "\n"
|
| 501 |
return fallback.strip()
|
| 502 |
|