Logo
Overview

Стоимость AI-функции: как считать токены, кэшировать и не разориться

September 16, 2026
7 min read

Стоимость AI-функции: как считать токены, кэшировать и не разориться

Первый раз, когда я подключил LLM к реальному продукту, через неделю пришёл счёт. Я ожидал долларов 20 — вышло 180. Ничего не сломалось, запросы уходили, пользователи были довольны. Просто я не подумал про цену контекста. Точнее, думал — но неправильно.

Большинство разговоров про стоимость LLM сводятся к фразе «ну, это же копейки». Копейки превращаются в рубли, когда вы гоняете 30 000 токенов контекста на каждый запрос, а пользователей — сотня. А если ещё и RAG-пайплайн поверх, где каждый чанк — это дополнительный промпт? Бюджет начинает жечься с ускорением.

Давайте разбираться на цифрах.

Как устроен счёт: токены внутри

LLM-провайдеры выставляют счёт за токены — единицы текста, на которые дробится запрос и ответ. Грубо: один токен — это примерно 0,75 слова на русском или около 4 символов. Точнее считать через токенизатор конкретной модели, но для прикидки такой арифметики хватает.

Платите вы дважды за каждый вызов:

  • Входные токены (input) — всё, что вы отправили в промпте: системный промпт, историю диалога, RAG-контекст, примеры.
  • Выходные токены (output) — ответ модели, от одного слова до простыни на 8К токенов.

Входные токены дешевле выходных в 3–5 раз у большинства провайдеров. Но их обычно намного больше по объёму: системный промпт плюс контекст могут весить 2–10К токенов, а ответ — 300–500. Парадокс: вы переплачиваете за то, что отправляете, а не за то, что получаете.

100%
graph LR
  subgraph REQ["Входящий запрос"]
      USER["Пользователь / API"] --> TOKENS["Подсчёт входных токенов"]
  end

  subgraph CACHE["Слой кэширования"]
      CHECK["Проверка кэша"]
  end

  subgraph PROCESS["Обработка запроса"]
      PROMPT["Сборка контекста"]
      LLM["LLM-провайдер"]
      OUTPUT["Подсчёт выходных токенов"]
  end

  subgraph COST["Финансовый учёт"]
      CALC["Калькулятор стоимости"]
      BUDGET["Трекер бюджета"]
      ALERT["Алерт-лимит"]
  end

  TOKENS --> CHECK
  CHECK -->|"кэш-попадание ✓"| CALC
  CHECK -->|"кэш-промах ✗"| PROMPT
  PROMPT --> LLM
  LLM --> OUTPUT
  OUTPUT --> CALC
  CALC -.стоимость.-> BUDGET
  CALC -.порог превышен.-> ALERT
  BUDGET -->|"стоп-запросы"| USER

  style USER fill:#4a90d9,stroke:#2c5f8a,color:#fff
  style TOKENS fill:#7b68ee,stroke:#5a4db2,color:#fff
  style CHECK fill:#f0a500,stroke:#c88400,color:#fff
  style PROMPT fill:#7b68ee,stroke:#5a4db2,color:#fff
  style LLM fill:#50c878,stroke:#3a9a5c,color:#fff
  style OUTPUT fill:#7b68ee,stroke:#5a4db2,color:#fff
  style CALC fill:#4a90d9,stroke:#2c5f8a,color:#fff
  style BUDGET fill:#f0a500,stroke:#c88400,color:#fff
  style ALERT fill:#4a90d9,stroke:#2c5f8a,color:#fff

Схема выше — упрощённый пайплайн того, как запрос пользователя превращается в строчку в биллинге. Синие блоки — внешние события и управление, фиолетовые — токенизация, жёлтые — кэш и бюджет, зелёный — сам вызов LLM. Обратите внимание на кэш-попадание: если система распознала повторный запрос, до LLM дело не доходит — списывается только фиксированная стоимость хранения кэша (обычно на порядок дешевле полного compute).

Цены: кто почём

Цены прыгают от модели к модели радикально. На момент написания (сентябрь 2026) расклад такой:

МодельВход (за 1M токенов)Выход (за 1M токенов)Кэш-чтениеОсобенность
Claude 3.5 Sonnet$3$15$0,30Дорогой выход, мощный reasoning
Claude 3 Haiku$0,80$4$0,08Быстрый, бюджетный
GPT-4o$2,50$10$1,25Хороший баланс цена/качество
GPT-4o-mini$0,15$0,60$0,075Почти бесплатно для простых задач
Gemini 1.5 Flash$0,075$0,30$0,02Самый дешёвый вход
DeepSeek-V3$0,27$1,10$0,07Китайский демпинг, хорош для RU

Цены — ориентир, провайдеры меняют их раз в пару месяцев. Регистрируйтесь у нескольких (LiteLLM Proxy помогает переключаться без переписывания кода). Но порядок понятен: модель определяет чек, и разница между Haiku и Sonnet — пятикратная.

Сценарий: SaaS-продукт, 1000 DAU, каждый пользователь делает 5 запросов в день. Средний диалог — 2К входных и 400 выходных токенов. В месяц выходит 300 млн входных + 60 млн выходных токенов. На GPT-4o-mini это около 81/мес.НаClaude3.5Sonnet81/мес. На Claude 3.5 Sonnet — 1 800. Разница — в 22 раза. Вывод не в том, что Sonnet — плохо. А в том, что выбор модели без калькулятора рядом — игра в рулетку.

Отдельная тема — выбор модели под задачу. Не надо гонять Sonnet на классификацию «спам/не спам», когда Haiku справляется с точностью 97%. Сравнение AI-моделей для аналитика я разбирал отдельно — там таблица с бенчмарками по задачам.

Prompt caching: ваш главный рычаг экономии

Если вы шлёте один и тот же системный промпт 1000 раз в день — вы платите за него 1000 раз. Prompt caching эту проблему решает.

Работает просто: вы отмечаете часть промпта как кэшируемую, провайдер запоминает её, и в следующих запросах вы платите за чтение из кэша, а не за полный обсчёт. Разница — десятикратная.

У Anthropic кэширование включается через указание cache_control на блоке контента:

{
"system": [
{
"type": "text",
"text": "Ты — ассистент поддержки банка. Вот инструкция на 8К токенов...",
"cache_control": "\{"type": "ephemeral"\}"
}
]
}

Кэш живёт 5 минут по умолчанию (плюс время провайдера на прогрев), так что для массовых однотипных запросов в рамках сессии — идеально. Для редких запросов раз в час — бесполезно.

У OpenAI механика называется prompt caching и включается автоматически для повторяющихся префиксов. Минус — вы не управляете этим явно. Плюс — работает из коробки.

На практике мы у себя в конвейере аналитики сделали так: системный промпт с правилами валидации требований (около 6К токенов) закэширован, и каждый новый файл требований летит уже как некэшируемое дополнение. За месяц экономия — порядка 60% от того, что было без кэша.

Батчинг: дёшево, но не быстро

Все крупные провайдеры дают скидку 50% за батч-обработку. Вы отправляете пачку запросов, провайдер выполняет их в фоне (обычно в течение 24 часов), вы платите половину цены.

Для чего подходит:

  • Ночная обработка накопленных данных
  • Массовая классификация/разметка
  • Генерация эмбеддингов для RAG-индекса
  • Регулярная индексация документов

Для чего не подходит:

  • Реалтайм-чат с пользователем
  • Интерактивный анализ
  • Всё, где ответ нужен быстрее минуты

У GPT-4o батч-цена — 1,25/1,25/5 за миллион токенов (вход/выход) вместо 2,50/2,50/10. Вдвое дешевле. На объёмах из примера выше (300M/60M токенов) это разница между 2250и2 250 и 1 125 в месяц — если ваша архитектура допускает отложенные ответы хотя бы для части трафика.

Считаем TCO: не только токены

Токены — видимая часть айсберга. Вот что ещё ест деньги:

  • API-шлюз/прокси. Если вы используете LiteLLM или самописный враппер — это сервер, Redis, база. Даже мелкая VPS на хостинге: $5–20/мес.
  • Хранение логов и мониторинг. Каждый запрос пишется в БД для аудита. При 5 000 запросов/день — через год это 1,8 млн записей. Место и индексы — деньги.
  • RAG-инфраструктура. Векторная БД, эмбеддинги для новых документов, реиндексация.
  • Оценка качества. Если вы прогоняете ответы через второй LLM для валидации (guardrails) — удваивайте бюджет.
  • Отладка и эксперименты. Вы будете тестировать промпты, менять модели, гонять A/B-тесты. Экспериментальные токены — 10–30% сверху к боевым в первый месяц.

Приблизительная формула:

TCO ≈ (токены × цена) + инфраструктура + 20% запас на эксперименты

Если ваши прямые затраты на токены — 200/мес,реальныйчексинфраструктуройизапасомбудетоколо200/мес, реальный чек с инфраструктурой и запасом будет около 280–320. Не смертельно, но при планировании закладывайте.

Как не вылететь в трубу: три стратегии

1. Лимиты на уровне прокси. LiteLLM умеет задавать бюджет на ключ/пользователя/модель. Превысил лимит — запросы блокируются, а не уходят провайдеру. Жёстко, но действенно. Настраивается в конфиге:

litellm_settings:
max_budget: 200 # долларов в месяц на весь инстанс
budget_duration: "1mo"

2. Rate limiting на входе. Не давайте одному пользователю гонять по 100 запросов в минуту. Во-первых, это снижает пиковые нагрузки на провайдера (и риск 429-х ошибок). Во-вторых, ограничивает каскадные расходы от бага в клиентском коде. Банальный while (true) { askLLM() } без рейт-лимита сожрёт дневной бюджет за 3 минуты. Проверено.

3. Мониторинг spend в реальном времени. Почти все прокси пишут стоимость каждого вызова в логи. Соберите эти логи в Grafana или банальную Google-таблицу и смотрите тренд раз в день. Аномалии видны сразу: вчера 7,сегодня7, сегодня 43 — что-то пошло не так.

Чек-лист: что сделать до продакшена

  • Посчитайте ожидаемые объёмы: пользователи × запросы × средние токены на запрос.
  • Выберите модель под задачу, а не самую мощную «на всякий случай».
  • Включите prompt caching для системного промпта и переиспользуемых шаблонов.
  • Настройте бюджет и лимиты в API-прокси.
  • Если задача допускает задержку — используйте батч-обработку.
  • Закладывайте 20–30% сверху на эксперименты и отладку.
  • Раз в неделю смотрите на график spend.

Счета от AI-провайдеров не кусаются, если у вас есть лимиты и кэш. Кусаются — если вы подключили Claude 3.5 Sonnet, скормили ему весь RAG-индекс в каждом запросе и забыли поставить бюджет.