OpenAIの開発者向けドキュメントでは、関数呼び出しについて体系的に説明しています。リクエスト内で関数(ツール)を宣言することで、モデルは必要に応じて呼び出す関数名とパラメータを返します。アプリケーションは関数を実行し、結果をモデルに返すことで、「推論-呼び出し-フィードバック」という閉ループを形成します。この機能は現在、 Responses APIを通じて推奨されており、テキストや画像などのマルチモーダルインタラクションや、ホスト型ツールとの連携をサポートし、主にチャット補完に依存していた従来の使用法に取って代わります。
このガイドでは、関数パラメータをJSON Schemaを用いて記述することを強調し、より厳格な制約(追加属性の禁止など)を推奨しています。これを構造化出力と組み合わせることで、解析性と一貫性が大幅に向上します。また、 tool_choice (auto/required/none)と複数/並列のツール呼び出しパラダイムも提供しており、ツールの戻り値を後続のコンテキストに組み込んで推論を継続することが可能です。移行ドキュメントでは、アシスタント/チャット補完からレスポンスへの移行における相違点と例が示されています。また、このドキュメントでは、モデルは「呼び出しの提案」のみを担当し、実際の実行とセキュリティ検証は開発者が管理する必要があることを開発者に改めて通知しています。パラメータ検証と権限管理は必須です。
よくある質問
Q: 関数呼び出しとレスポンス API の関係は何ですか?
A: 現在推奨されているインターフェースは Responses で、ツール呼び出し、イベント出力、マルチモーダル性をネイティブにサポートしており、主に Chat Completions に基づいた古いバージョンに代わるものです。
Q: 関数を呼び出すためにモデルを「必須」にするにはどうすればよいですか?
A: リクエストで tool_choice を required に設定するか、必要なツールのみを提供し、プロンプトで制約を指定します。
Q: 構造化出力で使用できますか?
A: はい。JSONスキーマを使用して関数のパラメータを厳密に制約します。構造化出力と組み合わせることで、最終的な結果がスキーマに従って返されることを要求でき、解析や錯覚を減らすことができます。
Q: 一度に複数の関数を呼び出すことはできますか?
A: 1つのレスポンスで複数のツール呼び出しを返すことができます。アプリケーションはそれらを順番に実行し、その結果を後続のラウンドの入力として使用する必要があります。
Q: 移行の重要なポイントは何ですか?
A: 関数定義と戻り値アイテムは、レスポンスの新しいイベント/アイテム形式を使用します。リクエストボディと解析ロジックは、移行ガイドに従って更新する必要があります。