3,583 papers
arXiv:2610.13668 85 9 окт. 2026 г. FREE

Exploration-nudging prompt: как настроить агента-ревьюера кода, чтобы он находил больше багов

КЛЮЧЕВАЯ СУТЬ
+5,8% найденных багов при росте цены всего на 10%. Столько даёт один абзац в инструкции ревьюеру кода. Метод позволяет заставить ИИ-агента находить больше ошибок в pull request (PR, пакет изменений в коде) без смены модели и без толпы параллельных агентов. Фишка: не давай агенту сидеть в диффе (изменённых строках) — вели ходить по репозиторию, искать вызовы и проверять догадки запуском. Это и есть exploration-nudging prompt (промпт, подталкивающий к исследованию). Обычный ревьюер читает дифф и верит автору. Подтолкнутый копает вширь. Итог: +5,8% багов за +10% цены. Мультиагентная схема даёт +4,7%, но стоит в 5,5 раза дороже.
Адаптировать под запрос
⚡

TL;DR

Exploration-nudging prompt (промпт, подталкивающий к исследованию) — это инструкция ревьюеру, которая велит не ограничиваться чтением диффа. Агент должен ходить по репозиторию, искать места использования изменённого кода, проверять гипотезы запуском. В статье это дало до +5,8% найденных багов при росте цены всего на 10%. Мультиагентная схема (несколько ревьюеров параллельно) даёт +4,7%, но стоит в 5,5 раза дороже.

Главная находка: агенты-ревьюеры стали хорошими, но не заменяют человека. Лучший из них ловит около 70% известных багов в топ-5 замечаний, остальные 20–30% пропускает. Хуже всего он справляется с большими и разнородными PR. Ещё хуже — с багами, которые не видны из диффа и требуют знать проект. На закрытых промышленных репозиториях качество падает до четверти. Кроме того, агенты почти не запускают код (меньше 10% шагов), верят описанию PR и комментариям в коде, даже когда те вводят в заблуждение. Уверенный ответ «багов нет» поэтому ничего не гарантирует.

Практический вывод — пять правил. Подгоняй глубину ревью под сложность PR. Задавай агенту приоритеты проекта. Клади знания о репозитории в файл инструкций. Разные PR отдавай разным моделям. Периодически перепроверяй качество ревьюера на своих старых багах.

🔬

Схема метода

ШАГ 1: Дай агенту контекст → PR (заголовок, описание, дифф) + репозиторий + файл с правилами проекта
ШАГ 2: Запрети верить на слово → описание PR и комментарии считать гипотезой, не фактом
ШАГ 3: Подтолкни к исследованию → искать вызовы, смежные модули, запускать код/тесты
ШАГ 4: Требуй структурный вывод → список замечаний, ранжированный по серьёзности (review.md)
ШАГ 5: Читай топ-5 → человек проверяет верхушку списка
(всё в одном системном промпте / файле инструкций агента)

ЭСКАЛАЦИЯ: большой PR / критичный модуль / нелокальная логика → больше усилий + человек обязательно
🚀

Пример применения

Задача: Вы тимлид в сервисе доставки еды. Claude Code пишет код быстрее, чем команда успевает читать. Сегодня в проде PR «Частичный возврат по заказу»: деньги, округление копеек, заказы с промокодом и баллами. Баг из этой зоны обойдётся в живые рубли, а прочитать дифф в 600 строк некому.

Промпт:

Ты — ревьюер кода в сервисе доставки еды. Твоя задача — найти баги в PR,
а не оценить стиль.

<Контекст_проекта>
- Деньги хранятся в копейках (int), никаких float.
- Заказ может быть оплачен частично баллами «Лояльность» и частично картой.
- Возврат всегда идёт в обратном порядке: сначала на карту, потом баллами.
- Критичный приоритет: корректность денежных операций и идемпотентность
  (повторный вызов webhook от платёжного провайдера не должен делать
  второй возврат).



Заголовок: Частичный возврат по заказу
Описание: Добавлен метод refund_partial(order_id, amount). Учитывает промокоды.


<Правила_ревью>
1. Описание PR и комментарии в коде — это гипотезы автора, а не факты.
   Проверяй по самому коду.
2. Не ограничивайся диффом. Найди все места, где вызываются изменённые
   функции, и смежные модули (платёжный webhook, расчёт скидок, баллы).
3. Если есть сомнение в поведении — запусти тесты или напиши короткую
   проверку и запусти её.
4. Мне не сообщают, есть ли в PR баг. Не подстраивайся под ожидание
   «что-то найдётся»: если уверенных находок нет, так и скажи.
5. Результат запиши в review.md: список замечаний, отсортированный
   по серьёзности (critical / high / medium / low). У каждого:
   файл и строка, в чём баг, при каких входных данных он проявится,
   как проверить.

Результат: Агент прочитает не только дифф, но и смежные файлы: webhook, расчёт промокодов, начисление баллов. Часть гипотез он проверит запуском тестов. На выходе — файл review.md со списком замечаний, где наверху самое опасное: например, повторный возврат или потеря копеек при делении скидки. Для каждого замечания будет указано, как воспроизвести. Верхние 5 пунктов вы читаете сами. Кто решает, мержить ли PR, — человек.

🧠

Почему это работает

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

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

Рычаги управления: - Приоритеты проекта (блок <Контекст_проекта>) → направляют внимание на то, что для вас критично: деньги, безопасность, совместимость API. Меняй под модуль. - Знания о репозитории → чем больше правил и архитектурных оговорок, тем лучше на крупных закрытых кодовых базах, где «одного диффа» мало. - Требование запускать → убери, если среда без запуска кода. Ждать прироста не стоит. - Топ-5 по серьёзности → число можно менять под внимание команды: чем меньше у людей времени, тем важнее порядок. - Выбор модели → дешёвая малая модель для простых PR, дорогая большая для сложных.

📋

Шаблон промпта

Точный текст промпта из статьи в доступной части не приведён. Шаблон ниже собран по описанным в ней элементам: контекст PR, запись в review.md, ранжирование по серьёзности, нельзя говорить агенту, что баг есть, запрет читерства, подталкивание к исследованию.

Ты — ревьюер кода. Задача: найти баги в PR {название_PR}. Не оценивай стиль,
нейминг и мелкие придирки.

<Контекст_проекта>
{приоритеты_проекта: что критично — деньги, безопасность, совместимость, производительность}
{архитектурные_правила_и_ловушки}



Заголовок: {заголовок}
Описание: {описание}


<Правила_ревью>
1. Описание PR и комментарии в коде — гипотезы автора, не факты. Проверяй по коду.
2. Не ограничивайся диффом. Найди вызовы изменённых функций, смежные модули,
   поведение внешних библиотек.
3. Сомневаешься — запусти {тесты_или_команда} или напиши короткую проверку.
4. Тебе не сообщают, есть ли баг. Если уверенных находок нет — так и скажи.
5. Не используй интернет и не ищи готовые решения вне репозитория.
6. Запиши результат в review.md: список замечаний, от самого серьёзного
   к менее серьёзному (critical / high / medium / low).
   У каждого: файл и строка, суть бага, при каких данных проявляется,
   как проверить.

Что подставлять: {приоритеты_проекта} — что для вас дороже всего сломать. {тесты_или_команда} — реальная команда запуска тестов. {архитектурные_правила_и_ловушки} — то, что новичок в проекте не знает (лучше вынести в AGENTS.md или CLAUDE.md и ссылаться на файл).

🚀 Быстрый старт — вставь в чат:

Вот шаблон промпта для агента-ревьюера кода. Адаптируй под мой проект: [опиши проект и стек].
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит про приоритеты проекта, неочевидные правила кодовой базы и способ запуска тестов. Именно эти поля дают главный эффект: направляют внимание агента и позволяют ему проверять догадки. Она возьмёт структуру из шаблона и соберёт промпт под ваш проект.

⚠️

Ограничения

⚠️ Агент не заменяет человека: даже лучший ревьюер пропускает больше пятой части известных багов. Полностью «выключить свет» (убрать человека) пока нельзя.

⚠️ Большие и разнородные PR: чем крупнее и разнороднее изменение, тем хуже находки. Режь PR или добавляй человека.

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

⚠️ Доверие к описанию PR: агенты поддаются на вводящие в заблуждение описания и комментарии. Автоматический ревьюер можно невольно убаюкать формулировкой автора.

⚠️ Прирост от промпта скромный: +5,8% — это не скачок. Серьёзные приросты через рост усилий рассуждения или мультиагентную схему дороги: во много раз дороже по цене.

⚠️ Измеряли только баги: бенчмарк проверяет, найден ли известный баг, но не стиль, архитектуру и читаемость. Ложные срабатывания (шум в ревью) в доступной части статьи не оценены. Текст статьи в доступной версии обрывается на описании экспериментов, поэтому детали по RQ4 известны лишь из резюме во введении.

🔍

Как исследовали

Идея была простой: хороший ревьюер должен как минимум ловить баги, которые люди уже подтвердили и исправили. Команда из Microsoft и CMU собрала бенчмарк CRBugBench: 1000 задач из 98 открытых репозиториев GitHub (5 языков) и ещё 800 задач из закрытых репозиториев одной большой компании. Баги брали из двух источников. Первый — комментарии ревьюеров, которые позже были исправлены до слияния. Второй — PR с исправлением, от которого по истории кода (метод SZZ) добирались до PR, внёсшего баг. Выборочная проверка 40 задач показала, что 92,5% из них корректны.

Агент получал песочницу с репозиторием, описание PR и дифф, без подсказки, что баг есть. Он писал review.md с замечаниями по серьёзности. Совпадение с настоящим багом оценивали три LLM-судьи разных семейств (большинством голосов). Согласие с человеком получилось почти идеальным (κ = 0,89). Метрика — полнота в топ-5: нашёл ли агент баг среди первых пяти замечаний, ведь внимание разработчика ограничено.

Сравнили большие и малые модели от Anthropic и OpenAI. Лучшая связка за пять месяцев выросла с 47,7% до 71,9%: модели улучшаются быстро, поэтому настройки нужно пересматривать. Удивило, что агенты почти не запускают код (лучший — в 9,7% шагов) и сильно различаются по упорству: половина прогонов Claude заканчивается к 35-му ходу, у GPT — к 17-му. Затем меняли устройство агента: подталкивающий к исследованию промпт (+5,8% за +10% цены), мультиагентность (+4,7% за 5,5× цену), усиленное рассуждение (с 36% до 57% за 23× цену). Вывод для практики: самый выгодный рычаг — текст промпта.

💡

Адаптации и экстраполяции

🔧 Техника: добавить проверку исполнения → меньше ложной уверенности

Агенты редко запускают код, поэтому прямо потребуй: «Для каждого critical/high замечания приложи минимальный воспроизводящий тест и результат его запуска. Если воспроизвести не удалось — пометь замечание как «не подтверждено»». Замечания делятся на подтверждённые и гипотезы, и вы не тратите время на пустые.

🔧 Техника: разнести проверку по приоритетам → быстрее читать топ

Если приоритетов несколько, не перегружай один промпт. Для PR, затрагивающих деньги, запускай отдельный проход с блоком <Контекст_проекта> только про деньги. Для безопасности — отдельный. Это не мультиагентность из статьи, а ручная аналогия: два дешёвых прохода вместо одного дорогого.

Экстраполяция: свой мини-бенчмарк. Авторы рекомендуют собрать собственный набор из багов вашего репозитория. Для небольшой команды это можно сделать за вечер:

Вот 10 багов из истории нашего проекта: {ссылки_на_исправляющие_PR}.
Для каждого найди PR, внёсший баг, и сформулируй задачу ревью:
«Вот PR, найди в нём баг». Баг агенту не раскрывай.
Прогони ревьюера по каждому PR и покажи таблицу: баг найден в топ-5 — да/нет.

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

🔗

Ресурсы

  • Работа: «(When) Should a Software Factory be Lights-off? Benchmarking Code Review Agents on Bug Detection» (CRBugBench)
  • Авторы: Chenyang Yang (Carnegie Mellon University), Hao He, Ti-Chung Cheng, Jenna Butler, Emerson Murphy-Hill (Microsoft), Carmen Badea, Christian Bird (Microsoft Research)
  • Упомянутые в статье работы: CodeReviewer, SWR-Bench, c-CRAB, CR-Bench, AACR-Bench, метод SZZ для поиска PR, внёсшего баг

📋 Дайджест исследования

Ключевая суть

+5,8% найденных багов при росте цены всего на 10%. Столько даёт один абзац в инструкции ревьюеру кода. Метод позволяет заставить ИИ-агента находить больше ошибок в pull request (PR, пакет изменений в коде) без смены модели и без толпы параллельных агентов. Фишка: не давай агенту сидеть в диффе (изменённых строках) — вели ходить по репозиторию, искать вызовы и проверять догадки запуском. Это и есть exploration-nudging prompt (промпт, подталкивающий к исследованию). Обычный ревьюер читает дифф и верит автору. Подтолкнутый копает вширь. Итог: +5,8% багов за +10% цены. Мультиагентная схема даёт +4,7%, но стоит в 5,5 раза дороже.

Принцип работы

Три требования в одной инструкции. Первое: описание PR и комментарии в коде — гипотезы автора, а не факты. Второе: выйди за дифф, найди все вызовы изменённой функции и смежные модули. Третье: сомневаешься — запусти тесты или напиши короткую проверку. На выходе файл review.md с замечаниями по серьёзности. Человек читает верхние 5. Агент обязан сверять слова автора с кодом, а не принимать их на веру. Это как проверяющий на стройке. Один читает акт приёмки и ставит подпись. Другой идёт на объект и стучит по стенам.

Почему работает

У «ревьюера в лоб» две слабости. Он верит формулировке «учитывает промокоды». И почти не проверяет догадки: код запускается меньше чем в 10% шагов. Многие баги живут не в изменённых строках. Они вылезают там, где изменение сталкивается с остальным проектом. Модель и так умеет искать по коду и строить гипотезы — ей просто не говорят этим заниматься. Скажи прямо, и она потратит ходы на поиск, а не на быстрый вывод. Отсюда +5,8% при +10% цены. Для честности: это не скачок. Лучший агент ловит около 70% известных багов в топ-5 и пропускает остальные 20–30%. На закрытых промышленных репозиториях качество падает до четверти. Человека из цепочки пока не убрать.

Когда применять

Ревью кода с ИИ-агентом → конкретно для PR, где баг стоит дорого: деньги, безопасность, совместимость API. Особенно когда код пишется быстрее, чем люди успевают читать. Чем больше PR и чем он разнороднее, тем важнее человек в цепочке. Для таких PR лучше резать изменение на части. НЕ подходит, если у агента нет среды для запуска кода: пункт про проверку запуском пропадёт, и прироста ждать не стоит. Уверенное «багов нет» от агента тоже ничего не гарантирует.

Мини-рецепт

1. Дай контекст: заголовок и описание PR, дифф, доступ к репозиторию.
2. Опиши, что дорого сломать: деньги в копейках, идемпотентность, права доступа. Длинные правила проекта вынеси в файл инструкций агента (AGENTS.md или CLAUDE.md).
3. Запрети верить на слово: описание и комментарии автора — гипотезы.
4. Подтолкни к поиску: найти вызовы, смежные модули, запустить тесты. Укажи реальную команду запуска.
5. Скажи, что подсказок нет: агенту не сообщают, есть ли баг. Нет уверенных находок — пусть так и пишет.
6. Потребуй порядок: review.md, замечания от critical до low. У каждого: файл и строка, суть, при каких данных проявляется, как проверить.
7. Читай топ-5 сам: решение, принимать ли PR, остаётся за человеком.
8. Подбирай модель под PR: малая и дешёвая для простых, крупная для сложных. Раз в время гоняй ревьюера на своих старых багах и смотри, сколько он находит.

Примеры

[ПЛОХО] : Посмотри этот PR и скажи, есть ли в нём баги
[ХОРОШО] : Ты ревьюер кода в сервисе доставки еды. Ищи баги, стиль не оценивай. Критично: деньги в копейках (int), повторный вызов обратной связи от платёжного провайдера не должен делать второй возврат. Описание PR и комментарии в коде — гипотезы автора, проверяй по коду. Не ограничивайся диффом: найди все вызовы refund_partial и смежные модули (расчёт промокодов, начисление баллов). Сомневаешься — запусти тесты или напиши короткую проверку. Мне не сообщают, есть ли баг. Нет уверенных находок — так и скажи. Результат запиши в review.md: замечания от critical до low, у каждого файл и строка, при каких данных проявляется, как проверить. В первом случае агент прочтёт дифф, поверит строке «учитывает промокоды» и ответит «выглядит нормально». Во втором он пойдёт в обработчик платёжного провайдера, в расчёт скидок и в баллы. Часть догадок проверит запуском. Наверху review.md окажется самое опасное, например повторный возврат при дубле вызова. Шаблон с полями можно кинуть в чат и попросить LLM адаптировать его под ваш проект.
Источник: (When) Should a Software Factory be Lights-off? Benchmarking Code Review Agents on Bug Detection
ArXiv ID: 2610.13668 | Сгенерировано: 2026-10-12 06:10

Проблемы LLM

ПроблемаСутьКак обойти
Модель принимает слова автора как фактДаёшь модели текст с чужим описанием: «учитывает промокоды», «потокобезопасно», «проверено». Она верит этому и не проверяет. Если описание ошибочно или вводит в заблуждение, модель повторяет ошибку. Проявляется при проверке кода, документов, отчётов, договоров. Ответ «проблем нет» звучит уверенно, но ничего не гарантируетОбъяви в запросе: «Описание и комментарии автора — гипотезы, а не факты. Проверяй по самому материалу». Требуй у каждого замечания доказательство: где именно, при каких данных, как воспроизвести. Не принимай «всё чисто» как вывод. Периодически прогоняй модель на старых случаях, где ошибка тебе известна

Методы

МетодСуть
Подтолкни агента выйти за рамки входных данных — находит больше ошибок за малую ценуАгент по умолчанию читает только то, что дали, и быстро выдаёт вывод. Скажи прямо: «Не ограничивайся этим текстом. Найди, где это используется. Открой соседние модули. Сомневаешься — запусти проверку». Модель умеет искать по проекту и строить гипотезы. Явное разрешение переводит её ходы с быстрого вывода на поиск. Цена растёт примерно на 10%, полнота — на несколько процентов. Когда да: агент с доступом к файлам и запуску кода. Подходит для ревью, аудита, отладки, поиска причин сбоя. Когда нет: среда без запуска кода или доступа к файлам. Прироста не будет. Также не поможет там, где нужных знаний нет в самом проекте. Тогда добавь правила проекта и приоритеты прямо в запрос или в файл инструкций
📖 Простыми словами

(When) Should a Software Factory be Lights-off? Benchmarking Code ReviewAgentson Bug Detection

arXiv: 2610.13668

AI-ревьюеры лажают на коде по глупой причине: они тупо читают дифф изменений и свято верят автору на слово. Если в описании PR написано "учёл промокоды", модель довольно кивает и ставит аппрув. Но настоящие факапы живут не в новых пяти строках, а в том, как эти строки ломают соседние модули. Пока LLM заперта в рамках диффа, она остаётся слепым цензором, который правит опечатки, но пропускает критический брак.

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

Решение задачи предельно конкретное — метод exploration-nudging prompt. Ты буквально пинаешь модель инструкцией: хватит верить на слово, иди шерсти репозиторий, ищи вызовы функций и проверяй гипотезы запуском. Результат: +5,8% найденных багов всего за +10% к стоимости токенов. Для сравнения, распиаренные мультиагентные схемы дают скромные +4,7%, но обходятся в 5,5 раза дороже.

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

Короче: не ведись на хайп и не городи дорогие «рои агентов», которые только жрут ресурсы. Достаточно одной базовой модели, если вбить ей в промпт железное правило: не доверяй, а исследуй. Заставь сетку копать код вглубь, и баги перестанут долетать до прода. Иначе ты просто оплачиваешь болванчика, который вежливо соглашается с чужими ошибками.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с