Качество описания = качество кода
В Уроке 1 вы сгенерировали первую функцию — простую, с одной задачей. Но реальные задачи сложнее: несколько шагов, условия, обработка ошибок, взаимодействие с базой данных или API.
Парадокс: чем сложнее задача, тем важнее качество описания. Если для простой функции достаточно «посчитай сумму», то для сложной нужна мини-спецификация.
3 уровня генерации кода:
Уровень 1: Одна функция — «напиши функцию валидации email». AI справляется идеально. Это вы уже умеете из Урока 1.
Уровень 2: Алгоритм из нескольких шагов — «функция, которая читает CSV, фильтрует строки по дате, группирует по категории, считает средние и записывает результат в новый файл». Здесь нужна декомпозиция — без неё AI запутается в порядке шагов или пропустит один из них.
Уровень 3: Полная фича — «API-эндпоинт для регистрации пользователя: валидация данных, хеширование пароля, запись в БД, отправка email подтверждения, возврат токена». Это несколько файлов и слоёв — без правильного описания AI выдаст «кашу».
Правило: описание задачи должно быть длиннее, чем вы думаете. 2-3 предложения → посредственный код. 10-15 предложений с примерами → почти production-ready код.
Ключевой навык этого урока: научиться писать «мини-ТЗ» для AI, которое превращается в качественный код с первого раза.
5 техник для точной генерации кода
В Уроке 1 вы использовали базовый промпт с полями «Задача + Входные данные + Выходные данные». Это работает для простых функций. Для задач Уровня 2 и 3 нужны продвинутые техники:
Техника 1: Пошаговая декомпозиция
Вместо «напиши функцию обработки заказа» разбиваете на шаги: «Шаг 1: проверь, что все товары в наличии. Шаг 2: рассчитай стоимость с учётом скидок. Шаг 3: спиши со склада. Шаг 4: создай запись заказа. Шаг 5: верни подтверждение.» AI будет следовать вашему плану и не пропустит ни одного шага.
Техника 2: Примеры входа/выхода
Самый мощный способ объяснить AI, что вы хотите. Вместо «функция форматирования телефона» покажите: вход: «89991234567» → выход: «+7 (999) 123-45-67». Вход: «+7 999 123 45 67» → выход: «+7 (999) 123-45-67». AI поймёт паттерн и обработает все варианты, включая те, о которых вы не подумали.
Техника 3: Ограничения вперёд (Constraints-first)
Скажите AI, чего делать НЕ нужно: «Без внешних библиотек», «Не используй рекурсию», «Совместимость с Python 3.8», «Не более 50 строк». Ограничения сужают пространство решений — AI не выдаст решение с 10 зависимостями, когда вам нужен чистый код.
Техника 4: Итеративная доработка
Не пытайтесь получить идеальный код с первого раза. Схема: Генерация → Ревью → Уточнение → Финал. Первый запрос: «Напиши функцию X.» Второй: «Добавь обработку ошибок для случаев Y и Z.» Третий: «Оптимизируй — сейчас O(n²), нужно O(n log n).» Каждая итерация улучшает код — как скульптор, который сначала вырубает форму, потом шлифует детали.
Техника 5: Контекст проекта
Если вы работаете в существующем проекте, скажите AI: «Проект на FastAPI + SQLAlchemy + PostgreSQL. Стиль кода: PEP8, type hints обязательны, логирование через structlog.» AI подстроит код под ваш стек и стиль — не нужно переписывать потом.
Ключевое отличие от Урока 1: там вы описывали что нужно. Здесь вы учитесь описывать как именно — с шагами, примерами и ограничениями. Это разница между «хочу сайт» и техническим заданием.
Как бэкенд-разработчик создал 8 API-эндпоинтов за 3 часа вместо 2 дней
Ситуация: бэкенд-разработчик в логистической компании. Задача: создать REST API для системы управления складом — 8 эндпоинтов: CRUD для товаров, приёмка, списание, поиск с фильтрами, генерация отчёта по остаткам.
Обычный подход: 2 рабочих дня (16 часов). Модели данных (2 часа), маршруты (4 часа), валидация (3 часа), обработка ошибок (2 часа), тесты (3 часа), документация (2 часа).
Подход с AI и 5 техниками:
Шаг 1. Декомпозиция. Описал каждый эндпоинт отдельно: метод, путь, параметры, пошаговая логика обработки, формат ответа (успех и ошибки). Не «сделай CRUD» — а «POST /api/items — принимает name, sku, quantity, price. Шаг 1: валидация (sku уникален). Шаг 2: создание записи. Шаг 3: возврат 201 с id.»
Шаг 2. Примеры входа/выхода. Для сложных эндпоинтов (поиск с фильтрами, отчёт по остаткам) дал конкретные примеры: «GET /api/items?category=electronics&min_qty=10 → список товаров с пагинацией, total_count в заголовке.»
Шаг 3. Ограничения. «FastAPI, Pydantic v2, async SQLAlchemy, PostgreSQL. Без ORM-магии — явные запросы. Все ответы через стандартный ResponseModel.»
Шаг 4. Итеративная доработка. Первая версия → добавил пагинацию → добавил обработку конкурентных запросов при списании (чтобы два пользователя не списали один товар одновременно).
Результат: 8 эндпоинтов за 3 часа. Код прошёл код-ревью с 2 мелкими замечаниями (вместо обычных 8-10). Тесты — 85% покрытие. Документация Swagger — сгенерирована автоматически из Pydantic-моделей.
Главный вывод: время сместилось с написания кода на описание задачи. 40% времени — формулировка описания, 20% — генерация, 40% — проверка и доработка. Раньше: 10% описание, 70% написание, 20% отладка.
Продвинутый генератор кода с декомпозицией
Этот промпт значительно мощнее, чем в Уроке 1. Он использует все 5 техник: контекст проекта, пошаговую декомпозицию, примеры, ограничения, и настроен на итеративную доработку. Заполняйте разделы в квадратных скобках:
Ты — senior-разработчик, который пишет production-ready код. Следуешь принципам чистого кода, SOLID и DRY. КОНТЕКСТ ПРОЕКТА: - Язык/фреймворк: [например: Python + FastAPI / TypeScript + Express / Go + Gin] - База данных: [PostgreSQL / MongoDB / SQLite / без БД] - Стиль кода: [PEP8 / ESLint Airbnb / стандартный] - Существующие зависимости: [перечисли, что уже используется в проекте] ЗАДАЧА: [Опиши, что должен делать код] ПОШАГОВАЯ ЛОГИКА (декомпозиция): 1. [Первый шаг — что происходит сначала] 2. [Второй шаг] 3. [Третий шаг] ... ПРИМЕРЫ ВХОДА/ВЫХОДА: - Вход: [пример входных данных] → Выход: [ожидаемый результат] - Вход: [граничный случай] → Выход: [что должно произойти] - Вход: [невалидные данные] → Выход: [какая ошибка] ОГРАНИЧЕНИЯ: - [что НЕ использовать — библиотеки, паттерны, подходы] - [требования к производительности — O(n), лимит памяти] - [совместимость — версия языка, браузеры, ОС] ТРЕБОВАНИЯ К РЕЗУЛЬТАТУ: 1. Полный рабочий код (не псевдокод, не фрагменты) 2. Type hints / типизация 3. Обработка ошибок с понятными сообщениями 4. Docstring / комментарии к сложным блокам 5. 5 unit-тестов: нормальный вход, граничные случаи, невалидные данные 6. Пример вызова с реальными данными Если задача слишком сложная для одного файла — разбей на модули и покажи структуру файлов.
Не обязательно заполнять все разделы. Для простых задач достаточно «Контекст + Задача + Ограничения». Для сложных — добавляйте декомпозицию и примеры. Чем сложнее задача, тем больше разделов нужно заполнить. После генерации попросите AI: «Что можно улучшить?» — и примените Технику 4 (итеративная доработка).
🤖 Открыть в AI-модели
Мысль дня
Лучший промпт для генерации кода — это не про код. Это про чёткое описание проблемы. Когда вы точно знаете, ЧТО нужно — AI знает, КАК это написать. Ваша суперсила — не синтаксис, а умение формулировать задачу.
Сгенерируйте сложную функцию с итеративной доработкой
Сегодня вы применяете все 5 техник на практике. Задание из трёх шагов — каждый сложнее предыдущего:
Выберите одну задачу: (а) Парсер логов — функция, которая читает лог-файл, извлекает ошибки, группирует по типу и создаёт отчёт с количеством каждого типа ошибок и временными метками. (б) Калькулятор доставки — функция, которая по весу, габаритам, расстоянию и тарифной зоне рассчитывает стоимость доставки с учётом скидок за объём. (в) Ваша реальная рабочая задача — что-то, что вам действительно нужно автоматизировать. Разбейте выбранную задачу на 4-6 пошаговых шагов (Техника 1).
К описанию из Шага 1 добавьте: 2-3 примера входа/выхода (Техника 2), ограничения — язык, без внешних библиотек (Техника 3), контекст проекта (Техника 5). Вставьте всё в продвинутый промпт из блока выше и сгенерируйте код. Прочитайте результат — понятна ли логика? Совпадают ли шаги с вашей декомпозицией?
Раунд 1: «Добавь обработку 3 дополнительных ошибок: [опиши, какие именно ситуации нужно поймать].» Раунд 2: «Оптимизируй производительность — объясни, какие места можно ускорить и почему.» Раунд 3: «Сделай код-ревью финальной версии и оцени по шкале 1-10: читаемость, надёжность, производительность.» Сравните первую версию с финальной — разница покажет силу итеративного подхода (Техника 4).