3,583 papers
arXiv:2610.37434 84 27 окт. 2026 г. FREE

Контрольная точка между этапами: почему агент не замечает свои старые ошибки и как это обойти

КЛЮЧЕВАЯ СУТЬ
95% проваленных этапов агент-программист не замечает и строит следующий этап прямо на них. Поэтому первый этап проходят 63% агентов, а функция целиком работает у 28%. Метод контрольной точки позволяет поймать старую ошибку до того, как она утянет за собой следующие этапы. Фишка: старый код ломается редко, всего в 3% случаев. Агент не портит прошлое, он просто не оглядывается назад. Лечится это явной командой «перепроверь прошлые этапы и покажи вывод». Важно: это наш вывод из данных авторов. Сами они такую меру не проверяли.
Адаптировать под запрос
⚡

TL;DR

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

Главная находка: ранняя ошибка остаётся в коде и тянет за собой следующие этапы. Первый этап проходит примерно 63% агентов, а функция целиком работает у 28%. После проваленного этапа следующий проходит лишь в 23% случаев, после успешного — в 70%. При этом старый код ломается редко (3% случаев). Проблема в другом: в 95% случаев агент не замечает, что предыдущий этап был сделан неверно. Его самопроверки смотрят на текущий этап и почти не возвращаются назад.

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

🔬

Схема метода

Так устроен тест у авторов:

ШАГ 1: Агент получает код и ТЗ этапа 1 → пишет реализацию
КОНТРОЛЬ: скрытые тесты проверяют (а) новое поведение, (б) что старое не сломано
         → агенту результат НЕ сообщают, откат НЕ делают
ШАГ 2: Агент получает ТЗ этапа 2 → строит поверх СВОЕГО кода (та же сессия)
КОНТРОЛЬ: те же проверки
...
ШАГ N: последний этап
ИТОГ: проверка всей функции целиком на финальном коде

Уровни делегирования, которые вводят авторы:

L1: пользователь говорит агенту, КАК исправить провалившийся этап
L2: пользователь указывает, КАКОЕ поведение не работает
L3: пользователь говорит только «прошёл / не прошёл»
L4: пользователь молчит о прошлых этапах и даёт только следующее ТЗ  ← тестировали это
🚀

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

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

Задача: Вы делаете в Claude Code телеграм-бота для онлайн-школы английского. Этап 1 — запись на урок. Этап 2 — оплата через ЮKassa. Этап 3 — напоминания и перенос урока. Раньше вы кидали три ТЗ подряд и в конце находили, что запись уже не учитывает оплату, а перенос создаёт дубли.

Промпт (перед каждым новым этапом, начиная со второго):

Перед этапом 2 («Оплата через ЮKassa») остановись и проверь этап 1.

1. Выпиши все критерии приёмки этапа 1 из моего ТЗ списком.
2. Для КАЖДОГО критерия запусти проверку (тест или ручной прогон) и покажи вывод команды.
   Не пиши «должно работать». Только фактический результат.
3. Если хотя бы один критерий не выполнен — исправь, перезапусти проверку
   и покажи, что теперь проходит. К этапу 2 не переходи.
4. Если всё выполнено — напиши «Этап 1: все критерии подтверждены»
   и приступай к этапу 2.

После этапа 2 запусти проверки этапов 1 и 2 вместе. Это нужно,
чтобы оплата не сломала запись на урок.

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

🧠

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

Слабость LLM. Агент оценивает свою работу по тому, что проверяет сам. А проверяет он в основном текущую задачу. После провала этапа он почти никогда не возвращается к нему, потому что в его картине мира всё «зелёное». Новый этап строится на кривом фундаменте, и ошибка растёт: в большинстве проваленных поздних этапов (73%) виноват дефект, унаследованный от раньше.

Сильная сторона. Агент хорошо выполняет прямую конкретную команду: «выпиши критерии, запусти проверку, покажи вывод». Он умеет читать собственный код и гонять тесты. Не хватает ему не умения, а привычки возвращаться назад без запроса.

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

📋

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

Это шаблон на основе выводов статьи, а не авторский:

Мы наращиваем функцию «{функция}» по этапам. Сейчас переходим к этапу {номер}: «{название_этапа}».

<ПЕРЕД_НАЧАЛОМ>
1. Выпиши критерии приёмки всех завершённых этапов ({список_этапов}) списком.
2. Для каждого критерия запусти проверку и покажи фактический вывод.
3. Если критерий не выполнен: исправь, перезапусти, покажи результат.
   К новому этапу не переходи, пока всё не подтверждено.


<НОВЫЙ_ЭТАП>
{ТЗ_этапа}
Интерфейсы, имена и сообщения об ошибках: {контракт}


<ПОСЛЕ_ЭТАПА>
Запусти проверки нового этапа И всех прошлых вместе.
Отчитайся таблицей: этап — критерий — результат.
Если что-то из прошлого сломалось, исправь до сдачи.

Что подставлять: {функция} — что наращиваете, {список_этапов} — этапы, уже сделанные, {ТЗ_этапа} — ваше описание поведения и критериев, {контракт} — названия функций, поля, тексты ошибок, чтобы проверки не гадали.

🚀 Быстрый старт — вставь в чат с агентом:

Вот шаблон контрольной точки между этапами. Адаптируй под мой проект: {опиши проект и этапы}.
Задавай вопросы, чтобы заполнить поля.

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

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

⚠️

Ограничения

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

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

⚠️ Результаты зависят от связки модель + обвязка: сравнивали готовых агентов целиком, вклад модели и инструмента не разделён.

⚠️ Тест жёсткий: без обратной связи, без отката, одна сессия. В реальной работе вы обычно что-то проверяете, так что 28% — это нижняя граница, а не прогноз.

⚠️ Только код: вывод про многоэтапную разработку. Переносить на тексты или анализ данных можно по аналогии, но в статье этого нет.

⚠️ Текст статьи обрезан: подробные результаты по отдельным моделям и разбор причин в предоставленном фрагменте отсутствуют. Выводы опираются на аннотацию и введение.

🔍

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

Идея была простой: настоящая функция растёт по частям, значит, тест должен быть таким же. Команда Tencent взяла истории реальных репозиториев (Python, TypeScript, Rust, Go) и вытащила из них цепочки коммитов, которые последовательно расширяют одну и ту же функцию. Для каждого этапа LLM-агенты написали ТЗ и контракт интерфейса, а старые тесты разделили на два вида. Первые проверяют новое поведение, вторые — что старое не сломано. После отбора и ручной проверки осталось 73 задачи, 263 этапа, 53 репозитория, от 2 до 10 этапов в цепочке.

Десять кодинг-агентов работали в одной сессии. Скрытые тесты запускались после каждого этапа, но агент про результаты не знал. Откатов не было, и бюджет составлял четыре часа на этап.

Удивило то, что новый код почти не ломает старый (3,3%). Главная беда не регрессии, а необнаруженные дефекты: после провала агент в 95% случаев не замечает ошибку. Даже лучший агент, проходящий первые этапы в 84% случаев, собирает целую функцию только в 49%. Для практики из этого следует: успех на одном этапе ничего не говорит о состоянии всей функции.

Траектории агентов разметили три LLM-судьи по общему кодбуку. Решение принималось большинством, спорные случаи разбирал первый автор. Свою разметку на выборке он проверял вслепую, совпадение с судьями было 89–100%.

💡

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

🔧 Техника: независимый проверяющий → свежий взгляд на старые этапы

Вместо самопроверки запускай ревью в новой сессии:

Ты принимаешь работу другого разработчика. Ниже ТЗ этапов 1–2 и код.
Не доверяй его заверениям. Для каждого критерия приёмки найди подтверждение в коде
или запусти проверку. Верни список: критерий — подтверждено / не подтверждено — чем.

Эффект: у проверяющего нет привычки «всё и так работает». Эту гипотезу статья не проверяла.

Экстраполяция: правило в CLAUDE.md / AGENTS.md

## Правила работы по этапам
- Прежде чем начать новый этап, перечисли критерии приёмки всех прошлых
  и подтверди каждый запуском проверки с выводом в ответе.
- Не пиши «проверил», если не запускал команду.
- Если прошлый этап не проходит, чини его до начала нового.
- Финиш этапа = прогон новых и старых тестов вместе.

Так проверка встроена в постоянные инструкции и не зависит от того, вспомните ли вы напомнить.

🔗

Ресурсы

  • FeatureArc: Benchmarking Coding Agents on Evolving Features — Yunlong Wang, Alyssa Wu, Cuiyun Gao, Jia Feng, Songyuanyi Lu, Zhichao Hu
  • Hunyuan Team, Tencent; The Chinese University of Hong Kong
  • Упомянутые инструменты: Claude Code (code.claude.com/docs/en/overview), Codex CLI (github.com/openai/codex)

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

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

95% проваленных этапов агент-программист не замечает и строит следующий этап прямо на них. Поэтому первый этап проходят 63% агентов, а функция целиком работает у 28%. Метод контрольной точки позволяет поймать старую ошибку до того, как она утянет за собой следующие этапы. Фишка: старый код ломается редко, всего в 3% случаев. Агент не портит прошлое, он просто не оглядывается назад. Лечится это явной командой «перепроверь прошлые этапы и покажи вывод». Важно: это наш вывод из данных авторов. Сами они такую меру не проверяли.

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

Схема простая: перед каждым новым этапом агент сначала сдаёт предыдущий. 1. Выписывает критерии приёмки прошлого этапа из вашего ТЗ. 2. Запускает проверку по каждому критерию и показывает вывод. 3. Находит провал, чинит и перезапускает проверку. 4. Только после этого берётся за новое ТЗ. После нового этапа агент гоняет старые и новые проверки вместе. Так видно, что оплата не сломала запись на урок. Это как стройка. Трещину в фундаменте проще заделать до второго этажа. Потом она пойдёт по стенам.

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

Данные авторов показывают, как ошибка тянется по цепочке. После проваленного этапа следующий проходит лишь в 23% случаев. После успешного проходит в 70%. В 73% поздних провалов виноват дефект, который достался от прошлого этапа. Агент умеет гонять тесты и читать свой код, но без команды не возвращается к прошлому. Его самопроверки смотрят только на текущую задачу. Для него всё «зелёное», пока вы не скажете иначе. Контрольная точка делает возврат назад обязательным шагом, а не делом совести.

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

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

Мини-рецепт

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

Примеры

[ПЛОХО] : Теперь добавь оплату через ЮKassa, потом напоминания и перенос урока
[ХОРОШО] : Перед этапом 2 («Оплата через ЮKassa») остановись и проверь этап 1. Выпиши критерии приёмки этапа 1 из моего ТЗ. Для каждого запусти проверку и покажи вывод команды. Не пиши «должно работать». Если критерий не выполнен, исправь и перезапусти проверку. К оплате не переходи, пока всё не подтверждено. После этапа 2 запусти проверки этапов 1 и 2 вместе и покажи таблицей: этап, критерий, результат. Разница: в плохом варианте агент сам решает, что проверять, и обычно смотрит только вперёд. В хорошем возврат назад прописан как обязательный шаг с доказательством.
Источник: FeatureArc: Benchmarking Coding Agents on Evolving Features
ArXiv ID: 2610.37434 | Сгенерировано: 2026-10-28 13:20

Проблемы LLM

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

Методы

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

FeatureArc: Benchmarking Coding Agents on Evolving Features

arXiv: 2610.37434

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

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

Бенчмарк FeatureArc вскрыл эту лажу начисто: агенту скармливали задачи по очереди — «сделай запись», потом «добавь оплату», следом «прикрути переносы». Итог закономерный: скрытые тесты валятся с грохотом. В 73% провалов на поздних этапах виноват не сложный новый код, а унаследованный скрытый дефект, который сетка продолбала на самом первом шаге.

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

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

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

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

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