Invocar funções automaticamente

Concluído

O SDK do Kernel Semântico dá suporte a um poderoso recurso de chamada de função automática. Habilitar a chamada de função automática permite que o kernel selecione automaticamente quais funções e prompts usar em alguma entrada fornecida. Esse recurso pode ajudá-lo a economizar tempo invocando manualmente funções e prompts e tornar seus aplicativos mais inteligentes.

Para usar a chamada de função automática, você deve usar um modelo do OpenAI que dê suporte a ela. Atualmente, esses modelos incluem modelos GPT-3.5-turbo e GPT-4 que são versão 0613 ou mais recentes.

Para habilitar a chamada de função automática, você deve definir a propriedade ToolCallBehavior do objeto OpenAIPromptExecutionSettings como AutoInvokeKernelFunctions.

Por exemplo, suponha que você tenha alguns plug-ins de ingrediente que dão suporte às seguintes funções:

- `GetIngredients`: Gets a list of the user's available ingredients
- `GetRecipe`: Gets a list of ingredients for a given recipe
- `GetMissingIngredients`: Gets a list of ingredients that are missing from the user's kitchen for a given recipe

Você pode usar o comportamento AutoInvokeKernelFunctions para executar automaticamente uma função com base em um prompt. Por exemplo:

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Connectors.OpenAI;

var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(
    "your-deployment-name",
    "your-endpoint",
    "your-api-key",
    "deployment-model");

kernel.ImportPluginFromType<IngredientsPlugin>();
kernel.ImportPluginFromPromptDirectory("Prompts/IngredientPrompts");

// Set the ToolCallBehavior property
OpenAIPromptExecutionSettings settings = new()
{
    ToolCallBehavior = ToolCallBehavior.AutoInvokeKernelFunctions
};

string prompt = @"What ingredients am I missing from my current list of ingredients 
    to make a recipe for aloo jeera?";

// Use the settings to automatically invoke plugins based on the prompt
var result = await kernel.InvokePromptAsync(prompt, new(settings));

Console.WriteLine(result);

Dependendo dos ingredientes e dos detalhes da função, a saída desse código pode ser semelhante à seguinte resposta:

Based on the list of ingredients for aloo jeera, you are missing the following items:

- Cumin seeds
- Green chilies
- Ginger
- Turmeric powder
- Red chili powder
- Coriander powder
- Fresh coriander leaves
- Salt
- Oil

A chamada de função permite que a IA invoque funções com os parâmetros apropriados na ordem correta. O LLM pode chamar iterativamente funções para atender às necessidades do usuário. Isso é feito por meio de um loop de comentários em que a IA pode chamar uma função, verificar o resultado e decidir o que fazer a seguir.

A configuração AutoInvokeKernelFunctions chama automaticamente os plug-ins necessários para executar o prompt, tornando seu aplicativo dinâmico e robusto com menos código. Esse recurso pode ajudar a criar aplicativos mais complexos que possam lidar com uma variedade de cenários.