3,583 papers
arXiv:2610.39899 93 29 окт. 2026 г. FREE

ExploreRepair: мультиагентное исправление уязвимостей и сложных багов при неполных вводных

КЛЮЧЕВАЯ СУТЬ
Парадокс: Один агент со всеми инструментами чинит баги хуже, чем узкий специалист с одним. Первая правдоподобная гипотеза застревает в голове модели, и она подгоняет под неё остальные улики. Метод ExploreRepair позволяет находить и закрывать сложные уязвимости в коде, даже когда нет описания бага и готового эксплойта. Фишка: три независимых агента копают код под разными углами — структура вызовов, замысел автора и тест на взлом — а двухступенчатая сборка чинит даже то, где слились все трое поодиночке.
Адаптировать под запрос
⚡

TL;DR

ExploreRepair — это двухэтапная схема организации кодинг-агентов (исследование + иерархическая сборка), в которой три независимых агента параллельно изучают проблему с трёх разных сторон — структура вызовов кода, замысел разработчика (контракт API) и воспроизводящий тест (PoV), а затем отдельные агенты-агрегаторы сводят их выводы («уроки») и черновики патчей в итоговое решение.

Когда разработчику или кодинг-агенту нужно срочно закрыть уязвимость или неочевидный баг, у него почти никогда нет готового эксплойта или подробного описания причины — известно только примерное место в коде. В такой ситуации одиночный агент (или общая дискуссия агентов в одном чате) быстро хватается за первую правдоподобную гипотезу и чинит симптом, ломая соседнюю логику или пропуская похожие места в репозитории. Попытка дать одному агенту сразу все инструменты и инструкции («агент 3-в-1») тоже проваливается: из-за перегруженного контекста модель путается в разнородных уликах и работает даже хуже обычного одиночного агента.

Метод решает эту проблему жёстким разделением труда на 2 фазы: на этапе исследования три изолированных агента собирают каждый свой тип улик и предлагают свой патч, после чего на этапе агрегации длинные логи их работы сжимаются в короткие структурированные «уроки» (lessons), два отдельных агрегатора параллельно собирают патч по логике уроков и патч по коду diff-ов, а финальный агрегатор сверяет обе версии с репозиторием и выпускает чистое исправление.


🔬

Схема метода

Процесс требует отдельных изолированных запусков (сессий) агентов на этапе исследования и последовательной цепочки вызовов на этапе сборки:

ФАЗА 1: НЕЗАВИСИМОЕ ИССЛЕДОВАНИЕ (3 отдельные сессии агентов параллельно)
├── Агент 1 (Structural / Структура): трассирует граф вызовов, импорты и соседние функции → [Лог + Патч 1]
├── Агент 2 (Semantic / Замысел): отвечает на 4 вопроса о контракте API и формулирует до 5 правил безопасности → [Лог + Патч 2]
└── Агент 3 (Executable / Тест): пишет и запускает тест-эксплойт (PoV) до срабатывания бага, затем чинит код → [Лог + Патч 3]

ФАЗА 2: ИЕРАРХИЧЕСКАЯ СБОРКА (последовательные шаги агрегации)
ШАГ 1 (Дистилляция): LLM сжимает длинный лог и патч каждого из 3 агентов → [3 коротких Урока (Lessons) с уликами и сомнениями]
ШАГ 2А (Lesson Aggregator): синтезирует ремонт ТОЛЬКО из 3 текстовых уроков → [Патч L + Лог L]
ШАГ 2Б (Patch Aggregator): синтезирует ремонт ТОЛЬКО из 3 конкретных diff-патчей → [Патч P + Лог P]
ШАГ 3 (Final Aggregator): получает уроки L и P + Патч L и Патч P, проверяет их по коду репозитория → [Финальный патч]

🚀

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

Задача: В российском сервисе доставки еды и продуктов после ночного релиза аналитики безопасности прислали краткий сигнал: «В модуле расчёта промокодов и возвратов (promo_service.py, функции apply_partner_discount и refund_bonus) возможен обход лимитов при параллельных запросах от корпоративных аккаунтов». Готового теста, воспроизводящего взлом, нет; подробного отчёта тоже нет — нужно быстро и без поломки штатных заказов найти корень проблемы и выпустить патч с помощью субагентов в Claude Code.

Промпт:

# Организация субагентов по схеме ExploreRepair (для запуска в Claude Code / агентном пайплайне)

У нас задача с неполными данными: подозрение на уязвимость в `promo_service.py` (функции `apply_partner_discount`, `refund_bonus`). Не делай поспешных правок. Выполни работу в 2 фазы через изолированных субагентов:

## ФАЗА 1: Запусти 3 независимых субагента (без обмена контекстом между ними)

### Субагент 1 — Структурные улики (Structural Explorer):
Изучи только структуру кода вокруг `apply_partner_discount` и `refund_bonus`:
1. Проследи все пути, по которым внешние входные данные из API доходят до этих функций.
2. Проверь функции-помощники, валидаторы и соседние модули, которые менялись в тех же коммитах или делают похожие проверки баланса.
3. Предложи свой кандидат-патч (diff) и верни отчёт о найденных путях в коде.

### Субагент 2 — Семантические улики и замысел (Intent Explorer):
Реконструируй замысел разработчика, ответив строго по порядку на 4 вопроса с указанием файлов и строк (если данных в репозитории не хватает — явно зафиксируй неопределённость):
1. Какой API-контракт или бизнес-спецификация управляет этим кодом?
2. Кто может вызывать этот код и контролировать его входные параметры?
3. Какие ресурсы (деньги, бонусы, лимиты БД) этот код защищает?
4. Какие ограничения должны выполняться для недоверенных входных данных?
На основе ответов сформулируй до 5 правил безопасности (security constraints), найди, где текущий код их нарушает, и предложи свой кандидат-патч (diff).

### Субагент 3 — Исполняемые улики (PoV Explorer):
1. Проследи путь данных от публичного эндпоинта до `apply_partner_discount`.
2. Напиши и запусти тест (Proof-of-Vulnerability), который реально демонстрирует нарушение безопасности (например, списание бонусов в минус или двойной возврат). Дорабатывай тест, пока он не воспроизведёт сбой на текущем коде.
3. Напиши патч, устраняющий корневую причину в продакшен-коде (ЗАПРЕЩЕНО ослаблять сам тест или ставить заглушку под конкретное число из теста), и перезапусти тест. Верни патч и лог запуска.

## ФАЗА 2: Иерархическая агрегация
1. Сожми отчёт каждого из 3 субагентов в короткий «Урок» (Lesson): подозреваемая уязвимость, строки кода / результаты запуска, суть правки и оставшиеся сомнения.
2. Сформируй два черновика решения: один — опираясь на 3 текстовых Урока и правила безопасности (Lesson Aggregator), второй — сравнивая и объединяя 3 конкретных кода правок (Patch Aggregator).
3. Сделай финальную сверку обоих черновиков с кодом репозитория, разреши противоречия и выдай итоговый патч, прогнав штатные юнит-тесты.

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


🧠

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

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

Сильная сторона LLM проявляется тогда, когда в одной сессии у неё одна узкая линза внимания и чёткий алгоритм проверки, а при сведении результатов она работает со сжатыми выводами. В частности, семантический агент опирается на 4 строгих вопроса о границах доверия, а тестовый агент привязан к реальности через запуск кода.

ExploreRepair соединяет эти сильные стороны через двухступенчатую дистилляцию и разделение диагноза и кода. Сначала длинные траектории сжимаются в короткие «уроки» (lessons), где явно выписаны не только находки, но и сомнения (uncertainties). Затем система специально разводит синтез по смыслу (Lesson Aggregator думает над архитектурой и ограничениями безопасности) и синтез по коду (Patch Aggregator видит точные строки и синтаксис в diff-ах, которые теряются при пересказе словами). Финальный арбитр получает уже выжатый концентрат из двух лучших версий и может починить уязвимость даже тогда, когда все три разведчика поодиночке написали неполные патчи.

Рычаги управления методом: - Отказ от «агента 3-в-1»: никогда не объединяйте три роли исследования в один системный промпт — эксперименты показали, что один агент со всеми тремя инструкциями работает хуже раздельных субагентов на 8,9–18,3 процентного пункта. - Явная фиксация сомнений в «Уроке»: требуйте при суммаризации лога каждого агента обязательно заполнять пункт «неразрешённые вопросы / нехватка данных» — это не даёт агрегатору поверить в уверенный блеф одного из разведчиков. - Облегчённая версия для быстрых задач: если нет возможности запускать оба промежуточных агрегатора, для моделей с сильным рассуждением по тексту можно оставить только Lesson Aggregator, а для кодовых моделей — Patch Aggregator, но полная связка даёт максимальную надёжность.


📋

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

Ниже — универсальный шаблон для применения архитектуры ExploreRepair к задаче поиска и исправления бага/уязвимости через мультиагентную настройку (например, субагентов Claude Code или цепочку промптов):

# Шаблон ExploreRepair для исправления бага/уязвимости при неполных вводных

Контекст: Репозиторий `{название_проекта}`, подозрительный участок кода: `{файл_и_функции}`.
Описание проблемы (без готового теста): `{краткий_симптом_или_подозрение}`.

## ЭТАП 1. Запусти 3 независимых исследования (в отдельных сессиях/субагентах)

### [Сессия 1 — Structural Agent (Структура)]
Исследуй `{файл_и_функции}` по связям в коде:
- Найди все вызывающие функции (callers), импорты и зависимости, через которые внешние данные попадают в `{файл_и_функции}`.
- Проверь функции-валидаторы и соседние участки кода с аналогичной логикой (включая файлы, которые менялись вместе в Git).
- Выдай: 1) траекторию анализа путей кода, 2) свой вариант патча (diff).

### [Сессия 2 — Intent Agent (Замысел и правила безопасности)]
Прежде чем писать код, ответь строго по порядку на 4 вопроса (подкрепляй каждый ответ ссылками на файлы и строки; если данных в коде нет — явно запиши неопределённость):
1. Какая спецификация или API-контракт управляет этим участком кода?
2. Кто может вызывать этот код и контролировать его входные данные?
3. Какие ресурсы или инварианты он защищает?
4. Какие ограничения должны выполняться для недоверенных данных?
На основе ответов сформулируй до 5 обязательных ограничений безопасности (security constraints), укажи строки, где они нарушены, и выдай: 1) разбор диагноза, 2) свой вариант патча (diff).

### [Сессия 3 — PoV Agent (Воспроизводящий тест)]
Проверь проблему запуском кода:
1. Проследи путь входных данных от публичного интерфейса/API до `{файл_и_функции}`.
2. Напиши и запусти проверочный тест (PoV), демонстрирующий сбой или нарушение безопасности. Дорабатывай тест, пока он наглядно не воспроизведёт проблему.
3. Исправь корневую причину в основном коде (не ослабляй тест и не пиши заглушку под конкретный вход теста) и убедись, что тест проходит. Выдай: 1) наблюдения из запусков, 2) свой вариант патча (diff).

## ЭТАП 2. Дистилляция и Иерархическая сборка

### [Шаг 2.1 — Дистилляция в Уроки (Lessons)]
Для каждого из 3 отчётов составь краткий конспект (Lesson) по схеме:
- Подозреваемая причина сбоя;
- Подтверждающие строки кода или результаты запуска теста;
- Суть предложенного изменения;
- Оставшиеся сомнения и непроверенные допущения.

### [Шаг 2.2 — Раздельный синтез]
- **Lesson Aggregator:** На основе трёх текстовых конспектов (Lessons) и кода репозитория синтезируй патч `Patch_L` (фокус на полноте логики и соблюдении ограничений безопасности).
- **Patch Aggregator:** На основе трёх исходных diff-патчей и кода репозитория синтезируй патч `Patch_P` (фокус на точных местах вставки кода и деталях реализации).

### [Шаг 2.3 — Финальное согласование (Final Aggregator)]
Сравни `Patch_L` и `Patch_P` и их аргументацию со свежим кодом `{файл_и_функции}`:
- Объедини взаимодополняющие правки, отбрось ложные допущения и сформируй единый финальный патч.

Что подставлять в плейсхолдеры: - {название_проекта} — имя вашего сервиса или модуля. - {файл_и_функции} — локализация проблемы (файл, класс, диапазон строк из баг-репорта или алерта). - {краткий_симптом_или_подозрение} — любая неполная вводная, с которой пришёл запрос.

🚀 Быстрый старт — вставь в чат с кодинг-агентом (например, Claude Code):

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

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

LLM спросит, в каком файле или функции подозревается баг и есть ли возможность запускать тесты в терминале — потому что это нужно для настройки трёх ролей субагентов (структурного, смыслового и тестового). Она возьмёт паттерн из шаблона и адаптирует под задачу.


⚠️

Ограничения

⚠️ Высокий расход токенов и времени на оркестрацию: Полный цикл включает 3 независимых запуска агентов-разведчиков, 3 вызова для сжатия логов в уроки и 3 запуска агрегаторов — для мелких опечаток и очевидных багов такая схема избыточна.

⚠️ Для полной реализации структурного агента нужен граф кода или поиск по репозиторию: В оригинале авторы строили AST-граф вызовов и векторный индекс (search_code, graph_neighbors); в обычном кодинг-агенте эту роль приходится заменять встроенными инструментами поиска по символам (LSP / grep / git log).

⚠️ Нельзя сливать роли в одну сессию: Если ради экономии попросить одного агента сделать все три проверки подряд в одном контексте («3-in-1 Agent»), качество ремонта падает ниже обычного одиночного агента из-за информационной перегрузки.


🔍

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

Команда исследователей из университетов Сиднея, Виктории, Монаша и Сингапурского университета менеджмента (SMU) начала с неприятного факта из реальной жизни: в 95,9% случаев (из 75 807 изученных уязвимостей CVE) в течение года после публикации в открытом доступе нет готового теста-эксплойта (PoV), тогда как почти все передовые научные системы авторемонта кода требуют такой тест как обязательную подсказку. Чтобы проверить работу в реальных «спартанских» условиях, авторы взяли 204 настоящие уязвимости: 169 задач на Python, JavaScript и Go из бенчмарка PatchEval и 35 задач на C/C++ из VulnLoc+. Из контейнеров специально удалили все проверочные эксплойты бенчмарка, описания CVE и скрипты оценки, оставив агентам только сам репозиторий на уязвимом коммите и подсказку с именем функции.

Эксперименты гоняли на двух современных моделях — GPT-5.6-Luna и DeepSeek-V4.1-Flash — и сравнивали ExploreRepair с одиночным агентом, обычной мультиагентной системой, специально обученными системами ремонта (IntentFix, EvoRepair, LoopRepair) и универсальным кодинг-агентом OpenAI Codex. Результаты оказались впечатляющими: на PatchEval с моделью DeepSeek-V4.1-Flash метод ExploreRepair успешно починил 71,6% уязвимостей (против 57,4% у одиночного агента, 55,6% у обычного мультиагента, 46,2% у EvoRepair и 43,8% у Codex), а на C/C++ в VulnLoc+ обошёл систему LoopRepair на 17,1–20,0 процентного пункта (и даже выиграл у версии LoopRepair, которой дали готовый авторский PoV-тест!). Самое интересное вскрылось при разборе деталей: во-первых, когда все три инструмента исследования дали одному агенту («3-in-1 Agent»), его результат просел с 57,4% до 53,3% из-за каши в длинном контексте; во-вторых, иерархическая агрегация смогла полностью починить 11 уязвимостей на DeepSeek и 3 на GPT-5.6, с которыми не справился ни один из трёх агентов-исследователей по отдельности — сборщик буквально собрал рабочий пазл из трёх неудачных, но дополняющих друг друга попыток.


💡

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

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

В этом случае три субагента в Claude Code получают роли: 1. Трассировщик данных (Structural): ищет все места записи и чтения проблемного поля в БД и очередях сообщений. 2. Аналитик бизнес-инвариантов (Intent): выписывает из кода и тестов, какие состояния заказа/платежа считаются валидными и где пропущена проверка состояния. 3. Охотник за воспроизведением (Executable): пишет интеграционный pytest, перебирающий граничные условия до тех пор, пока не поймает тот самый Exception, после чего агрегатор собирает финальный фикс.


🔗

Ресурсы

Исследование: ExploreRepair: Evidence-Specialized Agents for Vulnerability Repair under Information Constraints Авторы: Duc Manh Tran, Ratnadira Widyasari, Ivana Clairine Irsan, Huihui Huang, Ting Zhang, David Lo, Rahul Gopinath, Hong Jin Kang (The University of Sydney, University of Victoria, Singapore Management University, Monash University) Бенчмарки: PatchEval (Python, JS, Go), VulnLoc+ (C/C++)


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

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

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

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

Не свалюй поиск путей, чтение документации и запуск тестов в одну сессию. Раздели расследование на три изолированных потока с разными типами доказательств: один ищет цепочки вызовов, второй выводит до 5 правил безопасности из контракта, третий пишет и гоняет тест до сбоя. Изолируй сыщиков друг от друга до финала, чтобы ложная версия одного не заразила остальных. Затем сожми их длинные логи в короткие уроки и отдай двум сборщикам: один сводит диагнозы, другой — готовые патчи (diff).

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

Модель в одной сессии как детектив без плана — видит первую зацепку и слепнет к остальным фактам. А в общей беседе субагенты просто соглашаются с первой ошибкой. Узкая рамка («ответь на 4 вопроса» или «напиши тест на пробой») бьёт точно в сильную сторону LLM. Сжатие сессий в короткие уроки выкидывает мусор из контекста, но сохраняет сами патчи с точными строками кода. Финальный сборщик с инструкцией «любой патч может врать» сверяет оба варианта с репозиторием и даёт плюс 1–4 починенные уязвимости сверх лучшего одиночки.

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

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

Мини-рецепт

1. Запусти 3 отдельные сессии: дай всем один файл и строки, но разные роли — «Структура» (пути ввода и валидаторы), «Намерение» (4 вопроса о контракте и до 5 правил со ссылками файл:строка) и «Проверка боем» (написать тест на взлом и добиться его падения).
2. Поставь жёсткий блок тестеру: запрети ослаблять тест ради зелёной галочки или ставить костыль под одну конкретную строчку ввода.
3. Выжми сухой остаток: отдельным запросом сожми лог каждого из трёх агентов в короткий «урок» (диагноз, улики в коде, суть правки, белые пятна).
4. Сведи в два потока: первому сборщику отдай 3 урока (пусть соберёт патч A по диагнозам), второму параллельно — 3 сырых патча (пусть соберёт патч B по коду).
5. Устрой финальный суд: отдай последнему агенту патчи A и B вместе с их уроками и фразой Любое из предложений может быть ошибочным — сверяй с кодом репозитория.

Примеры

[ПЛОХО] : В функции download_invoice() в services/invoices.py нашли уязвимость обхода папок. Проанализируй структуру вызовов, подумай какой был замысел разработчика, напиши тест и выдай готовый патч.
[ХОРОШО] : Сессия 1 (Намерение): Подозрительная функция download_invoice() в services/invoices.py:40-95. Не пиши код, пока не ответишь: 1) Какой контракт управляет кодом? 2) Кто контролирует вход? 3) Какие ресурсы защищает? 4) Какие ограничения нужны для чужих данных? Выведи до 5 правил со ссылками файл:строка, затем дай диагноз и патч. [Параллельно Сессия 2 по структуре и Сессия 3 с тестом на пробой, затем сборка с фразой «Любой из уроков может быть ошибочным — проверяй по коду»]
Источник: ExploreRepair: Evidence-Specialized Agents for Vulnerability Repair under Information Constraints
ArXiv ID: 2610.39899 | Сгенерировано: 2026-11-01 20:32

Проблемы LLM

ПроблемаСутьКак обойти
Одна сессия с разными типами данных рассуждает хуже, чем узкие специалистыДаёшь модели всё сразу: структуру кода, замысел автора, результаты запуска. Она цепляется за первую убедительную гипотезу. Остальные данные подгоняет под неё. Длинный контекст из разных «историй поиска» ещё и путает рассуждение. Выходит хуже, чем если бы каждый тип данных разобрали отдельно. Это касается любой диагностики: баги, сбои, разбор инцидентовНе смешивай типы доказательств в одной сессии. Дай каждый тип отдельному запуску со своей узкой рамкой. Потом сведи выводы отдельным шагом. См. метод ниже
Несколько «агентов» без чёткой специализации не помогаютЗапускаешь несколько ролей или субагентов с одинаковой задачей. Если они видят друг друга, ошибка одного заражает остальных. Если у всех одна рамка, они повторяют одно и то же. Результат хуже одиночного запускаРазводи агентов по типам доказательств, а не по «личностям». Запускай независимо. Пусть не видят выводов друг друга до сборки

Методы

МетодСуть
Независимые специалисты по типам доказательств + двухканальная сборка — диагностика сложной проблемы при нехватке данныхФаза 1. Запусти 3 отдельные сессии. У каждой свой угол и свои узкие вопросы. Пример углов: структура (как данные доходят до места, чем это место окружено), замысел (4 вопроса: что задумано, кто контролирует вход, что защищается, какие ограничения обязательны; до 5 выводов со ссылками «файл:строка»; пометка «неизвестно», если данных нет), воспроизведение (напиши тест, запусти, чини причину, не ослабляй тест). Каждая сессия выдаёт диагноз и решение. Фаза 2. Сожми каждую сессию в короткий «урок»: гипотеза, подтверждения, предложенное изменение, нерешённое. Затем два сборщика работают параллельно в разных сессиях. Один видит только уроки (диагнозы). Другой видит только готовые решения (реализации). В обоих запросах пиши: Любой из них может быть ошибочным — проверяй по первоисточнику. Финальный сборщик получает оба предложения с уроками и сверяет их с первоисточником. Он вправе принять один вариант, объединить, отвергнуть допущения, общие для обоих, или написать новое. Почему работает: независимость не даёт ошибке заразить остальных. Узкая рамка даёт каждому свой тип доказательств. Сжатие убирает шум. Решения идут отдельно от уроков, поэтому не теряются детали вроде «куда вставить проверку». Два сборщика видят разное, поэтому финальный может починить то, что не смог ни один специалист. Когда да: сложная проблема, мало входных данных, есть способ проверить итог (тесты, запуск). Когда нет: простые случаи (дорого: в разы больше токенов и времени) и задачи без проверки результата (получишь уверенный, но неверный итог). Оговорка: проверено на исправлении уязвимостей в коде. Перенос на другие задачи — твоя догадка, проверь на своих случаях. Какой специалист сильнее, зависит от модели. Прогони всех трёх на нескольких своих примерах

Тезисы

ТезисКомментарий
Сборщику нужно право сказать «все ошиблись»Если попросить «выбери лучший из вариантов», сборщик выберет один из плохих. Если разрешить объединять, отвергать общие допущения и писать новое, он может найти то, чего не было ни в одном варианте. Почему: предложения часто ошибаются одинаково. Тогда выбор между ними не поможет. Применяй: добавь в запрос сборщика фразу «любое из предложений может быть неверным» и перечисли его права: принять, объединить, отвергнуть общие допущения, написать новое
📖 Простыми словами

ExploreRepair: Evidence-Specialized Agents for Vulnerability Repair under Information Constraints

arXiv: 2610.39899

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

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

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

Тестировали схему на слепых уязвимостях вроде path traversal, где нет готовых инструкций по взлому, но паттерн универсален. Он одинаково эффективен для отлова плавающих багов, разгребания древнего легаси или поиска утечек памяти. Везде, где исходных данных кот наплакал, сваливать всё в одно контекстное окно — верный путь к провалу.

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

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

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

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