次の方法で共有


OpenAI 関数呼び出しについて

"関数呼び出し" は、JSON を使用してプロンプトに関数とその引数を記述できる OpenAI モデルの機能です。 モデルは、関数自体を呼び出す代わりに、呼び出す必要がある関数と使用する引数を記述する JSON 出力を返します。

関数呼び出しは、外部ツールを AI モデルに接続する方法を簡略化します。 まず、各ツールの関数をモデルに指定します。 次に、プロンプトの質問に基づいて、どの関数を呼び出すべきかがモデルによって決定されます。 モデルは、関数呼び出しの結果を使用して、より正確で一貫性のある応答を構築します。

関数呼び出しの潜在的なユース ケースは次のとおりです。

  • メールの送信や天気予報の取得など、外部 API を呼び出して質問に回答します。
  • 「私のベストセラー製品は何ですか?」という質問には、売上データを集計するなど、内部データストアからの情報を使用して回答します。
  • チャット履歴の詳細を含むユーザー情報オブジェクトを作成するなど、テキスト情報から構造化データを作成します。

OpenAI を使用した関数呼び出し

OpenAI モデルを使用して関数を呼び出す一般的な手順は次のとおりです。

  1. toolsパラメーターで定義された関数を使用して、ユーザーの質問を要求として送信します。
  2. モデルは、呼び出す関数 (存在する場合) を決定します。 出力には、関数呼び出しとその引数を一覧表示する JSON オブジェクトが含まれています。

    Note

    モデルでは、追加の引数を誤って含めてしまう可能性があります。

  3. 出力を解析し、指定された引数を使用して要求された関数を呼び出します。
  4. 関数の結果を新しいメッセージとして含めて、別の要求を送信します。
  5. モデルは、より多くの関数呼び出し要求またはユーザーの質問に対する回答で応答します。
    • モデルが応答して回答するまで、要求された関数呼び出しを続行します。

tool_choice パラメーターを関数の名前に設定することで、モデルに特定の関数を要求させることができます。 また、tool_choice パラメーターを "none" に設定して、モデルがユーザーにメッセージで応答するように強制することもできます。

関数の並列呼び出し

一部のモデルでは、並列関数呼び出しがサポートされています。これにより、モデルは 1 回の出力で複数の関数呼び出しを要求できます。 各関数呼び出しの結果は、1 つの応答としてモデルに返されます。 並列関数呼び出しにより、応答の生成に必要な API 要求の数と時間が短縮されます。 各関数の結果は、関数呼び出し要求の id と一致する tool_call_id を含む会話に新しいメッセージとして含まれます。

サポートされているモデル

すべての OpenAI モデルが、関数呼び出しをサポートするようにトレーニングされているわけではありません。 関数呼び出しまたは並列関数呼び出しをサポートするモデルの一覧については、「OpenAI - サポートされるモデル」を参照してください。

セマンティック カーネル SDK を使用した関数呼び出し

セマンティック カーネル SDK は、KernelFunction デコレーターを使用している AI に対して関数が使用可能な記述をサポートしています。

カーネルは、デコレーターに基づいて要求の tools パラメーターをビルドし、要求された関数呼び出しをコードに調整し、結果をモデルに返します。

トークン数

関数の説明は、モデルへの要求のシステム メッセージに含まれます。 これらの関数の説明は、モデルのトークン制限に対してカウントされ、要求のコストに含まれます

要求がモデルのトークン制限を超えている場合は、次の変更をお試しください。

  • 関数の数を減らします。
  • JSON の関数と引数の説明を短くします。