Structured Outputs(结构化输出)
OpenAI 2024年8月推出的API特性,通过受限解码(Constrained Decoding)保证模型输出100%符合指定的JSON Schema。在Function Calling中设置strict: true即可启用,将输出验证从应用层下沉到推理层。
Structured Outputs(结构化输出)
一句话理解
让模型的输出从"尽力符合格式"变成"保证符合格式"——从运行时校验升级到生成时约束。
解决什么问题
Function Calling 让模型输出结构化的 JSON 来调用工具,但早期模型只是"尽力而为"——大多数时候格式正确,偶尔会输出非法 JSON、缺少必填字段、类型不匹配。开发者需要在应用层做防御性校验和重试。
Structured Outputs 通过 Constrained Decoding(受限解码) 在推理引擎层面保证输出合法性,从根本上消除了格式错误的可能。
如何使用
在工具定义中设置 strict: true:
json
{
"type": "function",
"function": {
"name": "get_weather",
"strict": true,
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string" }
},
"required": ["city"],
"additionalProperties": false
}
}
}
strict: true 启用后,模型保证输出 100% 符合 parameters 定义的 JSON Schema。
架构意义
Structured Outputs 的本质是验证职责的转移:从应用层的"生成完再检查",下沉到推理层的"生成过程中就不允许违规"。类似于从"事后质检"升级到"流水线上的实时约束"——不是产品出厂后再检测缺陷,而是生产过程中就不允许产出不合格品。
支持情况
- OpenAI:2024 年 8 月起,
gpt-4o-2024-08-06及后续模型支持 - Anthropic:tool_use 的 JSON mode 提供类似保证
- 其他厂商的结构化输出可靠性参差不齐
引用本术语的文章