Compartilhar via


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.