OpenAI Structured Outputs API 機能発表
TL;DR
OpenAIはAPI向けにStructured Outputsを発表しました。この機能は、モデルの応答が開発者が提供したJSONスキーマに正確に一致することを保証し、データ中心のアプリケーションの信頼性を向上させます。
Structured Outputs とは
Structured Outputsは、モデルの出力が開発者が提供したJSONスキーマと一致することを強制します。これは、以前のJSONモードが有効なJSONを促すだけで、特定のスキーマへの適合を保証しなかった点を超えています。
Structured Outputs の使い方
関数呼び出しインターフェース
- ツール定義で
strict: trueを設定します。 - ツールをサポートするすべてのモデルで動作します(例:
gpt‑4‑0613、gpt‑3.5‑turbo‑0613、およびそれ以降のモデル)。 - 例のリクエストでは、テーブル名、カラム、条件、並び順の詳細なスキーマを持つ
query関数が示されています。モデルはこのスキーマと完全に一致するJSONオブジェクトを返します。
response_format インターフェース
response_format内の新しいjson_schemaオプションでJSONスキーマを提供します。- 最新のGPT‑4oモデルで利用可能です:
gpt‑4o‑2024‑08‑06とgpt‑4o‑mini‑2024‑07‑18。 - 例のリクエストでは、
steps配列とfinal_answerフィールドを持つ数学指導の応答をフォーマットし、モデルはスキーマに適合したデータを返します。
安全性の保証
- Structured Outputsは既存の安全ポリシーを尊重し、モデルは依然として安全でないリクエストを拒否できます。
- 拒否が発生した場合、APIはレスポンスに
refusalフィールドを含め、開発者がプログラム上で非適合出力を検出できるようにします。
ネイティブ SDK のサポート
- 更新されたPythonおよびNode SDKは、Pydantic(Python)またはZod(Node)オブジェクトを直接受け入れます。
- SDKはこれらの型付きオブジェクトをJSONスキーマに変換し、APIに送信し、返されたJSONを元の型構造にデシリアライズします。
- 例のコードは
QueryPydanticモデルと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‑4o、gpt‑4o‑mini、およびツールサポートを持つファインチューニングモデルを含む、ツールをサポートするすべてのモデルで動作します。 response_formatモードはgpt‑4o‑2024‑08‑06、gpt‑4o‑mini‑2024‑07‑18、および互換性のあるファインチューニングモデルで利用可能です。gpt‑4o‑2024‑08‑06に切り替えると、2024年5月版と比較して入力コストが50%、出力コストが33%削減されます。
謝辞
OpenAIはインスピレーションの源としてオープンソースコミュニティに感謝し、outlines、jsonformer、instructor、guidance、lark といったプロジェクトをStructured Outputs実装への影響として挙げています。
この記事は、2024年8月6日にリリースされたOpenAIの公式発表であるStructured Outputsを要約しています。