JSON 输出模式要约定什么
要求模型「只输出 JSON」时,需要把三层约定写清:外层不许有代码围栏与解释文字、字符串内的转义规则、缺失字段的表示方法。任何一层没约定,解析端就要额外容错。有些平台提供 JSON 模式或结构化输出能力,会在解码阶段约束输出格式,比纯提示更可靠;但即使启用了这类能力,解析端仍应保留容错路径,因为输出截断、模型能力差异、参数写错都会破坏格式。
三层约定
| 外层 | 只输出一个 JSON 对象,不加代码块围栏、不加前后缀文字 |
|---|---|
| 转义 | 字符串内的引号与换行必须转义,不要出现真实换行 |
| 取值 | 布尔用小写 true/false;缺失字段统一用 null 或按约定省略 |
| 平台能力 | 支持 JSON 模式或结构化输出的接口优先启用,由平台做格式约束 |
| 解析容错 | 提示禁止围栏,但解析端仍要剥掉可能出现的代码块包裹 |
典型使用场景
- 字段抽取入库:输出直接进解析器,不经过人工整理
- 批量流水线:同一模板每天跑大量请求,需要稳定的解析成功率
- 多步流程中间产物:上一步的 JSON 作为下一步的输入契约
- 工具调用参数:把模型输出当函数参数使用,类型必须严格
- 需要重试的接口:解析失败要能明确区分格式问题与业务问题
输出约定条款
输出约定条款
输出要求:
- 只输出一个 JSON 对象,不要用代码块围栏,不要任何前后缀文字
- 字符串内换行使用 \n 转义,不使用真实换行 # 真实换行会让解析失败
- 布尔值用 true/false 小写;缺失字段用 null
- 不要输出注释与解释文字
输出:解析端要处理的四种情况
| 情况 | 表现 | 处理方式 |
|---|---|---|
| 被围栏包裹 | 输出以三反引号开始 | 先剥离围栏再解析 |
| 附带解释 | JSON 前后各有一段说明 | 截取最外层花括号区间 |
| 输出截断 | JSON 不完整、末尾缺括号 | 识别为截断并重试,不要当业务错误 |
| 字段缺失 | 必填字段未出现 | 按 schema 校验后走兜底或重试 |
解析失败要保留原始输出到日志:只看报错信息无法判断是模型格式问题还是提示版本改坏了。