Как не сжечь $700 на AI-агентах: инфраструктурный подход к контролю расходов
Я потерял $687 за одну ночь из-за retry-цикла агента. Разбираю Cycles — протокол жёстких бюджетных лимитов с pre-authorization, который физически не позволяет потратить больше заданного.
Я проснулся, открыл dashboard OpenAI и увидел цифру $687. За одну ночь. Агент, которому я поручил обработать пачку документов, напоролся на битый PDF, ушёл в retry-цикл и восемь часов долбил API запросами по 12 000 токенов каждый. Когда утренний алерт пришёл в Telegram — было поздно.
Самое обидное: у меня стоял лимит. Мягкий. Usage alert на $50. Он честно сработал — в 2:14 ночи. Пока я спал, агент успел потратить ещё $630.
После этого случая я перестал верить в мягкие лимиты и начал искать инфраструктурное решение. Нашёл Cycles — открытый протокол, который подходит к проблеме принципиально иначе.
Мягкие лимиты — это не лимиты
Давайте определимся с терминами. Мягкий лимит — это уведомление. «Ты потратил $100, обрати внимание». Ты обращаешь внимание, если ты за компьютером, если не в отпуске, если уведомление не затерялось среди сотни других.
У OpenAI есть usage limits. У Anthropic — billing alerts. У Google — budget notifications. Всё это — мягкие лимиты. Они сообщают о проблеме. Они её не предотвращают.
Жёсткий лимит работает иначе: вызов не выполняется, если на него нет средств. Не «выполняется, а потом мы тебя предупредим» — а физически не проходит. Как банковская карта с нулевым балансом: не «мы спишем и пришлём СМС», а «транзакция отклонена».
Для одного агента, за которым ты следишь лично, мягкие лимиты терпимы. Для production-системы с десятью агентами, которые работают 24/7 — это бомба с таймером.
Cycles: принцип работы
Cycles — открытый протокол для жёстких бюджетных лимитов AI-вызовов. Ключевая идея заимствована из платёжных систем: pre-authorization. Прежде чем потратить — зарезервируй.
Четыре шага каждого вызова:
Оценка. Агент формирует запрос к LLM. Cycles оценивает стоимость до отправки. Входные токены известны точно — промпт уже готов. Выходные — оцениваются по max_tokens или по статистике предыдущих вызовов с аналогичными параметрами.
Резервирование. Оценённая сумма блокируется в бюджете. Атомарная операция — никакой другой вызов не может использовать эти средства, пока текущий не завершится.
Проверка. Если после резервирования бюджет уходит в минус — вызов отклоняется. Агент получает ошибку: BudgetExhausted. Зарезервированная сумма возвращается. Запрос к LLM не уходит. Ни один токен не потрачен.
Сверка. Вызов выполнен — Cycles сравнивает фактическую стоимость с резервом. Если потрачено меньше — разница возвращается в бюджет. Если больше — перерасход списывается и учитывается в следующих оценках.
Результат: бюджет никогда не превышается больше чем на стоимость одного вызова.
Иерархия бюджетов
Плоский лимит «$200 в месяц на всё» — грубый инструмент. Cycles строит иерархию: Организация → Агент → Задача.
На верхнем уровне — бюджет организации. Абсолютный потолок. $3 000 в месяц — и ни центом больше.
Ниже — бюджет агента. Агент клиентской поддержки — $80 в день. Агент-аналитик — $30 в день. Экспериментальный агент — $5 в день.
Ещё ниже — бюджет задачи. «Обработай эти 200 документов. Бюджет — $12. Не уложился — остановись». Именно этот уровень спас бы мне $675 в ту ночь.
Бюджеты вложенные. Задача не может потратить больше, чем осталось у агента. Агент не может потратить больше, чем осталось у организации. Три уровня защиты.
Отдельно — лимиты по модели. «GPT-4o — до $20 в день. GPT-4o-mini — без ограничений». Это предотвращает ситуацию, когда агент из-за ошибки в конфиге начинает слать запросы к дорогой модели.
Интеграция: три строки кода
Cycles предоставляет SDK для Python, TypeScript и Java. В Python: вместо прямого создания клиента OpenAI вы оборачиваете его в Cycles-клиент с указанием бюджета. Если бюджет исчерпан, вызов выбросит BudgetExhaustedError вместо отправки запроса.
Важный момент: Cycles — не proxy, через который проходят ваши промпты. SDK работает локально, обращается к Redis за состоянием бюджета, а сам запрос идёт напрямую к провайдеру.
Self-hosting: Docker + Redis
Cycles — self-hosted решение. Docker-контейнер + Redis. Почему не SaaS:
Латентность. Каждый AI-вызов проходит проверку бюджета. Обращение к локальному Redis — микросекунды, не 50-200 мс HTTP-запроса к внешнему сервису.
Контроль данных. Через Cycles проходит информация о каждом запросе. Хранить её у себя — логичнее, чем отдавать стороннему сервису.
Надёжность. Если внешний сервис падает, агенты либо блокируются, либо работают без лимитов. Локальный Redis — под вашим контролем.
Пять сценариев перерасхода
Retry storm. Агент получает ошибку и уходит в retry-цикл. 500 попыток за час, каждая с полным контекстом. С Cycles: бюджет задачи $10, после нескольких десятков попыток — стоп.
Context snowball. Агент с историей диалога. К 50-му обмену промпт весит 80 000 токенов, один вызов стоит $0.80. С Cycles: бюджет сессии $15, агент предупреждает и начинает новую сессию.
Fork bomb. Оркестратор порождает тысячи подзадач рекурсивно. С Cycles: бюджет оркестратора $50, при исчерпании — каскадная остановка.
Wrong model. Переменная окружения перезаписана в CI/CD. Вместо mini ($0.15/M) агент использует полную модель ($2.50/M). С Cycles: лимит на дорогую модель, первый же вызов — ошибка.
Zombie agent. Запустил, забыл. Тихо тратит $5-10 в день. С Cycles: дневной бюджет кончился — агент спит до следующего дня.
Стратегии при исчерпании бюджета
Hard stop. Отказ. Для задач, где перерасход недопустим.
Fallback. Переключение на дешёвую модель. GPT-4o бюджет исчерпан → автоматически переход на GPT-4o-mini.
Approval. Запрос к человеку. «Бюджет $12 исчерпан. Задача выполнена на 80%. Добавить $5?»
Defer. Отложить до следующего бюджетного периода. Для batch-задач, которые не срочны.
Экономика дисциплины
Контролировать расходы на AI — не скупость. Это инженерная гигиена.
AI-вызовы стохастичны. Ты не знаешь точно, сколько токенов сгенерирует модель. Стохастический процесс без верхней границы — рецепт сюрпризов на счёте.
Cycles превращает неограниченные расходы в ограниченные. Не предсказуемые — предсказуемость тут недостижима. Но ограниченные. Ты не знаешь, потратит агент $3 или $12, но знаешь точно, что не потратит $13.
$687 за одну ночь стоили мне не только денег. Они стоили доверия к собственной инфраструктуре. Cycles это доверие вернул — не через обещания, а через гарантии на уровне кода. Вызов не пройдёт, если на него нет средств. Точка.