结构化输出指通过接口参数提供一份结构定义,让服务端约束模型的输出必须符合该结构。它与「在提示词里写只返回 JSON」有本质区别:前者由服务端保证格式,后者依赖模型自觉。即便启用了结构化输出,解析端仍应保留失败兜底,因为字段语义正确与否模型并不保证。

三种做法的区别

做法谁来保证格式可靠程度
提示词里写「只返回 JSON」模型自觉最低,偶发失败
开启 JSON 模式服务端保证是合法 JSON中,但字段不受约束
提供结构定义服务端按结构约束最高

「合法的 JSON」和「符合你要的结构」是两个层次。 JSON 模式只解决前者,后者需要提供完整的结构定义。

常见误解

  • 格式正确不代表内容正确。 结构化输出约束的是形状,不是语义——字段填的值是否属实,模型不保证。
  • 不能省掉解析兜底。 极端情况(超长输出被截断、结构定义与模型能力不匹配)仍会产生不可解析的结果。
  • 不是所有兼容层都支持。 第三方接口上,相关字段常被静默忽略——你以为约束生效了,实际上什么都没发生。这类问题的验证方法见 OpenAI 兼容接口怎么判断

实践建议

结构定义尽量简单:字段少、层级浅、类型明确。复杂嵌套会显著降低遵循率,也更难排查。

需要模型「什么都不填」时,要在结构里预留表达方式(比如允许空数组或明确的空值),否则模型会倾向于编一个出来。

调结构定义最快的方式是先在网页工作台里试,见 Google AI Studio 入门