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 提供类似保证
  • 其他厂商的结构化输出可靠性参差不齐

引用本术语的文章