让模型稳定返回 JSON:四种手段与取舍
发布于 2026-09-30
让模型稳定返回 JSON:四种手段与取舍
只要把模型输出接到程序里,第一步就是让结果可解析。现实是:多数模型在"自由发挥"时,会顺手加上一句解释、用中文引号、或者少一个右括号。下面四种手段,从弱到强分别是提示约束、JSON 模式、结构化输出、工具调用。
手段一:把 Schema 写进提示词
最轻量的做法——在提示里直接给出目标结构,并给一个完整示例:
要点:① 明确"只输出 JSON";② 枚举值写清楚;③ 给示例比讲规则有效。这一步能解决大部分问题,成本为零。
手段二:启用服务端的 JSON 模式
OpenAI 兼容协议里通常有 responseformat,把它设为 {"type": "jsonobject"},服务端会保证输出是合法 JSON:
注意:JSON 模式保证的是"语法合法",不保证字段名和取值范围符合你的要求,提示词里的 schema 仍然要写。
手段三:拿到结果后做校验与重试
程序侧一定要有校验,并用"带错误信息的重试"兜住:
关键在于把具体错误回传给模型(缺哪个字段、哪个值超范围),修复率远高于笼统地说"格式不对"。
手段四:用工具调用约束参数
需要严格结构时,把目标结构声明成工具(函数)的参数,让模型"调用"它:参数由协议层描述,模型按参数 schema 生成,解析稳定性最好。代价是改造量更大,且不同服务端对工具调用的支持程度有差异。
怎么选
场景 建议
--- ---
一次性脚本、内部工具 手段一足够
稳定服务、字段较少 手段一 + 二
字段多、取值敏感 手段一 + 二 + 三(校验重试)
严格契约、强类型 手段四
先便宜的后贵的:提示词约束不花钱,重试要花第二次调用,工具调用改造量最大。把校验和重试做成通用函数复用,比每次都从头调提示词更省心。