Счёт за $5,000: анатомия перерасхода
В мае 2026 года команда из 8 разработчиков получила счёт от Anthropic на $5,200 за Claude API. В апреле платили $1,100. Никто не менял настройки, не добавлял новых агентов. Что произошло?
Краткий ответ
Разбор billing-лога показал три паттерна, которые в совокупности увеличили расход в 4.7×:
4.7×
Паттерн 1: Context bloat — невидимый рост расходов
Claude Code поддерживает контекст сессии между вызовами. Каждый раз, когда агент «смотрит» файл, делает git diff или читает лог — контекст растёт. Через 2 часа работы сессии может содержать 150,000 токенов контекста. Каждая следующая операция отправляет весь контекст.
Конкретные цифры из billing-лога:
# session_id: sess_abc123, разработчик: ivan@# Контекст растёт экспоненциальноВызов 1: context_size=2048, cost=$0.003Вызов 10: context_size=24000, cost=$0.032Вызов 30: context_size=89000, cost=$0.118Вызов 50: context_size=156000, cost=$0.207Вызов 70: context_size=198000, cost=$0.263# Итого за одну сессию: $4.87# × 8 разработчиков × 20 рабочих дней = $780/мес только на contextМитигация
FlowLink автоматически truncates старые сообщения в контексте, оставляя последние N взаимодействий и summary предыдущих:
# flowlink-agent.yamlcontext_management: max_tokens: 60000 # Жёсткий лимит контекста summarization_threshold: 40000 # При достижении — summarise strategy: "sliding_window" # |rolling|sliding_window|summary| keep_recent: 10 # Всегда храни последние 10 exchangeПаттерн 2: Retry storm — скрытый множитель
Когда LLM provider возвращает 429 Too Many Requests или 529 Overloaded, naïve retry logic с exponential backoff может генерировать больше запросов, чем оригинальный трафик:
# Realextract из логов14:00:01 → POST /v1/messages → 429 (rate limit) # оригинальный запрос14:00:06 → POST /v1/messages → 429 (retry 1)14:00:16 → POST /v1/messages → 429 (retry 2)14:00:36 → POST /v1/messages → 429 (retry 3)14:01:16 → POST /v1/messages → 200 (retry 4, успех)# 5 запросов вместо 1. context отправлен 5 раз.# При context=100k tokens: 5×100k = 500k input tokens за одну операцию5×
Реальный случай
В рассматриваемом случае retry storm совпал с периодом перегрузки Anthropic API (outage 12–15 мая). Агенты продолжали retry — и отправляли контекст по 150k токенов снова и снова.
Митигация
Жёсткий лимит повторов плюс failover на резервного провайдера с кэшированием ответа:
# flowlink-governor.yamlretry_policy: max_retries: 2 # Не более 2 повторов backoff: "exponential" base_delay: 2s max_delay: 30s jitter: true # При persistent 429 — переключаемся на другого provider failover: trigger_after_retries: 2 fallback: "openai/gpt-4o" cache_response: true # Кэшируем ответ fallback-провайдераПаттерн 3: Token waste в CI/CD пайплайне
Claude Code, запущенный в GitHub Actions для code review на каждый PR, — типичный паттерн. Но если review запускается на каждый push в feature/* ветку, включая WIP-коммиты:
# Анализ: GitHub Actions billing breakdownPR #412 (feature/auth): 14 pushes, 14 reviews → 14 × (avg 8k tokens input) = 112k tokens → Cost: $1.47PR #415 (feature/dashboard): 23 pushes, 23 reviews → 23 × (avg 12k tokens) = 276k tokens → Cost: $3.63# За неделю: 47 PRs × avg $2.10 = $98.70# За месяц: ~$400 только на code review WIP-коммитовМитигация
Запускайте review только на определённых событиях:
# .github/workflows/claude-review.ymlon: pull_request: types: [ready_for_review] # Не draft, не push paths: - "src/**" # Не docs/, не README # НЕ: on: [push] # ← это дорогоАрхитектура Budget Governor
FlowLink Budget Governor работает как sidecar-процесс рядом с вашим AI-агентом. Он перехватывает все LLM-вызовы и применяет правила до того, как запрос отправляется к provider:
┌─────────────┐ LLM call ┌──────────────┐ forwarded ┌─────────┐
│ Claude Code │ ───────────→ │ FlowLink │ ─────────────→ │ Anthropic│
│ / Cursor │ │ Governor │ │ API │
└─────────────┘ ←─────────── └──────────────┘ ←───────────── └─────────┘
response response + cost metadata- LLM-агент
- Rate-limit фильтр
- Проверка бюджета
- Throttle / Failover
- Провайдер API
Вот полный конфиг budgets.json:
{ "version": "2", "currency": "USD", "period": "monthly", "hard_limits": { "global": 2000, "per_agent": { "claude-code": 800, "cursor": 600, "github-copilot": 400 }, "per_team": { "backend": 800, "frontend": 500, "devops": 300, "ml": 400 } }, "soft_limits": { "global": 1500, "per_agent": { "claude-code": 600 }, "action": "warn_and_throttle", "throttle_to": "gpt-4o-mini" }, "daily_spend_cap": 150, "alerts": { "thresholds": [50, 75, 90], "channels": ["slack:#ai-budget", "email:finops@company.com"] }, "attribution": { "enabled": true, "granularity": "per_pr", # расходы привязаны к PR/issue "export_to": "bigquery" # для аналитики командам }}Подход sidecar budget governor: плюсы и минусы
Плюсы
- Перехват на стороне клиента — бюджет виден ещё до отправки запроса провайдеру
- Автоматический failover на дешёвые модели (gpt-4o-mini) при достижении soft-limit
- Per-agent и per-team attribution без изменения кода агента
- Truncation и summarization контекста доступны из коробки
Минусы
- Дополнительный sidecar-процесс в инфраструктуре рядом с каждым агентом
- Минимальная задержка на прохождение governor (единицы миллисекунд)
- Требует аккуратной настройки failover — иначе throttle режет качество ответов
Rate Limit vs Budget: когда что использовать
Частая ошибка — путать rate limiting с budget control. Это разные механизмы для разных целей:
| Критерий | Rate Limit | Budget Governor |
|---|---|---|
| Единица | Запросы/секунду | Доллары/период |
| Цель | Защитить provider от перегрузки | Защитить бюджет компании |
| Ограничивает | Скорость, не стоимость | Стоимость с учётом цены модели |
| Adaptivity | Нет (фиксированный RPS) | Да (переключение на дешёвые модели) |
| Пример | rate=10 req/s | $50/day, auto-switch to mini |
FlowLink использует оба: rate limiting для защиты provider и budget governor для контроля расходов. Rate limit стоит перед governor — дешёвый фильтр от burst-трафика.
Per-Agent Attribution: кто сколько тратит
Без attribution вы видите общее число: «$5,200 за май». С attribution вы видите:
# flowlink cost report --period=2026-05 ┌──────────────────┬──────────┬──────────┬─────────────┐ │ Agent │ Tokens │ Cost │ % of Budget │ ├──────────────────┼──────────┼──────────┼─────────────┤ │ claude-code │ 12.4M │ $2,890 │ 55.6% │ │ cursor │ 6.1M │ $1,420 │ 27.3% │ │ github-copilot │ 3.8M │ $890 │ 17.1% │ ├──────────────────┼──────────┼──────────┼─────────────┤ │ TOTAL │ 22.3M │ $5,200 │ 100% │ └──────────────────┴──────────┴──────────┴─────────────┘ Top spenders by team: backend/ivan: $820 (context bloat avg 120k tokens) frontend/anna: $640 (23 PR reviews, avg $27.8/PR) ml-team/boris: $510 (large file reads, avg 180k context)
С этими данными вы знаете где intervene: Ивану — summarization policy, PR review — event filter, Борису — file chunking.
Настройка Budget Governor за 5 шагов
От запуска sidecar до первого cost-отчёта.
Запустите FlowLink как sidecar
Разверните FlowLink рядом с AI-агентом: он перехватывает LLM-вызовы и начинает считать стоимость ещё до отправки запроса провайдеру.
Задайте hard_limits
В
budgets.jsonукажите глобальный лимит и лимиты per-agent / per-team (например, claude-code $800/мес, backend $800/мес).Настройте soft_limits и throttle
При достижении soft-limit governor переключается на дешёвую модель (
action: warn_and_throttle,throttle_to: gpt-4o-mini), сохраняя работоспособность агента.Включите alerts
Укажите пороги срабатывания (
thresholds: [50, 75, 90]) и каналы — Slack (#ai-budget) и email finops.Включите attribution
Привяжите расходы к PR/issue (
granularity: per_pr) и экспортируйте в BigQuery для аналитики по командам.
Часто задаваемые вопросы о budget governor
Что такое budget governor для LLM?
Budget governor — это sidecar-прокси, который перехватывает LLM-вызовы вашего AI-агента и применяет лимиты расходов ($ за период) до того, как запрос уйдёт к провайдеру. В отличие от rate limit, он учитывает цену каждой модели и может переключать агента на более дешёвую модель при превышении soft-limit.
Чем budget governor отличается от rate limiting?
Rate limit считает запросы в секунду и защищает провайдера от перегрузки. Budget governor считает доллары за период и защищает бюджет компании, учитывая стоимость модели. FlowLink использует оба механизма: rate limit стоит первым как дешёвый фильтр burst-трафика, за ним — budget governor.
Как context bloat увеличивает счёт за LLM?
Каждый вызов агента отправляет весь накопленный контекст сессии. За 2 часа работы контекст может вырасти до 150 000–200 000 токенов, и каждая следующая операция платит за пересылку всего контекста заново. FlowLink решает это через truncation и summarization старых сообщений (стратегия sliding_window).
Что такое retry storm и как его ограничить?
Retry storm — это серия автоматических повторов при ошибках 429/529. Наивный exponential backoff может отправить контекст по 100k+ токенов 4–5 раз за одну операцию. Решение: жёсткий max_retries: 2, jittered backoff и failover на резервного провайдера с кэшированием ответа.
Нужны ли изменения в коде агента для внедрения FlowLink?
Нет. FlowLink работает как sidecar и не требует правок в коде агента — достаточно направить LLM-вызовы на governor. Конфигурация бюджетов, алертов и attribution описывается декларативно в budgets.json.
Контроль расходов на LLM — не про «запретить использовать AI». Это про видимость: знать, кто, сколько и зачем тратит. Budget Governor даёт эту видимость и инструменты для коррекции — без изменения рабочего процесса разработчиков.
Узнайте, где вы теряете деньги на LLM — за 3 минуты
FlowLink Budget Governor подключается к вашему Prometheus и показывает breakdown расходов по агентам, командам и паттернам. Без изменений в коде — только sidecar.
Посмотреть cost breakdown