Uso de funciones en mensajes

Completado

El lenguaje de plantillas del SDK de Kernel semántico permite crear avisos dinámicos. El lenguaje admite tres características:

  • Uso de variables.
  • Llamar a funciones externas.
  • Pasar argumentos a funciones.

Para insertar expresiones en las indicaciones, el lenguaje de plantillas usa corchetes {{...}} y las variables se indican mediante un signo de dólar $. Las funciones a las que llama deben formar parte de los complementos que cargue en el kernel. Por ejemplo, si desea llamar a una función dentro de un símbolo del sistema, puede usar la sintaxis siguiente:

{{plugin.functionName $argument}}

Debe asegurarse de que el complemento que contiene la función se carga en el kernel antes de llamar a la función en el símbolo del sistema. Las funciones de anidamiento dentro de avisos pueden ayudarle a reducir el número de tokens usados en un símbolo del sistema o proporcionar contexto adicional al modelo para obtener resultados mejorados.

Supongamos que tiene un mensaje para recomendar una lista de recetas basadas en alguna información de usuario:

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

Puede llamar a una función para resumir la información general larga del usuario antes de proporcionar una lista de recetas. Este es un ejemplo de cómo puede usar funciones en avisos:

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

En este ejemplo, la solicitud llama ConversationSummaryPlugin.SummarizeConversation a la entrada proporcionada $history. La función toma la información general del usuario y la resume, y el resultado se usa para recuperar la lista de recetas pertinentes. El complemento ConversationSummaryPlugin debe agregarse al generador de kernels para que el mensaje funcione correctamente.

Esta es la salida del ejemplo:

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.

El uso de variables y funciones en solicitudes permite crear plantillas reutilizables que se pueden rellenar dinámicamente con diferentes entradas. La reutilización de solicitudes es especialmente útil cuando se necesita realizar la misma tarea con entradas diferentes o proporcionar contexto al modelo para obtener resultados mejorados.