- APIに「Structured Outputs」を導入
- 開発者が提供したJSONスキーマにモデル出力を正確に一致させる新機能
- 昨年のDevDayでJSONモードを紹介したが、特定のスキーマに沿った応答は保証していなかった
- 構造化出力は、開発者が提供したスキーマに合わせてモデル出力を制限し、複雑なスキーマをよりよく理解できるようモデルを訓練したもの
- 構造化出力が必要な理由
- 非構造化入力から構造化データを生成することは、AIの中核的なユースケースの1つ
- OpenAI APIを使って、データ取得、質問応答、データ抽出、マルチステップのワークフロー構築など多様な作業を実行可能
- 従来は、オープンソースツール、プロンプト、リトライなどを通じて、モデル出力をシステムと相互運用可能な形式に合わせる努力が必要だった
- 構造化出力はこうした問題を解決し、開発者が提供したスキーマに合わせてモデル出力を制限する
- 性能評価
- 複雑なJSONスキーマに従う評価で、gpt-4o-2024-08-06モデルは100%のスコアを記録
- gpt-4-0613モデルは40%未満のスコアを記録
- 構造化出力の使用方法
- 関数呼び出しによる構造化出力: 関数定義内で
strict: true を設定
- 安全な構造化出力
- OpenAIの既存の安全ポリシーに準拠
- モデルが安全でないリクエストを拒否する場合がある
- API応答に拒否文字列の値が含まれており、モデルが拒否を生成したかどうかをプログラムで検知可能
- ネイティブSDKサポート
- PythonおよびNode SDKが構造化出力をネイティブにサポート
- PydanticまたはZodオブジェクトを渡すことでJSONスキーマへ変換し、JSON応答を自動でシリアライズおよびパースする
- 制約事項
- JSONスキーマの一部のみをサポート
- 新しいスキーマでは、最初のAPI応答時に追加の遅延が発生
- モデルが安全でないリクエストを拒否する場合がある
- 並列関数呼び出しとは互換性がない
- 構造化出力はZero Data Retention(ZDR)の対象外
- 利用可能性
- 構造化出力はAPIで一般提供中
- 関数呼び出しによる構造化出力は、すべての関数呼び出し対応モデルで利用可能
- 応答形式オプションは最新モデルで利用可能
GN⁺のまとめ
- OpenAIの新機能である構造化出力は、JSONスキーマに合わせてモデル出力を正確に一致させる機能を提供
- 開発者はこれにより、データ取得、質問応答、データ抽出など多様な作業をより高い信頼性で実行できる
- PythonおよびNode SDKでネイティブにサポートされ、開発が容易になる
- 非構造化データから構造化データを抽出するなど、さまざまな追加ユースケースがある
- 制約付きデコーディング技術を用いてモデル出力を制限し、有効なJSONのみを生成する
2件のコメント
興味深い機能ですね
Hacker Newsの意見
GPT-4oを使って動的UIとコードを構築
gpt-4o-2024-08-06の主な変更点
vLLMのOutlines Structured Outputを使った経験
AIの性能に関する意見
OpenAIのアプローチに関する意見
"strict: true"オプションに対する混乱JSONをモデルにハードコーディングするのはAGI目標と逆方向だという意見
OpenAIの機能使用時のロックイン効果への懸念
JSON形式エラーに関する指摘
最上位レベルがオブジェクトでなければならない理由への疑問