Ottimizzare i prompt del modello linguistico

Completato

I prompt sono segnali di conversazione che si forniscono ai modelli linguistici di grandi dimensioni (LLM), modellando le risposte in base alle proprie query o istruzioni. Ad esempio, è possibile chiedere agli LLM di convertire una frase dall'inglese al francese o di generare il riassunto di un testo.

Nell'unità precedente, si è creato il prompt come stringa di input:

    string input = @"I'm a vegan in search of new recipes. I love spicy food! 
    Can you give me a list of breakfast recipes that are vegan friendly?";

Il prompt comporta la creazione di istruzioni chiare e dettagliate sul contesto, per guidare il modello a generare la risposta desiderata. Per creare un prompt efficace, la precisione e la chiarezza sono fondamentali. Si potrebbe dover sperimentare e modificare i prompt per ottenere risultati accurati.

Suggerimenti per la creazione di prompt

  • Input specifici producono output specifici: Gli LLM rispondono in base all'input ricevuto. Creare prompt chiari e specifici è fondamentale per ottenere l'output desiderato.

  • La sperimentazione è la chiave: Si potrebbe dover eseguire l'iterazione e sperimentare diversi prompt per comprendere come il modello interpreta e genera risposte. Piccole modifiche possono portare a cambiamenti significativi nei risultati.

  • Il contesto è importante: Gli LLM prendono in considerazione il contesto fornito nel prompt. È necessario assicurarsi che il contesto sia ben definito e pertinente per ottenere risposte accurate e coerenti.

  • Gestire l'ambiguità: Si tenga presente che gli LLM possono incontrare difficoltà in caso di query ambigue. Per evitare risultati vaghi o inaspettati, fornire un contesto o una struttura.

  • Lunghezza dei prompt: Sebbene gli LLM siano in grado di elaborare prompt sia brevi che lunghi, si dovrebbe prendere in considerazione un compromesso tra brevità e chiarezza. Testare la lunghezza dei prompt consente di trovare un equilibrio ottimale.

Creare modelli di prompt

L'SDK Semantic Kernel supporta un linguaggio di creazione modelli che consente di usare espressioni e variabili nelle richieste in linguaggio naturale. Ciò significa che è possibile creare richieste riutilizzabili con parametri di input diversi. Per incorporare espressioni nei prompt, il linguaggio della creazione di modelli usa parentesi {{...}}.

using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.Plugins.Core;

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

builder.Plugins.AddFromType<ConversationSummaryPlugin>();
var kernel = builder.Build();

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(prompt, 
    new KernelArguments() {{ "history", history }});

Console.WriteLine(result);

In questo esempio viene fatto riferimento alla variabile history nella richiesta, indicata dal simbolo $. Quando viene richiamata la richiesta, la variabile history viene sostituita con il valore effettivo fornito nel dizionario KernelArguments. In questo modo è possibile creare richieste che possono essere popolate dinamicamente con input diversi.

Ecco un output di esempio:

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.

La creazione di prompt riutilizzabili è particolarmente utile quando è necessario eseguire la stessa attività con input diversi. Nell'esercizio successivo si proverà a creare richieste riutilizzabili usando l' SDK Semantic Kernel.