Просмотр исходного кода

fix: normalize Chinese→English overview keys in ReportParseAgent (BLOCKING-1)

Xiaogang Liao 3 месяцев назад
Родитель
Сommit
74fd3836b4
1 измененных файлов с 27 добавлено и 0 удалено
  1. 27 0
      cfc-langgraph/app/agents/report_parse_agent.py

+ 27 - 0
cfc-langgraph/app/agents/report_parse_agent.py

@@ -10,6 +10,20 @@ from app.parsers.pdf_parser import parse_report_pdf_with_fallback
 
 logger = logging.getLogger(__name__)
 
+# 算法解析器使用中文键名(与 extract_full_report_v5.py 一致),
+# Java 消费端期望英文键名;在此做双向映射,Java 读取英文键即可。
+_CN_TO_EN_OVERVIEW: dict[str, str] = {
+    '健康总分': 'overallScore',
+    '菌群健康': 'gutHealthScore',
+    '慢病控制': 'chronicDiseaseScore',
+    '营养均衡': 'nutritionScore',
+    '肠道菌群平衡': 'balanceScore',
+    '菌群多样性': 'diversityScore',
+    '有益菌': 'beneficialScore',
+    '有害菌': 'harmfulScore',
+    '核心菌属': 'coreGenusScore',
+}
+
 
 class ReportParseAgent:
     """报告解析 Agent"""
@@ -17,6 +31,16 @@ class ReportParseAgent:
     def __init__(self):
         self.llm_api_key = getattr(settings, 'llm_api_key', '')
 
+    @staticmethod
+    def _normalize_overview_keys(result: dict) -> None:
+        """将 overview 中的中文键名映射为英文键名(双向写入),兼容 Java 消费端。"""
+        overview = result.get('overview')
+        if not overview:
+            return
+        for _cn, _en in _CN_TO_EN_OVERVIEW.items():
+            if _cn in overview and _en not in overview:
+                overview[_en] = overview[_cn]
+
     async def parse(self, file_path: str) -> dict:
         """解析 PDF 报告,算法解析 + LLM 兜底"""
         # 1. 算法解析
@@ -24,6 +48,9 @@ class ReportParseAgent:
         logger.info("算法解析完成: format=%s, overview_keys=%d",
                      result.get('format'), len(result.get('overview', {})))
 
+        # 1.5 归一化 overview 键名:中文 → 英文(Java 消费端兼容)
+        self._normalize_overview_keys(result)
+
         # 2. 如果解析不完整,LLM 兜底
         if result.get('_parse_incomplete') or not result.get('disease_risks'):
             logger.info("算法解析不完整,尝试 LLM 兜底")