11 ポイント 投稿者 GN⁺ 2024-08-07 | 2件のコメント | WhatsAppで共有
  • 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件のコメント

 
bluejoyq 2024-08-08

興味深い機能ですね

 
GN⁺ 2024-08-07
Hacker Newsの意見
  • GPT-4oを使って動的UIとコードを構築

    • JSONモードを使うことで安定して動作
    • GPT-4o-miniでは形式上の問題の解決に役立ちそう
    • 関数呼び出しモードではJSONモードより成功率が低い
    • この機能には大きな期待を寄せている
  • gpt-4o-2024-08-06の主な変更点

    • 出力トークンが4kから16kに増加
    • 入力コスト50%、出力コスト33%減少
    • APIユーザーにとって重要な変化
  • vLLMのOutlines Structured Outputを使った経験

    • OpenAIのStructured Outputよりも進んだ機能を提供
    • サポートするフィールド型が限定的
      • OpenAIはString、Number、Booleanなどの基本型のみサポート
      • Outlinesは正規表現パターンを定義できる
    • スキーマ設定コストとレイテンシが高い
      • vLLMとOutlinesはほとんどコストがかからない
      • OpenAIは文脈自由文法の生成に時間がかかる
    • OpenAIにとっての第一歩としては良い出発点だが、さらに発展が必要
  • AIの性能に関する意見

    • AIに出力形式を指定させるのは古くからある問題解決の方法
    • 自然言語処理と問題解決能力は驚くべき進歩を遂げている
    • しかしこの結果を得るには膨大な計算が必要
  • OpenAIのアプローチに関する意見

    • 構造化出力に対するファインチューニングのアプローチを放棄
    • llama.cppはすでに1.5年前にこの機能を実装していた
  • "strict: true" オプションに対する混乱

    • 常に望ましい動作なので、デフォルトであるべき
    • 制約付きデコーディング技術について学んだ
      • 信頼性を高め、レイテンシを減らせる
  • JSONをモデルにハードコーディングするのはAGI目標と逆方向だという意見

  • OpenAIの機能使用時のロックイン効果への懸念

    • 他のLLMへ簡単に移行できない
    • テキストプロンプトだけでは不十分な場合にのみ使うことを推奨
  • JSON形式エラーに関する指摘

    • {“val{“:2}は有効なJSON
  • 最上位レベルがオブジェクトでなければならない理由への疑問

    • 配列をオブジェクトで包まなければならない不便さがある