3,583 papers
arXiv:2610.25899 84 19 окт. 2026 г. FREE

Acceptance bias: агент принимает чужую «готовую» работу за точку отсчёта и не сверяет её с задачей

КЛЮЧЕВАЯ СУТЬ
Работа от прошлой сессии проходит ~98% скрытых тестов, но агент с неё проваливается на 20–53 процентных пункта чаще, чем с чистого листа. Статья не даёт приёма, это бенчмарк. Но из неё следует правило: слово «готово» от прошлой сессии нужно считать непроверенным и сверять с исходным ТЗ. Агент принимает чужой результат за точку отсчёта (авторы называют это acceptance bias, склонность принимать унаследованное). Он смотрит изменения, гоняет тесты и сдаёт. В 59–88% провалов на DeepSWE он заканчивает с теми же упавшими тестами, с которых начал. Ниже промпт по мотивам статьи. Авторы его не проверяли.
Адаптировать под запрос
⚡

TL;DR

Если кодирующему агенту дать репозиторий с чужой работой (от другого агента или из прошлой сессии), он принимает эту работу как определение того, что ещё осталось сделать. Он смотрит изменения, гоняет тесты и сдаёт результат, почти не сверяя его с исходным запросом. Авторы называют это acceptance bias (склонность принимать унаследованное).

Главная находка: тот же агент, который решает задачу с нуля, с чужого «почти готового» результата проваливается в разы чаще. Разрыв составил от 20 до 53 процентных пунктов. Работа выглядит законченной: в среднем она уже проходит ~98% скрытых тестов, а у половины состояний падает всего 1–3 теста. Поэтому агент не ищет, что не так. Чаще всего (в 59–88% провалов на DeepSWE) он заканчивает с теми же упавшими тестами, с которыми начал. При этом с чистого листа он эти тесты проходил. Ещё одно следствие: рейтинг агентов при таком старте переворачивается, то есть сильный на чистом старте агент не обязательно хорош в доработке чужого.

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

🔬

Схема метода

В статье нет приёма, это бенчмарк. Схема эксперимента, из которого следует вывод:

ШАГ 1: Агент-предшественник решает задачу → сдаёт «готово», но скрытые тесты падают
ШАГ 2: Сохраняют его итоговое состояние (код, файлы, установленный софт)
ШАГ 3: Новый агент получает ТОЛЬКО исходный запрос + это состояние
        (без истории работы, без сообщения «это провалилось»)
ШАГ 4: Сравнение: тот же агент, та же задача, но с чистого старта
🚀

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

В статье нет готового промпта. Ниже промпт по её мотивам, авторы его не проверяли. Он нужен, чтобы показать, где проблема бьёт сильнее всего: передача работы между сессиями.

Задача: Вчера Claude Code в Cursor «закончил» интеграцию интернет-магазина с ЮKassa: приём платежа, вебхук подтверждения, возврат. Сегодня вы открыли новую сессию. Истории нет, остался только репозиторий и сообщение вчерашней сессии «всё готово». Если просто написать «доработай и проверь», новый агент, скорее всего, пробежится по коду, запустит имеющиеся тесты и скажет «ок».

Промпт:

Ниже — исходное ТЗ. Предыдущая сессия сообщила, что работа завершена.
Считай это непроверенным утверждением, а не фактом.

<ТЗ>
1. Создание платежа через ЮKassa с чеком по 54-ФЗ.
2. Вебхук: при payment.succeeded заказ переходит в статус «оплачен»,
   повторный вебхук не должен дублировать действия.
3. Возврат полной и частичной суммы из админки.
4. При отмене платежа резерв товара снимается.


Порядок работы:
1. Выпиши из ТЗ каждое требование отдельным пунктом.
2. Для каждого пункта найди в репозитории, где он реализован,
   и как это можно проверить (тест, запрос, запуск). 
   Если не нашёл — пометь «не реализовано».
3. НЕ опирайся на то, что код «выглядит законченным»
   и на то, что существующие тесты проходят: они могли не
   покрывать требование.
4. Для каждого пункта напиши отдельную проверку и запусти её.
5. Итоговая таблица: требование | где в коде | как проверено | статус.
   Статус «выполнено» ставь только если проверка запущена и пройдена.
6. Исправь всё, что не «выполнено», и повтори п. 4–5.

Результат: Модель сначала разложит ТЗ на пункты, затем покажет сопоставление пунктов с кодом. Потом напишет и запустит проверки на каждый пункт, а не только на уже существующие тесты. В финале будет таблица со статусами и список исправлений. Видно, какие пункты вчерашняя сессия пропустила или сделала не так (например, идемпотентность вебхука или частичный возврат).

🧠

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

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

Сильная сторона. Модель хорошо делает с нуля. С чистого листа те же агенты проходили эти тесты. Она также неплохо проверяет конкретный пункт по конкретному критерию, когда критерий ей явно дан.

Как это использовать. Нужно сломать «якорь» (привязку к готовому решению). Поэтому в промпте выше: - исходное ТЗ ставится выше состояния кода, а чужое «готово» объявляется непроверенным; - проверка идёт по пунктам ТЗ, а не по принципу «что тут есть»; - статус «выполнено» разрешён только после запущенной проверки.

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

📋

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

Шаблон тоже не из статьи, а сделан по её выводам:

Исходное ТЗ ниже. Предыдущий исполнитель сообщил, что работа завершена.
Считай это непроверенным утверждением.

<ТЗ>
{исходный_запрос}


Порядок:
1. Разбей ТЗ на отдельные проверяемые требования.
2. Для каждого найди, где оно реализовано в {репозиторий_или_среда}.
   Не нашёл — «не реализовано».
3. Не считай работу выполненной из-за того, что она выглядит
   законченной или что {существующие_проверки} проходят.
4. Для каждого требования напиши и запусти свою проверку.
5. Итог — таблица: требование | где | как проверено | статус.
   «Выполнено» — только после пройденной проверки.
6. Исправь невыполненное и повтори п. 4–5.

Подставьте: {исходный_запрос} — исходное ТЗ без пересказа, {репозиторий_или_среда} — где работает агент, {существующие_проверки} — тесты, линтер, CI.

⚠️

Ограничения

⚠️ Лечение не проверено: статья измеряет проблему, а не способы её решения. Промпт выше — гипотеза по мотивам выводов, его эффект авторы не измеряли.

⚠️ Только кодирующие агенты: проверяли на задачах с репозиториями и терминалом. Для текстов, аналитики и переписки перенос вероятен, но в статье не показан.

⚠️ Тесты, а не живые проекты: задачи взяты из бенчмарков, с жёсткими скрытыми тестами. В вашем проекте «правильно» определяет ТЗ, и без внятного ТЗ проверять не против чего.

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

⚠️ Разбор неполный: в предоставленном тексте оборван раздел про acceptance bias, поэтому детали поведения агентов (что именно они трогают и не трогают) взяты из аннотации и введения.

🔍

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

Идея простая: взять известные бенчмарки по программированию (DeepSWE и Terminal-Bench) и вместо чистого старта подсунуть агенту состояние, в котором уже кто-то поработал и сказал «готово», хотя скрытые тесты падают. Предшественниками выступили три открытых модели, которые на каждую задачу получали до восьми часов. Результаты отфильтровали: оставили только случаи, где агент объявил задачу завершённой, но тесты всё равно не прошли. Затем двое людей проверили, что попытка осмысленная и тесты согласуются с ТЗ. Получилось 198 «остаточных» состояний из 111 задач.

Затем пять сильных агентов получали только исходный запрос и это состояние, без истории и без намёка, что попытка не удалась. Запрос, тесты и инструменты оставались теми же, менялся только старт. Результат: успех падал на 20–53 пункта (например, с 72% до 20%) на DeepSWE и на 21–35 пунктов на Terminal-Bench. Первые места в рейтинге на чистом старте не гарантировали лучшего результата при доработке.

Удивило, что состояния были почти правильными: в среднем ~98% тестов уже проходили. Казалось бы, нужно лишь дожать. Но на задачах, которые агент решал с нуля, он с унаследованного состояния проваливался в 61–81% случаев. В 59–88% провалов на DeepSWE агент сдавал работу с тем же набором упавших тестов, то есть фактически ничего не исправлял. Отсюда вывод для практики: «почти готово» опаснее «ничего нет».

💡

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

🔧 Техника: ревьюер без доступа к «отчёту о готовности» → меньше якорение

Идея по мотивам статьи: не показывать проверяющему агенту вывод исполнителя («всё сделано, тесты зелёные»). Дайте ему только ТЗ и репозиторий.

Ты — независимый аудитор. Тебе даны только ТЗ и репозиторий.
Отчёта исполнителя у тебя нет и не будет.
Найди, чего в ТЗ не хватает в коде, и докажи запущенной проверкой.

Статья показывает, что даже без отчёта агенты якорятся на самом состоянии. Поэтому здесь заранее пригодится правило «не считать выполненным без запущенной проверки». Эффективность этой связки авторы не проверяли.

🔗

Ресурсы

  • Работа: SWE-Residual: Evaluating Starting-State Robustness of Coding Agents
  • Код: https://github.com/userljz/SWEResidual
  • Авторы: Jinze Li, Weijie Liu, Jinfeng Xu, Shuo Yang, Xin Yang, Yang Zhang, Yijun Wang, Zifei Shan, Edith C.H. Ngai
  • Организации: The University of Hong Kong, Tencent, University of Tokyo, University of North Texas, The University of British Columbia
  • Связанные работы: Recovery-Bench, Handoff Debt, Handoff Tax, FixedBench

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

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

Работа от прошлой сессии проходит ~98% скрытых тестов, но агент с неё проваливается на 20–53 процентных пункта чаще, чем с чистого листа. Статья не даёт приёма, это бенчмарк. Но из неё следует правило: слово «готово» от прошлой сессии нужно считать непроверенным и сверять с исходным ТЗ. Агент принимает чужой результат за точку отсчёта (авторы называют это acceptance bias, склонность принимать унаследованное). Он смотрит изменения, гоняет тесты и сдаёт. В 59–88% провалов на DeepSWE он заканчивает с теми же упавшими тестами, с которых начал. Ниже промпт по мотивам статьи. Авторы его не проверяли.

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

Агент не ищет пробелы, потому что работа выглядит законченной. Сломать этот якорь можно порядком проверки. Схема такая: ТЗ разбивается на пункты, затем для каждого пункта ищется место в коде, затем пишется и запускается проверка. После этого ставится статус. Исходное ТЗ стоит выше состояния кода, а чужое «готово» объявлено непроверенным утверждением. Это как приёмка квартиры. Прораб говорит «всё готово». Ты идёшь с чек-листом по договору и проверяешь каждую розетку. Ты не ходишь по комнатам с вопросом «ну, выглядит нормально».

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

Модель плохо замечает то, чего в коде нет. Без внешней обратной связи она охотно достраивает поверх чужих ошибок. Когда состояние выглядит законченным, сигнала искать пробелы нет. Половина таких стартов падает всего на 1–3 тестах. Ошибка прячется в мелочах. Жесть: с чистого листа те же агенты эти тесты проходили, а с почти готового результата проваливаются в разы чаще. Чужая работа не помогает, а мешает. Есть и второй неприятный факт. Рейтинг агентов при таком старте переворачивается. Сильный на чистом старте агент не обязательно хорош в доработке чужого. Но конкретный пункт по явному критерию модель проверяет неплохо. Поэтому критерий нужно дать ей прямо.

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

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

Мини-рецепт

1. Дай ТЗ как есть: исходный запрос без пересказа, в отдельном блоке.
2. Объяви «готово» слухом: напиши, что предыдущий исполнитель сообщил о завершении, и это непроверенное утверждение.
3. Разбей на пункты: каждое требование отдельной строкой.
4. Найди место в коде: не нашёл, значит «не реализовано».
5. Запрети верить внешнему виду: код «выглядит законченным» и старые тесты проходят — это не доказательство. Если тесты в проекте надёжны, этот пункт можно убрать.
6. Требуй свою проверку на каждый пункт: написать и запустить, а не пересказать.
7. Собери таблицу: требование | где в коде | как проверено | статус. «Выполнено» только после пройденной проверки.
8. Чини и повторяй: исправить невыполненное и снова пройти пункты 6–7. Для мелких задач таблицу можно сократить до списка «пункт → проверено / нет».

Примеры

[ПЛОХО] Ситуация: вчера агент «закончил» оплату через ЮKassa, сегодня новая сессия без истории. : Доработай и проверь, что всё работает
[ХОРОШО] : Ниже исходное ТЗ. Предыдущая сессия сообщила, что работа завершена. Считай это непроверенным утверждением. ТЗ: 1) платёж через ЮKassa с чеком по 54-ФЗ; 2) вебхук payment.succeeded переводит заказ в «оплачен», повторный вебхук ничего не дублирует; 3) возврат полной и частичной суммы из админки; 4) при отмене платежа резерв товара снимается. Порядок: выпиши каждое требование отдельным пунктом. Найди, где оно реализовано. Не нашёл — «не реализовано». Не опирайся на то, что код выглядит законченным и старые тесты проходят. Для каждого пункта напиши и запусти свою проверку. Итог — таблица: требование | где в коде | как проверено | статус. «Выполнено» ставь только после пройденной проверки. Исправь всё остальное и повтори проверку. После такого промпта проверки на повторный вебхук и частичный возврат пишутся отдельно. Вчерашние пропуски (например, идемпотентность вебхука) всплывают в таблице.
Источник: SWE-Residual: Evaluating Starting-State Robustness of Coding Agents
ArXiv ID: 2610.25899 | Сгенерировано: 2026-10-20 16:30

Проблемы LLM

ПроблемаСутьКак обойти
Агент принимает чужую «готовую» работу за точку отсчётаДаёшь модели результат другого агента или прошлой сессии. Работа выглядит законченной, большая часть проверок проходит. Модель просматривает изменения, запускает тесты и сдаёт. С исходной задачей почти не сверяется. Провалы остаются те же, с которыми работа пришла. Хотя с чистого листа модель решает ту же задачу. Проблема не только в коде. Любая передача работы между сессиями или исполнителями рискует так же: черновик, отчёт, анализНе давай модели «готово» как факт. Назови его непроверенным утверждением. Дай исходное задание и проси проверять против него, а не против текущего состояния. Подробности — в методе ниже

Методы

МетодСуть
Проверка по пунктам исходного задания — ломает привязку к чужой работеПоставь исходное задание выше текущего состояния. Напиши: «Предыдущий исполнитель сообщил, что готово. Считай это непроверенным утверждением». Дальше шаги. 1) Разбей задание на отдельные требования. 2) Для каждого найди, где оно сделано. Не нашёл — «не реализовано». 3) Не считай работу готовой только из-за того, что она выглядит законченной или старые проверки проходят. 4) Для каждого требования напиши и запусти свою проверку. 5) Итог — таблица: требование \| где \| как проверено \| статус. Статус «выполнено» — только после пройденной проверки. 6) Исправь невыполненное и повтори. Почему работает: у модели нет сигнала искать пробелы, когда работа выглядит целой. Явный список требований даёт этот сигнал. Модель хорошо проверяет конкретный пункт, если критерий назван. Когда применять: передача между сессиями или агентами, есть внятное исходное задание. Когда не нужно: старые тесты надёжны (пункт 3 можно убрать), задача маленькая (хватит списка «пункт → проверено / нет»). Когда не сработает: задание расплывчатое, проверять не против чего. Важно: эффект метода не измерен. Это гипотеза, выведенная из механики проблемы

Тезисы

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

SWE-Residual: Evaluating Starting-State Robustness of CodingAgents

arXiv: 2610.25899

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

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

Создатели бенчмарка SWE-Residual доказали: кодинг-агенты полностью проваливают оценку стартового состояния задачи. Если бросить агента на полпути, он механически прогонит существующие тесты, поправит запятые в чужом коде и решит, что миссия выполнена. Модель не ищет скрытые баги без явной ошибки в логах: она всегда выберет достроить на чужом косяке, чем подвергнуть его сомнению.

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

Короче: давать агенту полуфабрикат и ждать объективности — гарантированный слив задачи. Либо заставляй сетку каждый раз валидировать результат строго по первоначальному ТЗ, либо не удивляйся зелёным тестам при абсолютно неработающем коде. Доверие к промежуточному контексту сейчас — главный тормоз всей агентной разработки.

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

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

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