← Code Review in the AI Era: Trust, Verify, Merge
04 / 07 · 45 min

Agents Reviewing Agents

Another agent does the first review pass: structured findings, hallucination control for the reviewer, precision calibration, and a CI pipeline where humans only see escalations.

Lesson content is currently available in Russian.

What you will learn

  • →Строить независимого агента-ревьюера: отдельный контекст, свой промпт и структурированный формат находок.
  • →Калибровать точность агент-ревью и контролировать галлюцинации ревьюера выборочной проверкой.
  • →Встраивать агент-ревью в CI так, чтобы человек проверял только эскалации и высокорисковые зоны.

Зачем агенту ревьюер-агент — и почему не он сам

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

Важно, почему самопроверка автора-агента не работает. Попросить того же агента «проверь свой код» — значит спросить модель с тем же контекстом, теми же предположениями и теми же слепыми зонами. Если агент неверно понял задачу, он так же неверно её «проверит»; если он галлюцинировал API, тот же контекст поддержит галлюцинацию. Это аналог человеческой вычитки собственного текста: автор видит то, что хотел написать.

Независимость ревьюера создаётся тремя рычагами. Чистый контекст: ревьюер получает задачу и дифф, но не рассуждения автора — иначе он унаследует его логику вместе с ошибками. Другая роль: промпт ревьюера построен вокруг поиска проблем, а не вокруг задачи «помочь смержить». Желательно другая модель или хотя бы другая температура и системный промпт: разные модели ошибаются по-разному, и их слепые зоны пересекаются меньше. Ревью двумя независимыми проходами — «поиск дефектов» и «проверка контрактов» — даёт больше, чем один универсальный проход той же суммарной стоимости.

Промпт ревьюера: структура находок и запреты

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

{
  "file": "src/billing/invoice.ts",
  "line": 142,
  "severity": "high",
  "category": "contract-change",
  "claim": "Функция теперь возвращает 0 вместо исключения при пустом списке позиций",
  "evidence": "Строки 138-145 диффа: удалён throw, добавлен return 0",
  "suggestedFix": "Вернуть исключение или явно задокументировать новый контракт у вызывающих"
}

Ключевые поля — claim и evidence: каждая находка обязана указывать на конкретные строки диффа. Находка без проверяемого evidence отбрасывается автоматически — это главный фильтр галлюцинаций ревьюера.

Запреты не менее важны, чем требования:

  • никаких стилистических придирок — стиль проверяет линтер, а не LLM; nit-комментарии топят сигнал в шуме;
  • лимит находок — максимум 10 на PR, отсортированных по severity: без лимита модель генерирует пятьдесят замечаний «на всякий случай»;
  • запрет на похвалу и пересказ — отчёт состоит только из находок и вердикта;
  • обязательная секция «что я не смог проверить» — честная граница: ревьюер не видит вызывающий код из других сервисов, не запускал тесты, не знает продуктового контекста.

Такой формат превращает агент-ревью из текста «на почитать» в данные: находки можно считать, сравнивать, автоматически размечать и фильтровать.

Ревьюер тоже галлюцинирует: калибровка точности

Агент-ревьюер — та же LLM со всеми её свойствами: он находит несуществующие проблемы, пропускает реальные и звучит одинаково уверенно в обоих случаях. Исследования LLM-as-judge (MT-Bench и последующие) документируют систематические смещения: многословные ответы кажутся судье лучше, свои собственные ответы — качественнее чужих, а позиция варианта в списке влияет на вердикт. Для ревью это означает: без калибровки вы не знаете, чем является поток находок — сигналом или шумом.

Калибровка делается как в инженерии эвалов. Соберите размеченный набор: 30–50 диффов, где команда знает реальные дефекты (исторические PR с инцидентами — идеальный материал, плюс синтетические диффы с подсаженными багами). Прогоните ревьюера и посчитайте две метрики: precision — какая доля его находок реальна, recall — какую долю известных дефектов он нашёл. Практический ориентир: для первого прохода важнее precision. Ревьюер с precision 40% умирает социально — люди перестают читать его отчёты через неделю, и вместе с шумом теряется сигнал. Лучше ревьюер, который находит меньше, но почти не врёт.

Поддержание калибровки — процесс, а не событие: раз в неделю выборочно проверяйте 5–10 находок руками, считайте долю подтверждённых и следите за трендом. Деградация точности после смены модели или промпта — повод перекалибровать на размеченном наборе, прежде чем доверять потоку снова. И правило вердиктов: находка агента-ревьюера — это гипотеза для человека, а не приговор для автора; блокировать мерж могут только категории, где precision подтверждён высоким.

Пайплайн в CI: эскалации вместо тотального ревью

Собираем всё в конвейер. На каждый PR от агента CI запускает цепочку из четырёх ступеней:

  1. Машинные гейты — линтер, типы, тесты, SAST, secret scanning. Красное — PR даже не доходит до ревью, возвращается автору-агенту с логом.
  2. Агент-ревью — независимый ревьюер прогоняет чек-листы, постит структурированные находки комментариями к строкам и выставляет статус: pass, findings, critical.
  3. Маршрутизация — по статусу и зоне диффа: pass в низкорисковой зоне идёт к быстрому решению человека или в авто-мерж (правила — в следующем уроке); findings возвращаются автору-агенту на исправление; critical и любые изменения в высокорисковых зонах (auth, деньги, миграции, публичные API) эскалируются человеку всегда, независимо от вердикта агента.
  4. Человек — читает отчёт ревьюера, выборочно проверяет находки и смотрит только те части диффа, куда указала маршрутизация.

Важные свойства конвейера:

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

Агент-ревью не отменяет уроки 1–3: это их масштабирование. Чек-листы, которые вы вели руками, становятся промптом ревьюера, а ваша роль смещается от поиска дефектов к калибровке искателя.

Practice

Собери агента-ревьюера

Напишите промпт агента-ревьюера с форматом находок из урока и чек-листами уроков 1–3. Прогоните его на пяти AI-диффах, в два из которых заранее подсадите известные дефекты (галлюцинация API и тихое изменение контракта). Посчитайте precision и recall по своей разметке.

Deliverable

Промпт ревьюера, пять структурированных отчётов, таблица «находка → подтверждена/ложная» и посчитанные precision/recall с выводом: какие категории находок можно сделать блокирующими, а какие остаются рекомендательными.

Checkpoint

Объясните, почему самопроверка автора-агента не заменяет независимое ревью, и опишите ваш конвейер агент-ревью: формат находок, контроль галлюцинаций ревьюера и правила эскалации человеку.

  • ✓ Сформулировано, что автор-ревьюер делит контекст и слепые зоны с автором, а независимость создаётся чистым контекстом, другой ролью и желательно другой моделью.
  • ✓ Описан структурированный формат находок с обязательным evidence и автоматическим отбросом находок без ссылки на строки диффа.
  • ✓ Названы правила эскалации: высокорисковые зоны идут к человеку всегда, блокирующими являются только категории с подтверждённой precision.

Check yourself

Почему просьба к автору-агенту «проверь свой код» — слабое ревью?

01Почему просьба к автору-агенту «проверь свой код» — слабое ревью?

Зачем каждой находке ревьюера обязательное поле evidence со ссылкой на строки диффа?

02Зачем каждой находке ревьюера обязательное поле evidence со ссылкой на строки диффа?

Почему для первого прохода агент-ревью precision важнее recall?

03Почему для первого прохода агент-ревью precision важнее recall?

Какие PR эскалируются человеку независимо от вердикта агента-ревьюера?

04Какие PR эскалируются человеку независимо от вердикта агента-ревьюера?

Sources

Agents Reviewing Agents · Code Review in the AI Era: Trust, Verify, Merge · VORCL