Guia de migração do Stepwise Planner
Este guia de FunctionCallingStepwisePlanner
migração mostra como migrar para uma nova abordagem recomendada para o recurso de planejamento - Chamada de Função Automática. 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 a Chamada de Função Automática usando FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
o . Após enviar uma solicitação ao modelo de IA, o plano estará localizado no ChatHistory
objeto onde uma mensagem com Assistant
função conterá uma lista de funções (etapas) a serem chamadas.
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 a Chamada de Função Automática usando FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()
o . Essa abordagem é útil quando apenas o resultado é necessário sem as etapas do plano. Nesse caso, Kernel
o objeto pode ser usado para passar uma meta 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 a Chamada de Função Automática 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 snippets 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.