Почему счёт растёт, когда токены дешевеют?
Стоимость задачи — это число вызовов на задачу × токенов на вызов × цена токена. Вендоры продолжают снижать третий множитель. Агент раздувает первые два (сам цикл описан в статье «Как работают ИИ-агенты»). Одна задача — это шаг планирования, несколько вызовов инструментов, наблюдение после каждого, пара повторов, и каждый вызов тащит за собой всю переписку целиком. Без кешированного префикса стоимость входа растёт быстрее числа шагов: двенадцатый шаг снова платит за предыдущие одиннадцать.
Исследования совпадают с тем, что мы видим в логах. Bai и соавторы (arXiv:2604.22750, редакция от 2 октября 2026 года) изучили восемь передовых моделей на SWE-bench Verified. Агентные задачи расходовали примерно в 1000 раз больше токенов, чем чат о коде, и даже при включённом кеше стоимость определяли входные токены. Повторные прогоны одной и той же задачи отличались по суммарному числу токенов до 30 раз. Точность не росла вместе с расходами.
Финансисты это заметили. По отчёту FinOps Foundation State of FinOps 2026 (1192 респондента, более 83 млрд долларов годовых расходов на облака) 98% опрошенных теперь управляют расходами на ИИ, годом раньше было 63%, двумя годами раньше — 31%. Главная проблема с ИИ — видимость затрат, а самая востребованная возможность — детальный мониторинг токенов и запросов к LLM. Насколько ИИ-проекты выходили за бюджет, отчёт не говорит. Такое утверждение попадается в блогах, и привязать его к этому отчёту мы не смогли.
Вендорский опрос Harness (700 руководителей по разработке, май–июнь 2026 года) говорит жёстче. 72% за последние 12 месяцев сталкивались с неожиданным скачком расходов на ИИ, 79% понадобился бы целый день или больше, чтобы найти его причину, а 52% признают, что у расходов на ИИ нет явного владельца.
Сначала измеряем стоимость задачи, потом трогаем промпт
Пишите одну строку лога на каждый вызов модели, привязанную к задаче, а всё остальное считайте из неё. Главное число — стоимость завершённой задачи. Стоимость вызова прячет повторы и тупиковые прогоны. Рядом мы ведём долю попаданий в кеш, число повторов на задачу и долю входных токенов, пришедших из результатов инструментов. Последняя цифра обычно и удивляет.
Оба крупных API отдают всё нужное. В объекте usage у Anthropic есть input_tokens, cache_creation_input_tokens и cache_read_input_tokens, а документация прямо говорит: ноль в обоих кеш-полях означает, что ничего не кешировалось. OpenAI возвращает usage.input_tokens_details.cached_tokens, а в GPT-5.6 и новее ещё и cache_write_tokens. Наша строка выглядит так:
{
"task_id": "inv-2026-10-16-0042",
"tenant_id": "acme-eu",
"step": 7,
"model": "claude-sonnet-5-5",
"input_tokens": 1840,
"cache_read_tokens": 21500,
"cache_write_tokens": 0,
"output_tokens": 412,
"tool_result_tokens": 9300,
"latency_ms": 2710,
"outcome": "tool_call"
}Поле outcome в последней строке задачи (done, escalated, aborted_budget) превращает логи вызовов в юнит-экономику. Без него дешёвый успех не отличить от дешёвого провала.
Попадание в кеш — вопрос устройства промпта
Кеш окупается, только если префикс между вызовами совпадает байт в байт. Стабильное ставьте в начало, изменчивое в конец, а прежние реплики не правьте. У Anthropic порядок префикса такой: инструменты, затем системный промпт, затем сообщения, и изменение на одном уровне сбрасывает этот уровень и всё после него. Поменяли одно описание инструмента — выбросили весь кеш.
Актуальные цены Anthropic (документация, проверено 16 октября 2026 года): запись в кеш на 5 минут стоит 1,25× от базовой цены входа, на 1 час — 2×, чтение — 0,1×. Claude Opus 5.5 и Sonnet 5.5 читают за 0,05× (0,20 доллара против базовых 4 долларов за миллион токенов для Opus 5.5). TTL по умолчанию пять минут, и он бесплатно продлевается при каждом попадании. Доступно до четырёх точек разрыва (breakpoints), а минимальный кешируемый промпт на текущих моделях — 512 токенов (до 4096 на Opus 4.5/4.6 и Haiku 4.5). Если промпт короче минимума, запрос просто идёт без кеша и без ошибки, это легко пропустить.
Арифметика подсказывает, когда не стоит возиться. Префикс, использованный один раз, обходится в 1,25× вместо 1×, то есть разовый запрос проигрывает 25%. Использованный дважды — 1,35× вместо 2×. Агент, который делает десять вызовов за пять минут, платит за префикс примерно 2,15× в сумме против 10× без кеша.
У других вендоров детали отличаются. OpenAI кеширует автоматически. В GPT-5.6 и новее минимум 1024 токена, чтение стоит 0,1× на большинстве моделей, запись 1,25×, TTL 30 минут. Неявное кеширование Gemini включено по умолчанию для версий 2.5 и новее, минимум 4096 токенов на моделях Gemini 3.x Flash и Gemini 4 Argon. Размер скидки в документации не указан, так что смотрите страницу цен для вашей модели.
С чего начинаем поиск ошибок:
- метка времени или ID запроса в системном промпте (она убивает все попадания после неё);
- инструменты, которые добавляются или убираются от запроса к запросу (документация OpenAI советует вместо этого
allowed_toolsилиtool_choice: "none"); - история, «причёсанная» правкой старых реплик вместо дописывания.
Обрезка результатов инструментов тоже ломает кеш. Очистка результатов у Anthropic (clear_tool_uses_20250919) сбрасывает кешированный префикс везде, где что-то удалила. Поэтому у неё есть параметр clear_at_least: либо чистите один раз большой кусок и платите одну запись в кеш, либо чистите мелкими порциями и платите запись каждый раз.
Куда уходят токены агента и что мы с этим делаем
Используйте таблицу как чек-лист при разборе логов. Колонка «Цена решения» объясняет, почему ни одно из этих исправлений не бесплатно.
| Источник затрат | Симптом в логах | Что делаем | Цена решения |
|---|---|---|---|
| Повторная отправка истории | Входные токены растут шаг за шагом внутри задачи | Кешировать стабильный префикс; сворачивать реплики старше N шагов | Сводки теряют детали и переписывают префикс |
| Раздутые результаты инструментов | `tool_result_tokens` больше половины входа | Возвращать ID и поля, а не документы целиком; чистить старые результаты | Модели может понадобиться вызвать инструмент снова |
| Повторы и циклы | Один инструмент с теми же аргументами 3+ раза в одной задаче | Предохранитель на повторные вызовы, лимит токенов на задачу | Часть сложных задач обрывается и уходит на эскалацию |
| Не тот уровень модели | Передовая модель на шагах классификации или форматирования | Маршрутизация по типу шага, допуск по результатам evals | Ещё одна ветка кода и поддержка evals |
| Некешируемый стабильный префикс | Оба кеш-поля равны 0 на повторных вызовах | Изменчивое в конец, порядок инструментов зафиксировать | Меньше свободы менять промпт под запрос |
| Слишком большой RAG-контекст | 20+ фрагментов на вызов, низкая доля цитирования | Реранкинг и отправка нескольких лучших | Риск потерять редкие вопросы из «длинного хвоста» |
Маршрутизация: малая модель должна пройти те же evals
Маршрутизируйте по типу шага. Классификация, извлечение полей и формирование аргументов инструментов идут на малую модель; планирование, суждение и всё, что видит клиент, — на сильную. Если уверенность ниже порога, шаг откатывается на большую модель. Более дешёвый уровень для шага мы принимаем, только когда он проходит тот же набор evals, собранный на данных клиента, что и дорогой.
Это медленное правило. Зато единственная защита от роутера, который экономит на 95% вызовов и тихо ломает остальные 5%, а ошибаться в них как раз дороже всего.
Издержки маршрутизации реальны: ещё один сетевой переход, ещё один источник сбоев (сам классификатор) и ещё одна вещь, которую надо переоценивать при каждом выходе новой модели. Данные Bai и соавторов добавляют нюанс. На одинаковых задачах модели тратили очень разное число токенов (Kimi-K2 и Claude Sonnet 4.5 в среднем расходовали более чем на 1,5 млн токенов больше, чем GPT-5), поэтому низкая цена в прайсе всё равно может дать более высокую стоимость задачи. Мы сравниваем уровни по стоимости завершённой задачи в прогоне evals. Процент экономии не публикуем: он целиком зависит от набора шагов.
Жёсткие остановки для убегающих циклов
У каждой задачи есть лимит токенов и лимит шагов. У каждого клиента (tenant) есть суточный бюджет с оповещениями на заданных порогах. Предохранитель срабатывает на повторяющихся одинаковых вызовах инструмента, а всё, что упёрлось в лимит, уходит человеку вместе с трассой. Сначала мы ограничиваем токены, потому что лимит шагов в одиночку пропустит один шаг, который прочитает PDF на 200 страниц.
class BudgetExceeded(Exception):
pass
class TaskBudget:
def __init__(self, max_tokens=150_000, max_steps=25, max_repeats=3):
self.max_tokens, self.max_steps, self.max_repeats = max_tokens, max_steps, max_repeats
self.tokens, self.steps, self.calls = 0, 0, {}
def charge(self, usage, tool_name=None, tool_args=None):
self.steps += 1
self.tokens += (usage["input_tokens"] + usage["output_tokens"]
+ usage.get("cache_read_tokens", 0) + usage.get("cache_write_tokens", 0))
if tool_name:
key = (tool_name, repr(sorted(tool_args.items())))
self.calls[key] = self.calls.get(key, 0) + 1
if self.calls[key] > self.max_repeats:
raise BudgetExceeded(f"repeated call {tool_name}")
if self.tokens > self.max_tokens or self.steps > self.max_steps:
raise BudgetExceeded(f"{self.tokens} tokens, {self.steps} steps")Чтения из кеша здесь засчитываются в лимит по полному весу. Это сделано намеренно: лимит защищает от неуправляемого поведения, а не только от трат, и цикл на полностью кешированном контексте всё равно остаётся циклом. Лимиты расходов на стороне провайдера стоят сверху как последняя ограда, их задают заметно выше суммы бюджетов клиентов.
Всё неинтерактивное (ночная классификация, дозагрузки, прогоны evals) мы отдаём в batch API. Message Batches у Anthropic стоят на 50% дешевле, большинство пакетов завершается в течение часа, а невыполненные за 24 часа запросы истекают без оплаты. Документация советует для пакетов TTL кеша в 1 час, потому что пяти минут часто мало.
RAG и длинный контекст: меньше токенов на входе
Для агентов с поиском самый дешёвый токен — тот, который не отправили. Мы делаем реранкинг перед моделью и отдаём несколько лучших фрагментов, возвращаем из инструментов поля, а не документы целиком, и сворачиваем реплики старше заданного окна вместо отправки всей истории. Сторону поиска разбирает чек-лист RAG в продакшене. Когда кешированный длинный контекст выигрывает у поиска по стоимости, объясняет статья «RAG, дообучение или длинный контекст».
Одно предупреждение из свежих исследований. Satish и соавторы (arXiv:2609.32961, 26 сентября 2026 года) провели почти 35 000 прогонов агентов и обнаружили, что политики сжатия, использующие около трети токенов, могли выполняться на 20–80% дольше. Меньше токенов не всегда значило дешевле или быстрее. Сжатие одновременно меняет префикс, число вызовов и поведение кеша. Поэтому мы сравниваем стоимость завершённой задачи до и после, а не одни токены.
Что показывать финансистам
Показывайте стоимость бизнес-результата: за обработанное обращение, за проведённый счёт, за проверенный документ. Раскладывайте её по процессам и по командам или клиентам (showback), а рядом держите долю эскалаций. Падающее число токенов при растущей доле эскалаций экономией не является.
Стандарты подтягиваются. Рабочий черновик FOCUS 1.5 добавляет необязательные свойства TokenDirection (Input/Output) и TokenCacheAction (Uncached/Read/Write) и поля идентификации модели, ратификация намечена на 3 декабря 2026 года. Пока опубликована версия FOCUS 1.4, поэтому свою схему мы держим близко к этим названиям. Linux Foundation 4 августа 2026 года запустил Tokenomics Foundation, в его планах телеметрия стоимости токенов в FOCUS и методика «cost to serve». OpenCost добавил «AI Inference Costs v1» в релизе 1.121.0 (20 июля 2026 года). Ничто из этого не заменяет логирование по задачам внутри агента, потому что эти инструменты видят счета и кластеры, а не задачи.
Что мы не трогаем
Промпту, который запускается раз в день, кеш не нужен (на записи он теряет 25%). Процессу, который стоит в месяц меньше одного дня работы инженера, не нужен роутер. Шаги, где важно качество, например финальные ответы клиентам или всё, что влечёт юридические и финансовые последствия, мы тоже не отдаём на более дешёвый уровень только потому, что он прошёл evals на среднем случае. Меры безопасности мы в разговор о стоимости не пускаем совсем, о них — в статье «Безопасность ИИ-агентов в продакшене». Если нужно встроить посистемный лог по задачам и ограничитель бюджета в уже работающего агента, это входит в нашу разработку ИИ-решений.