Пошаговое руководство по миграции планировщика
В этом руководстве по миграции показано, как перейти с 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;
В приведенных выше фрагментах кода показано, как перенести код, использующий пошаговую планировщику для использования автоматического вызова функций. Дополнительные сведения о вызове функций с завершением чата.