Optymalizowanie monitów dotyczących modelu językowego

Ukończone

Monity to wskazówki konwersacyjne, które dają duże modele językowe (LLM), kształtowanie odpowiedzi na podstawie zapytań lub instrukcji. Możesz na przykład monitować maszyny LLM o przekonwertowanie zdania z języka angielskiego na francuski lub wygenerowanie podsumowania tekstu.

W poprzedniej lekcji utworzono monit jako ciąg wejściowy:

    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?";

Monitowanie wiąże się z tworzeniem przejrzystych, rozbudowanych instrukcji kontekstowych, aby pokierować modelem w celu wygenerowania żądanej odpowiedzi. Aby utworzyć skuteczny monit, precyzja i jasność są kluczowe. Może być konieczne eksperymentowanie i dostosowanie monitów w celu uzyskania dokładnych wyników.

Porady dotyczące tworzenia monitów

  • Określone dane wejściowe dają określone dane wyjściowe: moduły LLM reagują na podstawie danych wejściowych, które otrzymują. Tworzenie przejrzystych i konkretnych monitów ma kluczowe znaczenie dla uzyskania żądanych danych wyjściowych.

  • Eksperymentowanie jest kluczem: może być konieczne iterowanie i eksperymentowanie z różnymi monitami, aby zrozumieć, jak model interpretuje i generuje odpowiedzi. Małe poprawki mogą prowadzić do znaczących zmian w wynikach.

  • Kontekst ma znaczenie: LLMs uwzględniają kontekst podany w wierszu polecenia. Należy upewnić się, że kontekst jest dobrze zdefiniowany i odpowiedni, aby uzyskać dokładne i spójne odpowiedzi.

  • Obsługa niejednoznaczności: pamiętaj, że llMs mogą zmagać się z niejednoznacznymi zapytaniami. Podaj kontekst lub strukturę, aby uniknąć niejasnych lub nieoczekiwanych wyników.

  • Długość monitów: Podczas gdy llMs mogą przetwarzać zarówno krótkie, jak i długie monity, należy wziąć pod uwagę kompromis między zwięzłością a jasnością. Eksperymentowanie z długością monitu może pomóc w znalezieniu optymalnej równowagi.

Tworzenie szablonów monitów

Zestaw SDK jądra semantycznego obsługuje język tworzenia szablonów, który umożliwia używanie wyrażeń i zmiennych w monitach języka naturalnego. Oznacza to, że można utworzyć monity wielokrotnego użytku z różnymi parametrami wejściowymi. Aby osadzić wyrażenia w monitach, język tworzenia szablonów używa nawiasów klamrowych {{...}}.

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

W tym przykładzie zmienna history jest przywoływane w wierszu polecenia, oznaczona symbolem $ . Po wywołaniu monitu zmienna history jest zastępowana rzeczywistą wartością podaną w słowniku KernelArguments . Dzięki temu można tworzyć monity, które mogą być dynamicznie wypełniane różnymi danymi wejściowymi.

Oto przykładowe dane wyjściowe:

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.

Tworzenie monitów wielokrotnego użytku jest szczególnie przydatne, gdy trzeba wykonać to samo zadanie z różnymi danymi wejściowymi. W następnym ćwiczeniu przećwiczyć będzie tworzenie własnych monitów wielokrotnego użytku przy użyciu zestawu SDK jądra semantycznego.