OpenAIは、エキサイティングな新機能である構造化出力(Structured Outputs)を発表しました。これは、モデル生成の出力が開発者が提供したJSONスキーマに厳密に従うことを目的としています。

image.png

昨年の開発者向けイベント(DevDay)で、OpenAIは初めてJSONスキーマを発表しました。これは、開発者が信頼性の高いアプリケーションを構築するための重要な基盤となりました。JSONスキーマはモデルが有効なJSON出力を生成する信頼性を向上させましたが、モデルの応答が特定のスキーマに準拠することを保証するものではありませんでした。今日の構造化出力機能は、まさにこの問題を解決するために開発されました。

AIのアプリケーションにおける広範な利用に伴い、非構造化入力から構造化データを作成することが、中心的なユースケースとなっています。開発者はOpenAI APIを利用して強力なアシスタントを構築し、関数呼び出しを通じてデータを取得したり、質問に答えたり、構造化データを取り出してデータ入力を行うことができます。従来、開発者はモデルの出力がシステムに必要な形式に準拠することを保証するために、オープンソースツールや繰り返しリクエストなどの方法に頼ることがよくありました。しかし、構造化出力機能により、OpenAIモデルを開発者が提供したスキーマに適合させることで、出力の信頼性が大幅に向上します。

複雑なJSONスキーマの構造化出力で100%のスコアを獲得

特筆すべきは、複雑なJSONスキーマの評価において、新しいモデルgpt-4o-2024-08-06が構造化出力で完璧な100%のスコアを獲得したことです。一方、以前のgpt-4-0613は40%未満でした。これは、新しいモデルが特定のスキーマに準拠した出力を生成する上で、より優れたパフォーマンスを示していることを意味します。

image.png

構造化出力の使い方

構造化出力の使用は非常に簡単です。OpenAIはAPIに2つの形式を導入しました。1つはツールによる関数呼び出し、もう1つは応答形式の新しいオプションです。開発者はjson_schemaパラメーターでJSONスキーマを提供できます。厳格モードを有効にすると、モデルの出力が提供されたスキーマに厳密に準拠します。

1.関数呼び出し: 関数定義でstrict: trueを設定することで、toolsによる構造化出力が得られます。この機能は、すべてのモデルgpt-4-0613gpt-3.5-turbo-0613、およびそれ以降のバージョンを含む、ツールをサポートするすべてのモデルで使用できます。構造化出力を有効にすると、モデル出力は提供されたツールの定義と一致します。

2.response_formatパラメーターの新しいオプション: 開発者は、json_schemaを使用してJSONスキーマを提供できるようになりました。これは、response_formatパラメーターの新しいオプションです。モデルがツールを呼び出さずに、構造化された方法でユーザーに応答する場合に便利です。この機能は、最新のGPT-4oモデルである、本日リリースされたgpt-4o-2024-08-06gpt-4o-mini-2024-07-18で使用できます。response_formatstrict: trueと共に提供されると、モデル出力は提供されたスキーマと一致します。

セキュリティはOpenAIにとって最重要事項であり、新機能は既存のセキュリティポリシーの下で動作します。モデルは依然として安全でないリクエストを拒否できます。また、開発プロセスを簡素化するために、拒否応答文字列を追加しました。これにより、開発者はモデルが拒否情報を生成したかどうかをプログラムで検出できます。

ネイティブSDKのサポート

OpenAIのPythonとNode SDKも更新され、構造化出力のネイティブ機能をサポートするようになりました。開発者はPydanticまたはZodオブジェクトを提供するだけで、OpenAIのSDKが自動的にデータ型変換とJSON応答の解析を処理します。

今回の発表は、構造化出力が開発者の作業をより便利にし、優れたアプリケーションの作成を容易にすることを示しています。

公式ブログ:https://openai.com/index/introducing-structured-outputs-in-the-api/

要点:

🌟 構造化出力機能が利用可能になり、モデル出力の信頼性が向上し、開発者が提供したJSONスキーマに従います。

🔍 新しいモデルgpt-4o-2024-08-06は、複雑なJSONスキーマの評価で完璧な100%のスコアを獲得しました。

🔧 PythonとNode SDKが更新され、構造化出力をサポートし、開発者のワークフローを簡素化します。