From e761af611101211d01cf65c8bfcd4967ccb9681a Mon Sep 17 00:00:00 2001 From: lacerate551 <128470311+lacerate551@users.noreply.github.com> Date: Sun, 21 Jun 2026 23:20:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=BC=E5=AE=B9=20mimo-v2.5=20?= =?UTF-8?q?=E8=BF=94=E5=9B=9E=20JSON=20=E6=95=B0=E7=BB=84=E8=80=8C?= =?UTF-8?q?=E9=9D=9E=E5=AF=B9=E8=B1=A1=E7=9A=84=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - intent_analyzer._parse_json: 解析结果为 list 时取第一个 dict 元素 - llm_utils.parse_json_from_response: 同样处理 list 返回值 - 修复日志错误: 'list' object has no attribute 'get' --- core/intent_analyzer.py | 11 ++++++++++- core/llm_utils.py | 8 +++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/core/intent_analyzer.py b/core/intent_analyzer.py index 78edb0a..b2ab6dd 100644 --- a/core/intent_analyzer.py +++ b/core/intent_analyzer.py @@ -529,7 +529,16 @@ class IntentAnalyzer: """解析 JSON 响应""" # 尝试直接解析 try: - return json.loads(content) + parsed = json.loads(content) + # mimo 等模型可能返回 JSON 数组而非对象,取第一个元素 + if isinstance(parsed, list) and len(parsed) > 0: + first = parsed[0] + if isinstance(first, dict): + return first + return None + if isinstance(parsed, dict): + return parsed + return None except json.JSONDecodeError: pass diff --git a/core/llm_utils.py b/core/llm_utils.py index 43b25e2..92a25d9 100644 --- a/core/llm_utils.py +++ b/core/llm_utils.py @@ -245,7 +245,13 @@ def parse_json_from_response(content: str) -> Optional[dict]: json_str = json_match.group(1) if json_match else content try: - return json.loads(json_str.strip()) + parsed = json.loads(json_str.strip()) + # mimo 等模型可能返回 JSON 数组而非对象,取第一个元素 + if isinstance(parsed, list) and len(parsed) > 0 and isinstance(parsed[0], dict): + return parsed[0] + if isinstance(parsed, dict): + return parsed + return None except (json.JSONDecodeError, TypeError, ValueError): return None