Промпты для генерации кода: рабочие формулировки

Как составить запросы, чтобы модель понимала задачу, границы и критерий готовности

Промпты для генерации кода: рабочие формулировки

Промпты для генерации кода часто выглядят убедительно до первого запуска. Вы пишете «напиши функцию парсинга CSV», получаете аккуратный кусок Python, вставляете его в проект — и функция падает на первом же реальном файле: там оказывается пустая строка, BOM, а одно из значений в кавычках содержит запятую. В исследовании JetBrains, проведённом среди более чем 15 тысяч профессиональных разработчиков в мае–июле 2026 года, 90% опрошенных использовали AI-агентов для программирования на работе хотя бы раз в неделю.

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

ВАМ ПРИШЛО ПРИГЛАШЕНИЕ 💌
Приходите к нам в соцсети поделиться своим мнением и почитать, что пишут другие. А ещё там выходит дополнительный контент, которого нет на сайте — шпаргалки, опросы и разная дурка. В общем, вот тележка, вот ВК — велком!

Почему модель выдаёт нерабочий код

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

Четыре источника брака

По состоянию на сентябрь 2026 года AI уже заметно влияет на объём создаваемого кода. По данным WWT Research, 41% кода в мире уже создаётся или существенно дополняется с помощью AI-инструментов. Это оценка масштаба использования технологии, а не показатель качества. 

При этом инструменты используют регулярно. В исследовании Qodo 2025 года 82% разработчиков сообщили, что применяют AI-кодинг-инструменты ежедневно или еженедельно. В том же исследовании 65% участников сказали, что AI не хватает контекста при рефакторинге, а около 60% сталкиваются с такой проблемой при написании и тестировании кода. 

Но объём AI-кода сам по себе ничего не говорит о его качестве. В исследовании CSET 2024 года в среднем 48% фрагментов кода, сгенерированных пятью LLM, содержали ошибки, которые потенциально могли привести к эксплуатации. Авторы отдельно подчёркивают, что это результат лабораторного эксперимента, а не доля уязвимого кода во всех production-репозиториях. 

Есть и другой риск — дублирование. GitClear в исследовании 2025 года говорит о четырёхкратном росте клонирования кода. В деталях исследования доля изменённых строк, классифицированных как copy/paste, выросла с 8,3% в 2021 году до 12,3% в 2024-м. Это два разных показателя, поэтому сводить их к простому «росту с 8,3% до 12,3% в четыре раза» нельзя.

Теперь к самой диагностике. Первый источник брака — невысказанные требования. «Добавь загрузку файла» не говорит, что делать с размером, форматом, именем, повторной загрузкой и ошибкой диска. Второй — отсутствие контекста проекта: модель не знает версию Python, фреймворк, внутренний стиль или уже существующие зависимости. Третий — размытый критерий готовности: «работает» можно понимать как «код компилируется», «тест проходит» или «эндпоинт не падает на пустом файле». Четвёртый — слишком широкая задача в одном запросе: модель одновременно придумывает архитектуру, пишет несколько файлов и пытается угадать, какие решения вы бы приняли на каждом шаге. Во всех этих сценариях нейронка начинает додумывать сама, что чревато багами в ответе. 

Анатомия рабочего промпта

Разбираясь, как писать промпты для кода, полезно держать в голове обычную постановку задачи в таск-трекере. Хороший запрос для генерации кода, как и вменяемое ТЗ, уже содержит важные данные: что строим, в каком окружении, какие рамки соблюдаем и в каком виде отдаём результат.

Задача и критерий готовности

Этот блок фиксирует ожидаемый результат и способ его проверить. Сигнатура функции, поведение на граничных данных и проходящий тест превращают расплывчатое «сделай парсер» в проверяемое задание.

Плохо:

Напиши эндпоинт для загрузки CSV.

Хорошо:

Добавь POST /files в существующий FastAPI-сервис. Эндпоинт принимает один CSV-файл и сохраняет его во временный каталог.
Готовность: корректный CSV до 10 МБ даёт HTTP 201; файл больше 10 МБ — HTTP 413; пустой файл — HTTP 422; добавлены unit-тесты для этих сценариев.

Контекст проекта

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

Плохо:

Сделай загрузку файла на Python.

Хорошо:

Контекст: Python 3.12, FastAPI 0.116, pytest. Маршрут находится в app/api/routes/files.py, тесты — в tests/api/test_files.py. В проекте уже используются pathlib и pydantic; новые зависимости не нужны.

Ограничения и запреты

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

Плохо:

Сделай загрузку CSV как-нибудь аккуратно.

Хорошо:

Ограничения: новые зависимости запрещены; публичные сигнатуры не меняй; размер файла ограничь 10 МБ; ошибки чтения и записи обработай явно; отдельный слой хранения не создавай.

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

Здесь задаёте то, что хотите получить на выходе: нужен ли один файл или unified diff, должны ли быть комментарии, нужны ли тесты и допустимо ли текстовое пояснение. Чем строже требования к формату, тем жёстче их стоит прописать в промпте.

Плохо:

Покажи результат.

Хорошо:

Формат: сначала unified diff для app/api/routes/files.py, затем diff для tests/api/test_files.py. После кода — не более четырёх строк о том, какой критерий готовности покрывает каждый тест.

Шаблон промпта для копирования

Для сложной задачи удобнее держать полную форму, а для повторяющейся рутины — короткую. Ниже обе версии сразу заполнены одной и той же задачей: загрузкой CSV через FastAPI.

Полная версия — шаблон и заполненный пример

Задача:
[одно конкретное изменение]

Критерий готовности:
[публичный интерфейс]
[граничные случаи]
[тесты или команды проверки]

Контекст проекта:
[язык и версия]
[фреймворк и версия]
[пути к связанному коду]
[зависимости]
[стиль проекта]

Ограничения:
[что нельзя менять]
[лимиты]
[ошибки]
[обратная совместимость]

Формат ответа:
[диф / полный файл / только код]
[нужны ли тесты]
[нужны ли комментарии]
[что делать при нехватке данных]

--- заполненный пример ---

Задача:
Добавь POST /files в существующий FastAPI-сервис. Эндпоинт принимает один CSV-файл и сохраняет его во временный каталог.

Критерий готовности:
201 для корректного CSV до 10 МБ; 413 для файла больше 10 МБ; 422 для пустого файла. Добавь unit-тесты на все три сценария. Публичные сигнатуры существующих маршрутов не меняй.

Контекст проекта:
Python 3.12, FastAPI 0.116, pytest. Маршрут: app/api/routes/files.py. Тесты: tests/api/test_files.py. Уже установлены pydantic и pytest. Для работы с путями используй pathlib.

Ограничения:
Новые зависимости запрещены. Не создавай отдельный слой хранения. Обработай ошибки чтения и записи. Не меняй существующие маршруты.

Формат ответа:
Сначала unified diff для app/api/routes/files.py, затем unified diff для tests/api/test_files.py. После кода дай до четырёх строк с привязкой тестов к критериям. Если для решения не хватает данных, сначала перечисли конкретные пробелы.

Задача: [одно изменение].
Готовность: [что должно работать и как проверить].
Контекст: [язык/версия, фреймворк, путь, зависимости].
Ограничения: [главные запреты и совместимость].
Формат: [что именно вернуть].

--- заполненный пример ---

Задача: добавь POST /files для загрузки одного CSV в FastAPI.
Готовность: 201 для корректного файла до 10 МБ; 413 для большего; 422 для пустого; тесты на все три сценария.
Контекст: Python 3.12, FastAPI 0.116, pytest; app/api/routes/files.py; tests/api/test_files.py; pathlib и pydantic уже есть.
Ограничения: без новых зависимостей, без изменения публичных сигнатур, без нового слоя хранения; ошибки I/O обработай явно.
Формат: unified diff для двух файлов, затем краткая привязка тестов к критериям.

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

Фрагмент заполненного примераБлокЗачем
Добавь POST /files…ЗадачаФиксирует одно действие и границы результата.
201 / 413 / 422; тестыКритерий готовностиПереводит «работает» в наблюдаемые условия.
Python 3.12, FastAPI 0.116…Контекст проектаСнимает двусмысленность между API и версиями.
Без новых зависимостей…ОграниченияОтсекает технически допустимые, но нежелательные решения.
Unified diff для двух файлов…ФорматОпределяет форму ответа и упрощает проверку.
Назови, чего не хватаетПоведение при нехватке данныхОстанавливает догадки там, где они дороже уточнения.

Большая скидка — 16% на все курсы Практикума

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

До 17 сентября на все курсы действует скидка 16%, она применится автоматически при оплате. Потом цены станут выше, поэтому не откладывайте!

Только начали писать промпты для кода — берите «Вайбкодинг»; работаете с моделями через API и уже думаете о контексте и цене токенов — «Нейросети для разработки»; собираете агентные промпты с границами правок, подтверждениями и проверкой на каждом шаге — «ИИ-инженера».

Что подать в контекст и что оставить за скобками

Контекст-инжиниринг — это отбор и организация информации, которую модель получает вместе с задачей. Здесь важна точность промпта для генерации кода: модель не получает бонус за красивую вводную, если в ней нет файла, интерфейса, теста или ограничения, которое влияет на результат.

Файлы правил проекта

AGENTS.md, CLAUDE.md и правила Cursor позволяют хранить постоянные правила проекта отдельно и не повторять их в каждом чате. В AGENTS.md можно хранить команды тестирования, структуру репозитория, правила оформления кода, архитектурные ограничения и ссылки на подробную документацию. OpenAI описывает AGENTS.md как файл с инструкциями для Codex, включая навигацию по проекту и команды проверки. Отдельно полезный приём показывает сама команда OpenAI: короткий AGENTS.md служит скорее оглавлением, а подробное знание хранится в docs/.

В актуальной документации Cursor .cursorrules считается legacy-форматом, вместо него рекомендуются Project Rules в .cursor/rules/. Поэтому новый проект лучше строить на актуальном механизме своего инструмента, а перенос старых правил планировать отдельно.

Обновлять правило должен владелец договорённостей в репозитории: разработчик или команда, которая меняет процесс. Практическая польза файла правил исчезает, когда он описывает прошлый стек. Подробный пример настройки правил есть в нашем туториале по Cursor. 

Сколько кода должно в запросе

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

Практический ориентир: дать минимальный набор файлов, который позволяет принять решение. Для локальной функции часто достаточно самого файла, теста и ближайшего аналогичного компонента. Для новой сущности полезнее показать дерево проекта и один правильный пример, чем отправлять весь пакет. Про способы уменьшить объём контекста и расход токенов подробнее рассказываем в статье «Как снизить расход токенов в Claude Code»

Контекстный дрейф

Контекстный дрейф возникает, когда описание системы в rules-файлах отстаёт от фактического кода. Признаки обычно видны без специальных метрик: модель предлагает старый путь, возвращается к уже удалённой библиотеке, создаёт конфиг по прежнему шаблону или следует правилу, которое команда давно изменила.

Для небольшого проекта ревизию разумно привязывать к заметным изменениям стека, структуры каталогов и процесса тестирования. Для крупного репозитория удобнее включить такую проверку в регулярную техническую ревизию. Критерий простой: путь, команда или архитектурное правило из AGENTS.md должны находить подтверждение в текущем репозитории.

Чего в промпте быть не должно

В запрос нельзя класть API-ключи, токены, строки подключения, персональные данные пользователей и закрытый код под NDA. Отдельно проверяйте .env-файлы, логи и диагностические дампы: в них секреты часто находятся рядом с обычным техническим текстом и поэтому легко остаются незамеченными.

Условия хранения и использования запросов зависят от конкретного сервиса, тарифа и настроек организации. Поэтому перед передачей исходников проверьте политику выбранного провайдера и используйте рабочие механизмы защиты секретов. Подробнее об API-ключах — в материале «Как защитить API-ключи от утечки»

Приёмы промптинга, которые работают в 2026

На сентябрь 2026 года рекомендации OpenAI, Anthropic и Google сходятся в одном: запрос должен ясно задавать цель, контекст, ограничения и ожидаемый результат. При этом конкретные приёмы различаются: Anthropic рекомендует роли, XML-теги и few-shot, Google — примеры и структурирование запроса, а OpenAI для reasoning-моделей делает акцент на результате и критериях успеха.

Примеры вместо описаний

Few-shot — это приём, при котором модели дают несколько примеров входа и желаемого результата. Он полезен, когда нужно точно показать формат ответа, структуру результата или правило обработки данных. Например, если модель должна преобразовывать входные значения по одному и тому же правилу, несколько правильных пар «вход → выход» зададут это правило нагляднее длинного описания. Google рекомендует использовать конкретные и разнообразные примеры, а Anthropic — несколько примеров с одинаковым оформлением. Слишком большое количество образцов может, наоборот, заставить модель слишком сильно ориентироваться на сами примеры.

Вход: "10,20"
Выход: (10, 20)

Вход: "0,20"
Выход: (0, 20)

Вход: "20,10"
Выход: ValueError

Теперь обработай: "10"

Слабое место few-shot видно здесь же: если один пример содержит ошибку, модель может воспринять её как часть правила. Поэтому образцы стоит проверять так же внимательно, как основной промпт.

Разбивка на цепочку запросов

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

Шаг 1: спроектируй изменение и перечисли затрагиваемые файлы. Код не пиши.
Шаг 2: по согласованному плану покажи только каркас интерфейсов и тестов.
Шаг 3: реализуй согласованный каркас.
Шаг 4: добавь тесты и перечисли, какие критерии готовности они проверяют.

Предзаполнение ответа

Предзаполнение удобно, когда ответ должен начинаться в строго заданном формате: JSON, конфиг, SQL или короткий diff. Приём уменьшает вероятность, что модель добавит лишний текст вроде «Конечно, вот готовое решение», и упрощает обработку ответа программой. Для API-задач структурированный вывод надёжнее, чем надежда только на текстовое правило.

{
   "status": "

Такой приём применяйте только там, где платформа действительно позволяет контролировать начало ответа. Если платформа не позволяет заранее задать начало ответа, в обычном чате просто укажите формат явно: «Верни только JSON без пояснений» или «Верни только unified diff».

Давайте модели измеримый исход

Формулировка «для 100 000 записей p95 должен быть ниже 200 мс на тестовом наборе» задаёт проверяемый исход. Актуальная документация OpenAI для reasoning-моделей рекомендует начинать с цели, критериев успеха, ограничений, допустимых побочных эффектов и формы результата, оставляя модели выборать, как прийти к этому результату, если порядок действий не важен.

Передавайте только изменения

В длинной цепочке запросов полезно отделять уже принятые решения от новой вводной. Передавайте дальше результат предыдущего шага и кратко фиксируйте, что изменилось. Это сокращает повтор контекста и уменьшает риск, что модель начнёт ориентироваться на старую версию файла.

Уже согласовали: 
- POST /files; 
- лимит 10 МБ; 
- 201 / 413 / 422. 
Изменилось только одно условие: для CSV с неверным MIME-типом возвращай 415. 
Обнови только тесты и обработчик, не меняй остальные критерии.

Что перестало быть обязательным

Ролевые промпты, XML-теги и подробные инструкции о каждом внутреннем шаге не стали бесполезными, но потеряли статус обязательного ритуала. Anthropic по-прежнему рекомендует задавать роль, когда она помогает сфокусировать поведение, и использовать XML-теги для сложных структурированных запросов. Gemini также предлагает роли, Markdown и XML как способы организовать контекст. Поэтому корректнее не избегать этой практики, а применять её только там, где она действительно меняют качество или формат ответа.

Отдельно стоит пересмотреть требование раскрывать пошаговое внутреннее рассуждение для reasoning-моделей. Для GPT-5.5 и более новых reasoning-моделей OpenAI советует чаще задавать результат и критерии успеха, а детальный сценарий оставлять модели, если иной порядок действий не является обязательным. У Gemini рекомендации отличаются: для тяжёлых задач Google допускает явную просьбу думать шаг за шагом. Значит, здесь нужно ориентироваться на конкретного провайдера, а не на универсальное правило.

Слишком процессный вариант:

Ты senior-разработчик. Подумай очень подробно и обязательно опиши каждый этап своего внутреннего рассуждения.

Точнее:

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

Промпты под типовые задачи разработчика

Хороший набор промптов для генерации кода отличается не длиной, а тем, насколько точно каждый запрос привязан к конкретной задаче. Ниже пять примеров промптов для программиста. Каждый задаёт конкретное требование и показывает, какой блок шаблона здесь главный. 

Новая функция с нуля

Задача:
Реализуй функцию normalize_phone(value: str, default_country: str = "RU") -> str в Python 3.12. Она принимает российские номера в форматах +7 999 123-45-67, 8 (999) 123-45-67 и 89991234567 и возвращает +79991234567.

Критерий готовности:
Пустая строка и пробелы дают ValueError; неверное количество цифр даёт ValueError; пробелы, скобки и дефисы допускаются; публичная сигнатура сохраняется; добавь unit-тесты для трёх валидных форматов и двух граничных случаев.

Контекст:
Python 3.12, pytest. Новых зависимостей нет. Правила оформления кода: type hints, docstring у публичных функций, ValueError для пользовательских ошибок.
Ограничения:
Не используй телефонические библиотеки. Не меняй формат исключений.

Формат:
Сначала полный код функции, затем тесты отдельным блоком.

Главный блок: критерий готовности и граничные случаи — необычные входные данные, на которых код часто ломается.

Рефакторинг существующего кода

Задача:
Отрефактори функцию build_report() из app/reports/service.py, чтобы убрать дублирование и вынести вычисление total_pages в отдельную приватную функцию.

Сохранение поведения:
Публичная сигнатура build_report() не меняется; имена полей результата не меняются; сортировка записей остаётся прежней; ошибки и типы исключений сохраняются; новые зависимости не добавляются.

Контекст:
Python 3.12. Рядом есть tests/reports/test_service.py. Не переименовывай классы и публичные функции. Ориентируйся на стиль соседних функций в том же файле.

Формат:
Верни unified diff только для app/reports/service.py и tests/reports/test_service.py. После дифа перечисли, какие существующие тесты подтверждают сохранение поведения.

Главный блок: ограничения и запрет на изменение поведения.

Отладка ошибки

Задача:
Найди причину HTTP 500 в POST /reports. Ошибка появляется только при пустом filters.

Трейс:
ValueError: cannot unpack non-iterable NoneType object
File "app/reports/service.py", line 87, in apply_filters

Контекст:
Python 3.12, FastAPI 0.116, pydantic 2.11. Последний рабочий коммит: 1c4e2ab.

Минимальный воспроизводимый пример:
POST /reports
{}

Ограничения:
Не меняй публичный контракт эндпоинта. Сначала назови гипотезу и файл, который нужно проверить. Затем предложи минимальный патч и тест, воспроизводящий ошибку до исправления и проходящий после.

Формат:
1. Причина.
2. Минимальный diff.
3. Тест.

Главный блок: трейс, версии и минимальный воспроизводимый пример.

Написание тестов

Задача:
Добавь unit-тесты для функции parse_limits(value: str) в app/config/limits.py.

Сценарии:
"10,20" -> (10, 20)
"0,20" -> (0, 20)
"20,10" -> ValueError
"" -> ValueError
"10" -> ValueError
"a,20" -> ValueError

Контекст:
Python 3.12, pytest. В проекте используется pytest.mark.parametrize для похожих функций.

Ограничения:
Проверяй публичный результат и тип исключения. Реализацию функции не меняй.

Формат:
Только код файла tests/config/test_limits.py с комментариями над каждой логической группой тестов.

Главный блок: полный список сценариев и выбранный тестовый фреймворк.

О практике с unit-тестами читайте «Юнит-тесты и автотесты»

SQL-запрос и миграция

Задача:
Добавь в PostgreSQL таблицу invoice_events поле processed_at timestamptz NULL. Затем напиши запрос, который выбирает необработанные события старше 15 минут.

Схема:
invoice_events(id bigint primary key, invoice_id bigint not null, event_type text not null, created_at timestamptz not null, processed_at timestamptz null)

Контекст:
PostgreSQL 16. Около 20 млн строк. Миграции — Alembic.

Ограничения:
Миграция должна быть обратимой. Не блокируй таблицу дольше, чем необходимо. Индекс создавай CONCURRENTLY, только если он действительно нужен запросу и условия миграции это допускают. Учти, что processed_at пока NULL у существующих строк.

Формат:
1. Alembic migration up/down.
2. SQL-запрос.
3. Короткая проверка плана через EXPLAIN.

Главный блок: схема таблицы, объём данных и обратимость миграции.

Промпт для агента вместо промпта для чата

Промпт для AI-агента должен учитывать, что модель может читать файлы, запускать команды и изменять несколько файлов и участков кода. Поэтому в запросе нужно явно указать, какие файлы можно менять, какие действия требуют подтверждения и какие проверки нужно выполнить. OpenAI описывает Codex именно как среду, в которой агент может работать с репозиторием, выполнять тесты и показывать пользователю результаты работы; ручная валидация при этом всё равно остаётся важной.

Тот же принцип важен в вайб-кодинге, где особенно легко отдать модели сразу большую задачу и принять первый рабочий на вид результат.

Границы работы

Ты работаешь как кодовый агент в репозитории.

Цель:
Реализуй поддержку загрузки CSV-файлов для POST /files.

Перед изменениями:
1. Изучи дерево проекта и прочитай AGENTS.md, CLAUDE.md и файлы, связанные с /files.
2. Покажи короткий план из 4–6 шагов и список файлов, которые собираешься менять.
3. Дождись подтверждения пользователя перед изменением файлов.

Область правок:
- app/api/routes/files.py
- tests/api/test_files.py
- app/core/config.py — только если существующего лимита недостаточно.

Не меняй другие файлы без отдельного подтверждения.

Правила:
- Не коммить и не пушить изменения.
- Не удаляй пользовательские изменения из рабочего дерева.
- После каждой логической правки запускай связанные тесты.
- Если тест падает по причине, не связанной с твоим изменением, остановись и объясни причину.
- Не добавляй зависимости без подтверждения.
- Перед финальным ответом покажи полный diff и результаты тестов.

Критерий готовности:
Корректный CSV до 10 МБ даёт 201; больше 10 МБ — 413; пустой файл — 422. Все три сценария покрыты тестами.

Список допустимых файлов ограничивает область правок, а требование подтверждения не даёт агенту сразу перейти от анализа к изменению файлов. Требование запускать тесты после правки делает работу агента проверяемой, а запрет коммитить и пушить оставляет публикацию изменений под контролем разработчика. Такие ограничения полезны независимо от инструмента: они пригодятся в ChatGPT, GitHub Copilot, Cursor, Claude Code, Codex и других средах, где модель может работать с кодом и выполнять действия.

Дополнительно про AI-агентов полезно посмотреть материал «Claude Code, Cursor и Codex».

Что делать, когда ответ мимо

Ошибки в промптах лучше разбирать точечно. Полное переписывание запроса скрывает причину ошибки, а одно изменение за итерацию позволяет понять, какая именно правка повлияла на результат.

  1. Локализуйте, какой блок промпта дал сбой: задача, контекст, ограничение, формат или критерий готовности.
  2. Добавьте недостающее ограничение в исходный запрос. «Ускорь обработку» замените на размер входа и целевой предел времени, если это важно.
  3. Верните модели её же код и укажите конкретную строку и симптом. Например: «Строка 27 обращается к None, test_empty_file падает с 422→500. Исправь только этот кейс и добавь тест».
  4. Если в истории накопились старые варианты, начните новый чат с минимальным актуальным контекстом. Старая ветка может содержать несовместимые решения, которые модель продолжит учитывать.
  5. Если предыдущая формулировка была точнее, откатитесь к ней и меняйте по одному фактору за итерацию.

Вы: Парсер падает на пустом CSV. Исправь.

Модель: Добавил проверку файла.

Вы: Падает строка 27: rows[0] при пустом списке. Исправь только этот кейс, не меняй формат ошибок. Добавь тест test_empty_csv. Верни unified diff.

Как проверять код, который написала модель

Проверка сгенерированного кода начинается после ответа модели. До merge полезно пройти одинаковый технический маршрут, даже когда diff выглядит аккуратно: синтаксическая корректность и зелёные unit-тесты ещё не доказывают отсутствие проблем в зависимостях и безопасности.

  1. Прогоните тесты проекта и добавьте сценарии, которые следуют из поведения функции, но не были перечислены в исходном запросе.
  2. Прочитайте diff целиком, включая удаления, конфигурацию и изменение зависимостей.
  3. Проверьте каждый импортируемый пакет: он должен быть доступен для проекта, совместим с его версиями и действительно нужен для решения.
  4. Запустите статический анализ и форматтер, которые приняты в проекте: например, ruff и mypy для Python.
  5. Отдельно проверьте пользовательский ввод: размеры файлов, строки, SQL-параметры, пути, сериализацию, права доступа и неожиданные значения.
  6. Сопоставьте реализацию с критерием готовности. Каждый обязательный пункт должен иметь понятный способ проверки.

В исследовании CSET около 48% протестированных фрагментов кода содержали ошибки, которые потенциально могли привести к эксплуатации. Это лабораторная оценка, а не доля уязвимого production-кода. Она хорошо показывает, почему одного взгляда на diff недостаточно: сгенерированный код нужно прогнать через тесты, статический анализ и проверку безопасности.

Для подробного набора сценариев смотрите на наш материал «20 промптов для код-ревью».

Чек-лист промпта

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

  1. Я сформулировал одну основную задачу одним действием?
  2. Назвал язык и точную версию?
  3. Указал фреймворк, ключевые зависимости и правила оформления кода?
  4. Определил критерий готовности: интерфейс, граничные случаи, тесты или измеримую метрику?
  5. Перечислил ограничения и запреты?
  6. Задал формат ответа: diff, файл, только код, тесты и объём пояснений?
  7. Приложил минимально необходимый контекст: пути, соседний пример, трейс или схему?
  8. Убрал из запроса секреты, персональные данные и закрытый код?

Проверить последний пункт помогает материал «Как защитить API-ключи от утечки».

Частые вопросы

На каком языке писать промпт для кода

Пишите на том языке, на котором точнее формулируете требования, а технические имена оставляйте как в коде. Русский нормально подходит для постановки задачи, если названия API, файлов, классов и ошибок приведены без перевода.

Насколько длинным должен быть промпт

Длина определяется количеством решений, которые модель должна принять. Для маленькой функции хватит нескольких строк, для изменения нескольких файлов нужен контекст с путями, критериями и ограничениями. Лишний текст можно убрать, если он не меняет решение.

Почему одна и та же формулировка даёт разный результат

Ответ зависит от модели, версии, доступного контекста, истории диалога и настроек генерации. Устойчивость лучше оценивать на повторениях и на данных, с которыми код реально будет работать.

Нужны ли ролевые промпты вида «ты senior-разработчик»

Роль может менять перспективу ответа, но не заменяет технические границы. Для инженерной задачи обычно полезнее указать, что именно нужно оценить: производительность, обратную совместимость, безопасность или поведение при частичном вводе. При этом современные Anthropic и Gemini по-прежнему считают роль допустимым инструментом, когда она реально помогает сфокусировать ответ.

Как заставить модель отдать только код без пояснений

Прямо задайте формат: unified diff, JSON или один блок кода без вступления и заключения. Для машинного потребителя используйте структурированный вывод, когда платформа его поддерживает.

Перед merge

Промпты для генерации кода экономят время тогда, когда уменьшают число догадок модели и делают результат проверяемым. Для этого достаточно собрать четыре базовых блока: задача и критерий готовности, контекст проекта, ограничения и формат ответа. Следом нужен второй контур — тесты, diff, статический анализ и проверка пользовательского ввода.

Шаблон промпта удобно держать как заготовку, а чек-лист ревью — как обязательную вторую половину процесса. В таком режиме разработчик контролирует, насколько быстро результат проходит техническую проверку. Больше прикладных AI-практик собрали в материале «ИИ-навыки разработчика».

На сентябрь 2026 года промпты для генерации кода работают лучше всего в связке с актуальным контекстом проекта и обязательной проверкой результата. В IDE следующий запрос начинается с задачи, у которой есть критерий приёмки, а не с надежды, что первый diff сразу переживёт запуск.

Советуем дополнительно почитать

Как создать AI-агента: пошаговое руководство — сборка агента с нуля: откуда берётся цикл «прочитал — сделал — проверил», на который опирается раздел про промпты для агентов.

14 сайтов с готовыми промтами для нейронок — где брать чужие проверенные формулировки, если собирать шаблон с нуля пока рано.

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

Работа с JSON и XML в Python: парсинг, генерация и валидация — практическая сторона форматов, которые статья просит у модели в качестве формата ответа.

Что такое ad-hoc-задачи и как их автоматизировать: пошаговое руководство — соседний сценарий использования ИИ в рабочем процессе разработчика, за пределами генерации кода.

Бонус для читателей

Если вам интересно погрузиться в мир IT и при этом немного сэкономить, держите наш промокод на курсы Практикума. Он даст вам скидку при оплате, поможет с льготной ипотекой или безлимитом на маркетплейсах. Ладно, окей, это просто скидка, без остального, но хорошая.

Вам может быть интересно
medium