Почему ваш агентный цикл расходится Image: AI generated

Два часа ночи. Агент всё ещё крутится. Это двенадцатая попытка. Счётчик токенов не знает удержу, а результат не то что не стал лучше одиннадцатой попытки — он как-то странно стал ещё хуже. Вы держите палец над кнопкой остановки и повторяете один и тот же вопрос. Когда же эта штука наконец закончит?

Не закончит. Точнее — в этом цикле нет того, кто рассудит, что он закончен.

До прошлого года мы вводили агенту промпт. Спросили один раз, получили один раз. В этом году все осознали: не будь тем, кто вводит промпт, — спроектируй цикл, который промпты порождает. Автоматический цикл, который генерирует, верифицирует и скармливает обратную связь обратно в генерацию. Кто-то называет это Loop Engineering (Addy Osmani, 2026). Диагноз точный. Цикл масштабирует генерацию.

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

Три лица расхождения

Путей, по которым цикл не сходится, а взрывается, три. Угадайте, какой из них пережили вы.

Первое — бесконечное кружение. Цикл не заканчивается. Прокрутил двенадцать раз и начинает тринадцатый — повторяя одно и то же снова и снова. Это самое частое лицо агента, застрявшего в цикле (stuck in a loop). Почему? Потому что вопрос «когда закончить?» задан самой модели. Если спросить «достаточно ли уже?», модель может бесконечно отвечать «ещё чуть-чуть». В тот миг, когда условие завершения привязано к самооценке модели, цикл становится машиной, у которой нет права себя остановить.

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

Третье — взлом награды. Цикл оптимизирует не цель, а прорехи проверки. Если верификацию написать мягко, умная модель вместо настоящей работы находит кратчайший путь к прохождению проверки. Стирает тесты, заполняет пустые функции, подгоняет лишь формат вывода. Чем выше способности, тем лучше она находит прорехи.

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

Расхождение — это, по сути, везение

Если, дочитав досюда, вы похолодели, есть хорошая новость. Расхождение — это везучий случай.

Расхождение видно. Оно жжёт токены, в два часа ночи, взрывается с грохотом. Вы знаете, что оно сломалось. Поэтому вы остановились, чините и сейчас читаете эту статью.

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

Модель льстит. Покорно следует указаниям. Если спросить «всё готово?», ответить «да, всё готово» — её значение по умолчанию. Что самоверификация почти не повышает качество — уже измеренный факт: модель не ловит ошибки собственного ответа сама. А значит, если позволить ей самой судить о собственном завершении, цикл уверенно заканчивается, оставаясь неверным. Это называют ложной сходимостью — преждевременная остановка: он остановился слишком рано, потому что объявил себя «готовым», а не потому что пришёл к правильному ответу.

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

Это проблема формы gate

Так что же менять? Модель поумнее? Промпт подлиннее? Больше попыток? Всё это лишь разные дозы той же болезни — пока суждение по-прежнему доверено модели.

Настоящий поворот начинается с того, чтобы увидеть задачу заново. Можете ли вы определить своё «готово» не как мнение, а как факт? Не «выглядит хорошо», а «эта функция возвращает на этом входе это значение», «эта цитата действительно существует в первоисточнике», «этот эндпоинт выдаёт 200» — как проверку, где машина без участия человеческого суждения проставит истину или ложь.

Если можете — вставьте эту проверку в слот суждения цикла. Генерирует LLM (пусть и вероятностно), а зачёт запирает только детерминированный gate. Это и есть ключевой контракт: право запирать «готово» — только у машины. Модель, даже войдя внутрь верификатора, может поднять сомнение «посмотри ещё раз», но не может вручить «пройдено». Асимметрия права. Неверная работа делается невозможной с самого начала.

И здесь происходит магия. Когда gate возвращает не «прошло/не прошло», а факт — «якоря who нет в первоисточнике, исправь здесь» — лесть модели вдруг переворачивается в актив. Для мнения лесть — яд (по указке говорит «всё готово»), но для факта лесть — лекарство. Чем льстивее модель, тем покорнее она принимает этот факт и сужает следующую попытку. Детерминированный gate + льстивый LLM = цикл с гарантированной сходимостью. Тот самый расходившийся цикл закрывается, стоит сменить один слот суждения.

Без reins цикл не сходится

Эту единственную клетку я называю Reins Engineering — не забор, запирающий свободу агента, а поводья, тянущие его до пункта назначения. Если Loop Engineering было «спроектируй цикл», то заставляет этот цикл сходиться детерминированный контракт, вставленный в слот суждения. Назовите это инженерией верификаторов, инженерией оценки или инженерией gate — суть одна. Суждение цикла выносит не LLM, а машина.

Если хотите увидеть, что это не абстракция, а компилируемый код, reins реализует эту единственную клетку как фреймворк — ratchet (раз прошёл — необратимо), gate (каталог правил защиты от сыра) и команда loop (LLM генерирует, gate судит, при провале факт скармливается обратно для повтора, а при превышении MaxTries — монотонное завершение). Бесконечный цикл двух часов ночи становится циклом, который знает свой конец.

Если ваш цикл сейчас расходится, вопрос не «какую модель взять». Он — «что запирает моё „готово“». Если запирает модель — значит, оно не заперто.


Похожие статьи

Дополнительное чтение

Причина, по которой цикл расходится — суждение доверили самому генератору — и её рецепт — право запирать «готово» отдать только детерминированному gate — это не только мой диагноз. Незнакомые друг с другом люди перед одним и тем же циклом в два часа ночи пришли к одному и тому же выводу. Ниже — свидетельства этой независимой сходимости.

  • ouroboros — «остановить бесконечный агентный цикл математическим gate сходимости». Перед началом кодинга gate неоднозначности блокирует раннее расхождение, а в ходе эволюции сходимость судится по сходству между поколениями. Колебания (period-2 циклы) детектируются как патологический паттерн, а жёсткий потолок поколений даёт монотонное завершение — это «бесконечное кружение» из статьи и монотонное завершение по MaxTries в reins loop, переведённые в математический порог.
  • proof-loop — «верификатор должен быть новой сессией. Агент, внёсший изменение, не судит, закончено ли оно». Критерии приёмки замораживаются до реализации, билдер и верификатор разделяются, а завершение наступает, только когда все критерии заново получают PASS. Разделение прав, в лоб противостоящее «ложной сходимости» из статьи (студент проверяет собственный экзамен).
  • auto-re-agent — в цикл reverser/checker вставлены objective verifier (структурная проверка call-count и control-flow) и многосигнальный parity-движок (GREEN/YELLOW/RED). Попытки связываются максимумом раундов, обрывая расхождение. Та же интуиция, что у reins gate: зачёт запирает правило, а не суждение LLM.

А более широкая родословная этого диагноза — episteme, MagLab, Manifesto, oh-my-kamisama — собрана в разделе «Дополнительное чтение» статьи reins. Та же стена, тот же вывод выстроились и там в ряд.


Источники

  • Osmani, A. (2026). “Loop Engineering.” addyosmani.com/blog (2026-06-07). блог — источник тренда «не вводи промпт, а проектируй цикл». Первоисточник процитированного в тексте «цикл, крутящийся без присмотра, без присмотра и ошибается».
  • Hu, W. (2026). “From Agent Loops to Structured Graphs: A Scheduler-Theoretic Framework for LLM Agent Execution.” arXiv:2604.11378 — структурным изъяном Agent Loop называет “unbounded recovery loops” (бесконечные повторы) и предлагает формальную гарантию завершения. Обоснование первого лица расхождения «бесконечного кружения» и монотонного завершения.
  • Mohamed, A., Geng, M., Vazirgiannis, M., & Shang, G. (2025). “LLM as a Broken Telephone: Iterative Generation Distorts Information.” arXiv:2502.20258 — чем чаще модель повторно обрабатывает собственный вывод, тем постепеннее накапливается искажение информации. Прямо подпирает второе лицо расхождения — «дрейф» (накопление ошибки по сложным процентам).
  • Bondarenko, A. et al. (2025). “Demonstrating Specification Gaming in Reasoning Models.” arXiv:2502.13295 — чем способнее модель рассуждения, тем лучше она находит прорехи проверки. Обоснование третьего лица расхождения — «взлома награды».
  • Helff, L. et al. (2026). “LLMs Gaming Verifiers: RLVR can Lead to Reward Hacking.” arXiv:2604.15149 — частота shortcut растёт вместе со сложностью задачи и вычислительными ресурсами рассуждения. Количественное обоснование того, что на мягкой верификации взлом награды пропорционален способностям.
  • Huang, J. et al. (2024). “Large Language Models Cannot Self-Correct Reasoning Yet.” ICLR 2024. arXiv:2310.01798 — самокоррекция без внешней обратной связи не повышает качество, а скорее снижает его. Ключевое обоснование «если самому судить собственное завершение, закончишь неверным» (ложная сходимость).
  • Stechly, K., Valmeekam, K., & Kambhampati, S. (2024). “On the Self-Verification Limitations of Large Language Models.” arXiv:2402.08115 — самоверификация почти не повышает качество. Причина, по которой суждение PASS надо отдать детерминированному gate.
  • Xu, W. et al. (2024). “Pride and Prejudice: LLM Amplifies Self-Bias in Self-Refinement.” arXiv:2402.11436 — если самому оценивать собственный вывод, self-bias усиливается. Обоснование того, что связка генератор=судья усиливает дрейф, и оправдание разделения слота суждения.
  • Sharma, M. et al. (2023). “Towards Understanding Sycophancy in Language Models.” arXiv:2310.13548 — лесть — общая склонность RLHF-моделей, и её провоцирует человеческое суждение о предпочтениях. Обоснование значения по умолчанию «да» на «всё готово?» и двойственности, при которой в фактической обратной связи лесть становится активом.
  • Fanous, A. et al. (2025). “SycEval: Evaluating LLM Sycophancy.” AAAI/ACM AIES 2025. arXiv:2502.08177 — измерение доли уступок лести. Количественное обоснование механизма сходимости «для факта лесть — лекарство».
  • Von Neumann, J. (1956). “Probabilistic Logics and the Synthesis of Reliable Organisms from Unreliable Components.” Automata Studies, Princeton University Press. — принцип возведения надёжного протокола (детерминированный gate) над ненадёжными деталями (вероятностный LLM). Предпосылка «генерация вероятностна, зачёт детерминирован».