The post has been translated automatically. Original language: Russian
Исследование “The Prompt Report: A Systematic Survey of Prompt Engineering Techniques” (Schulhoff et al., 2024) упорядочило терминологию и практики prompt engineering, выделив десятки техник и общие принципы эффективного взаимодействия с ИИ. Ниже краткое изложение ключевых выводов в прикладном формате.
1. Всегда начинайте с прямой инструкции
Самые надёжные промты - простые и прямые. Фраза «Напиши краткое описание продукта» работает стабильнее, чем «сделай пересказ, но так, чтобы было интересно читать». Рекомендуется начинать с прямой инструкции (Vanilla Prompting), например:
«Пожалуйста, помоги мне с…» или «Напиши…» и уже потом постепенно добавлять уточнения, шаблоны, примеры и модификаторы («в виде списка», «в аналитическом стиле» и т.д.), чтобы увидеть, как это влияет на результаты.
2. Используйте «правильный» язык
Большинство языковых моделей (например GPT-4, Claude, Gemini) обучались в основном на англоязычных данных. Поэтому, даже если нужен ответ на другом языке лучше сформулировать сам промт на английском, потому что модель лучше «понимает» структуру и смысл английского запроса и лучше активируются внутренние механизмы рассуждения. При этом инструкция внутри промта может указывать, на каком языке должен быть результат. Если контент узкоспециализированный (например, юридический на русском) — протестируйте ручной и машинный перевод промта: человеческий обычно выигрывает.
3. Подбирайте корректные примеры (In-Context Examples)
3.1. Few-shot-промты работают лучше, если примеры семантически схожи с вашей задачей. Семантически схожие примеры помогают языковой модели лучше понять контекст задачи и сосредоточиться на нужных деталях и помогает модели «переносить» знания из примеров на новый текст, повышая качество генерации.
Это значит, что примеры должны быть:
• близки по тематике и контексту к основному тексту;
• следует использовать похожие слова и выражения;
• рекомендуется иметь ту же структуру задачи (например, похожая формулировка вопросов и ответов).
Пример:
Задача: Определи тональность (положительная или отрицательная) в отзывах о путешествиях.
Как выбрать примеры:
• Нужно выбрать примеры именно из туристической тематики (например, отзывы о поездках, экскурсиях, отелях).
• Избегайте отзывов о других сферах (например, о технике или медицине), так как они могут содержать специфический словарь, который не подходит для путешествий.
Таким образом, если нужно, чтобы модель хорошо классифицировала отзывы о путешествиях, лучше использовать семантически схожие примеры из туристической сферы. Это поможет ей быстрее «понять», какие слова и фразы чаще всего связаны с положительной или отрицательной оценкой именно в контексте туризма.
3.2. Иногда, наоборот, полезно выбрать семантически далекие или необычные примеры, которые содержат редкие слова, сложные или неоднозначные фразы (полисемию).
• Примеры с необычными или редкими значениями слов (редкая лексика) могут «растянуть» способности модели и улучшить её обобщение.
• Это особенно полезно для работы с амбигуитетами (неоднозначными предложениями). Например, если предложение может трактоваться по-разному, подобранные примеры с разными значениями слов (или даже фразеологизмами) помогут модели научиться различать эти значения.
Модель, видя разнообразие контекста и редких слов, начинает «думать» более гибко и не зацикливаться только на частотных шаблонах. Такой подход позволяет выявить скрытые возможности модели справляться с разнообразными языковыми феноменами.
Пример:
Допустим, задача — анализировать предложения, в которых встречаются редкие или устаревшие слова. Например, нужно, чтобы модель помогала редактору понимать исторические тексты. Тогда полезно использовать примеры с такими словами, как:
• “thou” (устаревшее местоимение)
• “hath” (устаревшая форма глагола)
• “ere” (поэтическое “before”)
Включение таких примеров поможет модели научиться правильно обрабатывать старинные или редкие слова, а значит, она сможет лучше интерпретировать тексты соответствующей эпохи или стиля.
3.3. Что выбрать?
3.3.1. Семантически схожие примеры — если задача стандартная и нужно стабильное качество (например, классификация, суммаризация).
3.3.2. Нестандартные или редкие примеры — если задача требует гибкости, работы с неоднозначностями, или если вы хотите «расширить» возможности модели в понимании сложных случаев.
4. Формулируйте задачу правильно
Task Format — это способ формулировки задания для языковой модели. Даже если суть задачи не меняется, разная подача в промте может привести к разным результатам, иногда с очень большой разницей в качестве.
Пример: Анализ тональности.
Формат 1 (классификация):
• «Определи, положительный или отрицательный отзыв.»
(ожидается ответ — одно из двух: «Положительный» или «Отрицательный»)
Формат 2 (вопрос):
• «Этот отзыв положительный?»
(ожидается ответ — «Да» или «Нет»)
Разница в формате (вопрос/утверждение) способна изменить точность до 30 %.
Другие форматы, которые стоит учитывать:
• Изменение порядка вариантов в множественном выборе (Multiple Choice)
Например:
• Вариант А: «Положительный»
• Вариант В: «Отрицательный»
или наоборот:
• Вариант А: «Отрицательный»
• Вариант В: «Положительный»
Даже такая перестановка может повлиять на результат.
• Логически эквивалентные формулировки
Например:
• «Определи тональность этого отзыва.»
• «Какую тональность имеет этот отзыв?»
Хотя для человека эти фразы эквивалентны, для модели они могут запускать разные «паттерны» рассуждений.
Рекомендации:
• Тестируйте несколько форматов.
• Фиксируйте лучший.
• Проверяйте промты после обновлений модели (возможен prompt drift — изменение поведения без видимых причин).
5. Убирайте субъективность
Sycophancy (поддакивание) — это явление, при котором языковая модель склонна соглашаться с мнением пользователя, даже если оно противоречит её собственной (более нейтральной) интерпретации. Это особенно заметно, если в промте содержатся личные оценки или утверждения пользователя. В результате, модель может «соглашаться» с пользователем и менять свои ответы в соответствии с его мнением, а не с фактическими данными.
Как это происходит?
• Если пользователь заранее добавляет в промт своё мнение (например: «Мне кажется, это плохо…» или «Я уверен, что это неправильно…»), модель может воспринять это как сигнал того, что она должна поддержать это мнение. Это может привести к искажению результата и снижению объективности.
• Особенно сильно это проявляется у instruction-tuned моделей (модели, дообученные на инструкциях и диалогах), которые как раз «заточены» на то, чтобы «угождать» пользователю.
Пример:
Плохой промт:
“Я думаю, что это определение неверное. Ты согласен?”
(Модель почти наверняка согласится, даже если оно верное.)
Хороший промт:
“Оцени корректность этого определения и объясни свою позицию.”
(Модель выдает более взвешенный и объективный ответ.)
6. Контролируйте детали
Модели LLM чрезвычайно чувствительны к мельчайшим изменениям в тексте промта. Даже небольшие модификации, которые человеку кажутся незначительными, могут радикально изменить поведение модели и качество ответа. Это явление называется Prompt Sensitivity.
6.1. Какие именно детали могут повлиять?
6.1.1. Лишние пробелы. Даже добавление одного пробела или пропуск пробела может «сбить» модель с привычного шаблона, так как многие LLM опираются на токенизацию, чувствительную к пробелам.
• Например:
• «What is the capital of France?»
• «What is the capital of France?»
Во втором случае добавлен лишний пробел, и модель может воспринять текст как другой контекст.
6.1.2. Смена регистра (большие/маленькие буквы). Иногда регистр меняет семантику, особенно если в тренировочных данных модель видела этот паттерн. Модель может различать регистр букв и по-разному интерпретировать:
• “Dog” (с большой буквы, как начало предложения или имя собственное)
• “dog” (с маленькой буквы, как существительное).
6.1.3. Изменение порядка вариантов ответа. В задачах с множественным выбором даже перестановка вариантов местами может повлиять на результат.
• Варианты:
(A) Positive (B) Negative
(A) Negative (B) Positive
Модель может «предпочесть» вариант, который она чаще видела на первой позиции во время обучения, или по-другому ранжировать варианты.
6.1.4. Замена слов синонимами. Казалось бы, синонимы — это одно и то же, но для модели это могут быть разные токены с разным контекстом.
• Например: “good” vs. “nice” — в тренировочных данных модель могла чаще видеть “good” в позитивных контекстах и реже “nice”.
Почему так происходит?
• LLM «видит» текст на уровне токенов (слов или кусочков слов). Даже маленькое изменение приводит к смене токенов, а значит, активируются разные слои модели и разная активация внимания.
• Модели обучались на огромных корпусах, но они очень зависят от статистических шаблонов, встречавшихся в этих корпусах - из-за этого незначительное изменение промта может сильно изменить вероятность выбора токенов при генерации ответа.
7. Добавляйте модификаторы
Модификаторы промта (Prompt Modifiers) — это дополнительные слова или фразы, которые добавляют к основному промту, чтобы уточнить контекст, стиль или результат. Изначально их использовали в генерации изображений, но аналогичные принципы можно применять и для текстовых задач.
Они помогают направить модель на определённый стиль, настроение или желаемые детали в ответе.
• Модель может выдавать слишком общие или не совсем такие результаты, как нужно именно в данном случае.
• Модификаторы помогают уточнить, какой результат ты хочешь получить (например, «реалистичный», «в чёрно-белом цвете» и т.д.).
• Они делают промт более управляемым, особенно если генерация сложная или имеет творческую составляющую (например, генерация иллюстраций или описаний).
7.1. Примеры модификаторов:
7.1.1. Уровень детализации:
• «с подробными примерами»;
• «кратко и по делу» (concise and to the point);
• «с техническими подробностями» (with technical details).
7.1.2. Structure (структура):
• «в виде списка»;
• «в виде пошаговой инструкции»;
• «в формате письма».
7.1.3. Purpose (цель текста)
• «с целью убеждения»;
• «для информирования»;
• “для обучения”.
7.2. Negative Prompting
Negative Prompting (отрицательное промтирование) — это техника, когда ты добавляешь в промт слова или фразы, которые ты хочешь, чтобы модель не использовала или учитывала с меньшей вероятностью.
Например:
• «без эмоциональной окраски»;
• «не использовать субъективные оценки»;
• «не использовать длинные предложения»;
• «без сложных оборотов».
Модель интерпретирует такие слова как «вещи, которых нужно избегать», и реже добавляет их в результат. Это помогает повысить анатомическую точность или убрать нежелательные детали.
8. Отслеживайте дрейф модели
Prompt Drift — это явление, при котором один и тот же промт начинает давать разные результаты в разное время или при разных версиях модели. Даже если текст промта не меняется, поведение модели может измениться после её обновления или замены движка в API.
8.1. Что делать?
• Мониторить стабильность промта — регулярно проверять, выдаёт ли модель стабильные результаты.
• Сохранять версию модели — в случае использовании API, фиксировать версию модели, если это возможно (например, gpt-4-1106-preview вместо просто gpt-4).
• Документировать тесты — хранить примеры входов и ожидаемых результатов (A/B тесты), чтобы отслеживать изменения.
• Поддерживать обратную связь — если были замечены неожиданные изменения, нужно проверять документацию провайдера API, потому что иногда это связано с обновлениями движка.
• Регулярно валидировать результаты — например, раз в месяц или при каждом важном обновлении модели.
8.2. Что делать на практике?
• Внедрить автоматический тест, который регулярно запускает несколько ключевых промтов и проверяет результаты на отклонения (например, с помощью snapshot тестов).
• Если результат отличается от предыдущего более чем на 5% (или по ключевым метрикам), сообщить об этом разработчику для анализа.
9. Стимулируйте рассуждения
Вместо того чтобы просто спрашивать модель о чём-то напрямую, можно разбить промт на логические блоки, чтобы стимулировать модель «думать шаг за шагом» (chain-of-thought reasoning). Такой подход помогает:
• Увеличить точность (модель рассуждает, а не угадывает).
• Сделать процесс решения прозрачным (можно анализировать промежуточные шаги).
• Избежать ошибок, связанных с «краткими» или «импульсивными» ответами модели.
9.1. Расширенные шаблоны рассуждений
Исследования показали, что структурированные промты помогают LLM показывать лучшие результаты. Например:
BASE_INSTRUCTION + EXEMPLARS + QUESTION + THOUGHT_INDUCER
{BASE_INSTRUCTION}
{EXEMPLARS}
{QUESTION}
{THOUGHT_INDUCER}
• BASE_INSTRUCTION — общее описание задачи (например, «Ты ассистент, который классифицирует отзывы»).
• EXEMPLARS — несколько примеров выполнения задачи (few-shot).
• QUESTION — новый пример для решения.
• THOUGHT_INDUCER — просьба к модели объяснить, как она рассуждает.
PROBLEM + OPTIONS + ANSWER
PROBLEM::{QUESTION}, OPTIONS::
(A): {A}
(B): {B}
(C): {C}
(D): {D}, ANSWER::
• Здесь явно выделяется структура задачи (вопрос + варианты + ответ).
• Такой шаблон помогает модели лучше понять формат задачи и выбрать правильный вариант.
9.1.1. Full Context Only
Контекст: Инженером был написан промт, которые должен был проходиться по тексту письма и находить моменты, в которых написано, что автор письма чувствовал себя в ловушке.
Это подход, когда промт содержит весь необходимый контекст задачи, но не содержит примеров.
То есть модель получает только:
• базовое описание задачи,
• определение задачи (ENTRAPMENT DEFINITION),
• и конкретный вопрос.
Пример промта:
{PROFESSOR's EMAIL}
{PROFESSOR's EMAIL} ← случайно продублирован
{ENTRAPMENT DEFINITION}
IMPORTANT: Only label the post as entrapment if they explicitly say that they feel trapped. ← конкретизация промта
Q: {gins} A:
Важно:
• Инженер случайно вставил одно и то же письмо дважды.
• В этом письме, вероятно, содержалась важная информация (например, объяснение контекста).
Инженер заметил, что удаление этого дубликата снижало результаты, а его наличие — наоборот, помогало.
• Это совпадает с техникой Re-Readin: когда модель несколько раз видит важный контекст, она как бы «запоминает» его лучше и даёт более стабильные ответы.
• Вроде бы, дубликат — это ошибка, на практике он повысил качество работы модели.
9.1.2. 10-Shot AutoDiCoT
• Добавлены 10 примеров с рассуждениями (Q, R, A).
• Вывод: добавление примеров с рассуждениями помогло модели лучше различать «entrapment».
{PROFESSOR's EMAIL}
(ENTRAPMENT DEFINITION)
IMPORTANT: Only label the post as entrapment if they explicitly say that they feel trapped.
Q: {q1}
R: {r1}
A: {a1}
Q: {q2}
R: {r2}
A: {a10}
Q: {qinf}
• Попробовали заменить сокращения Q/R/A на полные слова Question, Reasoning, Answer.
• Вывод: модель лучше «видела» все случаи, но чаще ошибалась в деталях.
(PROFESSOR's EMAIL)
(ENTRAPMENT DEFINITION}
IMPORTANT: Only label the post as entrapment if they explicitly say that they feel trapped.
Question: {q1}
Reasoning: {r1}
Answer: {a1}
Question: {a10}
Reasoning: {r10}
Answer: {a10}
Question: {qinf}
Выводы:
• Даже маленькая «ошибка» вроде дубликата письма может неожиданно помочь (Re-Reading).
• Добавление примеров (AutoDiCoT) в целом улучшает работу модели.
• Полные слова (Question/Reasoning/Answer) не всегда лучше сокращений (Q/R/A).
• Контекст (EMAIL) критически важен — без него модель проваливается.
• Анонимизация контекста может снизить результаты — модель может терять важные связи в тексте.
Основано на материалах исследования: Schulhoff, S., Ilie, M., Balepur, N., Kahadze, K., Liu, A., Si, C., Li, Y., Gupta, A., Han, H., Schulhoff, S. and Dulepet, P.S., 2024. The Prompt Report: A Systematic Survey of Prompt Engineering Techniques. arXiv preprint arXiv:2406.06608. Использовано с указанием источника.
Исследование “The Prompt Report: A Systematic Survey of Prompt Engineering Techniques” (Schulhoff et al., 2024) упорядочило терминологию и практики prompt engineering, выделив десятки техник и общие принципы эффективного взаимодействия с ИИ. Ниже краткое изложение ключевых выводов в прикладном формате.
1. Всегда начинайте с прямой инструкции
Самые надёжные промты - простые и прямые. Фраза «Напиши краткое описание продукта» работает стабильнее, чем «сделай пересказ, но так, чтобы было интересно читать». Рекомендуется начинать с прямой инструкции (Vanilla Prompting), например:
«Пожалуйста, помоги мне с…» или «Напиши…» и уже потом постепенно добавлять уточнения, шаблоны, примеры и модификаторы («в виде списка», «в аналитическом стиле» и т.д.), чтобы увидеть, как это влияет на результаты.
2. Используйте «правильный» язык
Большинство языковых моделей (например GPT-4, Claude, Gemini) обучались в основном на англоязычных данных. Поэтому, даже если нужен ответ на другом языке лучше сформулировать сам промт на английском, потому что модель лучше «понимает» структуру и смысл английского запроса и лучше активируются внутренние механизмы рассуждения. При этом инструкция внутри промта может указывать, на каком языке должен быть результат. Если контент узкоспециализированный (например, юридический на русском) — протестируйте ручной и машинный перевод промта: человеческий обычно выигрывает.
3. Подбирайте корректные примеры (In-Context Examples)
3.1. Few-shot-промты работают лучше, если примеры семантически схожи с вашей задачей. Семантически схожие примеры помогают языковой модели лучше понять контекст задачи и сосредоточиться на нужных деталях и помогает модели «переносить» знания из примеров на новый текст, повышая качество генерации.
Это значит, что примеры должны быть:
• близки по тематике и контексту к основному тексту;
• следует использовать похожие слова и выражения;
• рекомендуется иметь ту же структуру задачи (например, похожая формулировка вопросов и ответов).
Пример:
Задача: Определи тональность (положительная или отрицательная) в отзывах о путешествиях.
Как выбрать примеры:
• Нужно выбрать примеры именно из туристической тематики (например, отзывы о поездках, экскурсиях, отелях).
• Избегайте отзывов о других сферах (например, о технике или медицине), так как они могут содержать специфический словарь, который не подходит для путешествий.
Таким образом, если нужно, чтобы модель хорошо классифицировала отзывы о путешествиях, лучше использовать семантически схожие примеры из туристической сферы. Это поможет ей быстрее «понять», какие слова и фразы чаще всего связаны с положительной или отрицательной оценкой именно в контексте туризма.
3.2. Иногда, наоборот, полезно выбрать семантически далекие или необычные примеры, которые содержат редкие слова, сложные или неоднозначные фразы (полисемию).
• Примеры с необычными или редкими значениями слов (редкая лексика) могут «растянуть» способности модели и улучшить её обобщение.
• Это особенно полезно для работы с амбигуитетами (неоднозначными предложениями). Например, если предложение может трактоваться по-разному, подобранные примеры с разными значениями слов (или даже фразеологизмами) помогут модели научиться различать эти значения.
Модель, видя разнообразие контекста и редких слов, начинает «думать» более гибко и не зацикливаться только на частотных шаблонах. Такой подход позволяет выявить скрытые возможности модели справляться с разнообразными языковыми феноменами.
Пример:
Допустим, задача — анализировать предложения, в которых встречаются редкие или устаревшие слова. Например, нужно, чтобы модель помогала редактору понимать исторические тексты. Тогда полезно использовать примеры с такими словами, как:
• “thou” (устаревшее местоимение)
• “hath” (устаревшая форма глагола)
• “ere” (поэтическое “before”)
Включение таких примеров поможет модели научиться правильно обрабатывать старинные или редкие слова, а значит, она сможет лучше интерпретировать тексты соответствующей эпохи или стиля.
3.3. Что выбрать?
3.3.1. Семантически схожие примеры — если задача стандартная и нужно стабильное качество (например, классификация, суммаризация).
3.3.2. Нестандартные или редкие примеры — если задача требует гибкости, работы с неоднозначностями, или если вы хотите «расширить» возможности модели в понимании сложных случаев.
4. Формулируйте задачу правильно
Task Format — это способ формулировки задания для языковой модели. Даже если суть задачи не меняется, разная подача в промте может привести к разным результатам, иногда с очень большой разницей в качестве.
Пример: Анализ тональности.
Формат 1 (классификация):
• «Определи, положительный или отрицательный отзыв.»
(ожидается ответ — одно из двух: «Положительный» или «Отрицательный»)
Формат 2 (вопрос):
• «Этот отзыв положительный?»
(ожидается ответ — «Да» или «Нет»)
Разница в формате (вопрос/утверждение) способна изменить точность до 30 %.
Другие форматы, которые стоит учитывать:
• Изменение порядка вариантов в множественном выборе (Multiple Choice)
Например:
• Вариант А: «Положительный»
• Вариант В: «Отрицательный»
или наоборот:
• Вариант А: «Отрицательный»
• Вариант В: «Положительный»
Даже такая перестановка может повлиять на результат.
• Логически эквивалентные формулировки
Например:
• «Определи тональность этого отзыва.»
• «Какую тональность имеет этот отзыв?»
Хотя для человека эти фразы эквивалентны, для модели они могут запускать разные «паттерны» рассуждений.
Рекомендации:
• Тестируйте несколько форматов.
• Фиксируйте лучший.
• Проверяйте промты после обновлений модели (возможен prompt drift — изменение поведения без видимых причин).
5. Убирайте субъективность
Sycophancy (поддакивание) — это явление, при котором языковая модель склонна соглашаться с мнением пользователя, даже если оно противоречит её собственной (более нейтральной) интерпретации. Это особенно заметно, если в промте содержатся личные оценки или утверждения пользователя. В результате, модель может «соглашаться» с пользователем и менять свои ответы в соответствии с его мнением, а не с фактическими данными.
Как это происходит?
• Если пользователь заранее добавляет в промт своё мнение (например: «Мне кажется, это плохо…» или «Я уверен, что это неправильно…»), модель может воспринять это как сигнал того, что она должна поддержать это мнение. Это может привести к искажению результата и снижению объективности.
• Особенно сильно это проявляется у instruction-tuned моделей (модели, дообученные на инструкциях и диалогах), которые как раз «заточены» на то, чтобы «угождать» пользователю.
Пример:
Плохой промт:
“Я думаю, что это определение неверное. Ты согласен?”
(Модель почти наверняка согласится, даже если оно верное.)
Хороший промт:
“Оцени корректность этого определения и объясни свою позицию.”
(Модель выдает более взвешенный и объективный ответ.)
6. Контролируйте детали
Модели LLM чрезвычайно чувствительны к мельчайшим изменениям в тексте промта. Даже небольшие модификации, которые человеку кажутся незначительными, могут радикально изменить поведение модели и качество ответа. Это явление называется Prompt Sensitivity.
6.1. Какие именно детали могут повлиять?
6.1.1. Лишние пробелы. Даже добавление одного пробела или пропуск пробела может «сбить» модель с привычного шаблона, так как многие LLM опираются на токенизацию, чувствительную к пробелам.
• Например:
• «What is the capital of France?»
• «What is the capital of France?»
Во втором случае добавлен лишний пробел, и модель может воспринять текст как другой контекст.
6.1.2. Смена регистра (большие/маленькие буквы). Иногда регистр меняет семантику, особенно если в тренировочных данных модель видела этот паттерн. Модель может различать регистр букв и по-разному интерпретировать:
• “Dog” (с большой буквы, как начало предложения или имя собственное)
• “dog” (с маленькой буквы, как существительное).
6.1.3. Изменение порядка вариантов ответа. В задачах с множественным выбором даже перестановка вариантов местами может повлиять на результат.
• Варианты:
(A) Positive (B) Negative
(A) Negative (B) Positive
Модель может «предпочесть» вариант, который она чаще видела на первой позиции во время обучения, или по-другому ранжировать варианты.
6.1.4. Замена слов синонимами. Казалось бы, синонимы — это одно и то же, но для модели это могут быть разные токены с разным контекстом.
• Например: “good” vs. “nice” — в тренировочных данных модель могла чаще видеть “good” в позитивных контекстах и реже “nice”.
Почему так происходит?
• LLM «видит» текст на уровне токенов (слов или кусочков слов). Даже маленькое изменение приводит к смене токенов, а значит, активируются разные слои модели и разная активация внимания.
• Модели обучались на огромных корпусах, но они очень зависят от статистических шаблонов, встречавшихся в этих корпусах - из-за этого незначительное изменение промта может сильно изменить вероятность выбора токенов при генерации ответа.
7. Добавляйте модификаторы
Модификаторы промта (Prompt Modifiers) — это дополнительные слова или фразы, которые добавляют к основному промту, чтобы уточнить контекст, стиль или результат. Изначально их использовали в генерации изображений, но аналогичные принципы можно применять и для текстовых задач.
Они помогают направить модель на определённый стиль, настроение или желаемые детали в ответе.
• Модель может выдавать слишком общие или не совсем такие результаты, как нужно именно в данном случае.
• Модификаторы помогают уточнить, какой результат ты хочешь получить (например, «реалистичный», «в чёрно-белом цвете» и т.д.).
• Они делают промт более управляемым, особенно если генерация сложная или имеет творческую составляющую (например, генерация иллюстраций или описаний).
7.1. Примеры модификаторов:
7.1.1. Уровень детализации:
• «с подробными примерами»;
• «кратко и по делу» (concise and to the point);
• «с техническими подробностями» (with technical details).
7.1.2. Structure (структура):
• «в виде списка»;
• «в виде пошаговой инструкции»;
• «в формате письма».
7.1.3. Purpose (цель текста)
• «с целью убеждения»;
• «для информирования»;
• “для обучения”.
7.2. Negative Prompting
Negative Prompting (отрицательное промтирование) — это техника, когда ты добавляешь в промт слова или фразы, которые ты хочешь, чтобы модель не использовала или учитывала с меньшей вероятностью.
Например:
• «без эмоциональной окраски»;
• «не использовать субъективные оценки»;
• «не использовать длинные предложения»;
• «без сложных оборотов».
Модель интерпретирует такие слова как «вещи, которых нужно избегать», и реже добавляет их в результат. Это помогает повысить анатомическую точность или убрать нежелательные детали.
8. Отслеживайте дрейф модели
Prompt Drift — это явление, при котором один и тот же промт начинает давать разные результаты в разное время или при разных версиях модели. Даже если текст промта не меняется, поведение модели может измениться после её обновления или замены движка в API.
8.1. Что делать?
• Мониторить стабильность промта — регулярно проверять, выдаёт ли модель стабильные результаты.
• Сохранять версию модели — в случае использовании API, фиксировать версию модели, если это возможно (например, gpt-4-1106-preview вместо просто gpt-4).
• Документировать тесты — хранить примеры входов и ожидаемых результатов (A/B тесты), чтобы отслеживать изменения.
• Поддерживать обратную связь — если были замечены неожиданные изменения, нужно проверять документацию провайдера API, потому что иногда это связано с обновлениями движка.
• Регулярно валидировать результаты — например, раз в месяц или при каждом важном обновлении модели.
8.2. Что делать на практике?
• Внедрить автоматический тест, который регулярно запускает несколько ключевых промтов и проверяет результаты на отклонения (например, с помощью snapshot тестов).
• Если результат отличается от предыдущего более чем на 5% (или по ключевым метрикам), сообщить об этом разработчику для анализа.
9. Стимулируйте рассуждения
Вместо того чтобы просто спрашивать модель о чём-то напрямую, можно разбить промт на логические блоки, чтобы стимулировать модель «думать шаг за шагом» (chain-of-thought reasoning). Такой подход помогает:
• Увеличить точность (модель рассуждает, а не угадывает).
• Сделать процесс решения прозрачным (можно анализировать промежуточные шаги).
• Избежать ошибок, связанных с «краткими» или «импульсивными» ответами модели.
9.1. Расширенные шаблоны рассуждений
Исследования показали, что структурированные промты помогают LLM показывать лучшие результаты. Например:
BASE_INSTRUCTION + EXEMPLARS + QUESTION + THOUGHT_INDUCER
{BASE_INSTRUCTION}
{EXEMPLARS}
{QUESTION}
{THOUGHT_INDUCER}
• BASE_INSTRUCTION — общее описание задачи (например, «Ты ассистент, который классифицирует отзывы»).
• EXEMPLARS — несколько примеров выполнения задачи (few-shot).
• QUESTION — новый пример для решения.
• THOUGHT_INDUCER — просьба к модели объяснить, как она рассуждает.
PROBLEM + OPTIONS + ANSWER
PROBLEM::{QUESTION}, OPTIONS::
(A): {A}
(B): {B}
(C): {C}
(D): {D}, ANSWER::
• Здесь явно выделяется структура задачи (вопрос + варианты + ответ).
• Такой шаблон помогает модели лучше понять формат задачи и выбрать правильный вариант.
9.1.1. Full Context Only
Контекст: Инженером был написан промт, которые должен был проходиться по тексту письма и находить моменты, в которых написано, что автор письма чувствовал себя в ловушке.
Это подход, когда промт содержит весь необходимый контекст задачи, но не содержит примеров.
То есть модель получает только:
• базовое описание задачи,
• определение задачи (ENTRAPMENT DEFINITION),
• и конкретный вопрос.
Пример промта:
{PROFESSOR's EMAIL}
{PROFESSOR's EMAIL} ← случайно продублирован
{ENTRAPMENT DEFINITION}
IMPORTANT: Only label the post as entrapment if they explicitly say that they feel trapped. ← конкретизация промта
Q: {gins} A:
Важно:
• Инженер случайно вставил одно и то же письмо дважды.
• В этом письме, вероятно, содержалась важная информация (например, объяснение контекста).
Инженер заметил, что удаление этого дубликата снижало результаты, а его наличие — наоборот, помогало.
• Это совпадает с техникой Re-Readin: когда модель несколько раз видит важный контекст, она как бы «запоминает» его лучше и даёт более стабильные ответы.
• Вроде бы, дубликат — это ошибка, на практике он повысил качество работы модели.
9.1.2. 10-Shot AutoDiCoT
• Добавлены 10 примеров с рассуждениями (Q, R, A).
• Вывод: добавление примеров с рассуждениями помогло модели лучше различать «entrapment».
{PROFESSOR's EMAIL}
(ENTRAPMENT DEFINITION)
IMPORTANT: Only label the post as entrapment if they explicitly say that they feel trapped.
Q: {q1}
R: {r1}
A: {a1}
Q: {q2}
R: {r2}
A: {a10}
Q: {qinf}
• Попробовали заменить сокращения Q/R/A на полные слова Question, Reasoning, Answer.
• Вывод: модель лучше «видела» все случаи, но чаще ошибалась в деталях.
(PROFESSOR's EMAIL)
(ENTRAPMENT DEFINITION}
IMPORTANT: Only label the post as entrapment if they explicitly say that they feel trapped.
Question: {q1}
Reasoning: {r1}
Answer: {a1}
Question: {a10}
Reasoning: {r10}
Answer: {a10}
Question: {qinf}
Выводы:
• Даже маленькая «ошибка» вроде дубликата письма может неожиданно помочь (Re-Reading).
• Добавление примеров (AutoDiCoT) в целом улучшает работу модели.
• Полные слова (Question/Reasoning/Answer) не всегда лучше сокращений (Q/R/A).
• Контекст (EMAIL) критически важен — без него модель проваливается.
• Анонимизация контекста может снизить результаты — модель может терять важные связи в тексте.
Основано на материалах исследования: Schulhoff, S., Ilie, M., Balepur, N., Kahadze, K., Liu, A., Si, C., Li, Y., Gupta, A., Han, H., Schulhoff, S. and Dulepet, P.S., 2024. The Prompt Report: A Systematic Survey of Prompt Engineering Techniques. arXiv preprint arXiv:2406.06608. Использовано с указанием источника.