OpenAIがAPIに構造化出力を導入:JSONスキーマへの準拠率100%を実現
OpenAIはAPI向けに「Structured Outputs」を正式公開した。制約付きサンプリング技術により、最新のgpt-4oなどで開発者が指定したJSON Schemaへの完全準拠(評価スコア100%)を実現。プロンプト調整やリトライ処理に頼る必要がなくなる。初回のスキーマ処理時にわずかな遅延が発生する点には注意が必要だ。

大規模言語モデル(LLM)を自社システムに組み込んだことのある開発者なら、誰もが一度は「JSON形式で返してくれ」とプロンプトで懇願した経験があるはずです。それでもモデルは時折、余計な挨拶文を混ぜたり、カンマを付け忘れたりして、パーサーを容赦なく落としてきました。
OpenAIは8月6日、この長年の課題に終止符を打つ新機能「Structured Outputs(構造化出力)」をAPI向けに提供開始しました。開発者が定義したJSON Schemaに、モデルの出力が100%厳密に一致することを保証する仕組みです。
この機能の提供に合わせて、最新モデル「gpt-4o-2024-08-06」もリリースされました。複雑なJSONスキーマへの追従テストにおいて、従来のgpt-4-0613は40%未満の信頼性にとどまっていましたが、新モデルとStructured Outputsを組み合わせることで100%のスコアを達成しています。
強制デコーディングでフォーマット崩れを物理的に防ぐ
OpenAIは以前からJSON modeを提供していましたが、これは構文として正しいJSONを吐き出すだけで、指定したキーや型の構造までは担保できませんでした。開発者はオープンソースのバリデータを使ったり、エラー時にリトライを繰り返すコードを書く必要がありました。
Structured Outputsは2通りの方法で利用できます。1つはFunction calling(ツール呼び出し)の定義内でstrict: trueを設定する方法で、gpt-4-0613以降の全ツール対応モデルで利用可能です。もう1つはresponse_formatパラメータにjson_schemaを渡し、strict: trueを指定する方法で、新版gpt-4oおよび7月に登場したgpt-4o-miniに対応しています。
PythonおよびNode.jsの公式SDKもアップデートされ、PydanticやZodのオブジェクトを直接渡せるようになりました。また、安全性ポリシーに抵触した場合は、崩れたフォーマットを返すのではなくrefusalという専用フィールドで安全に拒絶を通知します。
100%の適合性を実現できた理由は、プロンプトの工夫ではなく「拘束サンプリング(Constrained Decoding)」という推論レベルのエンジニアリングです。OpenAIによると、モデルの追加訓練だけでは93%の精度が限界でした。
そこで提供されたJSONスキーマを文脈自由文法(CFG)に変換し、トークンを1つ生成するごとに文法上許されるトークンを動的に割り出し、それ以外のトークンの確率をゼロにマスクする手法を取りました。有限状態機械(FSM)ではなくCFGを採用したことで、再帰的なUIツリーなどの入れ子構造にも対応できます。
ただし、新しいスキーマの初回リクエスト時は文法の前処理とキャッシュ作成が必要なため、通常で数秒から10秒、複雑なものでは最大1分程度のレイテンシが発生します。また、並列関数呼び出しには対応していません。
なぜ重要か
地味なアップデートに見えるかもしれませんが、LLMを「おしゃべり相手」から「基幹システムの部品」へと進化させる上で、極めて価値の高い前進だと評価できます。
開発者にとって、スキーマの完全一致が保証されたことで、何段階も連なるAIエージェントの処理パイプラインがフォーマットエラーで突然停止する悪夢から解放されます。リトライ処理や防御的なバリデーションコードをごっそり削減できるため、プロダクション環境でAPIを使っているなら今すぐ移行を検討すべきです。
業界全体から見れば、これまでプロンプトの工夫や外部ライブラリで解決しようとしていた領域を、OpenAIが推論エンジンのインフラ側で抱え込み、他社に対する大きな実用上のアドバンテージを作ったと言えます。
注意すべきは、この機能が担保するのはあくまで「器の形」であり、「中身の真偽」ではないという点です。型やキー名は完璧に揃っていても、計算結果を間違えたり事実誤認を起こす可能性は残ります。確定的な構造保証を手に入れた今、開発者が向き合うべき課題は、より純粋なプロンプトの推論精度向上へとシフトしていきます。
情報源 (1)
- openai.com(新しいタブで開きます)原文openai.com