Compartir a través de


Guía de migración de Planner paso a paso

En esta guía de migración se muestra cómo migrar de FunctionCallingStepwisePlanner a un nuevo enfoque recomendado para la capacidad de planeación: llamada a funciones automáticas. El nuevo enfoque genera los resultados de forma más confiable y usa menos tokens en comparación con FunctionCallingStepwisePlanner.

Generación de planes

El código siguiente muestra cómo generar un nuevo plan con llamadas automáticas a funciones mediante FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(). Después de enviar una solicitud al modelo de IA, el plan se ubicará en el objeto donde ChatHistory un mensaje con Assistant rol contendrá una lista de funciones (pasos) a las que llamar.

Enfoque antiguo:

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;

Nuevo enfoque:

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;

Ejecución del nuevo plan

El código siguiente muestra cómo ejecutar un nuevo plan con llamadas automáticas a funciones mediante FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(). Este enfoque es útil cuando solo se necesita el resultado sin pasos de plan. En este caso, Kernel el objeto se puede usar para pasar un objetivo al InvokePromptAsync método . El resultado de la ejecución del plan se ubicará en el FunctionResult objeto .

Enfoque antiguo:

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;

Nuevo enfoque:

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();

Ejecución del plan existente

En el código siguiente se muestra cómo ejecutar un plan existente con llamadas automáticas a funciones mediante FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(). Este enfoque es útil cuando ChatHistory ya está presente (por ejemplo, almacenado en caché) y se debe volver a ejecutar y el resultado final debe proporcionarse mediante el modelo de IA.

Enfoque antiguo:

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;

Nuevo enfoque:

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;

Los fragmentos de código anteriores muestran cómo migrar el código que usa Stepwise Planner para usar llamadas automáticas a funciones. Obtenga más información sobre Las llamadas a funciones con finalización del chat.