Бывает так: задача простая, дедлайн близко, а ИИ для написания кода возвращает кусок, который вроде компилируется, но в проект его страшно вставлять. Не те имена переменных, лишняя библиотека, странная обработка исключений, а тестов нет вообще.
Проблема обычно не в модели, чаще ломается сам запрос. Слишком общий промт вроде «напиши функцию авторизации» заставляет ChatGPT гадать: какой стек, какие данные приходят, где хранится пользователь, нужен ли JWT, как обрабатывать ошибку.
Рабочие промпты для генерации кода сейчас строятся так: контекст, язык, ограничения, входные и выходные данные, формат ответа, тесты. Такой подход совпадает с рекомендациями OpenAI и GitHub Copilot: давать понятную задачу, примеры, критерии результата и дробить сложную работу на небольшие шаги.
Основные типы промптов и примеры
1. Генерация функции с понятным контрактом
Здесь генерация кода работает лучше всего: есть небольшая функция, понятный вход, ожидаемый выход и ограничения.
Python, задача: распарсить строку с ценой.
Промт:
Напиши на Python функцию parse_price(value: str) -> int, которая принимает строки вида "1 299 ₽", "1299", "1,299" и возвращает цену в копейках. Не используй внешние библиотеки. Добавь обработку пустой строки и некорректного формата через ValueError. В конце покажи 5 примеров вызова.
Результат: модель обычно даёт готовый код с проверками, а не просто регулярку без обработки краёв.
JavaScript, задача: проверить email.
Промт:
Напиши функцию isValidEmail(email) на JavaScript. Она должна возвращать true или false, не бросать исключения и не пропускать строки без домена. Не делай RFC-валидатор на 200 строк, нужен практичный вариант для формы регистрации. Добавь 6 тестовых примеров.
Такой промт хорош тем, что сразу ограничивает масштаб. ИИ не уходит в академическую реализацию, а создаёт прикладное решение.
2. Отладка и поиск ошибки
Для дебага мало написать «почему не работает». Нужно вставлять текст ошибки, фрагмент кода, ожидаемое поведение и то, что уже проверили.
Python, задача: найти причину NoneType.
Промт:
Я получаю ошибку AttributeError: 'NoneType' object has no attribute 'get' в этом фрагменте. Стек: [вставить traceback]. Код: [вставить код]. Ожидание: функция должна вернуть словарь с полями id и name. Найди вероятную причину, покажи минимальное исправление и объясни, какие входные данные надо проверить.
Результат: ChatGPT не просто переписывает файл, а ищет место, где переменная стала None.
React, задача: компонент перерендеривается бесконечно.
Промт:
Посмотри этот React-компонент. После загрузки страницы начинается бесконечный ререндер. Найди ошибку, не меняй бизнес-логику, покажи исправленный useEffect и объясни, почему зависимость вызывает цикл. Код: [вставить компонент].
Для таких задач полезно просить модель не только написать фикс, но и показать причину. Иначе можно получить патч, который скрывает симптом.
3. Создание тестов
Тесты — один из самых сильных сценариев, где нейросети для программирования помогают. GitHub прямо советует использовать примеры входа и выхода, а юнит-тесты могут служить такими примерами для модели.
Python, задача: покрыть функцию тестами.
Промт:
Напиши тесты pytest для функции calculate_discount(price, percent). Проверь обычный случай, нулевую скидку, скидку 100%, отрицательную цену и процент больше 100. Сначала выведи список кейсов, потом готовый тестовый файл.
Результат: получается база для проверки, которую можно быстро прогнать локально.
Node.js, задача: тесты для API.
Промт:
Составь Jest + Supertest тесты для POST /api/users. Endpoint принимает { "email": string, "password": string }. Нужно проверить успешное создание, дубль email, слабый пароль и отсутствие email. Не мокай весь Express-сервер, используй импорт app из src/app.js.
Здесь запрос сразу задаёт стек, формат данных и границы. ИИ-ассистент разработчика меньше фантазирует.
4. Рефакторинг без переписывания проекта
Опасный сценарий: попросить «улучшить код» и получить новый модуль, который ломает половину зависимостей. Нормальный промт задаёт запреты.
PHP, задача: привести функцию в порядок.
Промт:
Отрефактори эту PHP-функцию. Нельзя менять сигнатуру, формат возвращаемого массива и названия публичных методов. Можно вынести повторяющиеся проверки в приватные методы. После рефакторинга перечисли, что изменилось, и укажи риски. Код: [вставить код].
Результат: код становится чище, но контракт сохраняется.
TypeScript, задача: убрать дублирование.
Промт:
Найди дублирование в этом TypeScript-файле и предложи рефакторинг. Не меняй поведение, не добавляй новые зависимости, сохрани типы. Сначала дай план из 3–5 шагов, потом исправленный код.
Cursor в своих рекомендациях для агентного кодинга отдельно выделяет планирование, проверяемые цели, линтеры и тесты — без них агент легко уходит в лишние изменения.
5. Работа с API и интеграциями
API почти всегда ломается на мелочах: таймауты, ретраи, статусы, пустые ответы, лимиты. Поэтому промт должен просить не только happy path.
Python, задача: клиент для внешнего API.
Промт:
Напиши на Python класс WeatherClient для работы с внешним API. Используй requests, добавь таймаут 5 секунд, обработку 401, 404 и 500, повтор запроса при 502/503 не больше 2 раз. Метод get_forecast(city) должен вернуть словарь с температурой и описанием погоды. Добавь пример использования.
Результат: модель создаёт не просто requests.get, а более живой клиент.
FastAPI, задача: endpoint для заявки.
Промт:
Напиши endpoint FastAPI POST /orders. Входные данные: user_id, items, delivery_address. Проверь, что items не пустой, верни 400 при некорректном запросе. Покажи Pydantic-модели, обработчик и пример ответа JSON. Базу данных не подключай, используй заглушку.
Такой запрос удобно вставлять в ChatGPT, Copilot Chat или Cursor, а потом дорабатывать под свой проект.
6. SQL, данные и оптимизация
С SQL ChatGPT часто помогает быстро набросать запрос, но его нужно ограничивать схемой. Без схемы модель угадывает названия таблиц.
PostgreSQL, задача: выбрать активных клиентов.
Промт:
Есть таблицы users(id, email, created_at) и orders(id, user_id, status, created_at). Напиши SQL-запрос для PostgreSQL: выбрать пользователей, у которых за последние 30 дней есть минимум 2 оплаченных заказа. Верни user_id, email, orders_count. Добавь индекс, который может ускорить запрос.
Результат: генерация идёт от конкретной схемы, поэтому меньше случайных полей.
Python, задача: обработать CSV.
Промт:
Напиши на Python скрипт, который читает orders.csv, группирует суммы по user_id и сохраняет результат в summary.csv. Используй стандартный модуль csv, не pandas. Обработай пустые строки и некорректную сумму как ошибку с логированием.
Здесь данные описаны заранее, поэтому решение можно быстрее проверить на тестовом файле.
7. Документация, README и технический копирайтинг
Копирайтинг тоже полезен разработчику: README, описание релиза, комментарий к pull request, changelog, инструкция для саппорта. OpenAI Academy приводит рабочую схему для таких задач: описать задачу, дать контекст и задать формат результата.
Документация, задача: README для библиотеки.
Промт:
Напиши README для npm-пакета date-range-utils. Аудитория — frontend-разработчики. Структура: установка, быстрый старт, примеры использования, описание функций, ограничения. Тон спокойный, без рекламных фраз. Не придумывай возможности, которых нет в этом коде: [вставить код].
Результат: получается текст, который можно почти сразу вставлять в репозиторий.
Релиз, задача: понятный changelog.
Промт:
Преврати список коммитов в changelog для версии 1.8.0. Разделы: Added, Changed, Fixed. Не используй маркетинговые клише. Если по коммиту непонятно, что изменилось, вынеси его в блок Needs clarification. Коммиты: [вставить список].
Это уже не чистая автогенерация кода, но для команды такой промт экономит время на рутине.
Сравнительные таблицы
Таблица 1. Сравнение эффективности промптов

Таблица 2. Лучшие практики формулировки промптов

Таблица 3. Популярные ИИ-инструменты для генерации кода

Copilot работает в IDE, GitHub, командной строке и поддерживает агентные сценарии; Windsurf делает ставку на Cascade, контекст проекта, правила и memories; Tabnine отдельно продвигает варианты развёртывания cloud, on-prem и air-gapped для команд с требованиями к приватности.
Советы по составлению промптов
1. Пишите задачу как тикет, а не как мысль вслух
Плохой запрос:
Сделай нормальный поиск.
Хороший запрос:
Напиши функцию поиска товаров на Python. Вход: список словарей products и строка query. Искать по name и sku, регистр не учитывать. Вернуть список совпадений, максимум 20 элементов. Добавь тесты.
Во втором варианте есть задача, формат данных, ограничение и критерий результата.
2. Не просите сразу весь проект
Если нужно создать сервис, делите работу: схема, модели, API, тесты, логирование, Docker, README. Один огромный промт часто даёт красивый, но хрупкий результат.
3. Вставляйте контекст, но без мусора
Полезно вставлять сигнатуру функции, traceback, JSON-пример, схему таблиц, требования из задачи. Не надо кидать весь репозиторий, если меняется одна функция.
4. Просите результат в нужном формате
Например: «выведи только исправленный файл», «сначала план, потом код», «сделай таблицу рисков», «не добавляй объяснения внутри ответа». Это особенно удобно, когда готовый фрагмент нужно быстро перенести в IDE.
5. Требуйте проверку
Добавляйте в промт фразу: «после решения перечисли edge cases и команду запуска тестов». Для ИИ это сигнал, что нужно проверяемое решение.
6. Уточняйте, если результат не подошёл
Не начинайте заново. Лучше написать:
Сохрани тот же подход, но убери внешнюю библиотеку, добавь обработку пустого массива и не меняй публичную сигнатуру.
Такое использование диалога обычно быстрее, чем новый старт с нуля.
7. Проверяйте безопасность и лицензии
ИИ может предложить небезопасную работу с токенами, SQL-инъекцию, хранение пароля в открытом виде или библиотеку с неподходящей лицензией. Поэтому код после модели нужно читать, запускать и прогонять через тесты. Tabnine в своём гайде по выбору AI code assistant тоже выделяет приватность, безопасность, поддержку IDE и языков как отдельные критерии, а не как приятные бонусы.
Заключение
Лучшие промты для программистов это короткое техзадание: язык, контекст, ограничения, входные данные, ожидаемый результат, тесты и запрет на лишние изменения. Такой формат помогает получать готовый фрагмент, который можно проверить, доработать и аккуратно вставлять в проект.
Подсказки от ChatGPT для программиста хорошо работают в рутине: написать небольшую функцию, найти ошибку, собрать тесты, подготовить API-клиент, объяснить чужой код, оформить README или changelog. Но архитектуру, безопасность и финальное ревью нельзя отдавать модели вслепую.
Нормальный рабочий процесс выглядит так: сформулировать промт, получить черновик, запустить тесты, проверить edge cases, только потом тащить результат в продакшен.
