AI / LLM
Бюджеты на LLM: асимметрия токенов, роутинг и kill switch
Вечер пятницы, агент выкатывается за фича-флагом. У него есть tool-loop — observe, think, act, repeat — и нет лимита на итерации. Документ, который он подтягивает, ссылается на другой, тот — на третий. Агент дописывает каждый в контекст и пересылает весь растущий транскрипт модели каждый ход. К понедельнику счёт показывает $4 300 за одну «задачу», которая так и не завершилась. Месячный алерт на $1 000 сработал — в 2 ночи, в Slack-канал, который по выходным никто не читает.
Output-токены — дорогая половина
Первое, что удивляет инженеров в их первом счёте: input и output стоят не одинаково. У всех текущих фронтир-моделей output идёт примерно в 5x от input. На май 2026 Anthropic указывает Haiku 4.5 за $1/M input и $5/M output, Sonnet 4.6 за $3/$15, Opus 4.7 за $5/$25. GPT-4o у OpenAI — $2.50/$10, та же 4x-асимметрия.
Рычаг, который это даёт, конкретен: многословный ответ стоит куда дороже многословного вопроса. Ограничение max_tokens, просьба о кратком или структурированном выводе и запрет модели «рассуждать вслух» в финальном ответе — всё это бьёт по дорогой стороне баланса. Сеньор, разбирающий скачок стоимости, сначала проверяет объём output, а не input.
| Модель (май 2026) | Input /M | Output /M | Output : input |
|---|---|---|---|
| Claude Haiku 4.5 | $1.00 | $5.00 | 5x |
| Claude Sonnet 4.6 | $3.00 | $15.00 | 5x |
| Claude Opus 4.7 | $5.00 | $25.00 | 5x |
| OpenAI GPT-4o | $2.50 | $10.00 | 4x |
| GPT-4o mini | $0.15 | $0.60 | 4x |
Где деньги на самом деле накапливаются
Таблица цен — ловушка, если на ней остановиться, потому что она оценивает один вызов. Счёт же строится на том, что LLM stateless: каждый ход пересылает весь контекст целиком. Три вещи тихо раздувают этот пересылаемый payload.
System prompt отправляется на каждом ходу. System prompt в 4 000 токенов в разговоре из 50 ходов — это не 4 000 токенов, а 200 000 input-токенов, оплаченных 50 раз. История разговора растёт линейно: ход 20 тащит с собой ходы 1–19, поэтому цена за ход растёт по ходу чата, а длинная сессия квадратична по сумме. RAG-контекст — самая тяжёлая разовая добавка: запихивать 30 извлечённых чанков (скажем, 15 000 токенов) в каждый запрос, когда хватило бы 3, — это 5x-множитель input-стоимости, которого никто не видит до счёта.
Вот почему postmortem про runaway-loop — каноничный AI-инцидент по стоимости. Агент, который дописывает результат tool в контекст на каждой итерации без лимита, не просто делает больше вызовов — каждый вызов больше предыдущего. Стоимость растёт суперлинейно. Среди реальных случаев — агент, сделавший 14 000 избыточных tool-вызовов, и разработчики, наблюдавшие, как $15 испаряются меньше чем за 10 минут. Урон нанесён до того, как человек вообще посмотрит.
Почему это работает
Почему месячный лимит не спас пятничного агента? Лимиты трат у провайдера работают на уровне биллингового цикла — это бэкстоп, измеряемый в днях, а не в секундах. Лимит $1,000/month не может остановить цикл, сжигающий $6 за 30 секунд; к тому моменту, как сумма цикла пересечёт черту, тысячи уже потрачены. Тормоз должен жить in-process, на скорости трат на запрос и на сессию, а не в биллинговом дашборде.
Роутинг: не плати по тарифу Opus за работу для Haiku
Большинство запросов в реальном продукте несложные. Классификация, извлечение, короткие переписывания, решения о маршрутизации — маленькая дешёвая модель справляется с ними за долю стоимости. Паттерн сеньора — каскад: отправить запрос сначала в дешёвую модель и эскалировать на дорогую только когда проверка качества провалилась или задача распознана как сложная заранее. Перенаправление лёгких 80% на Haiku ($1/$5) вместо Opus ($5/$25) — это 5x-срез на этой доле без видимой пользователю потери.
Трейдофф реален и стоит назвать: роутинг добавляет шаг классификации (latency, иногда собственный вызов модели), а неверный маршрут тихо ухудшает качество. Ты платишь за путь эскалации — дешёвый вызов плюс дорогой ретрай стоят дороже, чем сразу пойти в дорогую модель, когда дешёвая провалилась. Роутинг выигрывает, только если дешёвая модель преуспевает достаточно часто, чтобы среднее село заметно ниже плоского дорогого тарифа. Меряй частоту эскалаций; если она выше ~30%, твой роутер или твоя дешёвая модель неверны.
Prompt caching: перестань платить за неизменный префикс
Самый крупный рычаг против пересылаемого контекста — prompt caching. Ты помечаешь стабильный префикс — system prompt, определения tool, фиксированный RAG-корпус — и провайдер его кэширует. У Anthropic чтение из кэша стоит 0.1x от базового input-тарифа (скидка 90%), а запись для заполнения кэша — 1.25x (TTL 5 минут) или 2x (TTL 1 час) от базового. Арифметика: 5-минутный кэш окупается после первого попадания; часовой — после второго.
Это превращает катастрофу «system prompt в 4 000 токенов, отправленный 50 раз» в одну полноценную запись плюс 49 чтений по десятой цены. Кэширование не помогает частям, которые меняются каждый ход (последнее сообщение пользователя, свежее извлечение), поэтому инженерный ход — упорядочить промпт под кэш: стабильное содержимое первым, изменчивое последним, чтобы кэшируемый префикс был как можно длиннее.
Чат-продукт пересылает system prompt в 4 000 токенов каждый ход в сессиях по 50 ходов, и input-счёт доминирует в тратах. Выбери фикс с наибольшим рычагом.
У текущих фронтир-моделей как цены на output-токены соотносятся с input?
Автономный агентский цикл без бюджета на запрос работает ночью и выставляет счёт $4 300. Почему месячный лимит трат на $1 000 его не остановил?
Расставь контроли стоимости от самого дешёвого/первой линии до kill switch последней инстанции:
- 1 Перенаправь лёгкое большинство на маленькую дешёвую модель; эскалируй только на провале
- 2 Prompt-кэшируй стабильный префикс, чтобы пересылаемый контекст упал до 0.1x
- 3 Ограничь max_tokens и обрежь историю/RAG до того, что нужно задаче
- 4 Применяй бюджет на запрос и на пользователя in-process, перед каждым вызовом
- 5 Жёсткий kill switch: размыкай circuit breaker по скорости трат или счётчику итераций
- 01Разбери по шагам, почему длинный агентский цикл стоит суперлинейно, а не просто линейно относительно числа итераций.
- 02Твой input-счёт доминирует над output, и трейсинг показывает один и тот же system prompt в 4 000 токенов, отправляемый каждый ход. Какие конкретные шаги это срежут и каков порядок рычага?
Трату на LLM определяет не столько заголовочный тариф за токен, сколько то, что пересылается каждый ход, и сколько output ты генерируешь. Output стоит примерно 5x от input у текущих моделей (Haiku 4.5 $1/$5, Sonnet 4.6 $3/$15, Opus 4.7 $5/$25, GPT-4o $2.50/$10), поэтому сначала ограничивай output и проси краткие ответы. Реальный накопитель — контекст: stateless-модель пересылает system prompt, всю растущую историю и все RAG-чанки на каждом вызове, поэтому длинный агентский цикл стоит суперлинейно, а runaway-loop может сжечь тысячи за ночь. Перенаправляй лёгкое большинство на дешёвую модель и эскалируй только на провале; prompt-кэшируй стабильный префикс, чтобы уронить пересылаемый контекст до 0.1x; обрезай историю и ужимай извлечение. И главное — применяй бюджеты на запрос и на пользователя in-process с жёстким kill switch по скорости трат: месячные лимиты провайдера — это бэкстоп, измеряемый в днях, слишком медленный, чтобы остановить цикл, тратящий доллары в секунду.