Stepwise Planner 移行ガイド

この移行ガイドでは、 FunctionCallingStepwisePlanner から計画機能の新しい推奨アプローチ ( Auto Function Calling に移行する方法について説明します。 新しいアプローチでは、結果がより確実に生成され、 FunctionCallingStepwisePlannerと比較して使用されるトークンが少なくなります。

プランの生成

次のコードは、 FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()を使用して自動関数呼び出しで新しいプランを生成する方法を示しています。 AI モデルに要求を送信すると、プランは ChatHistory オブジェクトに配置されます。ここで、ロールが Assistant メッセージには、呼び出す関数 (ステップ) の一覧が含まれます。

古いアプローチ:

Kernel kernel = Kernel
    .CreateBuilder()
    .AddOpenAIChatCompletion("gpt-4", Environment.GetEnvironmentVariable("OpenAI__ApiKey"))
    .Build();

FunctionCallingStepwisePlanner planner = new();

FunctionCallingStepwisePlannerResult result = await planner.ExecuteAsync(kernel, "Check current UTC time and return current weather in Boston city.");

ChatHistory generatedPlan = result.ChatHistory;

新しいアプローチ:

Kernel kernel = Kernel
    .CreateBuilder()
    .AddOpenAIChatCompletion("gpt-4", Environment.GetEnvironmentVariable("OpenAI__ApiKey"))
    .Build();

IChatCompletionService chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();

ChatHistory chatHistory = [];
chatHistory.AddUserMessage("Check current UTC time and return current weather in Boston city.");

OpenAIPromptExecutionSettings executionSettings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };

await chatCompletionService.GetChatMessageContentAsync(chatHistory, executionSettings, kernel);

ChatHistory generatedPlan = chatHistory;

新しいプランの実行

次のコードは、 FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()を使用して自動関数呼び出しで新しいプランを実行する方法を示しています。 この方法は、計画手順なしで結果のみが必要な場合に便利です。 この場合、 Kernel オブジェクトを使用して、 InvokePromptAsync メソッドに目標を渡すことができます。 プランの実行結果は、 FunctionResult オブジェクトに配置されます。

古いアプローチ:

Kernel kernel = Kernel
    .CreateBuilder()
    .AddOpenAIChatCompletion("gpt-4", Environment.GetEnvironmentVariable("OpenAI__ApiKey"))
    .Build();

FunctionCallingStepwisePlanner planner = new();

FunctionCallingStepwisePlannerResult result = await planner.ExecuteAsync(kernel, "Check current UTC time and return current weather in Boston city.");

string planResult = result.FinalAnswer;

新しいアプローチ:

Kernel kernel = Kernel
    .CreateBuilder()
    .AddOpenAIChatCompletion("gpt-4", Environment.GetEnvironmentVariable("OpenAI__ApiKey"))
    .Build();

OpenAIPromptExecutionSettings executionSettings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };

FunctionResult result = await kernel.InvokePromptAsync("Check current UTC time and return current weather in Boston city.", new(executionSettings));

string planResult = result.ToString();

既存のプランの実行

次のコードは、 FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()を使用して自動関数呼び出しで既存のプランを実行する方法を示しています。 このアプローチは、 ChatHistory が既に存在し (キャッシュに格納されている場合など)、もう一度再実行し、最終的な結果を AI モデルで提供する必要がある場合に便利です。

古いアプローチ:

Kernel kernel = Kernel
    .CreateBuilder()
    .AddOpenAIChatCompletion("gpt-4", Environment.GetEnvironmentVariable("OpenAI__ApiKey"))
    .Build();

FunctionCallingStepwisePlanner planner = new();
ChatHistory existingPlan = GetExistingPlan(); // plan can be stored in database  or cache for reusability.

FunctionCallingStepwisePlannerResult result = await planner.ExecuteAsync(kernel, "Check current UTC time and return current weather in Boston city.", existingPlan);

string planResult = result.FinalAnswer;

新しいアプローチ:

Kernel kernel = Kernel
    .CreateBuilder()
    .AddOpenAIChatCompletion("gpt-4", Environment.GetEnvironmentVariable("OpenAI__ApiKey"))
    .Build();

IChatCompletionService chatCompletionService = kernel.GetRequiredService<IChatCompletionService>();

ChatHistory existingPlan = GetExistingPlan(); // plan can be stored in database or cache for reusability.

OpenAIPromptExecutionSettings executionSettings = new() { FunctionChoiceBehavior = FunctionChoiceBehavior.Auto() };

ChatMessageContent result = await chatCompletionService.GetChatMessageContentAsync(existingPlan, executionSettings, kernel);

string planResult = result.Content;

上記のコード スニペットは、Stepwise Planner を使用して自動関数呼び出しを使用するコードを移行する方法を示しています。 チャットの完了 関数呼び出しの詳細についてはを参照してください。