Usar as funções nos prompts

Concluído

A linguagem de modelagem do SDK do Kernel Semântico permite que você crie prompts dinâmicos. A linguagem dá suporte a três recursos:

  • Usar variáveis.
  • Chamar as funções externas.
  • Transmitir argumentos para as funções.

Para inserir as expressões nos seus prompts, a linguagem de modelagem usa colchetes {{...}} e as variáveis são indicadas por um sinal de dólar $. As funções que você chama devem fazer parte dos plug-ins que você carrega no kernel. Por exemplo, se você quiser chamar uma função em um prompt, poderá usar a seguinte sintaxe:

{{plugin.functionName $argument}}

Você deve garantir que o plug-in que contém a função seja carregado no kernel antes de você chamar a função no prompt. Aninhar funções nos prompts pode ajudá-lo a reduzir o número de tokens usados em um prompt ou fornecer contexto adicional ao modelo para melhorar os resultados.

Suponha que você tenha um prompt para recomendar uma lista de receitas com base em algumas informações do usuário:

string history = @"In the heart of my bustling kitchen, I have embraced the challenge 
    of satisfying my family's diverse taste buds and navigating their unique tastes. 
    With a mix of picky eaters and allergies, my culinary journey revolves around 
    exploring a plethora of vegetarian recipes.

    One of my kids is a picky eater with an aversion to anything green, while another 
    has a peanut allergy that adds an extra layer of complexity to meal planning. 
    Armed with creativity and a passion for wholesome cooking, I've embarked on a 
    flavorful adventure, discovering plant-based dishes that not only please the 
    picky palates but are also heathy and delicious.";

string prompt = @"This is some information about the user's background: {{$history}}
    Given this user's background, provide a list of relevant recipes.";

var result = await kernel.InvokePromptAsync(suggestRecipes, new() { "history", history });
Console.WriteLine(result);

Você poderia chamar uma função para resumir as longas informações básicas do usuário antes de fornecer uma lista de receitas. Aqui está um exemplo de como você pode usar funções nos prompts:

 kernel.ImportPluginFromType<ConversationSummaryPlugin>();

string prompt = @"User information: 
    {{ConversationSummaryPlugin.SummarizeConversation $history}}

    Given this user's background information, provide a list of relevant recipes.";

var result = await kernel.InvokePromptAsync(suggestRecipes, new() { "history", history });
Console.WriteLine(result);

Neste exemplo, as chamadas de prompt ConversationSummaryPlugin.SummarizeConversation na entrada $history fornecida. A função usa as informações em segundo plano do usuário e a resume, e o resultado é usado para recuperar a lista das receitas relevantes. O plug-in ConversationSummaryPlugin deve ser adicionado ao construtor do kernel para que o prompt funcione corretamente.

Veja a saída de exemplo:

1. Lentil and vegetable soup - a hearty, filling soup that is perfect for a cold day. This recipe is vegetarian and can easily be adapted to accommodate allergies.

2. Cauliflower "steaks" - a delicious and healthy main course that is sure to satisfy even the pickiest of eaters. This recipe is vegetarian and can easily be made vegan.

3. Quinoa salad with roasted vegetables - a healthy and filling salad that is perfect for any occasion. This recipe is vegetarian and can easily be adapted to accommodate allergies.

4. Peanut-free pad Thai - a classic dish made without peanut sauce, perfect for those with peanut allergies. This recipe is vegetarian and can easily be made vegan.

5. Black bean and sweet potato enchiladas - a delicious and healthy twist on traditional enchiladas. This recipe is vegetarian and can easily be made vegan.

O uso de variáveis e funções em solicitações permite criar modelos reutilizáveis que podem ser preenchidos dinamicamente com entradas diferentes. A reutilização de solicitações é especialmente útil quando você precisa executar a mesma tarefa com entradas diferentes ou fornecer contexto ao modelo para resultados aprimorados.