Слогер Создать блог
Разработка

Ревью кода от ИИ-агента: как вернуть работу вместо тихого исправления

Тихое исправление огрехов ИИ-агента стирает ценный опыт и делает ревьюера бесплатным работником. Разбираем карточку hand-back: когда возвращать задачу агенту, как оформить и где поставить стоп.

Тиммейт прогоняет задачу через ИИ-агента. Диф почти правильный: логика работает, но обработка ошибок слабая, а ретрай-путь молча отваливается. Быстрый вариант — исправить самому. Тридцать секунд, коммит, готово.

Это маленькое решение важнее, чем кажется. Когда ревьюер молча правит код, паттерн отказа агента не фиксируется, промпт и контекст не корректируются, а в истории версий остаётся чистый фикс — без отвергнутой попытки. Система не учится ничему. Альтернатива — hand-back: ревьюер возвращает работу агенту, прикладывая причину отказа. Разберём карточку для такого возврата, таблицу решений, протокол проверки и ограничения.

Почему тихое исправление — плохой дефолт

Тихое исправление оптимизирует текущий момент, но налог платит вся система. Ревьюер своими правками показывает агенту, что именно тот сделал не так, — это самый ценный фидбек, и он испаряется. Ревьюер превращается в неоплачиваемого призрака-доработчика: команда говорит «агент отлично работает», пока старшие тихо допиливают каждый диф. А когда исправленный код падает, коммит обвиняет человека, хотя дефект зародился в поведении агента. Реконструировать это уже нельзя.

Сделать возврат структурированным и менее затратным, чем правка кода, — вот дизайн-фикс. Он не в том, чтобы просить ревьюеров писать больше комментариев.

Карточка hand-back

Когда ревьюер отклоняет результат агента, он не открывает файл: он заполняет небольшую карточку. Предлагаемые поля:

  • Причина отказа (одно из): неверный подход, пропущенный случай, стиль, безопасность/побочные эффекты, непроверяемое утверждение.
  • Где отказало: файл:строка или цитата.
  • Доказательства: тест-ран, строка спеки, личное знание.
  • Ограничение для ретрая: одно предложение, которому должна удовлетворять следующая попытка.
  • Область ретрая: только этот файл / новый контекст / эскалация мне.

Ключевые решения здесь такие. Поле «ограничение» обязательно и занимает одну строку: ревьюер обязан превратить «что-то не так» в исполнимую инструкцию. Если он не может — значит, задача была недоспецифицирована, а не агент плох. Селектор области ретрая страхует от самого частого сбоя авторетрая — петли. Пункт «новый контекст» требует приложить новые доказательства (падение теста, фрагмент спеки), иначе агент не запускается снова. И наконец, карточка становится частью коммита: отвергнутый вывод агента, карточка и принятая версия хранятся как единое целое. Ничего не теряется.

Таблица решений для ревьюера

СитуацияИсправить самомуВернуть с карточкойЭскалация / стоп
Опечатка, одна строка, однозначно
Пропущенный крайний случай, который можно назвать одной фразой
Не могу сформулировать, что не так, одной фразой✅ задача недоспецифицирована
Ошибка затрагивает auth, потерю данных или биллинг✅ никогда молча не фиксить и не авторетраить
Второе отклонение одного и того же ретрая✅ стоп-условие

Цикл hand-back от начала до конца

  1. Агент выдаёт диф.
  2. Ревьюер открывает карточку: прикладывает диф, план агента, лог инструментов.
  3. Вариант «Принять» — мёрдж, карточка архивируется как «принято без правок».
  4. Вариант «Вернуть» — карточка и ограничение уходят агенту. Разрешён ровно один ретрай; если область «новый контекст», нужны новые доказательства.
  5. Если ретрай не принят — стоп, эскалация человеку, агент отстраняется от этой задачи.

Стоп-условие — несущая конструкция: ровно один авторетрай, дальше агент блокируется. Без этого «возврат» превращается в бесконечный бесплатный труд для обучения агента за счёт ревьюера.

Дешёвый прототип: где место бесплатным моделям и серверу

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

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

  1. Возьмите 8–12 реальных задач из трекера, включая минимум две-три, где агент, по вашему ожиданию, провалится.
  2. Запустите агента. Каждый результат пропускайте через карточку, а не через редактор.
  3. Замеряйте: как часто однострочное ограничение приводит к приемлемому ретраю? Как часто срабатывает стоп? Сколько времени занимает заполнение карточки по сравнению с тихим исправлением?
  4. Сохраняйте полный рекорд — отклонённые попытки, карточки, ретраи. Это база для решения о переносе цикла на платные модели.

Честные ограничения. Бесплатные модели подходят только для проверки процесса. Для бенчмарка качества они не годятся: не переносите вывод «ретрай провалился» с бесплатного уровня на сильную модель. Усталость от карточек реальна: если заполнение дольше, чем правка кода, ревьюеры найдут обходной путь — и это снова тихое исправление. И на необратимых путях (миграции, секреты, внешние эффекты) отказ должен останавливать конвейер, а не запускать ретрай.

Протокол исследования: помогает ли hand-back?

Предложение — не факт. Прежде чем внедрять, проведите небольшое сценарное исследование.

  • Участники: 6–8 ревьюеров, которые уже смотрят вывод агентов. Сценарий: каждый ревьюит 4 диффа — два заведомо приемлемых, два с пропущенным крайним случаем. Половина ревьюится тихим исправлением, половина — через карточку, порядок контрбалансируется.
  • Метрики успеха: время до решения; переиспользовалось ли ограничение из карточки при ретрае или переписывалось; уверенность ревьюера в финальном диффе; сохранились ли доказательства отказа в записи.
  • Стоп-метрики (заранее заданные): если заполнение карточки дольше тихого исправления более чем вдвое, или ревьюеры пропускают поле «ограничение» чаще, чем в трети случаев, — остановитесь и переделайте карточку, не трогая модель.
  • Доступность: карточка должна полностью управляться с клавиатуры (причина отказа и область — нативные радио-группы, не кастомные виджеты); у причин — видимые текстовые подписи, не только иконки; смена состояния области ретрая должна объявляться скринридером; пункт «Эскалация» должен быть доступен без прохождения через «Ретрэй» — порядок табов здесь свойство безопасности.

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

Суть

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

Перед следующим запуском агента спросите себя: какие недостающие доказательства должны остановить ретрай, а какое дополнительное поле в карточке будет шумом? Если ответа нет — сначала сделайте эту дизайн-работу.

По материалам: design. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.