Зацикливание агента
Почему агент крутится в цикле tool calls и как остановить.
Агент зациклился. Разбери.
Симптомы
- Делает одну и ту же серию tool-calls
- Не двигается к финальному ответу
- Перепроверяет то что уже проверил
- Возвращается к началу после каждой итерации
Шаг 1: Найди паттерн
Прочитай лог tool-calls. Что повторяется?
| Паттерн | Что значит |
|---|---|
| A → B → A → B → ... | Ping-pong: два инструмента противоречат друг другу |
| A → A → A → ... | "Один шаг назад" — агент не доверяет результату |
| Чтение одного файла 5+ раз | Ищет что-то, не находит, надеется на удачу |
| Tool-call → ответ → тот же tool-call | Не использует кеш / память |
Шаг 2: Определи причину
Причина А: Цель размыта
Агент не знает когда он "закончил". Признаки:
- В системном промте нет критерия успеха
- "Сделай хорошо" вместо "верни список из N элементов"
Фикс: добавь чёткое условие выхода.
Причина Б: Контекст не сохраняется
Каждый tool-call агент забывает что узнал раньше.
Фикс: попроси агента вести "лог наблюдений" между шагами:
После каждого инструмента запиши:
- Что узнал
- Что осталось проверить
- Текущая гипотеза
Причина В: Конфликтующие инструкции
Где-то промт говорит "проверь N раз" а где-то "будь быстрым". Агент пытается удовлетворить оба.
Фикс: упрости. Одна цель.
Причина Г: Tool возвращает противоречивое
Tool A говорит X, Tool B говорит ¬X. Агент мечется.
Фикс: проверь сами инструменты. Возможно, у одного из них баг.
Причина Д: Plan thrashing
Агент пересоставляет план каждый шаг.
Фикс: добавь "Раз составленный план — не меняй без явной причины. Если нужно — назови причину явно."
Шаг 3: Поставь лимиты
В любом случае:
- Лимит на число tool-calls (например, max 15)
- Лимит на длительность (max 60 секунд)
- При превышении — попроси агента остановиться и выдать что есть
Шаг 4: Регрессия
Добавь тест на этот конкретный случай:
- Input что вызвал луп
- Expected: завершается за N шагов
Шаг 5: Профилактика
Системный промт должен иметь:
# Когда остановиться
- Ты выполнил [конкретное условие] → дай финальный ответ
- Ты сделал N tool-calls подряд без прогресса → остановись, объясни что не получается
- Ты не уверен в направлении → задай уточняющий вопрос вместо угадывания
Принципы
- Лучше остановиться рано с "не знаю" чем долго крутиться
- Лимиты должны быть встроены, не надеяться на агента
- Каждый луп → один тест в регрессии
Создать специализированного агента
Определить роль, инструменты, границы и системный промт нового агента для Claude Code.
Шаблон системного промта агента
Готовая структура: роль, контекст, инструменты, алгоритм, формат, anti-patterns.
Декомпозиция задачи на агентов
Разбить большую задачу на параллельных независимых агентов с чёткими интерфейсами.