DOCAI · 概念 · L2
JSON 模式和结构化输出有什么区别
一句话定义
JSON 模式保证「语法合法」,结构化输出保证「符合这份 schema」;生产里后者更可靠。
开发者更新 2026-11-13核验 2026-11-13 · docai 编辑部
两种保证,强度不同
| 能力 | 保证什么 | 不保证什么 |
|---|---|---|
| JSON 模式 | 输出能被 JSON 解析 | 字段对不对、类型对不对、有没有漏 |
| 结构化输出 | 输出符合你提供的 schema | 值是否正确 |
前者解决「解析失败」,后者解决「字段乱来」。生产环境里,解析失败只是第一层问题, 更常见的是字段名变了、数组变对象、该填的没填。
结构化输出怎么工作
你提供一份 schema(字段名、类型、必填、枚举),服务在生成时约束解码: 不让模型生成不符合 schema 的 token。这比「在提示里求它输出 JSON」可靠得多, 因为它不是靠模型自觉。
没有原生结构化输出的服务,通常用工具调用达到类似效果: 把 schema 当成一个工具的参数定义,模型「调用」这个工具,参数就是你想要的 JSON。
schema 怎么写
- 字段少而明确:一个对象五六个字段,比二十个字段稳。
- 能用枚举就别用自由文本:
"status": "ok" | "failed"比字符串可靠。 - 必填和可选分开:模型对可选字段的处理不如必填稳定。
- 避免深层嵌套:三层以内;再深就拆成两次调用。
- 加一个
notes字段:让模型把「不确定」写在这里,避免它硬填。
校验不能省
即使有 schema 约束,也要在代码里校验:
- schema 过了,但值可能是编的(比如不存在的订单号);
- 业务规则不在 schema 里(金额必须为正、日期不能是未来)。
schema 管形状,业务校验管内容,两层都要。
常见误解
- 「开了 JSON 模式就不会出错」:它只管语法,字段仍然可能缺或错。
- 「schema 越严格越好」:过严会让模型在信息不足时硬填,反而不如允许
null。 - 「结构化输出能保证事实正确」:不能,它只约束格式。
下一步
- 概念本身:结构化输出
- 动手改:让模型稳定输出 JSON
- 想清楚为什么格式会跑:提示词