Použití funkcí ve výzev

Dokončeno

Jazyk šablony sady SDK sémantického jádra umožňuje vytvářet dynamické výzvy. Jazyk podporuje tři funkce:

  • Použití proměnných
  • Volání externích funkcí
  • Předávání argumentů funkcím

K vložení výrazů do výzev používá jazyk šablony složené závorky {{...}} a proměnné jsou označeny znakem $dolaru . Funkce, které voláte, musí být součástí modulů plug-in, které načtete do jádra. Pokud například chcete volat funkci v rámci výzvy, můžete použít následující syntaxi:

{{plugin.functionName $argument}}

Před voláním funkce ve výzvě musíte zajistit, aby se modul plug-in obsahující funkci načetl do jádra. Vnoření funkcí v rámci výzev vám může pomoct snížit počet tokenů použitých v příkazovém řádku nebo poskytnout další kontext modelu, aby se zlepšily výsledky.

Předpokládejme, že máte výzvu k doporučení seznamu receptů na základě některých informací o uživateli:

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

Před poskytnutím seznamu receptů můžete volat funkci, která shrnuje zdlouhavé informace o pozadí uživatele. Tady je příklad použití funkcí ve výzev:

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

V tomto příkladu výzva volá ConversationSummaryPlugin.SummarizeConversation zadaný $history vstup. Funkce přebírá informace o uživateli na pozadí a shrnuje je a výsledek se používá k načtení seznamu relevantních receptů. Modul ConversationSummaryPlugin plug-in musí být přidán do tvůrce jádra, aby výzva správně fungovala.

Tady je příklad výstupu:

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.

Použití proměnných a funkcí v výzev umožňuje vytvářet opakovaně použitelné šablony, které se dají dynamicky naplnit různými vstupy. Opakované používání výzev je zvlášť užitečné, když potřebujete provést stejnou úlohu s různými vstupy nebo poskytnout kontext modelu, aby se zlepšily výsledky.