diff --git a/app/ai/resume_diagnoser/diagnoser.py b/app/ai/resume_diagnoser/diagnoser.py index 01c47e7..e4d5880 100644 --- a/app/ai/resume_diagnoser/diagnoser.py +++ b/app/ai/resume_diagnoser/diagnoser.py @@ -1,9 +1,10 @@ """简历诊断 AI 引擎:并行诊断 + 汇总评价""" import asyncio -import json import re +from json_repair import repair_json + from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate @@ -16,14 +17,7 @@ def _parse_json(text: str) -> dict: """解析 AI 输出的 JSON,自动去除 markdown 代码块包裹,容错处理""" cleaned = re.sub(r"^```(?:json)?\s*\n?", "", text.strip()) cleaned = re.sub(r"\n?```\s*$", "", cleaned) - try: - return json.loads(cleaned) - except json.JSONDecodeError: - # AI 可能在 JSON 字符串值中嵌入了未转义的引号,尝试提取最外层 { } - match = re.search(r"\{[\s\S]*\}", cleaned) - if match: - return json.loads(match.group()) - raise + return repair_json(cleaned, return_objects=True) # 诊断链(StrOutputParser 拿原始文本,再手动解析 JSON,避免 markdown 代码块导致解析失败) diff --git a/requirements.txt b/requirements.txt index 75d2f61..129f8b9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -31,6 +31,9 @@ loguru>=0.7.2,<1.0.0 shortuuid>=1.0.11,<2.0.0 PyJWT>=2.8.0 +# JSON 容错解析 +json-repair>=0.30.0 + # 数据处理 pandas>=2.2.0 numpy>=1.26.0