OpenAI Structured Outputs API 機能発表

TL;DR

OpenAIはAPI向けにStructured Outputsを発表しました。この機能は、モデルの応答が開発者が提供したJSONスキーマに正確に一致することを保証し、データ中心のアプリケーションの信頼性を向上させます。

Structured Outputs とは

Structured Outputsは、モデルの出力が開発者が提供したJSONスキーマと一致することを強制します。これは、以前のJSONモードが有効なJSONを促すだけで、特定のスキーマへの適合を保証しなかった点を超えています。

Structured Outputs の使い方

関数呼び出しインターフェース

  • ツール定義で strict: true を設定します。
  • ツールをサポートするすべてのモデルで動作します(例: gpt‑4‑0613gpt‑3.5‑turbo‑0613、およびそれ以降のモデル)。
  • 例のリクエストでは、テーブル名、カラム、条件、並び順の詳細なスキーマを持つ query 関数が示されています。モデルはこのスキーマと完全に一致するJSONオブジェクトを返します。

response_format インターフェース

  • response_format 内の新しい json_schema オプションでJSONスキーマを提供します。
  • 最新のGPT‑4oモデルで利用可能です:gpt‑4o‑2024‑08‑06gpt‑4o‑mini‑2024‑07‑18
  • 例のリクエストでは、steps 配列と final_answer フィールドを持つ数学指導の応答をフォーマットし、モデルはスキーマに適合したデータを返します。

安全性の保証

  • Structured Outputsは既存の安全ポリシーを尊重し、モデルは依然として安全でないリクエストを拒否できます。
  • 拒否が発生した場合、APIはレスポンスに refusal フィールドを含め、開発者がプログラム上で非適合出力を検出できるようにします。

ネイティブ SDK のサポート

  • 更新されたPythonおよびNode SDKは、Pydantic(Python)またはZod(Node)オブジェクトを直接受け入れます。
  • SDKはこれらの型付きオブジェクトをJSONスキーマに変換し、APIに送信し、返されたJSONを元の型構造にデシリアライズします。
  • 例のコードは Query Pydanticモデルと MathResponse モデルのパースを示しています。

主なユースケース

  • 動的UI生成 – 再帰的スキーマに一致するUIコンポーネントツリーを生成し、オンザフライでインターフェースを作成可能にします。
  • 推論と最終回答の分離reasoning_steps 配列と簡潔な answer フィールドを返し、透明性を向上させます。
  • 構造化データの抽出 – フリーフォームの会議メモからアクション項目、期限、担当者を抽出し、明確なスキーマに整理します。

技術的な内部構造

制約付きデコード

  • モデルのトークンサンプラーは、各ステップでスキーマに対して出力を有効に保つトークンに限定されます。
  • JSONスキーマは文脈自由文法(CFG)にコンパイルされます。生成中、推論エンジンは現在の部分出力に基づいて無効なトークンをマスクします。
  • 新しいスキーマでの最初のリクエストは、文法キャッシュを構築するために前処理遅延が発生します(通常は10秒未満、複雑なスキーマでは最大1分)。

なぜCFGがFSM/正規表現より優れるか

  • CFGは再帰構造を表現でき、FSMは信頼性を持って扱えません。
  • これにより、ネストされたオブジェクトや自己参照オブジェクトを含むスキーマ(例:動的に生成されたUIコンポーネントツリー)をサポートできます。

制限事項

  • JSON Schemaのサブセットのみがサポートされています(正確なリストはドキュメント参照)。
  • 新しいスキーマの初回使用時に遅延があり、以降の呼び出しは高速です。
  • 拒否、トークン上限、早期停止理由により、モデルが非適合な応答を返すことがあります。
  • JSON内部の値が正しくない場合があるため、開発者は例を提供するか、タスクを小さなサブタスクに分割すべきです。
  • 並列ツール呼び出しは互換性がなく、parallel_tool_calls: false を設定して不一致を防ぎます。
  • Structured Outputsで使用されるスキーマはZero Data Retentionの対象外です。

利用可能性と価格

  • Structured Outputsは本日、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 に切り替えると、2024年5月版と比較して入力コストが50%、出力コストが33%削減されます。

謝辞

OpenAIはインスピレーションの源としてオープンソースコミュニティに感謝し、outlinesjsonformerinstructorguidancelark といったプロジェクトをStructured Outputs実装への影響として挙げています。


この記事は、2024年8月6日にリリースされたOpenAIの公式発表であるStructured Outputsを要約しています。

Sources