関数を自動的に呼び出す
セマンティック カーネル SDK では、関数を自動で呼び出す強力な機能が利用できます。 自動関数呼び出しを有効にすると、指定した入力に対して使う関数とプロンプトを、カーネルで自動的に選択できるようになります。 この機能は、関数やプロンプトを手動で呼び出す時間を節約し、アプリケーションをよりスマートにするのに役立ちます。
自動関数呼び出しを使うには、それをサポートする OpenAI モデルを使う必要があります。 現在、これらのモデルには、バージョン 0613 以降の GPT-3.5-turbo モデルと GPT-4 モデルが含まれています。
自動関数呼び出しを有効にするには、OpenAIPromptExecutionSettings
オブジェクトの ToolCallBehavior
プロパティを AutoInvokeKernelFunctions
に設定する必要があります。
たとえば、次の関数をサポートするいくつかの材料プラグインがあるとします。
- `GetIngredients`: Gets a list of the user's available ingredients
- `GetRecipe`: Gets a list of ingredients for a given recipe
- `GetMissingIngredients`: Gets a list of ingredients that are missing from the user's kitchen for a given recipe
AutoInvokeKernelFunctions
動作を使うと、プロンプトに基づいて関数を自動的に実行できます。 次に例を示します。
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(
"your-deployment-name",
"your-endpoint",
"your-api-key",
"deployment-model");
kernel.ImportPluginFromType<IngredientsPlugin>();
kernel.ImportPluginFromPromptDirectory("Prompts/IngredientPrompts");
// Set the ToolCallBehavior property
OpenAIPromptExecutionSettings settings = new()
{
ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};
string prompt = @"What ingredients am I missing from my current list of ingredients
to make a recipe for aloo jeera?";
// Use the settings to automatically invoke plugins based on the prompt
var result = await kernel.InvokePromptAsync(prompt, new(settings));
Console.WriteLine(result);
材料と関数の詳細に応じて、このコードの出力は次の応答のようになります。
Based on the list of ingredients for aloo jeera, you are missing the following items:
- Cumin seeds
- Green chilies
- Ginger
- Turmeric powder
- Red chili powder
- Coriander powder
- Fresh coriander leaves
- Salt
- Oil
関数呼び出しにより、AI は適切なパラメーターを正しい順序で使用して関数を呼び出すことができます。 LLM は、ユーザーのニーズに対応するために関数を繰り返し呼び出すことができます。 これは、AI が関数を呼び出し、結果を確認し、次に何を行うべきかを判断できるフィードバック ループを通じて実行されます。
AutoInvokeKernelFunctions
設定により、プロンプトを実行するために必要なプラグインが自動的に呼び出され、少ないコードで動的で安定したアプリケーションを実現できます。 この機能を活用することで、幅広いシナリオに柔軟に対応できる、より高度なアプリケーションを構築できます。