Почему цена одного вызова почти ничего не говорит

Команда видит строку расходов API и пытается выбрать модель с более низкой ценой токена. Но пользователь платит не за токен и даже не за ответ модели. Ему нужен завершённый результат: правильно классифицированное обращение, заполненная карточка, найденный пункт договора или готовый черновик.

Дешёвый вызов может оказаться дорогим, если его приходится повторять, исправлять вручную или отправлять в более сильную модель. Поэтому базовая метрика - cost per successful task.

1
единица результата для каждого сценария
100%
попыток и повторов попадают в учёт
0
релизов экономии без проверки качества

Полная формула стоимости LLM-функции

Для запуска workflow сложите стоимость обычных входных токенов, кэшированного ввода, выходных токенов, reasoning-токенов, если провайдер учитывает их отдельно, embeddings, retrieval и внешних инструментов. Добавьте повторы, fallback-вызовы, хранение кэша, наблюдаемость и ручную проверку.

Стоимость успешной задачи = (input + cached input + output + embeddings + retrieval + tools + storage + retries + fallback + ручная проверка) / число успешно принятых результатов

Тарифы храните в конфигурации с датой действия. Уточняйте актуальные условия на официальном сайте сервиса.

Какие поля логировать для управления расходами

Без связного trace нельзя понять, какая оптимизация сработала. Общего количества токенов недостаточно: оно не показывает сценарий, версию промпта и причину повторного вызова.

Cost trace
  1. request_id, trace_id, workflow_id и tenant_id.
  2. Сценарий, класс сложности и итоговый статус.
  3. Провайдер, model alias и фактическая модель.
  4. Prompt version, retrieval version и инструменты.
  5. Input, cached input, output и доступные usage-поля.
  6. Latency, попытки, причина retry и fallback.
  7. Результаты схемы, бизнес-валидатора и eval.
  8. Расчётная стоимость и версия тарифов.
  9. Ручная проверка и её исход.

Не записывайте полный prompt по умолчанию: часто достаточно хеша версии, размеров блоков и разрешённых диагностических полей.

Базовый отчёт: где именно сгорает бюджет

СрезЧто считатьРешение
СценарийЦена успешной задачиУбрать слабые use cases
Prompt versionТокены и ошибкиСократить шаблон
МодельКачество, latency, ценаНастроить route
RetryДоля и добавочная ценаИсправить причину
КонтекстТокены и полезностьУдалить или точнее извлекать

Смотрите не только среднее. Длинные документы и зацикленные агенты формируют дорогой хвост, заметный в P95 и P99.

Самая выгодная оптимизация - не делать ненужный вызов

До сокращения токенов проверьте, нужен ли LLM вообще. Точный парсер, поиск по ключу, JSON Schema, правила маршрутизации и обычный шаблон дешевле и предсказуемее там, где задача детерминирована.

Правила

Формат, enum, диапазон и обязательные поля.

Поиск

Точное извлечение известного факта.

Шаблон

Фиксированный текст с проверенными переменными.

Токен-бюджет: назначьте предел каждому блоку

Разложите ввод на system-инструкции, examples, историю, retrieved context, данные пользователя и tool results. Для каждого блока задайте максимальный размер и действие при переполнении.

Проведи аудит токен-бюджета workflow [название]. Для блоков system, examples, history, RAG, user data и tools укажи: пользу для решения, текущий и целевой предел, что удалить, способ сжатия, поведение при переполнении и eval-кейсы. Не предлагай экономию, которую нельзя измерить.

Не обрезайте документ механически. Сначала удаляйте дубли, устаревшую историю и низкорелевантные фрагменты.

Prompt caching: стабильный префикс впереди

Кэш полезен, когда запросы разделяют большой одинаковый префикс: инструкции, описание инструментов, примеры или документ. OpenAI и Google рекомендуют располагать повторяемое содержимое в начале, а переменную часть - после него. Конкретные модели, минимальный размер, TTL и тарифы различаются и меняются.

Плохо для cache hitЛучший порядок
Уникальный ID и время в началеСтабильная policy
Пользовательский ввод до инструкцийTool definitions и examples
Постоянно меняющийся общий блокПеременные данные в конце

Измеряйте cached tokens по usage API. Включённая функция не гарантирует экономию.

Экономика кэша: хранение, TTL и инвалидирование

Явный context cache может иметь стоимость хранения. Он оправдан, когда экономия повторных обращений превышает создание и хранение объекта. Для редко используемого контекста длинный TTL способен увеличить счёт.

  • Оцените число повторов за TTL.
  • Разделяйте общий corpus и данные клиента.
  • Добавьте версии документа, policy и tool schema в ключ.
  • Инвалидируйте после изменения фактов или прав.
  • Не обходите требования к удалению данных.
  • Проверяйте поддержку режима выбранным API.

Google документирует implicit и explicit caching, а OpenAI - prompt caching и его usage-метрики. Не переносите настройки между API без проверки.

RAG дешевле только при точном retrieval

RAG не экономит автоматически. Если top-k велик, chunks перекрываются, а в prompt попадают целые страницы, ввод становится дороже и шумнее. Цель - минимальный набор фрагментов, достаточный для проверяемого ответа.

RAG cost audit
  1. Удалить дубли и boilerplate до индексации.
  2. Выбирать chunk по структуре документа.
  3. Фильтровать по tenant, версии и правам.
  4. Настроить retrieval и reranking отдельно.
  5. Передавать только цитируемые фрагменты.
  6. Измерять recall на реальных вопросах.
  7. Добавить ответ «данных недостаточно».

Routing моделей: классифицируйте сложность

Routing связывает класс задачи, риск, требуемые возможности и критерий эскалации. Простое извлечение можно направить в компактную модель, сложное рассуждение - в более сильную, а высокорисковое действие - на ручное подтверждение.

Спроектируй policy routing для [workflow]. Для каждого класса запроса определи primary route, проверяемый сигнал уверенности, причины эскалации, fallback, максимальное число попыток и quality/latency/cost SLO. Не используй самооценку модели как единственный сигнал.

Каскад моделей и проверяемая эскалация

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

СигналДействиеПроверка
JSON не проходит schemaRepair или эскалацияValidator
Нет обязательной цитатыПовторный retrievalProvenance
Высокий рискСильная модель и approvalPolicy
Неизвестный intentБезопасный handoffЗакрытая taxonomy

Ограничьте выход и используйте структурированный контракт

Лишние выходные токены увеличивают цену и задержку, а затем становятся входом следующего шага. Задайте JSON Schema, обязательные поля, допустимую длину и критерий остановки. Не просите «максимально подробно», если downstream использует три значения.

  • Возвращайте ID и решение вместо пересказа записи.
  • Разделяйте machine output и текст для человека.
  • Запрашивайте краткое обоснование и источники только когда они нужны контракту.
  • Останавливайте генерацию после заполнения схемы.
  • Проверяйте усечение обязательных данных.

Batch API для несрочных независимых задач

Классификация архива, embeddings, массовое обогащение и ночные evals не требуют синхронного ответа. Официальные Batch API OpenAI и Gemini предназначены для асинхронной обработки больших объёмов. На дату публикации оба документа указывают скидку 50% относительно стандартного интерактивного режима, но условия и поддерживаемые модели необходимо перепроверять.

Собрать

Независимые запросы с уникальными ID.

Отправить

Один раз, с защитой от дублей.

Сверить

Результаты и ошибки по ID.

Retries, rate limits и идемпотентность

Повтор оплачивается как новый вызов и может повторно выполнить tool. Retry нужен для временных ошибок, с exponential backoff, jitter и верхней границей. Ошибку валидации нельзя лечить бесконечным повтором.

Retry policy
  1. Разделить transient и permanent errors.
  2. Задать max attempts и deadline.
  3. Уважать Retry-After.
  4. Применять backoff с jitter.
  5. Защитить внешние операции от дублей.
  6. Открывать circuit breaker при системном сбое.
  7. Логировать цену каждой попытки.

Агенты: ограничьте шаги, токены, время и деньги

У агента стоимость растёт по циклу: модель планирует, вызывает инструмент, получает результат и снова отправляет историю. Без ограничений ошибка навигации создаёт дорогую петлю.

ЛимитПолитикаПри достижении
ШагиПредел по классу задачиОстановить и показать статус
ТокеныБюджет на traceСжать состояние или handoff
ДеньгиHard cap на runЗапретить новые вызовы
ВремяWorkflow deadlineОтменить операции
ToolsAllowlist и пределЗапросить approval

Передавайте структурированное состояние, а не всю стенограмму. Крупный tool result храните отдельно и возвращайте только нужный фрагмент.

Quality floor: экономия не должна ломать результат

Смена модели, top-k, prompt, лимита выхода или routing policy изменяет поведение. Прогоните один версионированный eval-набор до и после. Зафиксируйте качество, критические ошибки, latency и стоимость успешной задачи.

  • Golden cases для ключевых сценариев.
  • Regression cases из обезличенных сбоев.
  • Редкие форматы, языки и длинные входы.
  • Grounding, цитаты и права доступа.
  • Tool-use и безопасность действий.
  • Доля отказов, исправлений и эскалаций.

Заранее задайте quality floor и ошибки, при которых релиз запрещён.

Runtime budget controller и FinOps

Контроллер знает остаток бюджета trace, приблизительный размер контекста и максимальный выход. Он может запретить дорогой route, сократить необязательный контекст, переключить задачу в batch или запросить подтверждение.

Опиши budget controller для [workflow]. Входы: tenant quota, task/risk class, tokens used, estimated next input/output, tool costs, deadline. Выходы: allow, cheaper_route, trim_optional_context, queue_batch, require_approval, stop. Hard cap нельзя превышать; безопасность нельзя отключать; решение и версия policy попадают в trace.

Разделите бюджеты по продукту, среде, tenant и workflow. Уведомления стройте по темпу расхода, отклонению от baseline и стоимости результата.

Дашборд экономики LLM

МетрикаЗачемПроблема
Cost/successСвязывает расходы с результатомРастёт при прежнем качестве
Success rateЗащищает качествоПадает после релиза
Tokens by blockНаходит источникHistory или RAG разрастается
Cache hit shareПроверяет prefixНиже ожидаемого
Escalation rateОценивает каскадПервая модель лишняя
Retries/successНаходит скрытую ценуСкачок по ошибке
P95 costВидит дорогой хвостЗацикленные runs

План оптимизации на 30 дней

30-дневный план
  1. Дни 1 - 3: определить единицы успеха и владельцев.
  2. Дни 4 - 7: собрать usage, retries, fallback и проверки.
  3. Дни 8 - 10: построить baseline и найти лидеров затрат.
  4. Дни 11 - 14: удалить ненужные вызовы и контекст.
  5. Дни 15 - 18: стабилизировать prefix и измерить cache hits.
  6. Дни 19 - 21: вынести несрочные задания в batch.
  7. Дни 22 - 25: проверить routing на eval-наборе.
  8. Дни 26 - 27: установить agent limits и quota.
  9. Дни 28 - 29: провести canary с quality floor.
  10. День 30: сравнить cost/success и оформить решение.

Итоговый чек-лист перед релизом

Release gate
  1. Определена единица успешного результата.
  2. Учтены попытки, fallback, tools и ручной труд.
  3. Тарифы версионируются.
  4. Ненужные LLM-вызовы удалены.
  5. Контекстные блоки имеют бюджет.
  6. Стабильный prefix отделён от переменных.
  7. Cache hits, TTL и invalidation измеряются.
  8. RAG проверен на recall.
  9. Routing основан на eval.
  10. Batch рассмотрен для несрочных задач.
  11. Retry и agent loops ограничены.
  12. Quality floor блокирует плохой релиз.
  13. Есть canary, владелец и rollback.

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

Как быстро снизить стоимость LLM API?
Сначала найдите ненужные и повторные вызовы, затем ограничьте контекст и формат выхода. После этого измерьте prompt caching, перенесите несрочные задачи в batch и тестируйте routing. Проверяйте стоимость успешной задачи и quality floor.
Как считать стоимость запроса к нейросети?
Суммируйте обычные и кэшированные входные токены, выход, embeddings, retrieval, tools, хранение, retries и fallback. Для бизнес-метрики разделите затраты на число успешно принятых результатов.
Что такое prompt caching и когда оно выгодно?
Это повторное использование одинакового префикса по правилам провайдера. Оно полезно при частых запросах с общими инструкциями, примерами или corpus. Выгоду подтверждают usage-метрики с учётом TTL и хранения.
Всегда ли дешёвая модель снижает стоимость?
Нет. Ошибки, повторы, эскалации и ручное исправление могут увеличить цену успешной задачи. Сравнивайте модели на своём eval-наборе.
Как работает routing между моделями?
Policy выбирает route по классу сложности и риска. Результат валидируется, а при понятном сигнале провала допускается ограниченная эскалация. Самооценка модели не должна быть единственным критерием.
Какие задачи отправлять в Batch API?
Большие объёмы независимых и несрочных задач: классификацию архива, embeddings, обогащение данных и evals. Условия и скидки проверяйте в актуальной документации.
Как ограничить стоимость ИИ-агента?
Задайте caps на шаги, токены, деньги, время и tool calls для всего trace. Используйте структурированное состояние, ограниченный retry, approval и handoff.
Какие метрики контролируют расходы?
Стоимость успешной задачи, success rate, ошибки, input/cached/output tokens, cache-hit share, retries, escalation rate, P95 стоимости и latency в разрезе workflow и версии.
← Все статьи блога