"関数呼び出し" は、JSON を使用してプロンプトに関数とその引数を記述できる OpenAI モデルの機能です。 モデルは、関数自体を呼び出す代わりに、呼び出す必要がある関数と使用する引数を記述する JSON 出力を返します。
関数呼び出しは、外部ツールを AI モデルに接続する方法を簡略化します。 まず、各ツールの関数をモデルに指定します。 次に、プロンプトの質問に基づいて、どの関数を呼び出すべきかがモデルによって決定されます。 モデルは、関数呼び出しの結果を使用して、より正確で一貫性のある応答を構築します。
関数呼び出しの潜在的なユース ケースは次のとおりです。
- メールの送信や天気予報の取得など、外部 API を呼び出して質問に回答します。
- 「私のベストセラー製品は何ですか?」という質問には、売上データを集計するなど、内部データストアからの情報を使用して回答します。
- チャット履歴の詳細を含むユーザー情報オブジェクトを作成するなど、テキスト情報から構造化データを作成します。
OpenAI を使用した関数呼び出し
OpenAI モデルを使用して関数を呼び出す一般的な手順は次のとおりです。
tools
パラメーターで定義された関数を使用して、ユーザーの質問を要求として送信します。- モデルは、呼び出す関数 (存在する場合) を決定します。 出力には、関数呼び出しとその引数を一覧表示する JSON オブジェクトが含まれています。
Note
モデルでは、追加の引数を誤って含めてしまう可能性があります。
- 出力を解析し、指定された引数を使用して要求された関数を呼び出します。
- 関数の結果を新しいメッセージとして含めて、別の要求を送信します。
- モデルは、より多くの関数呼び出し要求またはユーザーの質問に対する回答で応答します。
- モデルが応答して回答するまで、要求された関数呼び出しを続行します。
tool_choice
パラメーターを関数の名前に設定することで、モデルに特定の関数を要求させることができます。 また、tool_choice
パラメーターを "none"
に設定して、モデルがユーザーにメッセージで応答するように強制することもできます。
関数の並列呼び出し
一部のモデルでは、並列関数呼び出しがサポートされています。これにより、モデルは 1 回の出力で複数の関数呼び出しを要求できます。 各関数呼び出しの結果は、1 つの応答としてモデルに返されます。 並列関数呼び出しにより、応答の生成に必要な API 要求の数と時間が短縮されます。 各関数の結果は、関数呼び出し要求の id
と一致する tool_call_id
を含む会話に新しいメッセージとして含まれます。
サポートされているモデル
すべての OpenAI モデルが、関数呼び出しをサポートするようにトレーニングされているわけではありません。 関数呼び出しまたは並列関数呼び出しをサポートするモデルの一覧については、「OpenAI - サポートされるモデル」を参照してください。
セマンティック カーネル SDK を使用した関数呼び出し
セマンティック カーネル SDK は、KernelFunction
デコレーターを使用している AI に対して関数が使用可能な記述をサポートしています。
カーネルは、デコレーターに基づいて要求の tools
パラメーターをビルドし、要求された関数呼び出しをコードに調整し、結果をモデルに返します。
トークン数
関数の説明は、モデルへの要求のシステム メッセージに含まれます。 これらの関数の説明は、モデルのトークン制限に対してカウントされ、要求のコストに含まれます。
要求がモデルのトークン制限を超えている場合は、次の変更をお試しください。
- 関数の数を減らします。
- JSON の関数と引数の説明を短くします。
関連するコンテンツ
.NET