К содержимому

Как устроен хороший промт: задача, контекст, формат

Языковая модель не знает ни вашего проекта, ни ваших привычек, ни того, что вы держите в голове, когда пишете «сделай нормально». Всё, что она знает о задаче, — это текст промта. Поэтому большинство «глупых» ответов — следствие неполного промта, а не слабой модели. Статья для разработчиков, которые пишут промты для чата, ИИ-ассистента в редакторе или для API: разберём, из чего состоит промт, как его проверить и где чаще всего ошибаются. Советы опираются на официальные руководства Anthropic, OpenAI и Google и подходят для любой современной модели.

Модель — новый сотрудник без контекста

В руководстве Anthropic есть удачная метафора: представьте, что промт читает очень способный, но только что нанятый сотрудник. Он умён и быстро работает, но не знает ваших правил, терминов и истории проекта. Чем точнее вы объясните, что нужно, тем лучше результат.

Отсюда простой тест: покажите промт коллеге, который не в курсе задачи, и попросите выполнить. Если коллега переспросит «а для чего это?», «в каком формате?», «что делать с пустыми строками?» — модель столкнётся с теми же вопросами, только не задаст их, а угадает.

Плохой промт:

Напиши функцию для проверки email.

Модели придётся угадать язык, версию, степень строгости, поведение на пустой строке, нужны ли тесты. Хороший промт снимает эти вопросы:

Напиши на PHP 8.3 функцию isValidEmail(string $email): bool для формы
регистрации. Проверка — через filter_var с FILTER_VALIDATE_EMAIL,
дополнительно отклоняй адреса длиннее 254 символов. Пустая строка — false.
Без сторонних библиотек. Ответ: только код функции и 5 примеров вызова
с ожидаемым результатом в комментариях.

Пять частей промта

Почти любой рабочий промт складывается из одних и тех же частей. Не все нужны всегда, но если ответ не устраивает, сначала проверьте, каких не хватает.

Часть Вопрос, на который отвечает Пример
Роль Кем быть модели? «Ты — ревьюер PHP-кода в команде, которая пишет на Laravel»
Контекст Для чего это и что уже известно? «Код уйдёт на прод с PHP 8.3, Composer-пакеты добавлять нельзя»
Задача Что именно сделать? «Найди ошибки безопасности в контроллере ниже»
Ограничения Чего делать нельзя, какие рамки? «Не переписывай код целиком, предлагай точечные правки»
Формат ответа Как должен выглядеть результат? «Таблица: строка, проблема, исправление»

OpenAI в руководстве к последним моделям рекомендует похожую структуру, добавляя явные критерии успеха — по каким признакам вы поймёте, что задача решена — и условие остановки: когда модели закончить работу или вернуться с вопросом.

Роль

Одной фразы в начале достаточно, чтобы задать тон и уровень ответа: «ты — опытный DBA PostgreSQL» даст другие советы, чем вопрос без роли. Роль не заменяет контекст: модель-«эксперт», не знающая ваших ограничений, всё равно предложит неподходящее решение.

Контекст и мотивация

Объясняйте не только что, но и зачем. Пример из руководства Anthropic: правило «никогда не используй многоточия» работает хуже, чем «ответ прочитает синтезатор речи, а он не умеет произносить многоточия, поэтому не используй их». Поняв причину, модель обобщает правило — например, сама откажется и от других символов, которые синтезатор не прочитает.

Плохо:  Пиши коротко.
Лучше:  Ответ покажется во всплывающей подсказке шириной 300 пикселей,
        поэтому уложись в два предложения без списков.

Задача

Одна задача — один глагол. Если в промте «проанализируй, исправь, напиши тесты и обнови документацию», модель распределит внимание между четырьмя целями и сделает каждую поверхностно. Когда порядок шагов важен, перечислите их нумерованным списком.

Если вы хотите, чтобы модель сделала больше минимума, скажите об этом прямо. Современные модели склонны выполнять ровно то, что написано: «создай дашборд» даст скромный результат, «создай дашборд, добавь все полезные фильтры и интерактивность, выйди за рамки базового варианта» — развёрнутый.

Ограничения

Говорите, что делать, а не только чего не делать. Вместо «не используй Markdown» — «пиши связными абзацами». Запрет оставляет модели угадывать замену, а прямое указание — нет. Жёсткие рамки (версия языка, запрет на зависимости, бюджет, лимит длины) лучше указать числом или списком: «до 200 слов», «только стандартная библиотека Python 3.12».

Формат ответа

Опишите результат так, чтобы его можно было проверить: «JSON с полями name и price», «таблица из трёх колонок», «только diff без пояснений». Если ответ будет разбирать программа, формат важнее всего остального: подробнее — в статье «Примеры в промте: zero-shot и few-shot».

Стиль промта влияет на стиль ответа: промт, написанный сплошными списками с жирным шрифтом, чаще получает такой же ответ. Хотите прозу — пишите промт прозой.

Шаблон, который можно копировать

Роль: ты — {кто}.

Контекст:
{для чего задача, кто будет пользоваться результатом, что уже сделано,
важные ограничения среды: версии, запреты, бюджет}

Задача:
{что сделать, одним-двумя предложениями; если шаги важны — списком}

Ограничения:
- {что обязательно}
- {чего избегать и чем это заменить}

Готово, когда:
- {проверяемый критерий 1}
- {проверяемый критерий 2}

Формат ответа:
{структура, длина, язык; что не включать — например, вступление}

Если данных не хватает — задай вопросы, прежде чем начинать.

Последняя строка часто экономит больше времени, чем всё остальное: модель не будет додумывать недостающие требования, а спросит.

Проверка и итерации

Промт — это код, только на естественном языке. Его тоже нужно тестировать:

  1. Определите критерии успеха заранее. Что значит «хороший ответ»: правильный результат, нужная длина, отсутствие выдуманных фактов? Без критериев вы оцениваете на глаз и не заметите, что новая версия промта стала хуже.
  2. Соберите 5–10 тестовых входов, включая неудобные: пустые данные, очень длинные, на другом языке, с ошибками.
  3. Меняйте одну вещь за раз. Переписали промт целиком — непонятно, что именно помогло.
  4. Храните промты в репозитории рядом с кодом, с историей изменений. Это особенно важно, если промт — часть приложения.
  5. Перепроверяйте при смене модели. OpenAI прямо советует не переносить старые промты на новые модели как есть, а начинать с минимального промта и добавлять инструкции, только когда без них результат хуже. Указания, которые помогали старой модели, новую могут сбивать: например, призывы «будь максимально подробным» приводят к лишней работе.

Типичные ошибки

Ошибка Что происходит Как исправить
Промт в одну строку Модель угадывает язык, формат, объём Добавить контекст, ограничения, формат
Требования без причин Правило соблюдается буквально, но не в похожих случаях Объяснить, зачем правило
Только запреты Модель не знает, что делать вместо запрещённого Сказать, что делать
Несколько задач сразу Каждая сделана поверхностно Разбить на шаги или отдельные промты
ВЕРХНИЙ РЕГИСТР и «ОЧЕНЬ ВАЖНО» везде Новые модели перегибают: применяют правило там, где не нужно Спокойная формулировка с объяснением
Противоречивые инструкции Модель выбирает одну из них случайно Перечитать промт целиком, убрать конфликт
Нет критериев готовности Непонятно, хорош ли ответ Записать проверяемые признаки результата

Источники