Przewodnik migracji narzędzia Planner krok po kroku
W tym przewodniku migracji pokazano, jak przeprowadzić migrację z FunctionCallingStepwisePlanner
do nowego zalecanego podejścia do planowania możliwości — automatyczne wywoływanie funkcji. Nowe podejście daje wyniki bardziej niezawodnie i używa mniejszej liczby tokenów w porównaniu z FunctionCallingStepwisePlanner
.
Generowanie planu
Poniższy kod pokazuje, jak wygenerować nowy plan za pomocą funkcji automatycznego wywoływania przy użyciu polecenia FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
. Po wysłaniu żądania do modelu sztucznej inteligencji plan będzie znajdować się w obiekcie, w ChatHistory
którym komunikat z Assistant
rolą będzie zawierać listę funkcji (kroków) do wywołania.
Stare podejście:
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;
Nowe podejście:
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;
Wykonanie nowego planu
Poniższy kod pokazuje, jak wykonać nowy plan za pomocą funkcji automatycznego wywoływania przy użyciu polecenia FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
. Takie podejście jest przydatne, gdy tylko wynik jest potrzebny bez kroków planu. W takim przypadku Kernel
obiekt może służyć do przekazania celu do InvokePromptAsync
metody . Wynik wykonania planu będzie znajdować się w FunctionResult
obiekcie.
Stare podejście:
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;
Nowe podejście:
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();
Wykonanie istniejącego planu
Poniższy kod pokazuje, jak wykonać istniejący plan za pomocą funkcji automatycznego wywoływania przy użyciu polecenia FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
. Takie podejście jest przydatne, gdy ChatHistory
jest już obecne (np. przechowywane w pamięci podręcznej) i powinno zostać ponownie wykonane, a końcowy wynik powinien zostać dostarczony przez model sztucznej inteligencji.
Stare podejście:
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;
Nowe podejście:
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;
Powyższe fragmenty kodu pokazują, jak przeprowadzić migrację kodu, który używa narzędzia Stepwise Planner do używania funkcji automatycznego wywoływania. Dowiedz się więcej na temat wywoływania funkcji z ukończeniem czatu.