Partilhar via


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.