OpenAI 結構化輸出 API 功能公告
TL;DR
OpenAI 宣佈了其 API 的 Structured Outputs 功能,此功能保證模型回應完全符合開發者提供的 JSON Schema,提升資料導向應用的可靠性。
結構化輸出是什麼
結構化輸出強制模型的輸出必須符合開發者提供的 JSON Schema。這超越了早前的 JSON mode,後者僅鼓勵產生有效的 JSON,卻未確保符合特定的 schema。
如何使用結構化輸出
函式呼叫介面
- 在工具定義中設定
strict: true。 - 可與任何支援工具的模型一起使用(例如
gpt‑4‑0613、gpt‑3.5‑turbo‑0613以及更新的模型)。 - 範例請求展示了一個
query函式,包含表名、欄位、條件與排序的詳細 schema。模型會回傳完全符合此 schema 的 JSON 物件。
response_format 介面
- 透過
response_format內的新json_schema選項提供 JSON Schema。 - 可在最新的 GPT‑4o 模型上使用:
gpt‑4o‑2024‑08‑06與gpt‑4o‑mini‑2024‑07‑18。 - 範例請求將數學輔導回應格式化為包含
steps陣列與final_answer欄位,模型會回傳符合該 schema 的資料。
安全保證
- 結構化輸出遵守現有的安全政策;模型仍可拒絕不安全的請求。
- 當發生拒絕時,API 會在回應中加入
refusal欄位,讓開發者能以程式方式偵測不符合的輸出。
原生 SDK 支援
- 更新的 Python 與 Node SDK 可直接接受 Pydantic(Python)或 Zod(Node)物件。
- SDK 會將這些型別化物件轉換為 JSON Schema,傳送至 API,並將回傳的 JSON 反序列化回原始的型別結構。
- 範例程式碼示範解析
QueryPydantic 模型與MathResponse模型。
主要使用案例
- 動態 UI 產生 – 產生符合遞迴 schema 的 UI 元件樹,實現即時介面建立。
- 將推理與最終答案分離 – 回傳
reasoning_steps陣列與簡潔的answer欄位,提升透明度。 - 抽取結構化資料 – 從自由格式的會議記錄中提取待辦事項、截止日期與負責人,放入明確定義的 schema。
技術細節
受限解碼
- 模型的 token 抽樣器在每一步都受限於能使輸出在給定 schema 下保持有效的 token。
- JSON Schema 會被編譯成上下文無關文法(CFG)。在生成過程中,推論引擎會根據目前的部分輸出遮蔽無效的 token。
- 首次使用新 schema 時會產生前處理延遲(通常在 10 秒以內;對於複雜 schema 最多約一分鐘),以建立文法快取。
為何選擇 CFG 而非 FSM/正則表達式
- CFG 能表示遞迴結構,而 FSM 無法可靠地處理此類結構。
- 這使得能支援具有巢狀或自我參照物件的 schema,例如動態產生的 UI 元件樹。
限制
- 僅支援 JSON Schema 的一部份子集(請參閱文件取得完整清單)。
- 新 schema 的首次使用會有延遲;之後的呼叫則很快。
- 拒絕、token 限制或提前停止原因可能導致模型回傳不符合的回應。
- JSON 內的值仍可能不正確;開發者應提供範例或將任務拆分為更小的子任務。
- 平行工具呼叫不相容;請設定
parallel_tool_calls: false以避免不匹配。 - 使用結構化輸出的 schema 不符合 Zero Data Retention 的資格。
可用性與定價
- 結構化輸出目前已在 Chat Completions、Assistants 與 Batch API 中普遍可用。
- 函式呼叫模式可與所有支援工具的模型一起使用,包括
gpt‑4o、gpt‑4o‑mini以及任何具工具支援的微調模型。 response_format模式可與gpt‑4o‑2024‑08‑06、gpt‑4o‑mini‑2024‑07‑18以及相容的微調模型一起使用。- 切換至
gpt‑4o‑2024‑08‑06可將輸入成本降低 50%,輸出成本降低 33%,相較於 2024 年 5 月的版本。
感謝致辭
OpenAI 感謝開源社群的啟發,並提及 outlines、jsonformer、instructor、guidance 與 lark 等專案對結構化輸出實作的影響。
本文概述了 OpenAI 於 2024 年 8 月 6 日發布的結構化輸出官方公告。
摘要: OpenAI 於 2024 年 8 月 6 日推出了結構化輸出,這是一項新的 API 功能,可保證模型回應完全符合開發者提供的 JSON Schema,提升資料導向應用的可靠性。
標題: OpenAI 結構化輸出 API 功能公告