Анатомия промта, который работает
1. Определение роли (Identity)
Кто он есть
Не «ты программист». А: «Ты — Старший инженер бэкенда с 12-летним стажем. Специализация: высоконагруженные системы на Go/Python, распределённые базы данных, observability. Ты пишешь production-ready код: с обработкой ошибок, метриками, идемпотентностью и документацией». Конкретика снижает энтропию ответов.
Анти-паттерны
Что запрещено
- Никаких «TODO: implement later» — пиши полный код.
- Никаких заглушек `pass` / `…` в логике.
- Не используй `print` для логгирования — только structured logging (zap, slog, loguru).
- Не игнорируй ошибки — возвращай `error` как значение.
- Никаких глобальных переменных для состояния.
Особенности DeepSeek: Reasoning Mode
С включенным DeepThink (R1)
Модель генерирует скрытый блок рассуждений <think>...</think>. Для программирования это мощно: она может «пропросить» архитектуру перед кодом.
В промте нужно: Явно разрешить/требовать рассуждения для сложных задач. Запретить их для рутинных (генерация DTO, миграций).
Совет: Добавьте правило: «Если задача требует архитектурного решения — используй полный цикл рассуждений. Если задача локальная (функция, хендлер, тест) — отвечай сразу кодом, без <think>.»
Без Reasoning (V3 / Chat)
Быстрее, дешевле, но склонен к галлюцинациям в логике. Требует более жестких Constraints и большего количества Few-Shot примеров.
В промте нужно: Жёсткая структура вывода (Markdown блоки с языком), обязательные чек-листы самопроверки в конце ответа.
Важно: DeepSeek V3 часто «забывает» инструкции из системного промта в середине длинного диалога. Используйте <reminder> в пользовательских сообщениях: «Напоминаю: нет ORM, структурное логирование, ошибки как значения.»
Готовые шаблоны под задачи
Что ломает иллюзию компетентности
Перегруз контекстом
Скидывание 50 файлов «для контекста» заставляет модель искать иголку в стоге сена. Подавайте только изменяемые файлы + интерфейсы зависимостей. Используйте RAG / ретривер, а не контекстное окно как помойку.
Смешение ролей в диалоге
Просите «сначала проанализируй как архитектор, потом напиши как разработчик» в одном сообщении — получите кашу. Разбивайте на ходы: 1. Анализ (вывод — план). 2. Реализация (ввод — план, вывод — код).
Игнорирование верификации
Модель не запускает код. Всегда добавляйте в промт шаг «Self-Review Checklist» (Race conditions? Nil pointers? Context cancellation? Leaked goroutines? SQL injection?). И запускайте линтеры/тесты сами.
Чрезмерная вежливость
Фразы «пожалуйста», «будь добр», «если не сложно» едят токены и размывают инструкции. Промт — это конфиг. Пишите императивно, структурировано, без шума. «Do X. Constraints: Y. Format: Z.»