结构化输出
结构化输出指在接口层面约束模型按给定的结构返回内容,而不是只在提示词里请求它输出 JSON。前者是约束,后者只是建议。
结构化输出指通过接口参数提供一份结构定义,让服务端约束模型的输出必须符合该结构。它与「在提示词里写只返回 JSON」有本质区别:前者由服务端保证格式,后者依赖模型自觉。即便启用了结构化输出,解析端仍应保留失败兜底,因为字段语义正确与否模型并不保证。
三种做法的区别
| 做法 | 谁来保证格式 | 可靠程度 |
|---|---|---|
| 提示词里写「只返回 JSON」 | 模型自觉 | 最低,偶发失败 |
| 开启 JSON 模式 | 服务端保证是合法 JSON | 中,但字段不受约束 |
| 提供结构定义 | 服务端按结构约束 | 最高 |
「合法的 JSON」和「符合你要的结构」是两个层次。 JSON 模式只解决前者,后者需要提供完整的结构定义。
常见误解
- 格式正确不代表内容正确。 结构化输出约束的是形状,不是语义——字段填的值是否属实,模型不保证。
- 不能省掉解析兜底。 极端情况(超长输出被截断、结构定义与模型能力不匹配)仍会产生不可解析的结果。
- 不是所有兼容层都支持。 第三方接口上,相关字段常被静默忽略——你以为约束生效了,实际上什么都没发生。这类问题的验证方法见 OpenAI 兼容接口怎么判断。
实践建议
结构定义尽量简单:字段少、层级浅、类型明确。复杂嵌套会显著降低遵循率,也更难排查。
需要模型「什么都不填」时,要在结构里预留表达方式(比如允许空数组或明确的空值),否则模型会倾向于编一个出来。
调结构定义最快的方式是先在网页工作台里试,见 Google AI Studio 入门。