Предисловие переводчика
Эта статья (точнее, цикл статей) — адаптированный (=обезжиренный) перевод большого исследования “The Prompt Report: A Systematic Survey of Prompt Engineering Techniques” c arxiv.org. Перевод мы выполняли в тандеме с коллегой — Анастасией Тарабакиной. Поскольку мы делаем переводы для начинающих ИТ-переводчиков, многие специализированные термины мы сопроводили английскими вариантами в скобках.
Авторы оригинальной статьи также ведут обновляемый онлайн-глоссарий, в котором собраны ключевые термины промпт-инжиниринга, в том числе и те, которые появились после публикации статьи.
Введение
Статья посвящена промпт-инжинирингу, а точнее — систематизации пока не устоявшейся терминологии и классификации традиционных и новых техник промптинга.
Сразу заметим, что в эту обзорную статью вошли не все техники промптинга — мы сосредоточились на тех, которые легко понять и применить на практике, даже не имея специальных знаний. По этой причине мы ограничимся обсуждением префиксных промптов (prefix prompts), которые широко применяются в работе с современными генеративными моделями.
Префиксный промпт — это начальный фрагмент текста, продолжение которого должна спрогнозировать модель. Промпты с заполнением пропусков в тексте (cloze prompts), унаследованные от ранних моделей типа BERT, в статье не рассматриваются. Кроме того, мы обсудим только «жесткие» техники промптинга (hard prompting), т.е. те, в которых промпт формулируется на естественном языке. Вопросы мягкого промптинга (soft prompts), связанные с дообучением модели и обновлением весов, мы затрагивать не будем. Наконец, техники, обсуждаемые в статье, универсальны, т.е. могут эффективно использоваться для решения разных задач.
В первой части мы обсудим основную терминологию промпт-инжиниринга и базовые текстовые техники промптинга: few-shot и zero-shot техники. Далее речь пойдет о техниках Chain-of-Thought, декомпозиции и ансамблировании промптов (часть 2); о мультиязыковых и мультимодальных техниках (часть 3), а также о промптинге для ИИ-агентов (часть 4). В заключение, мы поговорим о том, как снизить риск галлюцинаций и предотвратить промпт-инъекцию (часть 5).
1. Понятие «Промпт»
Промпт — это инструкция для генеративной модели ИИ, содержащая информацию о желаемом ответе. Например, промпт может быть представлен в виде:
текста («
Составь текст рекламной email-рассылки для аудиторской фирмы
»);изображения (
фото тетрадного листа с примером “10 х 179 =”
);записи видео-встречи с инструкцией («
Выведи основные тезисы встречи
»).
Как правило, в промпте всегда присутствует текстовая составляющая (ожидаемо, языковые модели понимают текст лучше, чем данные из других модальностей). Однако с развитием мультимодальных LLM необходимость текстового компонента в промпте может исчезнуть.
Для создания промптов часто используются шаблоны. Шаблон промпта (prompt template) - это «заготовка», содержащая переменные, которые заменяются данными, обычно текстовыми. При заполнении шаблона данными мы получаем экземпляр промпта (instance of the template). Представим, что перед нами стоит задача анализа тональности постов в социальной сети. Шаблон промпта будет выглядеть так:
Определи, является ли пост “позитивным” или “негативным”: {ПОСТ}.
Далее для каждого поста из датасета создается отдельный экземпляр промпта по шаблону, и все экземпляры отправляются на обработку в модель.
2. Ключевые термины промпт-инжиниринга
2.1 Компоненты промпта
Поскольку в разных исследованиях выделяется разное количество компонентов промпта (и многие из них обозначаются разными терминами), ниже мы приведем наиболее “универсальные” компоненты.
Директива (Directive) — это задача, которую модели необходимо решить. Она может быть представлена в форме инструкции или вопроса. Промпт может состоять только из инструкции, например: “Посоветуй 5 хороших книг
”. Директива также может быть имплицитной. Например, one-shot промпт, предполагающий перевод с английского на испанский, может состоять только из примера перевода: “Night: Noche; Morning: ?
”
Примеры (Examples, Exemplars, Shots) — это образцы выполнения задачи. One-shot промпт выше включает один пример.
Формат выдачи (Output Formatting). Часто пользователю необходимо, чтобы модель представила ответ в определенном формате (CSV, Markdown, XML и др.) Чтобы получить нужный тип файла, добавляется соответствующая инструкция: {ТЕКСТ} Извлеки основные тезисы и сохрани в формате CSV
. Вопрос о том, влияет ли жестко заданный формат на качество выдачи, остается дискуссионным.
Инструкции по стилю (Style Instructions). Помимо требований к способу представления ответа, пользователь может добавить требования к стилю, например: “Рассказ должен быть лаконичным и ясным, без повторов”
Роль (Role, Persona). Уточнение роли повышает вероятность того, что будут соблюдены стилевые требования. Кроме того, заданная роль повышает качество выдачи при решении задач, требующих специализированных знаний.
Например:
Роль: специалист по эмбеддинг-моделям;
Задача: подготовить научно-популярную лекцию на тему ‘Математические основы эмбеддингов’
Дополнительная информация (Additional Information). Иногда ее также называют контекстом, однако в сфере промпт-инжиниринга этот термин многозначен и потому менее предпочтителен. Так, если мы даем модели инструкцию написать деловое электронное письмо, нужно добавить в промпт имя и должность отправителя и получателя.
2.2 Промптинг
Мы уже говорили о том, что терминология промпт-инжиниринга пока не устоялась: существуют термины, которые часто трактуются неверно (“промпт”, “промптинг” и “промпт-инжиниринг”), и “конфликтующие” термины (“роль” и “персона”). Поэтому, чтобы дать более точные определения терминам ниже, мы синтезировали несколько дефиниций, предложенных разными авторами.
Промптинг — это процесс взаимодействия с моделью через промпты. Отправляя модели текстовую инструкцию, изображение и другой тип данных, мы занимаемся промптингом.
Цепочка промптов — это несколько шаблонов промпта, которые обрабатываются моделью последовательно. Ответ модели на первый промпт используется в следующем, и процесс продолжается до тех пор, пока не будет обработан последний промпт из цепочки.
Техника промптинга — это “схема”, по которой создается промпт или цепочка промптов. Схема организации промпта может подчиняться условной логике или логике ветвления, а может быть основана на принципе параллелизма (если выполнение последующей инструкции не зависит от результатов выполнения предыдущей, инструкции могут выполняться параллельно).
Промпт-инжиниринг — это итеративный процесс поиска наиболее эффективного промпта путем изменения существующего или использования альтернативной техники промптинга. Стандартный алгоритм отладки промпта представлен на рисунке 1.

Техника промпт-инжиниринга — это стратегия улучшения промпта. В исследовательской литературе больше внимания уделяется автоматизированным техникам (т.е. когда промпт улучшает сама модель), однако на практике пользователи часто отлаживают промпты вручную.
3. История возникновения промптов
Мысль о том, что можно контролировать поведение языковых моделей с помощью инструкций на естественном языке, возникла гораздо раньше, чем модели семейства GPT. Понятию “промпт” предшествовали понятия “управляющие коды” (control codes) и “литературные подсказки” (writing prompts).
Управляющие коды (например, ASCII) получили распространение в 1960-х. Они представляли собой таблицы кодировки символов, где каждой букве, цифре или знаку препинания соответствовало определенное число. Позднее, когда появились программы для генерации текста, их часто тестировали на литературных подсказках: программе давалось “вступление” к тексту на естественном языке, которое она должна была продолжить.
В контексте генеративных моделей ИИ термин “промпт” впервые встречается в 2018 году в статье “Hierarchical Neural Story Generation”. Далее термин упоминается в 2019 году после релиза GPT-2 в статье “Language Models are Unsupervised Multitask Learners”. Заметим также, что в ранних работах понятие “промпт” трактовалось иначе. Например, в статье “Language Models are Few-Shot Learners” 2020 года приводится следующий пример инструкции для модели: “Переведи с английского на французский: llama”
. Здесь промптом считается слово llama
, которое необходимо перевести, а инструкцию “Переведи с английского на французский
” называют описанием задачи (task description). В более поздних работах, включая и нашу, промптом называется вся последовательность данных, подаваемая на вход языковой модели.
Что касается термина “промпт-инжиниринг”, он появился немного позже, хотя возможность итеративного улучшения инструкций для языковых моделей обсуждалась и до этого. Впервые термин был употреблен в 2021 году в статье “Learning Transferable Visual Models From Natural Language Supervision”, посвященной трансферу знаний от языковых моделей к мультимодальным.
4. Текстовые техники промптинга
Перейдем к обсуждению текстовых техник промптинга. Всего в статью вошли 58 техник, условно разделенные на 6 категорий (см. Рисунок 2). Некоторые техники относятся сразу к нескольким категориям — их мы помещали в ту, с которой у них больше всего общих черт. В этой части мы сосредоточимся на few-shot и zero-shot техниках.

Сначала введем базовое понятие — контекстное обучение (In-Context Learning, ICL). Речь идет о способности модели обучаться новым задачам не через обновление весов, а через примеры или инструкции в промпте. Однако слова “обучаться” и “новым” могут вводить в заблуждение: если модель целенаправленно не обучали выполнять задачу, это не значит, что задача будет для нее принципиально новой. Возможно, паттерны для ее решения, изначально были в обучающих данных, но для их активации модели нужна была конкретная инструкция.
Существует также смежный термин — мета-обучение (meta-learning), более широкий по сравнению с ICL. Мета-обучение — это подход к обучению LLM, цель которого — научить модель учиться. Его основной принцип — обучать модель на широком спектре задач и типов данных, чтобы впоследствии она быстрее адаптировалась к новым запросам. ICL же обозначает способность модели адаптироваться к конкретной новой задаче без обновления весов.
Перейдем к техникам промптинга, лежащим в основе контекстного обучения.
4.1 Few-shot промптинг
Few-shot промптинг — это техника, при которой в промпт добавляется несколько примеров выполнения задачи, позволяющих модели считать закономерность. Эта техника является разновидностью обучения на малых объемах данных — few-shot обучения (Few-Shot Learning, FSL), однако не требует обновления параметров модели.
Отбор примеров для few-shot промпта
Решая задачу, модель полагается на примеры из промпта, однако контекстное окно большинства моделей позволяет добавить лишь ограниченное количество примеров. Ниже мы приведем 6 основных принципов их отбора:
Количество примеров
Наиболее очевидная закономерность — чем больше примеров, тем лучше модель справляется с задачей. Это справедливо для моделей с большим контекстным окном, однако для некоторых задач, даже в случае с большими моделями, избыток примеров может снизить качество выдачи. Что касается меньших моделей, большое количество примеров (более 20) либо перестает влиять на качество генерации, либо снижает его.
Порядок примеров
Исследования показывают, что при решении некоторых задач можно повысить точность ответа с 50% до 90%, изменив порядок примеров в промпте (см. исследование “Fantastically Ordered Prompts and Where to Find Them”).
Распределение меток в примерах
Соотношение меток в примерах влияет на поведение модели и может привести к тому, что модель будет отвечать предвзято. Например, если мы даем примеры бинарной классификации рецензий на фильм и добавляем 8 позитивных примеров и только 2 негативных, это создает “перекос” в данных. Модель может классифицировать новый пример как позитивный, даже если он негативный.
Качество меток в примерах
Вопрос о том, влияет ли качество разметки примеров на итоговую выдачу, пока остается открытым. Некоторые исследователи полагают, что точность разметки не играет роли — даже если модель получит на входе пример неправильного решения задачи, она все равно считает схему решения. Однако есть устойчивая закономерность: чем больше модель, тем более она устойчива к ошибкам в разметке и к нерелевантным примерам.
Важный момент: если примеры автоматически отбираются из больших датасетов, итоговый сет неизбежно будет содержать неточные или неподходящие примеры. Нужно отслеживать, как качество примеров влияет на решение конкретной задачи.
Формат примеров
Оптимальный формат подбирается в зависимости от решаемой задачи. Например, для задач классификации примеры чаще всего оформляются так: “Q: {входные данные}, A: {метка}
” Иногда приходится протестировать несколько вариантов форматирования, чтобы выбрать тот, при котором качество выдачи выше. Доказано, что качество выдачи повышается, если примеры структурированы по аналогии с обучающими данными.
Выбор инструкций
Инструкции играют ключевую роль в zero-shot промптинге, однако их необходимость во few-shot промптах менее однозначна. Например, авторы статьи “InstructEval: Systematic Evaluation of Instruction Selection Methods” утверждают, что модели лучше справляются с задачами классификации и с ответами на вопросы, если few-shot промпт состоит только из примеров или содержит абстрактную инструкцию типа “Выполни следующую задачу
”.
Добавление конкретной инструкции, например “Ответь на вопрос
”, напротив, снижает качество выдачи. Из этого следует, что модель может “считать” инструкцию по одним примерам, и необходимости прописывать ее отдельно нет. Однако, хотя инструкция может не повлиять на правильность решения задачи, она может “нормализовать” другие параметры выдачи, например, отрегулировать стиль.
Принципы отбора few-shot примеров систематизированы на рисунке 3:

Техники Few-shot промптинга
В этом разделе мы рассмотрим техники, требующие активного участия человека. Сразу оговоримся, что автоматическое ансамблирование промптов не менее эффективно, но о нем речь пойдет в следующей части.
Представим, что у нас есть обучающий датасет Dtrain для конструирования few-shot промпта, включающий примеры запросов Dxtrain и ответов Dytrain. Приведенный ниже шаблон (Рисунок 4) позволяет генерировать промпт на основе тех примеров, которые соответствуют тестовому запросу, т.е. тому, на который нам нужно получить ответ.

Один из наиболее распространенных алгоритмов для отбора примеров, соответствующих тестовому запросу, — метод K-ближайших соседей (K-Nearest Neighbor, KNN). В качестве примеров к тестовому запросу берутся те точки данных, которые оказались ближе к нему в векторном пространстве. Однако расстояние рассчитывается между вектором тестового запроса и всеми точками данных в датасете. Если датасет большой, процесс будет долгим и потребует значительных вычислительных мощностей.
Альтернативный метод отбора few-shot примеров — Vote-K. На первом этапе модель анализирует часть большого сета неразмеченных данных и отбирает примеры, потенциально релевантные тестовому запросу. Эти примеры размечает специалист, после чего модель сопоставляет новую порцию примеров с отобранными ранее. Примеры добавляются в один few-shot промпт только в том случае, если они достаточно отличаются друг от друга, чтобы модель увидела как можно больше возможных паттернов решения задачи.
Если достаточного количества примеров нет, используется техника Self-Generated In-Context Learning (SG-ICL). Здесь few-shot примеры генерируются через языковую модель (см. Рисунок 5). Few-shot промпты с синтетическими примерами считаются более эффективными, чем zero-shot промпты, однако уступают few-shot промптам с примерами, созданными человеком.

Помимо примеров, нужно подобрать шаблон промпта, который с наибольшей вероятностью позволит получить качественный вывод. Для поиска эффективных шаблонов используется техника Prompt Mining. Здесь модель обрабатывает большие корпуса текстов (например, Wikipedia) в поисках наиболее частотных шаблонов запросов. Если определенный тип запроса часто встречается в больших корпусах, он будет широко представлен и в обучающих данных модели, а значит — позволит с большей вероятностью получить желаемый ответ. Далее отобранные шаблоны заполняются few-shot примерами.
Существует также ряд продвинутых few-shot техник, на которых мы не будем останавливаться подробно. Среди них, например:
LENS (fiLter-thEN-Search), где перед включением во few-shot промпт примеры проходят несколько этапов фильтрации;
UDR (Unified Demonstration Retriever), где для поиска примеров к разным задачам специально обучается отдельная модель;
Active Example Selection, где для отбора примеров используется алгоритм обучения с подкреплением.
4.2 Zero-Shot промптинг
В отличие от few-shot промптинга, в zero-shot промптинге не используются примеры. В этой части мы обсудим базовые техники zero-shot промптинга, а в следующих частях нам встретятся комбинированные техники, которые объединяют zero-shot и другие принципы промптинга (например, Chain of Thought).
Ролевой промптинг (Role Prompting / Persona Prompting) предполагает, что мы уточняем, от чьего лица действует модель. Например, мы можем попросить ее написать текст от лица известного политика или комика. Уточнение роли повышает качество выдачи для задач с открытым ответом и улучшает показатели моделей на бенчмарках.
Аналогичный эффект достигается через стилевой промптинг (Style Prompting). Здесь мы уточняем желаемый стиль, тон и жанр повествования.
Эмоциональный промптинг (Emotion Prompting) предполагает использование психологических “триггеров” — фраз типа “Это важно для моей карьеры”.
System 2 Attention (S2A) используется для редактирования промптов. Сначала мы просим модель исправить исходный промпт и исключить из него нерелевантную информацию. Далее обновленный промпт передается в другую модель для получения финального вывода (см. Рисунок 6).

SimToM (Simulation of Theory of Mind) используется для решения сложных задач, включающих несколько действующих лиц / объектов (т.е. несколько перспектив). В основе техники лежит базовое свойство человеческого сознания — смотреть на мир глазами другого. В SimToM задача решается в два этапа: модель сначала конструирует нужную точку зрению, а затем выдает итоговый ответ (см. Рисунок 7).

Джим положил мяч в коробку. Когда Джим отвлекся, Ави переложил мяч в корзину. Где, по мнению Джима, находится мяч?
” При использовании одноэтапного Chain-of-Thought промптинга (“Думай пошагово”) модель может выдать неправильный ответ “В корзине”, потому что именно там фактически оказался мяч в конце задачи. В SimToM модель сначала отвечает на вопрос: “Что знает Джим?” — и только потом, смоделировав знания Джима, дает ответ на вопрос задачи. Техника Rephrase and Respond (RaR) предполагает, что модель должна самостоятельно перефразировать и уточнить вопрос пользователя перед тем, как дать ответ. Для этого в промпт добавляется прямая инструкция: “Перефразируй и уточни вопрос, а затем дай ответ
”. Техника может быть как одноэтапной, так и двухэтапной: модель или сразу выдает ответ, или сначала выводит уточненный вопрос, который далее отправляется уже как новый запрос.
Еще одна простая техника, положительно влияющая на качество выдачи — Re-reading (RE2). Мы добавляем в промпт фразу “Еще раз прочитай вопрос
”, тем самым провоцируя модель более тщательно анализировать запрос.
Используя технику Self-Ask, мы также провоцируем модель на глубокий анализ запроса: здесь ей предлагается сначала задать уточняющие вопросы к исходному промпту, самостоятельно ответить на них и только после этого дать ответ.
____________________
На этом пока все, продолжение следует. В следующих статьях цикла мы обсудим:
другие текстовые техники промптинга: Chain-of-Thought, Ensembling, Self-Criticism, Decomposition;
мультимодальные и мультиязыковые техники;
техники промптинга для ИИ-агентов;
способы предотвращения промпт-инъекций и снижения риска галлюцинаций.