
Всем привет! Меня зовут Щепетков Константин, я TechLead бэкенд разработки компании ZeBrains, работаю в роли TeamLead бэкенда на проекте мобильного приложения Бургер Кинг.
Почти год назад мы запустили полную переработку бэкенда: распиливаем монолит на множество сервисов, всё пишем с нуля. Работы много, сроки плотные — классика.
Чтобы ускорить разработку, решил в качестве эксперимента делегировать часть задач ИИ-инструментам. Негативных кейсов поначалу было много, но со временем качество результата заметно выросло.
В статье делюсь, как давать ИИ чёткие задачи, чтобы он писал рабочий код, соответствующий архитектуре, а не выдумки. Рассказываю про workflow, контекст, шаблоны и кодогенерацию — всё, что превращает ИИ из рискованной игрушки в полезный инструмент для бэкенда. В конце статьи будет ссылка на пример подобных практик.
Тут не будет инструкций к конкретным ИИ-иструментам, но при этом поделюсь практическим опытом применения ИИ. Статья будет полезна не только бэкенд‑разработчикам, но и всем, кто хочет использовать ИИ-инструменты осознанно.
Что надо ИИ, чтобы писать нормальный код?
Самое важное при работе с ИИ — качество результата: корректный, читаемый, рабочий код, который точно соответствует ТЗ и не вносит багов.
К сожалению, у самих LLM с этим большие проблемы. Они не знают, как мы пишем код в нашем проекте, не понимают особенностей бизнеса, часто путаются в деталях, придумывают то, чего нет, или совершают элементарные ошибки — вроде использования несуществующих методов или нарушения контрактов. На выходе получается код, который нельзя пускать в мастер, а тем более использовать как основу архитектурных решений.
Так что же нужно ИИ для корректного выполнения задач?
Workflow — минимальное описание того, как вести работу. Это может быть и простая фраза вроде «реализуй функцию по ТЗ», и полноценный чек-лист: сначала разбей задачу, потом предложи интерфейсы, потом напиши реализацию и т.д.
Чёткое и полное ТЗ — с явным указанием входов, выходов, бизнес-логики и ограничений.
Контекст проекта — понимание, в какой системе мы работаем: структура каталогов, основные модули, принципы взаимодействия сервисов.
Примеры ожидаемого кода — реальные фрагменты из репозитория, демонстрирующие принятый стиль: как пишутся DTO, как организованы хендлеры, как выглядят типичные ошибки и логирование.
Критерии выполнения задач — что значит «выполнено», что мы хотим увидеть по итогу.
Механизмы проверки — линтеры, анализаторы, юнит- и интеграционные тесты, контрактные проверки. Всё, что позволяет сразу отсечь 90% некорректных вариантов ещё до ревью человеком.
Как подготовить проект к работе с ИИ
Первым делом стоит понять, где ИИ может пригодиться. По факту — почти везде: где-то он поможет написать регулярное выражение, а где-то реализует целый микросервис.
В старых монолитах, где всё переплетено, логика размазана, а структуры нет, ИИ практически бесполезен. Там он не может разобраться, путается в зависимостях и выдаёт код, который просто не работает.
У нас ситуация другая: мы начали писать новый бэкенд с нуля, распиливая старый монолит на независимые сервисы. Это и стало отправной точкой для подготовки к использованию ИИ.
С самого начала мы заложили единые шаблоны проектов под нужные языки и фреймворки. У нас чётко определены папки, слои, соглашения по именованию, структура зависимостей. Общие библиотеки и сервисы (логирование, метрики, кеширование) сразу вынесены в отдельные пакеты и хорошо задокументированы.
Это уже даёт ИИ огромный буст в понимании того, что и как у нас устроено. Теперь не нужно объяснять заново каждый новый проект: шаблон говорит сам за себя.
Где сыграла ключевую роль кодогенерация
Настоящий прорыв случился с кодогенерацией.
Раньше ИИ постоянно ошибался в интеграциях, неверно строил DTO, путал поля в схемах ответа, неправильно вызывал внешние сервисы. Сейчас мы поступаем иначе: сначала пишем OpenAPI для контроллеров или конкретной интеграции, а потом генерируем из них весь контроллер (включая модели ответа) или клиент для вызова другого сервиса.
Так мы убрали с плеч ИИ самую сложную для него работу — кропотливый маппинг полей интеграций.
На этом этапе начали формироваться базовые правила написания кода, workflow для ИИ и контекст проекта — всё то, что превращает хаотичные подсказки в предсказуемый, контролируемый результат.
Итого: главный толчок дали три вещи — шаблоны проектов, чистая понятная архитектура и кодогенерация по OpenAPI. Благодаря им мы смогли один раз «объяснить» ИИ, как устроены сервисы, и теперь он уверенно ориентируется в них, не выдумывая лишнего.
ИИ-ассистент на этапе анализа задачи
ИИ можно подключать с самого первого момента — как только вы взяли задачу в работу. Открыли задачу, увидели ТЗ, начали продумывать реализацию и поняли: «Эту задачу можно доверить ИИ».
Но как объяснить ему, что именно нужно?
По опыту, есть два рабочих подхода:
Вы сами описываете задачу — вручную пишете .md-файл (или прямо в чат с ИИ), куда копируете всё из ТЗ: требования, примеры запросов, схемы, комментарии. Главное — дать полную и структурированную картину.
Вы поручаете это ИИ — с помощью современных ИИ-браузеров или браузерных плагинов.
Сейчас есть ИИ-браузеры, которые умеют открывать веб-страницы, читать контент и выдавать структурированное ТЗ в Markdown. Это особенно ценно, когда ТЗ большое, на несколько экранов, с вложенными ссылками, примерами curl-запросов, обсуждениями в комментариях. ИИ спокойно проваливается по подссылкам, собирает всё нужное и оформляет кратко, но полно.
Важно: результат обязательно нужно проверить. ИИ может что-то упустить, неправильно интерпретировать или пропустить уточнение в комментарии.
Кроме того, вы дополняете ТЗ своими техническими и архитектурными требованиями — тем, что знает только разработчик: «используй общий клиент логирования», «не создавай новый слой, положи в service», «валидация — только через встроенный мидлвар» и т.п.
Кстати, такие ИИ-браузеры полезны не только для анализа задач: они отлично справляются с поиском информации, анализом логов в Kibana или Grafana, заполнением форм, составлением отчётов — любыми рутинными действиями в браузере.
Итого: мы получаем способ превратить «сырое» ТЗ в чёткое, структурированное задание для ИИ и обогатить его экспертным контекстом, чтобы модель поняла не только «что», но и «как именно требуется реализовать задачу».
Как дать ИИ нужный контекст — и не утонуть в деталях
У нас уже есть базовый workflow и полное ТЗ, но этого часто недостаточно.
Современные ИИ-ассистенты в IDE умеют индексировать репозиторий и «примерно» понимать структуру проекта… если повезёт. Но нам нужно, чтобы ИИ понял задачу точно, а не «примерно».
Чтобы не полагаться на удачу, контекст мы передаём сами — только тот, что действительно нужен для задачи.
Три ключевых элемента:
Описание проекта и правила разработки
Что это за сервис? На каком стеке написан? Какие соглашения важны именно здесь?
Часть этой информации уже заложена в единых шаблонах, но для конкретного проекта нужно уточнить:
какие слои использовать;
как именовать переменные и пакеты;
где лежит бизнес-логика, а где — инфраструктурный код.
Это не «правила для всех», а локальные договорённости, которые помогают ИИ писать «как мы».Информация об интеграциях
Если задача затрагивает внешние сервисы — указываем, где лежат готовые клиенты или как их создавать.
Если интеграции нет, но есть работа с БД — прикладываем DDL-файл с описанием таблиц и полей.
Это исключает выдумки вроде «а давай добавим колонку user_secret_token» — если её нет в схеме, ИИ её не придумает.Список доступных общих сервисов
Кэш, метрики, логирование, авторизация — всё, что уже реализовано и может быть задействовано в логике.
Достаточно дать краткое описание и ссылки на соответствующие модули. Это помогает ИИ не писать велосипед, а использовать готовое.
P.S. Вообще это подход memory bank: в нём больше файлов и описаний, но не обязательно описывать всё, только то, что вы считаете нужным.
Дополнительно: если задача сложная, с множеством классов, интерфейсов или неочевидными связями, хорошая практика — заранее создать «скелет» кода: пустые файлы, интерфейсы, сигнатуры методов. Так ИИ точно знает, куда вставлять логику, и не начнёт придумывать свою архитектуру.
Как формировать запрос к ИИ
Собираем всё вместе:
кратко напоминаем workflow (или вставляем его целиком);
прикладываем структурированное ТЗ;
даём только нужный контекст (не весь репозиторий!);
указываем конкретные файлы, с которыми нужно работать;
добавляем комментарии: «здесь важно использовать общий клиент», «валидация — через валидатор в пакете X», «не пиши код, пока я не подтвержу».
Примеры — очень полезны
ИИ по умолчанию пишет код «как умеет», а не «как вы». Чтобы направить его, покажите, как «правильно».
Это могут быть:
фрагмент или ссылка на существующий контроллер;
образец DTO с тегами и комментариями;
шаблон unit-теста.
Современные ИИ-агенты в IDE иногда сами находят такие примеры, но если явно указать их в контексте — шанс ошибки резко падает.
Проверка и итерации
Можно сразу просить ИИ написать тесты и прогнать линтер, но на практике удобнее делать это отдельным запросом:
Сначала — реализация логики.
Вы проверяете, всё ли соответствует ТЗ и архитектуре.
Затем — отдельный запрос: «напиши unit-тесты» или «добавь проверки, исправь замечания линтера».
И самая эффективная практика:
Сначала просите ИИ написать план реализации: шаги, файлы, логику.
Апрувите план или правите его.
И только потом даёте команду писать код.
Это позволяет сразу увидеть:
правильно ли ИИ понял задачу;
хватает ли ему контекста;
не упустили ли вы что-то в ТЗ.
Если что-то не так — дописываете контекст и запрашиваете новый план. Если всё верно — даёте зелёный свет на генерацию.
Работайте с ИИ как с джуном — итеративно и с обратной связью
К этому моменту у нас уже есть:
workflow,
структурированное ТЗ,
необходимый контекст проекта,
примеры кода,
пояснения по реализации,
критерии проверки.
На первый взгляд может показаться: «Больше времени уйдёт на описание, чем на саму задачу, проще самому написать». И в первый раз так часто и бывает.
Но на практике почти весь контекст вы создаёте один раз:
правила разбиваете на отдельные .md-файлы;
шаблоны, OpenAPI, DDL уже лежат в репозитории;
примеры кода — в том же проекте.
Дальше вы просто подкидываете нужные файлы в чат как контекст. Остаётся написать только ТЗ и пару комментариев под задачу.
Не перегружайте контекст
ИИ в большинстве задач пишет приемлемый код. Ему не нужно знать всё обо всём.
Давайте только то, что важно именно сейчас.
Сами правила формулируйте кратко и по делу.
Главное — не пытайтесь решить задачу одним запросом
Даже опытный разработчик редко пишет идеальный код с первой попытки. Почему ИИ должен?
Правильный цикл работы:
Отправляете сформированный запрос.
ИИ предлагает план реализации — вы его апрувите или корректируете.
Он пишет код — вы читаете, проверяете, задаёте уточнения.
Если ИИ «пошёл не туда» — пишете: «Нет, сделай вот так», и даёте подсказку.
Если ошибка — просите исправить. Это нормально.
1–5 запросов на задачу — стандартная практика. Если уходит больше, возможно, не хватает контекста… или задача просто не подходит для ИИ (например, требует глубокого понимания бизнес-логики или архитектурных решений).
Если ИИ «застрял» — помогите ему: напишите кусок логики сами, а дальше попросите продолжить. Часто этого достаточно, чтобы он «въехал» в контекст.
Не забывайте про тесты и проверки
Либо сразу просите написать unit-тесты, либо после апрува кода оформляете отдельный запрос: «Напиши тесты», «Проверь, не сломалось ли что-то в существующих сценариях», «Запусти линтер и исправь замечания».
И самое важное — задавайте ИИ вопросы:
«Почему ты сделал именно так?»
На что он опирался?
Не упустил ли что-то критичное?
Для джунов и миддлов это обязательный шаг — понимать мотивацию за каждым решением. То же самое и с ИИ. Он не «магический генератор», а ассистент, которому нужна обратная связь. Работайте с ним как с коллегой — не идеальным, но обучаемым.
Никогда не лейте код ИИ в мастер без ревью
Итак, задача «готова»: ИИ написал код, тесты проходят, всё выглядит нормально. Но это не повод мёржить без проверки.
Нужно обязательно:
внимательно прочитать то, что сгенерировал ИИ;
понять, как работает логика;
убедиться, что нет скрытых ошибок, избыточных вызовов или потенциальных багов.
Если видите, что решение неоптимально — исправьте сами или попросите ИИ переписать. Даже «рабочий» код может быть неподдерживаемым, избыточным или несоответствующим архитектуре.
Обязательно делайте ревью через git:
проверьте все изменённые файлы;
убедитесь, что ИИ не трогал то, что не должен (не изменил соседний хендлер или конфиг);
сравните результат с изначальным планом.
Помните: за изменения в ветке отвечаете вы, даже если код писал ИИ.
Итог: применяйте ИИ осознанно
ИИ не знает ваш проект. Он не знает, как вы пишете код, не понимает бизнес-контекста и часто не до конца улавливает, чего именно вы хотите.
Если просто написать: «Сделай», — результат будет относительно случайным. А потом ругаться, что «ИИ тупой и ничего не может», — всё равно что взять перфоратор, зажать кнопку «включить» и швырнуть его в стену, а потом удивляться: «Почему полку не повесил?»
ИИ — это инструмент. Как молоток, как IDE, как curl. У него есть возможности и ограничения. Чтобы получить пользу, нужно уметь им пользоваться: понимать, что можно доверить, как правильно объяснить задачу и как проверить результат.
В этой статье я поделился реальным примером, как мы интегрируем ИИ в разработку бэкенда:
через шаблоны,
кодогенерацию по OpenAPI,
структурированные ТЗ,
управляемый контекст,
итеративную работу и обязательное ревью.
Это не рецепт, а направление. Ваш путь может быть другим — пробуйте, тестируйте, адаптируйте.
Но помните: за всеми возможностями ИИ скрываются серьёзные риски — от багов до утечек контекста при использовании внешних сервисов и деградации кодовой базы. К этому стоит подходить осознанно, осторожно и с контролем. Но об этом — в другой раз.
Примеры шаблонов, workflow и промптов, использованных в статье, доступны на GitLab:
https://gitlab.com/k.schepetkov/example-workflow
Всем спасибо! И пока ?
uvelichitel
Уточните, пожалуйста, на каком языке программирования велась разработка.