Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье вы исследуете основные концепции инженерии подсказок. Многие модели ИИ основаны на запросах, что означает, что они реагируют на текст ввода пользователем ( запрос) с ответом, созданным прогнозными алгоритмами ( завершением). Новые модели также часто поддерживают завершение в формате чата с сообщениями на основе ролей (система, пользователь, помощник) и истории чатов, чтобы сохранить беседы.
Работа с подсказками
Рассмотрим этот пример создания текста, в котором запрос — входные данные пользователя и завершение — это выходные данные модели:
Запрос: "Президент, который служил самым коротким сроком, был "
Завершение: «Педро Ласкурейн».
Завершение выглядит правильным, но что если ваше приложение должно помочь студентам, изучающим историю США? 45-минутный срок Педро Ласкурена является самым коротким сроком для любого президента, но он служил президентом Мексики. Студенты истории США, вероятно, ищут "Уильям Генри Харрисон" Очевидно, что приложение может быть более полезным для своих предполагаемых пользователей, если вы дали ему определенный контекст.
Инженерия подсказок добавляет контекст к запросу, предоставляя инструкции, примеры и подсказки, помогающие модели создавать более качественные завершения.
Модели, поддерживающие создание текста, часто не требуют определенного формата, но вы должны упорядочить запросы, поэтому ясно, что такое инструкция и пример. Модели, поддерживающие приложения на основе чата, используют три роли для упорядочивания завершений: системная роль, управляющая чатом, роль пользователя для представления входных данных пользователей и роль помощника для реагирования на пользователей. Разделите подсказки на сообщения для каждого участника.
- Системные сообщения предоставляют инструкции по модели помощника. Запрос может иметь только одно системное сообщение, и оно должно быть первым сообщением.
- Сообщения пользователей включают подсказки от пользователя и показывают примеры, исторические подсказки или содержат инструкции для помощника. Пример завершения чата должен иметь по крайней мере одно сообщение пользователя.
- Сообщения помощника показывают примеры или исторические завершения и должны содержать ответ на предыдущее сообщение пользователя. Сообщения помощника не обязательны, но если вы их включаете, необходимо связать их с пользовательскими сообщениями, чтобы создать пример.
Применяйте инструкции для улучшения выполнения
Инструкция — это текст, который сообщает модели, как реагировать. Инструкция может быть директивой или императивом:
- Директивы говорят модели о том, как вести себя, но не являются простыми командами — думайте о настройке характеров для импровизирующего актера: "Вы помогаете учащимся узнать об истории США, поэтому вы говорите о США, пока они специально не спросят о других странах".
- Императивы являются однозначными командами для выполнения модели. "Перевод в Tagalog:"
Директивы являются более открытыми и гибкими, чем императивы:
- В одной инструкции можно объединить несколько директив.
- Инструкции обычно лучше работают при их использовании с примерами. Тем не менее, поскольку императивы являются однозначной командой, модели не нуждаются в примерах для их понимания (хотя вы можете использовать пример для отображения модели форматирования ответов). Так как директива не сообщает модели точно, что делать, каждый пример может помочь модели работать лучше.
- Обычно лучше разбить сложную инструкцию на ряд шагов, которые можно сделать с последовательностью директив. Вы также должны сообщить модели выводить результат каждого шага, чтобы можно было легко вносить детализированные корректировки. Несмотря на то что вы можете разбить инструкцию на шаги самостоятельно, проще просто сообщить модели, чтобы сделать это, и вывести результат каждого шага. Этот подход называется цепочкой размышлений.
Основное и вспомогательное содержимое добавляют контекст
Вы можете предоставить содержимое, чтобы добавить дополнительный контекст в инструкции.
Основное содержимое — это текст, который требуется обработать модель с помощью инструкции. Независимо от того, какие действия предполагает инструкция, модель будет выполнять их на основном содержимом для создания результата.
Вспомогательное содержимое — это текст, на который ссылается инструкция, но не целевой объект инструкции. Модель использует вспомогательное содержимое для выполнения инструкции, что означает, что вспомогательное содержимое также появляется в завершениях, как правило, в виде какой-либо структуры (например, в заголовках или метках столбцов).
Используйте метки в учебном контенте, чтобы помочь модели понять, как использовать его с инструкцией. Не беспокойтесь слишком много о точности. Метки не должны соответствовать инструкциям именно потому, что модель будет обрабатывать такие вещи, как форма слова и заглавная буква.
Предположим, вы используете инструкцию "Суммирование президентских достижений США" для создания списка. Модель может организовать и упорядочить это различными способами. Но что делать, если вы хотите, чтобы список группировать достижения по определенному набору категорий? Используйте вспомогательное содержимое, чтобы добавить эти сведения в инструкцию.
Настройте инструкцию так, чтобы модель группировала по категориям, и добавьте вспомогательное содержимое, уточняющее эти категории.
prompt = """
Instructions: Summarize US Presidential accomplishments, grouped by category.
Categories: Domestic Policy, US Economy, Foreign Affairs, Space Exploration.
Accomplishments: 'George Washington
- First president of the United States.
- First president to have been a military veteran.
- First president to be elected to a second term in office.
- Received votes from every presidential elector in an election.
- Filled the entire body of the United States federal judges; including the Supreme Court.
- First president to be declared an honorary citizen of a foreign country, and an honorary citizen of France.
John Adams ...' ///Text truncated
""";
Использование примеров для руководства по модели
Примером является текст, показывающий модель реагирования путем предоставления примера входных данных пользователя и выходных данных модели. В модели используются примеры для определения того, что следует включить в результаты. Примеры могут поступать либо до, либо после инструкций в инженерном запросе, но они не должны перемежаться.
Пример начинается с подсказки и может дополнительно включать завершение. Завершение в примере не обязательно должно включать буквальный ответ — оно может просто содержать отформатированное слово, первый пункт в неупорядоченном списке или что-то подобное, чтобы указать, как каждое завершение должно начинаться.
Примеры классифицируются как нулевое обучение или обучение с малым количеством примеров на основе того, содержат ли они дословные завершения.
- Примеры обучения без предварительной подготовки включают подсказку без дословного завершения. Этот подход проверяет ответы модели, не предоставляя пример выходных данных. Запросы нулевого снимка могут иметь завершение, включающее подсказки, например, указывая, что модель должна выводить упорядоченный список, включая "1". в качестве завершения.
- Примеры обучения с ограниченным числом примеров включают несколько пар запросов с дословными завершениями. Обучение с небольшим количеством данных (few-shot learning) может изменить поведение модели, расширяя её существующие знания.
Понимание подсказок
Подсказка — это текст, который передает нужную структуру или формат выходных данных. Как и инструкция, подсказка не обрабатывается моделью, как если бы это были входные данные пользователя. Как в примере, подсказка показывает модели, что вы хотите, вместо того чтобы говорить ей, что делать. Вы можете добавить столько подсказок, сколько хотите, чтобы вы могли многократно изменить их для достижения желаемого результата. Подсказки используются с инструкцией или примером и должны находиться в конце запроса.
Предположим, вы используете инструкцию для того, чтобы модель создала список президентских достижений по категориям, а также вспомогательное содержимое, указывающее модели, какие категории следует использовать. Вы решаете, что модель будет создавать вложенный список с названием категорий заглавными буквами, с достижениями каждого президента в каждой категории, указанными в одной строке, которая начинается с их имени, с перечислением президентов в хронологическом порядке. После инструкции и вспомогательного содержимого можно добавить три подсказки, чтобы показать модель, как структурировать и форматировать список:
prompt = """
Instructions: Summarize US Presidential accomplishments, grouped by category.
Categories: Domestic Policy, US Economy, Foreign Affairs, Space Exploration.
Accomplishments: George Washington
First president of the United States.
First president to have been a military veteran.
First president to be elected to a second term in office.
First president to receive votes from every presidential elector in an election.
First president to fill the entire body of the United States federal judges; including the Supreme Court.
First president to be declared an honorary citizen of a foreign country, and an honorary citizen of France.
John Adams ... /// Text truncated
DOMESTIC POLICY
- George Washington:
- John Adams:
""";
- ВНУТРЕННЯЯ ПОЛИТИКА показывает, что модель, которую вы хотели бы, чтобы каждая группа начиналась с категории, написанной заглавными буквами.
- - Джордж Вашингтон: показывает модель, чтобы начать каждый раздел с достижениями Джорджа Вашингтона, перечисленных в одной строке.
- - Джон Адамс: показывает модель, в которой необходимо перечислить оставшихся президентов в хронологическом порядке.
Пример запроса с помощью .NET
.NET предоставляет различные средства для запроса и чата с различными моделями ИИ. Использование семантического ядра для подключения к различным моделям и службам ИИ, а также другим пакетам SDK, таким как официальная библиотека OpenAI .NET. Семантический ядро включает средства для создания запросов с разными ролями и поддержания журнала чата, а также многих других функций.
Рассмотрим следующий пример кода.
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
// Create a kernel with OpenAI chat completion
#pragma warning disable SKEXP0010
Kernel kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(
modelId: "phi3:mini",
endpoint: new Uri("http://localhost:11434"),
apiKey: "")
.Build();
var aiChatService = kernel.GetRequiredService<IChatCompletionService>();
var chatHistory = new ChatHistory();
chatHistory.Add(
new ChatMessageContent(AuthorRole.System, "You are a helpful AI Assistant."));
while (true)
{
// Get user prompt and add to chat history
Console.WriteLine("Your prompt:");
chatHistory.Add(new ChatMessageContent(AuthorRole.User, Console.ReadLine()));
// Stream the AI response and add to chat history
Console.WriteLine("AI Response:");
var response = "";
await foreach (var item in
aiChatService.GetStreamingChatMessageContentsAsync(chatHistory))
{
Console.Write(item.Content);
response += item.Content;
}
chatHistory.Add(new ChatMessageContent(AuthorRole.Assistant, response));
Console.WriteLine();
}
Приведенный выше код содержит примеры следующих понятий:
- Создаёт сервис истории чата, чтобы направить модель ИИ для формирования ответов на основе ролей автора.
- Настраивает ИИ с помощью сообщения
AuthorRole.System
. - Принимает ввод пользователя, чтобы позволить различные типы запросов в контексте
AuthorRole.User
. - Асинхронно передает результат работы ИИ, чтобы обеспечить динамичное взаимодействие в чате.
Расширение инженерных методов создания подсказок
Вы также можете повысить эффективность ваших запросов с помощью более продвинутых методов конструирования запросов, которые подробно рассматриваются в отдельных статьях.
- LLMs имеют ограничения ввода токенов, которые ограничивают количество текста, которое можно включить в запрос. Используйте встраивания и решения для векторных баз данных, чтобы уменьшить количество токенов, необходимых для представления данного фрагмента текста.
- LLM-ы не обучаются на ваших данных, если вы не обучаете их самостоятельно, что может быть дорогостоящим и трудоемким. Используйте извлечение с дополненным генерированием (RAG), чтобы сделать ваши данные доступными для LLM без обучения.