次の方法で共有


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;

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

古いアプローチ:

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.planners.function_calling_stepwise_planner import (
    FunctionCallingStepwisePlanner, 
    FunctionCallingStepwisePlannerResult,
)

kernel = Kernel()
kernel.add_service(AzureChatCompletion())

# Add any plugins to the kernel that the planner will leverage
kernel.add_plugins(...)

planner = FunctionCallingStepwisePlanner(service_id="service_id")

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

generated_plan = result.chat_history

新しいアプローチ:

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai import FunctionChoiceBehavior
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion, AzureChatPromptExecutionSettings
from semantic_kernel.contents import ChatHistory

chat_completion_service = AzureChatCompletion()

chat_history = ChatHistory()
chat_hitory.add_user_message("Check current UTC time and return current weather in Boston city.")

request_settings = AzureChatPromptExecutionSettings(function_choice_behavior=FunctionChoiceBehavior.Auto())

# Add any plugins to the kernel that the planner will leverage
kernel = Kernel()
kernel.add_plugins(...)

response = await chat_completion_service.get_chat_message_content(
    chat_history=chat_history,
    settings=request_settings,
    kernel=kernel,
)
print(response)

# The generated plan is now contained inside of `chat_history`.

新しいプランの実行

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

古いアプローチ:

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion
from semantic_kernel.planners.function_calling_stepwise_planner import (
    FunctionCallingStepwisePlanner, 
    FunctionCallingStepwisePlannerResult,
)

kernel = Kernel()
kernel.add_service(AzureChatCompletion())

# Add any plugins to the kernel that the planner will leverage
kernel.add_plugins(...)

planner = FunctionCallingStepwisePlanner(service_id="service_id")

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

print(result.final_answer)

新しいアプローチ:

from semantic_kernel import Kernel
from semantic_kernel.connectors.ai import FunctionChoiceBehavior
from semantic_kernel.connectors.ai.open_ai import AzureChatCompletion, AzureChatPromptExecutionSettings
from semantic_kernel.contents import ChatHistory
from semantic_kernel.functions import KernelArguments

kernel = Kernel()
kernel.add_service(AzureChatCompletion())
# Add any plugins to the kernel that the planner will leverage
kernel.add_plugins(...)

chat_history = ChatHistory()
chat_hitory.add_user_message("Check current UTC time and return current weather in Boston city.")

request_settings = AzureChatPromptExecutionSettings(function_choice_behavior=FunctionChoiceBehavior.Auto())

response = await kernel.invoke_prompt(
    "Check current UTC time and return current weather in Boston city.", 
    arguments=KernelArguments(settings=request_settings),
)
print(response)

プランナーは SK Java では使用できませんでした。 関数呼び出しを直接使用してください。

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