Freigeben über


Schrittweiser Planner-Migrationsleitfaden

In diesem Migrationshandbuch wird gezeigt, wie Sie zu FunctionCallingStepwisePlanner einem neuen empfohlenen Ansatz für die Planung der Funktion – Automatische Funktionsaufrufe – migrieren. Der neue Ansatz erzeugt die Ergebnisse zuverlässiger und verwendet weniger Token im Vergleich zu FunctionCallingStepwisePlanner.

Planen der Generierung

Der folgende Code zeigt, wie sie einen neuen Plan mit Auto Function Calling mithilfe von FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()Auto Function Calling generieren. Nach dem Senden einer Anforderung an das KI-Modell befindet sich der Plan im ChatHistory Objekt, in dem eine Nachricht mit Assistant Rolle eine Liste von Funktionen (Schritten) enthält, die aufgerufen werden sollen.

Alter Ansatz:

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;

Neuer Ansatz:

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;

Ausführung des neuen Plans

Der folgende Code zeigt, wie sie einen neuen Plan mit Auto Function Calling mithilfe von FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()Auto Function Calling ausführen. Dieser Ansatz ist nützlich, wenn nur ergebnisse ohne Planschritte benötigt werden. In diesem Fall kann ein Objekt verwendet werden, Kernel um ein Ziel an die Methode zu InvokePromptAsync übergeben. Das Ergebnis der Planausführung befindet sich im FunctionResult Objekt.

Alter Ansatz:

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;

Neuer Ansatz:

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();

Ausführung des vorhandenen Plans

Im folgenden Code wird gezeigt, wie sie einen vorhandenen Plan mit Auto Function Calling mithilfe von FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()Auto Function Calling ausführen. Dieser Ansatz ist nützlich, wenn ChatHistory er bereits vorhanden ist (z. B. im Cache gespeichert), und es sollte erneut ausgeführt werden, und das Endergebnis sollte vom KI-Modell bereitgestellt werden.

Alter Ansatz:

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;

Neuer Ansatz:

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;

Der folgende Code zeigt, wie Sie mithilfe von function_choice_behavior = FunctionChoiceBehavior.Auto() einen neuen Plan mit Auto Function Calling erstellen können. Nach dem Senden einer Anforderung an das KI-Modell befindet sich der Plan im ChatHistory Objekt, in dem eine Nachricht mit Assistant Rolle eine Liste von Funktionen (Schritten) enthält, die aufgerufen werden sollen.

Alter Ansatz:

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

Neuer Ansatz:

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`.

Ausführung des neuen Plans

Der folgende Code zeigt, wie sie einen neuen Plan mit Auto Function Calling mithilfe von function_choice_behavior = FunctionChoiceBehavior.Auto()Auto Function Calling ausführen. Dieser Ansatz ist nützlich, wenn nur das Ergebnis ohne Planschritte benötigt wird. In diesem Fall kann das Kernel Objekt verwendet werden, um ein Ziel an die invoke_prompt Methode zu übergeben. Das Ergebnis der Planausführung befindet sich in einem FunctionResult Objekt.

Alter Ansatz:

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)

Neuer Ansatz:

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)

Planners waren in SK Java nicht verfügbar. Verwenden Sie den Funktionsaufruf bitte direkt.

Die obigen Codeausschnitte veranschaulichen, wie Sie Ihren Code migrieren, der Stepwise Planner zum Verwenden von Auto Function Calling verwendet. Erfahren Sie mehr über Funktionsaufrufe mit Abschluss des Chats.