Guia de migração do Stepwise Planner
Este guia de migração mostra como migrar de uma nova abordagem recomendada para o recurso de FunctionCallingStepwisePlanner
planejamento - Auto Function Calling. A nova abordagem produz os resultados de forma mais confiável e usa menos tokens em comparação com o FunctionCallingStepwisePlanner
.
Geração de planos
O código a seguir mostra como gerar um novo plano com Auto Function Calling usando FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
. Depois de enviar uma solicitação para o modelo de IA, o plano será localizado no ChatHistory
objeto onde uma mensagem com Assistant
função conterá uma lista de funções (etapas) para chamar.
Abordagem antiga:
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;
Nova abordagem:
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;
Execução do novo plano
O código a seguir mostra como executar um novo plano com Auto Function Calling usando FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
. Esta abordagem é útil quando apenas o resultado é necessário sem etapas do plano. Nesse caso, Kernel
o objeto pode ser usado para passar um objetivo para o InvokePromptAsync
método. O resultado da execução do plano será localizado no FunctionResult
objeto.
Abordagem antiga:
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;
Nova abordagem:
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();
Execução do plano existente
O código a seguir mostra como executar um plano existente com Auto Function Calling usando FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
o . Essa abordagem é útil quando ChatHistory
já está presente (por exemplo, armazenada em cache) e deve ser executada novamente e o resultado final deve ser fornecido pelo modelo de IA.
Abordagem antiga:
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;
Nova abordagem:
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;
Os trechos de código acima demonstram como migrar seu código que usa o Stepwise Planner para usar a chamada de função automática. Saiba mais sobre a Chamada de função com a conclusão do chat.