Один ИИ-помощник путается в задачах: как разделить поиск, ревью и правку на субагентов
Разделите одного путающегося помощника на трёх узких субагентов: поиск, ревью и правку. Получайте сухие выводы и чините ровно одну строку.
Вы чините падение в проде. Открываете чат с ИИ-помощником, кидаете ему лог ошибки и просите найти причину. Он бодро отвечает, начинает искать по коду, тут же отвлекается на обсуждение стиля, вспоминает про тесты, предлагает переписать полмодуля, а в итоге присылает длинное полотно текста. Вы тратите полчаса на то, чтобы отделить важное от шума, и всё равно не понимаете, какую именно строчку менять. Знакомо?
Один чат-агент на весь проект быстро путается в задачах. Ему мешают и поиск по файлам, и ревью (проверка кода на ошибки и соответствие правилам), и правки. Он пытается удержать в голове всё сразу, его контекст (оперативная память диалога) забивается, и вместо точного инструмента вы получаете болтливого стажера, который говорит обо всём и ни о чём.
Шаг 1. Поймите, почему один агент всегда проигрывает
Представьте, что вы наняли одного человека на три разные должности: он и курьер, и бухгалтер, и юрист. Пока он бежит в банк, забывает адрес доставки. Пока пишет отчет, путает статьи закона. Мозг человека — и языковой модели — устроен так, что при переключении контекста часть информации теряется. Когда вы в одном промпте (запросе к модели) просите «найди место падения, проверь типизацию и предложи фикс», модель вынуждена жонглировать тремя разными режимами работы.
Поиск требует сканирования файлов и удержания в памяти только строк кода. Ревью требует включения чек-листа правил проекта. Правка требует генерации нового текста. В итоге модель усредняет задачи. Она находит место, но по пути забывает про типизацию, или находит типизацию, но предлагает править не тот файл. Вы получаете не решение, а поток сознания, потому что один контекст пытается вместить три разных фокуса.
Шаг 2. Соберите команду из трех узких субагентов
Субагенты — это отдельные помощники под узкие подзадачи. Вы не просите одного человека быть всем сразу, вы нанимаете команду. В контексте современных ИИ-редакторов (например, Cursor) или продвинутых чатов это реализуется через системные инструкции (правила, которые вы задаете помощнику в самом начале диалога).
Ваша команда выглядит так: 1. Субагент поиска. Его единственная работа — найти. Вы даете ему лог ошибки, он возвращает только путь к файлу и номер строки. Никаких теорий, никаких «возможно». Только сухой факт: «Падение в файле auth.js на строке 42, функция login». 2. Субагент ревью. Он получает от вас этот файл и строку. Его работа — проверить типизацию (соответствие типов данных, например, чтобы в поле для числа не пришла строка) и стиль по правилам вашего проекта. Он не чинит код. Он возвращает только список нарушений: «На строке 42 ожидается число, приходит строка. На строке 45 нет обработки пустого значения». 3. Субагент правки. Он получает сухой вывод от второго. Его работа — предложить минимальный фикс. Он возвращает только новый фрагмент кода, который заменяет старую строку.
Каждый из них держит свой узкий контекст и возвращает только итог. Основной агент (или вы сами) получает два сухих вывода и чинит ровно одну строку.
Шаг 3. Проверьте, где ваш текущий помощник смешивает роли
Давайте разберем вашу текущую боль на примере того самого падения. Допустим, вы чините падение при входе пользователя. Вы кидаете в чат: «Сайт падает при логине, вот лог, найди и почини».
Как это выглядит сейчас (один агент): Модель выдает абзац: «Я проанализировал логи. Проблема может быть в бэкенде или фронтенде. Давайте проверим конфиги. Кстати, у вас в функции login используются старые хуки, их лучше обновить. Я переписал весь файл, вот он». Вы читаете это, устаете и откладываете задачу.
Как это должно выглядеть (субагенты): Вы задаете правило: «На каждый вопрос вызывай отдельного субагента: поиск, затем ревью, затем правка. В основной чат — только финальный вывод».
Субагент поиска сканирует стек (список вызовов функций) и выдает: «Ошибка NullPointer в auth.js:42». Субагент ревью открывает auth.js:42 и выдает: «Функция ожидает объект user с полем id: number. В логах видно, что приходит id: string из внешнего API». Субагент правки берет этот факт и выдает: «Замени строку 42 на const userId = String(user.id)».
Вы тратите 30 секунд на чтение трех строк вместо 30 минут на расшифровку одного полотна. Ошибки коммуникации исключаются, потому что второму агенту физически некуда вставить совет про «старые хуки» — его задача только сверить типы данных.
Шаг 4. Внедрите правило прямо в сегодняшней задаче
Вам не нужно переустанавливать программы или писать сложный код. Достаточно изменить способ общения с помощником. Сегодня задайте помощнику правило: «На каждый вопрос вызывай отдельного субагента: поиск, затем ревью, затем правка. В основной чат — только финальный вывод».
Как это сделать на практике: — Если вы используете продвинутый редактор вроде Cursor, создайте в настройках проекта три правила. Первое: «Ты — SearchAgent. Твой ответ — только путь и строка». Второе: «Ты — ReviewAgent. Твой ответ — только список нарушений типизации». Третье: «Ты — FixAgent. Твой ответ — только готовый код». — Если вы работаете в обычном чате, делайте это вручную, но жестко.
Копируйте ваш реальный рабочий кейс. Напишите первый запрос: «Ты сейчас субагент поиска. Вот лог. Найди только файл и строку». Скопируйте его ответ. Напишите второй запрос: «Ты субагент ревью. Вот файл и строка. Проверь только типизацию». Скопируйте ответ. Напишите третьему: «Ты субагент правки. Вот нарушение. Напиши только исправленный код».
ГЛАВНОЕ ПРАВИЛО — ноль отступлений от темы. Если субагент поиска начал объяснять, почему возникла ошибка, или субагент правки начал рефакторить (переписывать для красоты) соседние функции — останавливайте его. Удаляйте лишнее из его системной роли. Его работа — одна строчка факта. Если агент возвращается с текстом длиннее двух предложений, ваш промпт (инструкция) слишком мягкий. Уточняйте: «Только путь и строка. Без объяснений».
Что именно сделать завтра
1. Выберите одну текущую задачу, где ИИ-помощник уже выдал вам «стену текста» и не решил проблему (например, поиск бага в упавшем тесте). 2. Разверните чат и пройдите по ней заново, но строго по ролям. Сначала запросите только у «поисковика» файл и строку. 3. Затем передайте это «ревьюеру» с инструкцией найти только одну проблему с типами данных. 4. Передайте сухой вывод «правщику» с командой сгенерировать только минимальный фикс. 5. Соберите три сухих ответа, внесите изменение руками и запустите проверку. Вы увидите, что решение находится за пару минут, а в основном чате остается только чистый результат без мусора. В следующий раз, открывая новый чат, начинайте с этой инструкции, и один путающийся помощник превратится в слаженный конвейер.