功能概述
結構化輸出(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 差異
自動降級機制
閘道預設為所有請求開啟結構化輸出的自動降級保護。當模型或平台不支援時,閘道不會回傳錯誤,而是自動剝離 Schema 約束並在回應標頭中標記降級原因。你的請求仍然會得到正常的模型回覆,只是輸出不受 Schema 強制約束。 這意味著你可以放心地在用戶端統一啟用結構化輸出,而無需針對每個模型做相容判斷:- 多模型切換無憂:同一套程式碼在 Claude、GPT、Gemini、GLM 之間切換模型時,即使目標模型不支援結構化輸出,請求也不會報錯
- 兜底透明:即使實際處理請求的模型版本不支援結構化輸出,請求仍然正常完成,僅透過回應標頭標記降級
- 用戶端邏輯簡化:不需要維護一份「哪些模型支援結構化輸出」的清單,閘道已自動處理;用戶端只需檢查回應標頭決定是否需要額外解析
回應標頭
偵測範例
Python
與 json_object 模式的區別
常見問題
哪些模型支援 Structured Outputs?
哪些模型支援 Structured Outputs?
Claude 系列(透過 Anthropic API 的
output_config.format):- Opus / Sonnet / Haiku 4.5 及以上版本
- Fable / Mythos 5 及以上版本
response_format):- GPT-4o 及以上、GPT-5 系列
responseSchema):- Gemini 2.5 及以上
跨協議呼叫時 JSON Schema 會被修改嗎?
跨協議呼叫時 JSON Schema 會被修改嗎?
會。當透過 OpenAI 協議呼叫 Claude 模型時,閘道自動:
- 將
response_format轉換為output_config.format - 移除 Anthropic 不支援的 Schema 關鍵字(
minimum、maxLength等) - 如果有關鍵字被清理,回應標頭標記
schema_keywords_stripped
Structured Outputs 可以和 Extended Thinking 同時使用嗎?
Structured Outputs 可以和 Extended Thinking 同時使用嗎?
可以。
output_config 中的 format(結構化輸出)和 reasoning 中的 effort(思考強度)是獨立參數,可以同時設定:與 OpenRouter 等聚合平台相比,降級機制有什麼不同?
與 OpenRouter 等聚合平台相比,降級機制有什麼不同?
大多數 API 聚合平台在模型不支援結構化輸出時會直接回傳錯誤。AIHubMix 採用優雅降級策略:自動剝離不相容的參數,正常回傳模型回應,並透過
X-Structured-Output-Degraded 回應標頭告知用戶端降級原因。你的應用不會因此中斷。