Промпт-инжиниринг: какие приёмы работают, а какие нет
Разбор приёмов по величине эффекта: что действительно меняет ответ, что меняет только его форму и что попало в подборки по инерции. С проверяемыми признаками.
Короткий ответ: из десятка приёмов, кочующих по подборкам, заметный эффект дают три-четыре, и объединяет их одно — они дают модели конкретное действие вместо запрета или настроения. Остальные меняют форму ответа или не меняют ничего, занимая при этом место в контексте и деньги в счёте.
Ниже — разбор по убыванию эффекта, с признаком, по которому каждый приём можно проверить у себя за десять минут.
Работает сильно
Разрешить задать уточняющие вопросы. «Прежде чем отвечать, задай до трёх вопросов, без которых ответ будет догадкой».
Единственный приём, который меняет не форму ответа, а его основание. Модель по устройству не умеет отказаться отвечать — она продолжает текст и при нехватке данных продолжает его правдоподобным предположением. Явное разрешение спросить снимает это принуждение.
Побочный эффект важнее основного: вопросы модели — это карта дыр в вашей постановке.
Задать стандарт результата, а не пожелание. Не «напиши хорошо», а «две страницы, каждый пункт с примером из моего текста, без вводных абзацев, без заключения».
Всё, что вы не назвали, будет заполнено средним по обучающей выборке — и это среднее вас потом и раздражает. Приём механический и самый предсказуемый по эффекту: экономит два-три круга правок.
Отдать формат схеме, а не просьбе. Если провайдер поддерживает структурированный вывод — использовать его. Просьба «ответь в JSON» выполняется вероятностно; схема применяется на уровне генерации, и сломать её нельзя. Разница между «обычно работает» и «работает» разобрана в «Формат ответа — это интерфейс».
Показать два примера вместо описания формата. Правило считывается из разницы между примерами, поэтому вторым надо брать не типичный случай, а пограничный: пустое поле, отсутствующая дата, слишком длинный вход. Пара «обычный + пограничный» объясняет больше, чем пять обычных. Подробнее — в заметке «Два примера объясняют формат лучше абзаца».
Работает умеренно
Требовать разделения фактов и предположений. Мгновенно показывает, где ответ держится на воздухе. Работает слабее первого приёма: модель занижает раздел предположений, потому что уверенно сделанное предположение сама классифицирует как факт. Но даже неполный список полезнее отсутствия.
Требовать цитату-основание. «Приведи фрагмент исходника, на котором держится ответ». Превращает проверку из чтения всего документа в механическую сверку. Особенно окупается там, где ответ строится по приложенным данным.
Рассуждение перед ответом. Помогает на задачах с вычислением и многошаговым выводом. Не помогает на фактах: рассуждение о несуществующем пункте регламента будет стройным и неверным.
Не работает
Ролевая преамбула. «Ты — опытный архитектор с двадцатилетним стажем». Роль задаёт регистр — чуть более отраслевую лексику и чуть больше уверенности, — но набор фактов, к которым обращается модель, от этого не меняется. Двадцать лет стажа не появляются из строчки текста.
Исключение одно: когда термин многозначен и роль работает как указание домена. «Ты работаешь с бухгалтерским учётом» дешевле снимает неоднозначность слова «проводка», чем объяснение. Но это уже уточнение контекста, просто записанное в форме роли. Разбирал отдельно в «Ролевая преамбула почти ничего не даёт».
Запреты без замены. «Не пиши вводных абзацев» выполняется через раз. У запрета нет содержания: в точке, где по инерции идёт вводный абзац, остаётся дырка, и она заполняется тем же самым абзацем, чуть иначе сформулированным. «Начни с первого факта» работает почти всегда — почему именно так.
Эмоциональное давление. «Это очень важно для моей карьеры». Встречается в подборках до сих пор; на нынешних моделях устойчивого эффекта я не наблюдал, а место в контексте занимает.
Просьба «отвечай только правду». Модель не имеет доступа к признаку «это правда». Что действительно снижает выдумки — в «Галлюцинации нейросети».
Как проверить у себя за десять минут
Любой приём проверяется одинаково, и это дешевле, чем верить подборкам.
Возьмите свой промпт, прогоните три раза без изменений и посмотрите на разброс ответов. Потом добавьте приём и прогоните ещё три раза.
Если ответы до правки расходились по выводам — промпт недоопределён, и любое улучшение, замеченное по одному ответу, будет подгонкой под случайность. Если сходились, а после приёма изменились — эффект есть. Приём стоит тридцати секунд и отсеивает большую часть фольклора; подробнее — в заметке «Запустите промпт трижды».
Условие несогласия
Всё сказанное — про рабочие промпты, которые выполняются много раз и результат которых уходит в код. Для разового разговора с моделью никакой инженерии не нужно: сформулируйте как человеку, а если ответ не тот — переспросите. Это дешевле любой методики.
Граница проходит по числу повторений. Промпт, который выполнится дважды, не заслуживает работы; промпт, который выполнится десять тысяч раз, заслуживает всей.
Чего я делать не стал бы
Не стал бы копить приёмы в системном промпте. Он растёт по правилу за раз и не сокращается никогда, а чем больше равноправных требований, тем ниже шанс, что модель выполнит каждое конкретное. Про это — «Системный промпт — это налог на каждый вызов».
Не стал бы чинить формат регулярными выражениями поверх ответа. Это работает ровно до следующей формы отклонения.
Не стал бы верить, что удачный промпт останется удачным. Провайдеры обновляют модели под тем же именем, и формулировка, подобранная под прошлую версию, может незаметно перестать работать — поэтому набор примеров нужен раньше, чем коллекция приёмов.
Открытый вопрос
Почти все работающие приёмы сводятся к одному действию: убрать
у модели принуждение достраивать. Разрешить спросить, разрешить null,
задать форму так, чтобы догадываться было негде.
Из этого следует неприятная гипотеза: возможно, промпт-инжиниринг — не набор приёмов, а временный протез вокруг отсутствия у модели механизма отказа. Если так, половина этих приёмов исчезнет вместе с появлением такого механизма, а другая половина — та, что про стандарт результата, — останется навсегда, потому что она вообще не про модель, а про то, что вы сами не сформулировали.