Использование функций в запросах
Язык шаблонов пакета SDK для семантического ядра позволяет создавать динамические запросы. Язык поддерживает три функции:
- Использование переменных.
- Вызов внешних функций.
- Передача аргументов в функции.
Для внедрения выражений в запросы язык шаблонов использует фигурные скобки {{...}}
и переменные, обозначаются знаком $
доллара. Вызываемые функции должны быть частью подключаемых модулей, загруженных в ядро. Например, если вы хотите вызвать функцию в запросе, можно использовать следующий синтаксис:
{{plugin.functionName $argument}}
Перед вызовом функции необходимо убедиться, что подключаемый модуль, содержащий функцию, загружается в ядро. Вложенные функции в запросах могут помочь уменьшить количество маркеров, используемых в запросе, или предоставить дополнительный контекст модели для улучшения результатов.
Предположим, у вас есть запрос на рекомендации по списку рецептов на основе некоторых сведений о пользователе:
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);
Вы можете вызвать функцию, чтобы суммировать длинную фоновую информацию пользователя, прежде чем предоставлять список рецептов. Ниже приведен пример использования функций в запросах:
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);
В этом примере запрос вызывает ConversationSummaryPlugin.SummarizeConversation
предоставленные $history
входные данные. Функция принимает фоновую информацию пользователя и суммирует его, а результат используется для получения списка соответствующих рецептов. Подключаемый ConversationSummaryPlugin
модуль должен быть добавлен в построителе ядра, чтобы запрос работал правильно.
Ниже приведен пример выходных данных:
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.
Использование переменных и функций в запросах позволяет создавать повторно используемые шаблоны, которые можно динамически заполнять различными входными данными. Повторное использование запросов особенно полезно, если необходимо выполнить одну и ту же задачу с различными входными данными или предоставить контекст модели для улучшения результатов.