Как писать промпты для ИИ: практикум для разработчика
Языковая модель не читает мысли. Она видит только текст вашего запроса и ничего не знает про ваш проект, стек, договорённости в команде и то, что вы пробовали час назад. Почти все «глупые» ответы ИИ — следствие того, что этой информации в промпте не было.
Хороший промпт отвечает на пять вопросов:
- Контекст — что за проект, какой стек, какая ситуация.
- Задача — что именно нужно сделать (глагол + результат).
- Ограничения — что нельзя делать, какие версии, какой стиль.
- Формат ответа — код целиком или дифф, с пояснениями или без, файл или текст.
- Критерий готовности — как понять, что задача решена.
Полезный тест: представьте, что отдаёте этот текст новому коллеге, который видит проект впервые. Сможет ли он сделать задачу без уточняющих вопросов?
Переписать плохой промпт
Исходный промпт:
Напиши авторизацию
Что получим: случайный язык, случайный фреймворк, хранение паролей «как получится». Перепишите промпт.
Показать решение Скрыть решение
Контекст: сайт на чистом PHP 8.3 без фреймворка, MySQL 8, PDO.
Таблица users уже есть: id, email (unique), password_hash, created_at.
Задача: напиши обработчик логина login.php, который принимает POST
с полями email и password и стартует сессию при успешном входе.
Ограничения:
- пароли проверять только через password_verify;
- запросы только подготовленные (prepared statements);
- после входа вызвать session_regenerate_id(true);
- при ошибке не сообщать, что именно неверно — email или пароль.
Формат: один файл целиком, комментарии на русском, без пояснений вне кода.
Каждая строка здесь убирает одно неверное предположение модели.
Дать пример желаемого результата
Нужно, чтобы ИИ сгенерировал описания коммитов в стиле команды. Объяснять стиль словами долго и неточно.
Показать решение Скрыть решение
Покажите 2–3 примера. Модель отлично копирует формат по образцу:
Сгенерируй сообщение коммита для диффа ниже в нашем стиле.
Примеры нашего стиля:
feat(auth): добавлен вход через Яндекс ID
fix(articles): приватные статьи больше не попадают в RSS
refactor(editor): вынесен рендер Markdown в отдельный сервис
Дифф:
<diff>
...вставьте дифф...
</diff>
Ответь только одной строкой сообщения.
Обратите внимание на теги <diff>...</diff>. Когда в промпте есть и инструкции, и данные (код, лог, документ), оберните данные в теги. Так модель не перепутает, где ваша просьба, а где содержимое файла.
Попросить ревью кода, а не похвалу
Запрос «проверь мой код» часто даёт общие слова. Сформулируйте промпт так, чтобы получить конкретные замечания.
Показать решение Скрыть решение
Ты — строгий ревьюер PHP-кода. Проверь функцию ниже.
Ищи в первую очередь:
1. Уязвимости (SQL-инъекции, XSS, небезопасная работа с сессией).
2. Ошибки, из-за которых код упадёт или вернёт неверный результат.
3. Только потом — стиль и читаемость.
Для каждой проблемы укажи: строку, что не так, почему это опасно,
исправленный фрагмент. Если проблем нет — так и напиши, не придумывай.
<code>
...ваш код...
</code>
Фраза «если проблем нет — так и напиши» важна: без неё модель склонна найти хоть что-нибудь.
Разбить большую задачу на шаги
Промпт «сделай интернет-магазин» даёт поверхностный результат. Как получить качественный код для большого проекта?
Показать решение Скрыть решение
- Сначала попросите план, а не код: «Предложи структуру БД и список модулей. Код пока не пиши».
- Поправьте план — это дешевле, чем переписывать код.
- Дальше запрашивайте по одному модулю, каждый раз напоминая контекст: стек, принятые решения, уже готовые части.
- Для агентов вроде Claude Code сложите контекст в файл (
CLAUDE.md,PROMPT.md). Агент перечитывает его и не «забывает» договорённости.
Я делаю каталог товаров на Laravel 12 + MySQL.
Нужны: категории с вложенностью, товары с характеристиками, фильтр.
Предложи схему таблиц и список классов (модели, контроллеры, сервисы).
Код не пиши. Если чего-то не хватает для решения — задай вопросы.
Исправить ответ, а не начинать заново
ИИ выдал код, но он использует устаревший API. Что делать?
Показать решение Скрыть решение
Не пишите «неправильно, переделай»: так модель не понимает, что именно исправлять. Укажите конкретику:
Ты использовал mysql_query — эта функция удалена в PHP 7.
Перепиши на PDO с prepared statements. Остальную логику не меняй.
Если разговор ушёл далеко не туда, проще начать новый чат с улучшенным первым промптом, чем распутывать длинную ветку.
Шпаргалка
| Вместо | Пишите |
|---|---|
| «Сделай быстрее» | «Время ответа сейчас 2 с, нужно меньше 200 мс. Узкое место — запрос на строке 40» |
| «Сделай красиво» | «Bootstrap 5.3, карточки в 3 колонки, на мобиле в 1» |
| «Не работает» | Текст ошибки, команда запуска, ожидаемое и фактическое поведение |
| «Напиши тесты» | «Pest, покрой успешный вход, неверный пароль и заблокированного пользователя» |
Итог
- Модель знает только то, что написано в промпте. Контекст — главное.
- Примеры работают лучше длинных объяснений.
- Данные отделяйте от инструкций тегами.
- Большие задачи: сначала план, потом код по частям.