Стоимость AI-функции: как считать токены, кэшировать и не разориться
Первый раз, когда я подключил LLM к реальному продукту, через неделю пришёл счёт. Я ожидал долларов 20 — вышло 180. Ничего не сломалось, запросы уходили, пользователи были довольны. Просто я не подумал про цену контекста. Точнее, думал — но неправильно.
Большинство разговоров про стоимость LLM сводятся к фразе «ну, это же копейки». Копейки превращаются в рубли, когда вы гоняете 30 000 токенов контекста на каждый запрос, а пользователей — сотня. А если ещё и RAG-пайплайн поверх, где каждый чанк — это дополнительный промпт? Бюджет начинает жечься с ускорением.
Давайте разбираться на цифрах.
Как устроен счёт: токены внутри
LLM-провайдеры выставляют счёт за токены — единицы текста, на которые дробится запрос и ответ. Грубо: один токен — это примерно 0,75 слова на русском или около 4 символов. Точнее считать через токенизатор конкретной модели, но для прикидки такой арифметики хватает.
Платите вы дважды за каждый вызов:
- Входные токены (input) — всё, что вы отправили в промпте: системный промпт, историю диалога, RAG-контекст, примеры.
- Выходные токены (output) — ответ модели, от одного слова до простыни на 8К токенов.
Входные токены дешевле выходных в 3–5 раз у большинства провайдеров. Но их обычно намного больше по объёму: системный промпт плюс контекст могут весить 2–10К токенов, а ответ — 300–500. Парадокс: вы переплачиваете за то, что отправляете, а не за то, что получаете.
Схема выше — упрощённый пайплайн того, как запрос пользователя превращается в строчку в биллинге. Синие блоки — внешние события и управление, фиолетовые — токенизация, жёлтые — кэш и бюджет, зелёный — сам вызов 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 это около 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 батч-цена — 5 за миллион токенов (вход/выход) вместо 10. Вдвое дешевле. На объёмах из примера выше (300M/60M токенов) это разница между 1 125 в месяц — если ваша архитектура допускает отложенные ответы хотя бы для части трафика.
Считаем TCO: не только токены
Токены — видимая часть айсберга. Вот что ещё ест деньги:
- API-шлюз/прокси. Если вы используете LiteLLM или самописный враппер — это сервер, Redis, база. Даже мелкая VPS на хостинге: $5–20/мес.
- Хранение логов и мониторинг. Каждый запрос пишется в БД для аудита. При 5 000 запросов/день — через год это 1,8 млн записей. Место и индексы — деньги.
- RAG-инфраструктура. Векторная БД, эмбеддинги для новых документов, реиндексация.
- Оценка качества. Если вы прогоняете ответы через второй LLM для валидации (guardrails) — удваивайте бюджет.
- Отладка и эксперименты. Вы будете тестировать промпты, менять модели, гонять A/B-тесты. Экспериментальные токены — 10–30% сверху к боевым в первый месяц.
Приблизительная формула:
TCO ≈ (токены × цена) + инфраструктура + 20% запас на экспериментыЕсли ваши прямые затраты на токены — 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-таблицу и смотрите тренд раз в день. Аномалии видны сразу: вчера 43 — что-то пошло не так.
Чек-лист: что сделать до продакшена
- Посчитайте ожидаемые объёмы: пользователи × запросы × средние токены на запрос.
- Выберите модель под задачу, а не самую мощную «на всякий случай».
- Включите prompt caching для системного промпта и переиспользуемых шаблонов.
- Настройте бюджет и лимиты в API-прокси.
- Если задача допускает задержку — используйте батч-обработку.
- Закладывайте 20–30% сверху на эксперименты и отладку.
- Раз в неделю смотрите на график spend.
Счета от AI-провайдеров не кусаются, если у вас есть лимиты и кэш. Кусаются — если вы подключили Claude 3.5 Sonnet, скормили ему весь RAG-индекс в каждом запросе и забыли поставить бюджет.