From 748a60924935fccd65a3c4de8dc259c78f914271 Mon Sep 17 00:00:00 2001 From: zk Date: Tue, 7 Apr 2026 21:22:14 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=99=A4=E4=BA=86=20json?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E5=8F=AF=E8=83=BD=E5=87=BA=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/ai/resume_diagnoser/diagnoser.py | 12 +++--------- requirements.txt | 3 +++ 2 files changed, 6 insertions(+), 9 deletions(-) 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