Инструкции

Постмортем: как зацикленный LLM-агент жёг токены 40 минут — и чеклист, чтобы это не повторилось

LLM-агент попал в retry-петлю из-за изменения формата API. 40 минут, 1.6 млн токенов, $50. Разбираю что сломалось, почему стандартные метрики не помогли и какие три защиты добавить прямо сейчас.

29 марта 2026 г.
6 мин чтения
AI-агентыпостмортемretry-петляcircuit breakercost budgetobservabilityмониторингпродакшн

Хватит терять деньги на зациклившихся агентах

Ночной кошмар каждого, кто запускает LLM-агентов в продакшне: просыпаешься утром — на дашборде минус $580. Агент всю ночь гонял один и тот же запрос по кругу. CPU спокоен, память в норме, логи выглядят как обычная работа. Только счёт за токены кричит.

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

Что произошло: анатомия retry-петли

Агент забирает данные из внешнего API, отправляет в GPT-4 для анализа, возвращает результат. Стандартный паттерн.

Внешний API изменил формат ответа — поле из JSON-объекта стало plain string. Без предупреждения.

Дальше цепочка:

  • Агент вызывает GPT-4 для парсинга ответа
  • GPT-4 получает невалидный вход и возвращает невалидный JSON
  • Retry-хэндлер просит GPT-4 «починить» сломанный JSON
  • GPT-4 снова получает тот же невалидный вход — снова мусор
  • И так по кругу

Каждый цикл: ~2 000 токенов. Интервал: 3 секунды. При ценах GPT-4 — $1.20 в минуту. За 40 минут: $50. За ночь: $580.

Почему стандартный мониторинг не помог

LLM-петли не выглядят как обычные петли:

  • CPU спокоен — вызовы к API это I/O
  • Память стабильна — каждый запрос независим
  • Логи выглядят нормально — агент генерирует новые промпты каждый раз
  • HTTP-коды 200 — API OpenAI отвечает успешно, ошибок нет

Единственная метрика, показывающая аномалию — расход токенов за единицу времени. С 200 до 40 000 токенов в минуту — рост в 200 раз. Но если не мониторить эту метрику в реальном времени — вы слепы.

Корневая причина: LLM как retry-механизм

Стандартный счётчик max_retries = 3 не работает — каждый retry выглядит как уникальная попытка, потому что промпт формируется заново.

Как просить перевести текст на несуществующем языке: каждый раз выглядит как честная попытка, каждый раз неудача.

Правильная проверка — не количество попыток, а сходство входных данных. Три раза подряд те же данные → четвёртая попытка не поможет.

Три уровня защиты

1. Валидация входа до LLM-вызова (Input Gate)

Перед каждым вызовом LLM проверяй схему. Если вход невалиден — логируй, пропускай цикл, отправляй алерт. Не пытайся LLM'ить свой путь через сломанные данные.

2. Circuit Breaker с input fingerprinting

Стандартный circuit breaker считает ошибки. Для LLM нужен умнее — хэшировать входные данные. Три одинаковых входа подряд → стоп. Пауза 5 минут. Перезапуск с чистым состоянием.

Ключевая идея: хэш sha256 от json.dumps(input_data, sort_keys=True). Если хэш встречался 3+ раз в последних 10 вызовах — circuit open.

3. Cost Budget per Run + аномалия-детектор

Жёсткий лимит токенов на один запуск (например, 50 000 токенов / $2.00). При превышении — BudgetExceeded.

Сверху — аномалия-детектор на скорость:

  • Baseline: средний расход за последние 100 циклов
  • Алерт: расход > 5× baseline
  • Auto-kill: расход > 10× baseline в течение 60 секунд

В конкретном инциденте heartbeat-мониторинг с per-cycle tracking обнаружил аномалию за 60 секунд. Без него — узнал бы из billing-дашборда утром.

Чеклист защиты

  • Schema validation на входе — отсекает невалидные данные до LLM-вызова
  • Input fingerprinting — детектирует повторяющиеся входы
  • Max retries по сходству входа — останавливает петлю, а не просто считает попытки
  • Cost budget per run — жёсткий потолок расхода на запуск
  • Token velocity monitor — алерт при аномальной скорости расхода
  • Auto-stop + cooldown + restart — убивает процесс, ждёт, перезапускает чисто
  • Per-cycle token logging — данные для постмортема и baseline

Масштаб проблемы

  • 10 агентов в продакшне, каждый может зациклиться → потенциально $5 000 за ночь
  • Claude Opus или GPT-4 Turbo с длинным контекстом → стоимость цикла в 3–5× выше
  • Агент с tool use, который в петле вызывает внешние API → каскадные затраты

Это не edge case. Любой retry-механизм, использующий LLM для «исправления» собственных ошибок, потенциально уязвим.

Главный урок

Токены — это ваш CPU для LLM-агентов. Мониторьте их как мониторите CPU и память. Token velocity (токены в минуту) — самая надёжная метрика здоровья агента.

Circuit breaker, cost budget, input validation — три вещи, которые внедряются за день и экономят месяцы нервов. Если у вас есть LLM-агенты в продакшне без этих трёх защит — вопрос не «если», а «когда».

Автор: Алик Завалишев

Эксперт по ИИ и автоматизации процессов

Больше статей