diff --git a/lawrisk_v2_service.py b/lawrisk_v2_service.py index a4a26fd..03921a6 100644 --- a/lawrisk_v2_service.py +++ b/lawrisk_v2_service.py @@ -1,6 +1,7 @@ from __future__ import annotations import json +import logging from typing import Any, Dict, List from licensing_repo import ( @@ -10,6 +11,15 @@ from licensing_repo import ( from lawrisk_service import ChatClient +logger = logging.getLogger(__name__) +if not logger.handlers: + handler = logging.StreamHandler() + handler.setFormatter(logging.Formatter("[lawrisk_v2] %(levelname)s %(message)s")) + logger.addHandler(handler) +logger.setLevel(logging.INFO) +logger.propagate = False + + def _compose_prompt(payload: Dict[str, Any]) -> str: """Build a natural-language prompt snippet from structured payload.""" region = payload.get("region", {}) @@ -50,20 +60,27 @@ def _select_theme_options(query: str, catalog: List[Dict[str, str]]) -> List[str """Use LLM to choose relevant region-theme option ids.""" if not catalog: return [] - lines = [f"{item['option_id']}\t{item['display_name']}" for item in catalog] - options_block = "\n".join(lines) + display_entries = [item["display_name"] for item in catalog] + options_block = "\n".join(display_entries) system_msg = ( "你是政务事项检索助手。根据用户提供的问题," - "从给定的地区-主题列表中选择最相关的主题事项,返回其 option_id。" - "输出 JSON 数组,例如: [\"region_uuid:theme_uuid\"]." + "从给定的地区-主题列表中选择最相关的主题事项,返回对应的地区·主题名称。" + "输出 JSON 数组,例如: [\"市级 · 开办电影院\"]." ) user_msg = ( f"用户问题: {query}\n\n" - "候选主题列表 (option_id地区·主题):\n" + "候选主题列表:\n" f"{options_block}\n\n" - "请仅输出 JSON 数组,内容为选择的 option_id。如果没有匹配,请输出 []." + "请仅输出 JSON 数组,内容为选择的地区·主题名称。如果没有匹配,请输出 []." ) + logger.info( + "[lawrisk_v2] LLM selection request | query=%s | catalog_size=%d", + query, + len(catalog), + ) + logger.info("[lawrisk_v2] LLM system prompt: %s", system_msg) + logger.info("[lawrisk_v2] LLM user prompt: %s", user_msg) chat = ChatClient() content = chat.chat( [ @@ -73,6 +90,7 @@ def _select_theme_options(query: str, catalog: List[Dict[str, str]]) -> List[str ) raw = content.strip() + logger.info("[lawrisk_v2] LLM raw response: %s", raw) start = raw.find("[") end = raw.rfind("]") if start != -1 and end != -1 and end > start: @@ -92,11 +110,13 @@ def _select_theme_options(query: str, catalog: List[Dict[str, str]]) -> List[str except Exception: selected = [] - known_ids = {item["option_id"] for item in catalog} + display_to_option = {item["display_name"]: item["option_id"] for item in catalog} uniq: List[str] = [] - for option_id in selected: - if option_id in known_ids and option_id not in uniq: + for display_name in selected: + option_id = display_to_option.get(display_name) + if option_id and option_id not in uniq: uniq.append(option_id) + logger.info("[lawrisk_v2] LLM mapped option_ids: %s", uniq) return uniq diff --git a/static/v2_tester.html b/static/v2_tester.html new file mode 100644 index 0000000..6c7e7d5 --- /dev/null +++ b/static/v2_tester.html @@ -0,0 +1,392 @@ + + + + + LawRisk V2 接口测试 + + + + +
+

LawRisk V2 接口测试台

+

输入问题后调用 /fs-ai-asistant/api/workflow/lawrisk/v2,将返回的主题及许可详情以表格展示。

+ +
+ + + + +
+ +
+ +
+ +
+ + +

+
+ + + +