Актуальные вакансии
Управление файлами cookie
Мы используем файлы cookie и метрическую систему (Яндекс.Метрика) с целью персонализации сервисов и чтобы пользоваться веб-сайтом было удобнее. Продолжив работу с сайтом, вы соглашаетесь с использованием файлов cookie и метрической системы на условиях Политики обработки персональных данных
Управление файлами cookie
Настройки файлов cookie
Файлы cookie, необходимые для корректной работы сайта, всегда включены.
Другие файлы cookie можно настроить.
Основные файлы cookie
Всегда включен. Эти файлы cookie необходимы для того, чтобы вы могли пользоваться веб-сайтом и его функциями. Их нельзя отключить. Они устанавливаются в ответ на ваши запросы, такие как настройка параметров конфиденциальности, вход в систему или заполнение форм.
Аналитические файлы cookie
Disabled
Эти файлы cookie собирают информацию, чтобы помочь нам понять, как используются наши веб-сайты или насколько эффективны наши маркетинговые кампании, или чтобы помочь нам настроить наши веб-сайты под вас. Смотрите список используемых нами аналитических файлов cookie здесь.
Рекламные файлы cookie
Disabled
Эти файлы cookie предоставляют рекламным компаниям информацию о вашей онлайн-активности, чтобы помочь им предоставлять вам более релевантную онлайн-рекламу или ограничить количество просмотров рекламы. Эта информация может быть передана другим рекламным компаниям. Смотрите список рекламных файлов cookie, которые мы используем здесь.

Как работать с ИИ-агентами и не терять контроль над разработкой

Примерное время чтения: 7 минут

ИИ-агенты уже умеют самостоятельно исследовать кодовую базу, вносить изменения и запускать проверки. Но чем сложнее задача, тем больше ограничений приходится учитывать, а убедительный результат не всегда оказывается правильным.
Евгения Журавишкина, разработчик Selecty
Я Евгения Журавишкина, разработчик Selecty

Основной инструмент — n8n. Собираю автоматизации и интеграции, работаю с JavaScript, API и базами данных.
В статье расскажу, с какими ошибками агентов сталкивалась на практике, как организую работу над сложными задачами и в каких случаях оставляю контроль за разработчиком. А еще разберу, как использовать ИИ для ускорения разработки и при этом не терять понимание системы, за которую отвечаешь.
Разработчик делегирует задачи ИИ-агенту

Почему даже с мощным харнессом все равно необходимо код-ревью

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

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

В итоге ревьюер кроме качества реализации проверяет еще и предположения, на которых она построена. Получается, что ИИ ускоряет написание кода для одного разработчика, но часть сэкономленного времени просто переезжает к другому человеку.
Хороший харнесс помогает обнаруживать часть ошибок еще до ревью, но автоматические проверки не заменяют оценку самого решения. Особенно это важно в задачах, связанных с архитектурой, бизнес-логикой и внешними интеграциями: здесь код может успешно проходить тесты и при этом не соответствовать реальным требованиям системы.
Особенно показателен здесь опыт работы с внешними API: агент может неверно интерпретировать документацию и построить реализацию на ошибочном предположении. С такой ситуацией мы столкнулись при интеграции с сервисом электронного документооборота:
  • Заказчик хотел поддержать два способа подписания документов: по внешней ссылке и через кнопку внутри приложения. Однако API сервиса допускал только один из этих вариантов.
  • Агент изучил документацию, но ошибочно предположил, что оба сценария можно совместить, и построил реализацию на этой гипотезе. На этапе тестирования ограничение не обнаружили, поэтому ошибка дошла до продакшена.
  • В результате часть клиентов не могла подписывать документы, а на поиск причины и исправление ушла значительная часть рабочего дня.
  • После инцидента мы зафиксировали ограничение API в документации проекта и добавили проверку соответствующего сценария, чтобы подобная ошибка больше не проходила незамеченной.
Главный вывод из этой истории для меня в том, что проверять нужно не только написанный код, но и предположения, на которых строится решение. Если агент неверно понял ограничения внешнего API, даже технически корректная реализация может не соответствовать реальным требованиям задачи.
Поэтому у меня остается простое правило: если изменение уходит в проект от моего имени, я должна понимать, что именно поменялось, почему выбрано такое решение и какие ограничения оно учитывает.

Хороший результат начинается с плана

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

Получается простой рабочий цикл: исследование проекта, план, реализация небольшими шагами и проверка результата. Вот как этот цикл может выглядеть:
  • Исследовать проект
    Агент находит связанные компоненты, смотрит существующие решения, документацию и тесты, выясняет ограничения. На этом этапе ему нужно понять, какие части системы затронет изменение и какие механизмы уже есть в проекте.
  • Составить и проверить план
    Агент описывает, что именно собирается менять и как проверит результат — на сложной задаче это еще и хорошая первая точка для человеческого контроля. Если он хочет поменять не тот модуль, продублировать существующий механизм или нарушить архитектурное ограничение, поправить здесь гораздо дешевле.
  • Перейти к реализации
    Агент работает автономно, небольшими логическими итерациями: вносит изменения, запускает проверки и при необходимости корректирует дальнейшие действия.
  • Проверить результат
    Агент выполняет необходимые проверки и сопоставляет результат с требованиями. Разработчик оценивает корректность решения, особенно если задача затрагивает бизнес-логику, архитектуру или внешние интеграции.
Между контрольными точками агент работает самостоятельно: вносит изменения, запускает проверки и корректирует дальнейшие действия. Количество точек зависит от сложности задачи и цены ошибки.
Небольшие локальные изменения можно доверить агенту практически полностью. Но для архитектурных решений, миграций, изменений, связанных с безопасностью, и внешних интеграций я бы оставляла обязательную проверку плана и согласование потенциально опасных действий.

Контекст и сохранение состояния

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

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

Доступ к какой информации дать ИИ-агенту

В корпоративной разработке часть требований существует вне репозитория: в базе знаний, архитектурных решениях (ADR), регламентах и описаниях интеграций. Если агент не получает эту информацию, он может предложить технически корректное решение, которое противоречит реальным требованиям проекта.

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

Как работать с объемными задачами и большим контекстом

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

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

С несколькими агентами к этому добавляется координация. В другом эксперименте Anthropic 16 экземпляров Claude параллельно работали над C-компилятором на Rust. За две недели они создали около 100 тысяч строк кода и добились компиляции ядра Linux. При этом параллельная работа потребовала дополнительных механизмов координации: агенты могли конфликтовать при изменении общих файлов, а проверки становились узким местом.
Оба эксперимента показывают, что на длинных задачах недостаточно просто дать агенту больше времени или запустить несколько экземпляров параллельно. Важно организовать работу так, чтобы каждый следующий шаг учитывал предыдущие решения, а агенты не мешали друг другу при изменении общей кодовой базы.

Как с появлением ИИ в разработке бизнес повышает требования

Бизнес рассчитывает, что с ИИ разработка пойдет в разы быстрее. Но, допустим, агент подготовил изменение за десять минут вместо часа. Дальше его нужно проверить, протестировать и выкатить. Если на этих этапах задача застревает, выигрыш для скорости разработки будет скромным — или эффективность вовсе упадет. С неконтролируемой быстрой генерацией команда рискует получить слишком много кода, который еще предстоит довести до ума.

В отчете DORA за 2025 год ИИ описывают как усилитель существующих преимуществ и проблем организации. Его влияние на эффективность зависит от того, как устроен весь процесс разработки. Например, если генерация кода ускоряется, а ревью остается узким местом, очередь изменений может только увеличиться.
Харнесс помогает автоматизировать часть этого пути. Агент получает правила проекта, запускает проверки и исправляет найденные ошибки до передачи работы дальше. При надежных тестах и налаженном CI/CD это может сократить срок от постановки задачи до релиза, но перегруженное ревью и неудобный процесс выкладки тоже придется разбирать.

Эффект от ИИ стоит оценивать по скорости всего цикла разработки: как быстро команда доставляет рабочие изменения пользователям и сколько переделок они требуют.

Что меняется для разработчика

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

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

Как балансировать между продуктивностью и безопасностью при разработке с ИИ

Я бы отдавала агенту максимум механической работы, но оставляла контроль там, где ошибка дорого обойдется проекту. На практике это можно оформить в несколько правил:
  • Не ограничивайтесь автоматическими проверками
    Тесты, линтеры и статический анализ помогают обнаруживать ошибки в реализации, но не всегда выявляют неверные предположения о работе системы. Проверяйте не только результаты тестов, но и соответствие решения исходным требованиям.
  • Проверяйте предположения до начала реализации
    Перед сложными изменениями попросите агента объяснить, на какие ограничения он опирается, какие компоненты собирается затронуть и какие риски видит. Ошибку в плане исправить проще, чем последствия уже внесенных изменений.
  • Разбирайтесь в исправлениях, которые принимаете
    Если агент нашел сложный баг, выясните его первопричину, почему предложенный патч устраняет проблему и какие проверки это подтверждают. Иначе есть риск принять рабочее на первый взгляд исправление, не разобравшись в устройстве системы.
  • Анализируйте ошибки, которые прошли проверки
    Если проблема дошла до ревью или продакшена, важно понять не только, почему ошибся агент, но и почему существующие механизмы контроля этого не обнаружили. Такие случаи стоит использовать для улучшения тестов и процесса разработки.
  • Сохраняйте понимание критичных частей проекта
    Необязательно писать весь код самостоятельно, но важно разбираться в архитектуре, бизнес-логике и ключевых зависимостях. Чем больше работы выполняет агент, тем важнее способность разработчика оценивать его решения и последствия изменений.
В конечном счете агенту можно делегировать выполнение работы, но не ответственность за результат.
Евгения Журавишкина
Разработчик Selecty
Показать ещё