跳转到主要内容

能力概述

结构化输出(Structured Outputs)让模型的回复严格遵循你定义的 JSON Schema,确保返回值可以直接被程序解析,无需正则或后处理。 与在 prompt 中要求模型”请返回 JSON”不同,结构化输出基于受约束解码(Constrained Decoding):上游将 JSON Schema 编译为语法规则,在推理过程中逐 token 约束生成,模型不可能产出违反 Schema 的内容。 典型场景:
  • 从非结构化文本中提取实体和字段
  • 分类 / 打标签 / 情感分析
  • 多步推理中间结果的标准化传递
  • Agent 工具调用参数的强类型约束

各协议参数对照

三种协议的参数名不同,但底层机制一致:模型输出严格匹配你提供的 JSON Schema。

快速开始

OpenAI 协议(推荐)

适用于所有支持结构化输出的模型,跨厂商通用。

使用其他模型(GLM-5.2 示例)

同一套 OpenAI 协议参数适用于所有支持结构化输出的模型,切换 model 即可。
Python

Claude 原生协议

使用 Anthropic SDK 直接调用,参数为 output_config.format

Schema 编写要点

必需字段

所有 object 类型必须显式声明 additionalProperties: false,否则部分上游会拒绝请求。

嵌套对象

嵌套的 object 同样需要 additionalProperties: false

跨协议 Schema 差异

使用 OpenAI 协议调用 Claude 模型时,网关会自动转换 Schema 格式并清理不兼容的关键字,无需手动适配。

自动降级机制

网关默认为所有请求开启结构化输出的自动降级保护。当模型或平台不支持时,网关不会返回错误,而是自动剥离 Schema 约束并在响应头中标记降级原因。你的请求仍然会得到正常的模型回复,只是输出不受 Schema 强制约束。 这意味着你可以放心地在客户端统一启用结构化输出,而无需针对每个模型做兼容判断:
  • 多模型切换无忧:同一套代码在 Claude、GPT、Gemini、GLM 之间切换模型时,即使目标模型不支持结构化输出,请求也不会报错
  • 兜底透明:即使实际处理请求的模型版本不支持结构化输出,请求仍然正常完成,仅通过响应头标记降级
  • 客户端逻辑简化:不需要维护一份”哪些模型支持结构化输出”的列表,网关已自动处理;客户端只需检查响应头决定是否需要额外解析

响应头

检测示例

Python

json_object 模式的区别

json_object 模式不支持转换到 Claude 原生协议。如果你通过 OpenAI 协议向 Claude 发送 response_format: {"type": "json_object"},响应头会标记 json_object_unsupported_on_anthropic 降级。建议直接使用 json_schema 类型。

常见问题

Claude 系列(通过 Anthropic API 的 output_config.format):
  • Opus / Sonnet / Haiku 4.5 及以上版本
  • Fable / Mythos 5 及以上版本 OpenAI 系列(通过 response_format):
  • GPT-4o 及以上、GPT-5 系列
Gemini 系列(通过 responseSchema):
  • Gemini 2.5 及以上
可通过 模型列表页 查看各模型的能力标签。
会。当通过 OpenAI 协议调用 Claude 模型时,网关自动:
  1. response_format 转换为 output_config.format
  2. 移除 Anthropic 不支持的 Schema 关键字(minimummaxLength 等)
  3. 如果有关键字被清理,响应头标记 schema_keywords_stripped
反向(Claude 协议调用 OpenAI 模型)同样自动转换。
可以。output_config 中的 format(结构化输出)和 reasoning 中的 effort(思考强度)是独立参数,可以同时设置:
大多数 API 聚合平台在模型不支持结构化输出时会直接返回错误。AIHubMix 采用优雅降级策略:自动剥离不兼容的参数,正常返回模型响应,并通过 X-Structured-Output-Degraded 响应头告知客户端降级原因。你的应用不会因此中断。