Поделиться через


Пошаговое руководство по миграции планировщика

В этом руководстве по миграции показано, как перейти с FunctionCallingStepwisePlanner нового рекомендуемого подхода к планированию функции автоматического вызова функций. Новый подход создает результаты более надежно и использует меньше маркеров по сравнению с FunctionCallingStepwisePlanner.

Создание плана

В следующем коде показано, как создать новый план с помощью FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()автоматического вызова функций. После отправки запроса в модель ИИ план будет находиться в ChatHistory объекте, где сообщение с Assistant ролью будет содержать список функций (шагов) для вызова.

Старый подход:

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;

Новый подход:

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;

Выполнение нового плана

В следующем коде показано, как выполнить новый план с помощью FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()автоматического вызова функции. Этот подход полезен, если требуется только результат без шагов плана. В этом случае Kernel объект можно использовать для передачи цели методу InvokePromptAsync . Результат выполнения плана будет расположен в FunctionResult объекте.

Старый подход:

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;

Новый подход:

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

Выполнение существующего плана

В следующем коде показано, как выполнить существующий план с помощью FunctionChoiceBehavior = FunctionChoiceBehavior.Auto()автоматического вызова функции. Этот подход полезен, если ChatHistory он уже присутствует (например, хранящийся в кэше), и он должен быть повторно выполнен и окончательный результат должен быть предоставлен моделью ИИ.

Старый подход:

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;

Новый подход:

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;

В приведенных выше фрагментах кода показано, как перенести код, использующий пошаговую планировщику для использования автоматического вызова функций. Дополнительные сведения о вызове функций с завершением чата.