Почему ИИ-агент зацикливается и как разорвать петлю
Агент на LLM может часами вызывать один и тот же инструмент, жечь токены и упираться в потолок. Разбираем, почему это происходит и что делать, пока счёт за API не улетел в космос.

Вы запустили автономного агента на GPT-4 или Claude, дали ему задачу «найди контакт компании и отправь письмо» — и через двадцать минут видите в логах одно и то же: агент читает страницу, решает, что данных мало, читает ту же страницу снова, снова решает, что мало, и так по кругу. Счётчик токенов тикает, задача не движется. Это не редкий баг, а типичное поведение цикла «планирование — действие — наблюдение», на котором построено большинство агентных фреймворков вроде LangChain, AutoGPT и CrewAI.
Что такое застревание в цикле
Агент на LLM работает итерациями. Модель получает историю (задачу, предыдущие действия, результаты вызова инструментов), генерирует следующий шаг, выполняет его, получает результат и снова обращается к модели. Петля продолжается, пока агент не решит, что задача выполнена, либо пока не сработает лимит шагов.
Застревание — это состояние, когда агент повторяет действия, не приближаясь к цели. Внешне это выглядит по-разному, но сводится к нескольким сценариям:
- Прямой повтор. Агент вызывает один и тот же инструмент с одними и теми же аргументами. Например, десять раз подряд ищет по одному запросу в поисковике.
- Осцилляция. Агент мечется между двумя состояниями: правит файл, откатывает правку, снова правит, снова откатывает.
- Ложный прогресс. Формально шаги разные, но семантически агент топчется на месте — переформулирует один и тот же запрос синонимами.
- Тупик планирования. Агент бесконечно «думает» о плане, не переходя к действию, потому что каждый новый вызов модели порождает новый план.
Почему это дорого
Цена вопроса измеряется в токенах и в реальных деньгах. На каждой итерации в модель уходит вся накопленная история: чем длиннее петля, тем больше контекст, тем дороже каждый следующий вызов. Петля из 50 шагов с растущим контекстом легко стоит в разы дороже, чем задача, которая должна была уложиться в пять шагов. Если агент работает без жёсткого лимита итераций, ночной запуск может обойтись в сумму, которую вы заметите в биллинге OpenAI или Anthropic только утром.
Автономный агент без потолка по шагам и по бюджету — это не помощник, а открытый кран, подключённый к вашей платёжной карте.
Почему агенты застревают
Причин несколько, и обычно они складываются.
Модель не видит собственного повтора
LLM не хранит явную память о том, что уже пробовала — она видит только то, что попало в контекст. Если история обрезается по длине или суммируется, агент буквально забывает, что этот путь уже не сработал, и идёт по нему заново.
Отсутствует критерий завершения
Если задача сформулирована размыто («собери информацию о рынке»), у агента нет чёткого признака «готово». Модель продолжает искать, потому что всегда можно найти ещё чуть-чуть. Без явного условия остановки петля не заканчивается сама.
Инструмент возвращает бесполезный или неоднозначный результат
Классика: инструмент отдаёт ошибку в формате, который модель не понимает, или пустой результат без объяснения. Агент интерпретирует это как «попробую ещё раз» вместо «этот путь закрыт, нужен другой».
Температура и недетерминированность
При высокой температуре модель на каждом шаге принимает чуть разные решения. Иногда это спасает от повтора, а иногда, наоборот, порождает осцилляцию: агент никак не может закрепиться на одном плане.
Как распознать петлю в проде
Само по себе застревание тихое: агент не падает с ошибкой, он «работает». Поэтому его нужно ловить активно.
- Считайте хэш действий. На каждом шаге берите пару «инструмент + аргументы», хэшируйте и складывайте в счётчик. Если один хэш встретился, скажем, три раза — это красный флаг.
- Следите за расстоянием между шагами. Для семантических повторов сравнивайте эмбеддинги последних действий: если косинусная близость выше порога несколько раз подряд, агент топчется.
- Отслеживайте прогресс к цели. Если у задачи есть измеримая метрика (количество собранных полей, пройденных подзадач), а она не растёт N шагов — стоп.
- Логируйте бюджет. Считайте потраченные токены и деньги в реальном времени, а не постфактум.
Как разорвать цикл
Стратегии делятся на «жёсткие» (просто остановить) и «мягкие» (помочь агенту выбраться).
| Механизм | Что делает | Когда применять |
|---|---|---|
| Лимит итераций | Обрывает петлю после фиксированного числа шагов | Всегда, как базовая страховка |
| Бюджет по токенам/деньгам | Останавливает при достижении порога расходов | Всегда, особенно в проде |
| Детектор повторов | Ловит одинаковые действия и вмешивается | Для задач с вызовом инструментов |
| Инъекция подсказки | Добавляет в контекст сообщение «ты повторяешься, смени подход» | Мягкое вмешательство до жёсткой остановки |
| Эскалация человеку | Передаёт управление оператору | Критичные или необратимые действия |
Практический порядок действий
- Задайте жёсткий лимит шагов — во многих фреймворках это параметр
max_iterations. Начните с малого числа и поднимайте по мере понимания задачи. - Добавьте бюджет по токенам и прерывайте выполнение при его исчерпании, а не только по числу шагов.
- Встройте детектор повтора действий: при N одинаковых вызовах подряд не выполняйте их, а верните модели явное сообщение о том, что этот путь уже пройден.
- Сделайте критерий завершения явным: опишите в промпте, как выглядит выполненная задача и когда нужно остановиться, даже если результат неполный.
- Улучшите ответы инструментов: вместо пустого результата возвращайте текст вроде «данные не найдены, повтор запроса не поможет».
Проектирование против петель
Надёжнее лечить причину, а не симптом. Несколько принципов, которые снижают частоту застреваний:
- Дробите задачу. Декомпозиция на подзадачи с проверкой каждой даёт естественные точки завершения.
- Разделяйте планировщик и исполнителя. Отдельный «планировщик» строит план один раз, а исполнитель идёт по нему, не переписывая план на каждом шаге.
- Давайте агенту память о неудачах. Явный список «что уже пробовал и не сработало» в контексте резко снижает повторы.
- Тестируйте на граничных случаях. Специально скармливайте агенту задачи без решения и проверяйте, что он честно сдаётся, а не крутится вечно.
Ни один из этих приёмов не отменяет базовой связки «лимит шагов плюс лимит бюджета». Всё остальное — способы сделать так, чтобы до этих лимитов дело доходило реже.
Точные названия параметров и лимиты отличаются между версиями фреймворков и API. Перед настройкой сверяйтесь с актуальной документацией используемого инструмента.
Prompt-инженер: Идеальные запросы для Midjourney, ChatGPT и других моделей.
Спросить за 15 ₽Источники: LangChain Documentation — Agents, Anthropic — Building effective agents
Частые вопросы
Почему агент застревает, если задача кажется простой?
Достаточно ли просто поставить лимит итераций?
Поможет ли снижение температуры модели?
Как понять, что агент застрял, а не просто долго работает?
Можно ли полностью исключить застревания?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.