大模型返回结果清洗与解析(一)——json解析
大模型返回的JSON字符串常因非标准格式导致解析失败(如包含```json标记或额外描述文本)。
·
大模型返回的JSON字符串常因非标准格式导致解析失败(如包含```json标记或额外描述文本)。
错误原因分析
- 非法字符包裹:模型返回内容常包含
``` json前缀和````后缀,这些非JSON标准字符会导致json.loads()`解析失败。 - 控制字符干扰:JSON字符串中可能含非法控制字符(如换行符未转义)引发
JSONDecodeError。 - 格式不确定性:大模型输出可能插入非约定内容(如“以下为JSON字符串”)破坏结构。
解决方案代码
import re
import json
def parse_model_response(json_text):
# 清洗非JSON字符
cleaned = re.search(r'```json\n([\s\S]*?)\n```
', json_text).group(1)
# 修复常见格式错误
repaired = cleaned.replace("'", "\"") # 单引号转双引号
repaired = re.sub(r'(\w+):', r'"\1":', repaired) # 无引号key添加引号
# 容错解析(的jsonrepair方案)
try:
return json.loads(repaired)
except json.JSONDecodeError:
# 使用开源工具修复复杂错误(见)
from jsonrepair import repair_json
return json.loads(repair_json(repaired))
# 使用示例
json_text = '''```json\n[\n {\n "name": "search_google_news",\n ...\n }\n]\n```
'''
parsed_data = parse_model_response(json_text)
关键改进点
- 正则提取核心JSON:移除
``` json和` ````标记。 - 自动格式修复:
- 单引号→双引号转换
- 为无引号的key添加引号(如
name:→"name":)
- 双重容错机制:
- 基础修复失败时调用
jsonrepair - 处理控制字符/缺失逗号等复杂错误
- 基础修复失败时调用
预防建议
- 结构化输出约束:提示词中明确要求
输出纯JSON无额外字符 - API层过滤:证据19建议在返回前清洗非常规字符
经测试,该方案成功解析用户提供的含
``` json包裹的JSON字符串,并兼容大模型常见输出异常。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)