1. Главная
  2. Блог
  3. ИИ-агенты для бизнеса
  4. Зацикливание ИИ-агента: почему возникает и как остановить

Зацикливание ИИ-агента: почему возникает и как остановить

10 августа 2026
57

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

Четыре типа зацикливания

Повтор одного вызова. Агент вызывает инструмент, получает ошибку, вызывает его снова с теми же параметрами. Самый частый случай, обычно возникает из-за невнятного текста ошибки: «Error 500» не подсказывает, что делать иначе.

Чередование двух состояний. Агент переключается между двумя действиями, каждое из которых отменяет результат предыдущего. Встречается, когда две цели противоречат друг другу.

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

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

Почему это происходит

Дело не в «глупости» модели, а в конструкции.

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

Ошибка не объясняет, что делать. Технический код без пояснения не даёт основания сменить стратегию.

Цель недостижима, а признать это нечем. Если данных для выполнения задачи не существует, у агента нет критерия «пора остановиться» — он продолжает искать. Правило «если не нашёл за N попыток, сообщи о невозможности» должно быть задано явно.

Задача сформулирована слишком широко. Чем размытее цель, тем больше шагов агент считает уместными.

Меры защиты

Жёсткие лимиты

Основа, работающая независимо от поведения модели:

  • предел шагов на задачу — при достижении задача останавливается и передаётся человеку;
  • предел одинаковых вызовов — три вызова одного инструмента с теми же параметрами прерывают работу;
  • потолок расходов на задачу с автоматической остановкой;
  • таймаут — задача не может выполняться дольше отведённого времени.

Все четыре нужны вместе: расширяющийся поиск не ловится детектором повторов, а быстрый цикл может уложиться в таймаут, но исчерпать бюджет.

Детекция повторов

Простая и эффективная мера: хранить хэши вызовов (инструмент + параметры) в рамках задачи. Повторное появление того же хэша — сигнал.

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

Информативные ошибки

Возвращать модели текст, из которого понятно следующее действие. «Клиент с таким телефоном не найден, уточните номер или создайте нового» вместо «404». Разница в поведении заметная — см. «Function calling».

Явное правило остановки

В инструкции агента должно быть сказано, когда признавать задачу невыполнимой: «если после двух попыток данные не найдены, сообщи о невозможности и передай человеку». Без такого правила у агента нет основания остановиться.

Что делать при обнаружении

Симптом Вероятная причина Действие
Один вызов повторяется неинформативная ошибка переписать текст ошибки
Два действия чередуются противоречивые цели пересмотреть инструкцию
Шаги не повторяются, конца нет нет правила остановки добавить критерий невыполнимости
Цикл между агентами нет лимита итераций ограничить число доработок
Внезапный рост счёта цикл на редком сценарии искать в журнале задачи с максимумом шагов

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

Влияние на бюджет

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

Поэтому лимит расходов с автоматической остановкой ставится до запуска, а не после первого инцидента. Расчёт — в статье «Стоимость эксплуатации ИИ-агента».

Разбор: цикл по шагам и где его ловит каждый лимит

Реалистичный сценарий. Агент обрабатывает заявку, клиент указал телефон в нестандартном формате: `8 (900) 000 00 00`.

```

шаг 1 find_client { phone: "8 (900) 000 00 00" }

→ ошибка: "Неверный формат телефона"

шаг 2 find_client { phone: "8 (900) 000 00 00" }

→ та же ошибка

шаг 3 find_client { phone: "8 (900) 000 00 00" }

→ та же ошибка

...

шаг 47 то же самое

```

Почему модель повторяет одно и то же. Она не помнит предыдущих попыток: каждое обращение обрабатывается заново, а в контексте лежит только «была ошибка формата». Разумное первое действие при такой ошибке — повторить вызов. Для модели это каждый раз первое действие.

Где сработал бы каждый механизм защиты:

Механизм Когда останавливает Что теряем
Детектор повторов (3 одинаковых вызова) на шаге 3 ничего
Информативная ошибка на шаге 2 ничего, агент исправится сам
Лимит шагов (20) на шаге 20 17 лишних обращений
Потолок расходов зависит от ставки десятки лишних обращений
Таймаут зависит от скорости может не сработать вовсе

Лучший из механизмов — не лимит, а текст ошибки. Сравните:

```

Неверный формат телефона

```

против

```

Неверный формат телефона. Ожидается +7XXXXXXXXXX без пробелов и скобок.

Полученное значение: 8 (900) 000 00 00

```

На втором варианте модель на шаге 2 приводит номер к нужному виду и идёт дальше. Цикла не возникает вовсе — исправление занимает одну строку в коде и экономит и деньги, и разбирательства.

Что делать в порядке приоритета:

  1. Переписать тексты ошибок так, чтобы из них следовало действие.
  2. Добавить детектор повторов — он ловит то, что не покрыли ошибки.
  3. Поставить лимит шагов — страховка на случай непредусмотренного.
  4. Поставить потолок расходов — последний рубеж, спасающий бюджет.

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

Частые вопросы

Почему ИИ-агент зацикливается?

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

Как защититься от бесконечного цикла?

Жёсткими лимитами в коде: предел шагов на задачу, предел одинаковых вызовов, потолок расходов с автоматической остановкой и таймаут. Все четыре нужны вместе, потому что ловят разные типы циклов: детектор повторов не срабатывает на расширяющемся поиске, а таймаут не спасает от быстрого цикла, исчерпывающего бюджет.

Можно ли предотвратить зацикливание промптом?

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

Как заметить зацикливание, если сбоя не произошло?

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

Что делать, если агент зациклился в продакшене?

Остановить задачу по лимиту (он должен сработать автоматически), затем разобрать журнал: какой вызов повторялся и какую ошибку получал. В большинстве случаев причина в тексте ошибки, не подсказывающем альтернативу, — исправление занимает минуты. Если повторов нет, а шаги разные, нужно добавить критерий невыполнимости.

Что дальше

Как хранить состояние, чтобы агент помнил свои попытки, — «Память ИИ-агента». Как устроены вызовы и возврат ошибок — «Function calling». Остальные ограничения — «Ограничение действий». Как поймать циклы до продакшена — «Тестирование ИИ-агента».

Настройка лимитов и мониторинга входит в разработку и внедрение ИИ-агента.