OpenAI 結構化輸出 API 功能公告

TL;DR

OpenAI 宣佈了其 API 的 Structured Outputs 功能,此功能保證模型回應完全符合開發者提供的 JSON Schema,提升資料導向應用的可靠性。

結構化輸出是什麼

結構化輸出強制模型的輸出必須符合開發者提供的 JSON Schema。這超越了早前的 JSON mode,後者僅鼓勵產生有效的 JSON,卻未確保符合特定的 schema。

如何使用結構化輸出

函式呼叫介面

  • 在工具定義中設定 strict: true
  • 可與任何支援工具的模型一起使用(例如 gpt‑4‑0613gpt‑3.5‑turbo‑0613 以及更新的模型)。
  • 範例請求展示了一個 query 函式,包含表名、欄位、條件與排序的詳細 schema。模型會回傳完全符合此 schema 的 JSON 物件。

response_format 介面

  • 透過 response_format 內的新 json_schema 選項提供 JSON Schema。
  • 可在最新的 GPT‑4o 模型上使用:gpt‑4o‑2024‑08‑06gpt‑4o‑mini‑2024‑07‑18
  • 範例請求將數學輔導回應格式化為包含 steps 陣列與 final_answer 欄位,模型會回傳符合該 schema 的資料。

安全保證

  • 結構化輸出遵守現有的安全政策;模型仍可拒絕不安全的請求。
  • 當發生拒絕時,API 會在回應中加入 refusal 欄位,讓開發者能以程式方式偵測不符合的輸出。

原生 SDK 支援

  • 更新的 Python 與 Node SDK 可直接接受 Pydantic(Python)或 Zod(Node)物件。
  • SDK 會將這些型別化物件轉換為 JSON Schema,傳送至 API,並將回傳的 JSON 反序列化回原始的型別結構。
  • 範例程式碼示範解析 Query Pydantic 模型與 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‑4ogpt‑4o‑mini 以及任何具工具支援的微調模型。
  • response_format 模式可與 gpt‑4o‑2024‑08‑06gpt‑4o‑mini‑2024‑07‑18 以及相容的微調模型一起使用。
  • 切換至 gpt‑4o‑2024‑08‑06 可將輸入成本降低 50%,輸出成本降低 33%,相較於 2024 年 5 月的版本。

感謝致辭

OpenAI 感謝開源社群的啟發,並提及 outlinesjsonformerinstructorguidancelark 等專案對結構化輸出實作的影響。


本文概述了 OpenAI 於 2024 年 8 月 6 日發布的結構化輸出官方公告。


摘要: OpenAI 於 2024 年 8 月 6 日推出了結構化輸出,這是一項新的 API 功能,可保證模型回應完全符合開發者提供的 JSON Schema,提升資料導向應用的可靠性。

標題: OpenAI 結構化輸出 API 功能公告

Sources