OpenAI
このページは機械翻訳されています。元の英語の記事を表示

OpenAI API における Function Calling

Function Calling とは何か、また OpenAI API でどのように機能するのか

更新日: 4 days ago

2025 年 3 月 11 日時点で、新しい Agents プラットフォームの構成要素をリリースしました。詳細については、Responses APIWeb SearchFile SearchComputer Use を含む Tools、および Tracing を備えた Agents SDK の API ドキュメントをご覧ください。

Function Calling により、OpenAI モデルを外部ツールやシステムに接続できます。これは、AI アシスタントに機能を持たせる、アプリケーションと LLM の間に深い統合を構築するなど、多くの用途に役立ちます。

詳しくは、Function Calling 開発者ガイドをご覧ください。

2024 年 6 月に、構造化出力をリリースしました。関数定義で strict: true を設定してオンにすると、構造化出力により、関数呼び出しに対してモデルが生成する引数が、関数定義で指定した JSON Schema と正確に一致することが保証されます。

2024 年 10 月に「何でも生成」機能をリリースしました。これにより、開発者は関数を説明する、関数を直接貼り付ける、またはコードを貼り付けることで、有効な関数スキーマを生成できます。「何でも生成」について詳しくは、こちらのヘルプセンター記事をご覧ください

Function Calling の使用方法

Function Calling は、次のような多くのユースケースで役立ちます。

  • アシスタントによるデータ取得を可能にする:

  • アシスタントによるアクション実行を可能にする:

  • アシスタントによる計算実行を可能にする:

  • リッチなワークフローの構築:

  • 生テキストを取得し、それを構造化データに変換してデータベースに保存するデータ抽出パイプライン

Function Calling は Responses API でサポートされています。これは、以前は Chat Completions APIAssistants API に分かれていた機能を統合したものです。

JSON モードの使用方法

JSON モードをオンにすると、モデルの出力は有効な JSON であることが保証されます。ただし、一部のエッジケースでは、適切に検出して処理する必要があります。

Chat Completions API で JSON モードをリクエストするには、対応モデルで response_format{ "type": "json_object" } に設定します。Responses API では、該当する場合、text.format{ "type": "json_object" } に設定します。例: text: { "format": { "type": "json_object" } }。どちらの API でも、JSON モードはモデル、メッセージ、ツールの前提条件が満たされた場合にのみ機能します(たとえば、モデルが json_object をサポートしている、会話に JSON を生成する指示が含まれている、ツールの制約に互換性がある、など)。有効な入力コンテキスト内の少なくとも 1 つのリクエストメッセージまたは入力メッセージに、JSONjsonJson など、大文字と小文字を区別しない形式で json が含まれている必要があります。含まれていない場合、API はエラーを返します。Responses では、トップレベルの instructions フィールドだけではこの検証を満たしません。互換性のあるモデルやパスで Function Calling を使用する場合、関数呼び出しの引数には JSON 制約が自動的に適用されます。互換性のないモデルやツール/レスポンス形式の組み合わせは拒否されるか、JSON 制約付きサンプリングを使用しない場合があります。

重要な注意事項:

  • JSON モードを使用する場合は、システムメッセージなど、会話内のいずれかのメッセージを通じて、JSON を生成するよう常にモデルに指示する必要があります。JSON を生成する明示的な指示を含めない場合、モデルが終わりのない空白文字のストリームを生成し、リクエストがトークン制限に達するまで実行され続ける可能性があります。忘れないようにするため、JSON モードでは、関連する入力メッセージまたは指示に、大文字と小文字を区別せず、何らかの形式で json という単語が含まれていない限り、リクエストが拒否されます。

  • JSON モードで保証されるのは、出力が有効でエラーなく解析できることだけであり、特定のスキーマに一致することは保証されません。スキーマに一致させるには構造化出力を使用してください。それが不可能な場合は、検証ライブラリと、必要に応じてリトライを使用して、出力が目的のスキーマに一致するようにしてください。

  • アプリケーションでは、モデル出力が完全な JSON オブジェクトにならない可能性があるエッジケース(下記参照)を検出して処理する必要があります

この記事は役に立ちましたか?