Condividi tramite


Guida alla migrazione di Planner in modo dettagliato

Questa guida alla migrazione illustra come eseguire la migrazione da FunctionCallingStepwisePlanner a un nuovo approccio consigliato per la pianificazione della funzionalità - Chiamata automatica delle funzioni. Il nuovo approccio produce i risultati in modo più affidabile e usa meno token rispetto a FunctionCallingStepwisePlanner.

Generazione di piani

Il codice seguente illustra come generare un nuovo piano con chiamata automatica di funzioni tramite FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(). Dopo l'invio di una richiesta al modello di intelligenza artificiale, il piano si troverà nell'oggetto ChatHistory in cui un messaggio con Assistant ruolo conterrà un elenco di funzioni (passaggi) da chiamare.

Approccio precedente:

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;

Nuovo approccio:

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;

Esecuzione del nuovo piano

Il codice seguente illustra come eseguire un nuovo piano con Chiamata automatica di funzioni tramite FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(). Questo approccio è utile quando è necessario solo il risultato senza passaggi di piano. In questo caso, Kernel l'oggetto può essere usato per passare un obiettivo al InvokePromptAsync metodo . Il risultato dell'esecuzione del piano si troverà nell'oggetto FunctionResult .

Approccio precedente:

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;

Nuovo approccio:

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

Esecuzione del piano esistente

Il codice seguente illustra come eseguire un piano esistente con Chiamata automatica di funzioni tramite FunctionChoiceBehavior = FunctionChoiceBehavior.Auto(). Questo approccio è utile quando ChatHistory è già presente (ad esempio archiviato nella cache) e deve essere nuovamente eseguito e il risultato finale deve essere fornito dal modello di intelligenza artificiale.

Approccio precedente:

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;

Nuovo approccio:

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;

I frammenti di codice precedenti illustrano come eseguire la migrazione del codice che usa Stepwise Planner per usare la chiamata automatica delle funzioni. Altre informazioni su Chiamata di funzione con il completamento della chat.