Счёт за LLM-API складывается из двух чисел: сколько токенов вы отправили и сколько модель сгенерировала. Обе величины приходят в поле usage каждого ответа, обе управляются кодом. Разбираем, из чего они состоят и где чаще всего утекают деньги.
Токен — не символ и не слово
Токенизатор режет текст на куски по частотности. В английском один токен — это примерно четыре символа или три четверти слова. В русском тексте символов на токен приходится меньше: кириллица реже встречается в обучающих корпусах токенизатора, поэтому слова чаще распадаются на части. Код, JSON и разметка расходуются ещё быстрее — каждая скобка, отступ и кавычка отдельны.
Практический вывод один: не оценивайте расход по длине строки. Точное число всегда есть в ответе.
"usage": {
"prompt_tokens": 1740,
"completion_tokens": 253,
"total_tokens": 1993
}
При потоковой выдаче usage приходит в последнем чанке, если передать stream_options: { "include_usage": true }. Разбор — в разделе streaming.
Вход и выход — две разные цены
В каталоге у каждой модели две цены за 1M токенов. openai/gpt-4.1-mini — 34 ₽ на входе и 134 ₽ на выходе. anthropic/claude-4.5-sonnet — 252 ₽ и 1 260 ₽. Разница в четыре-пять раз стабильно повторяется у всех вендоров, и это не маркетинг.
Почему выход дороже
Обработка запроса делится на две фазы с принципиально разной экономикой.
- Prefill. Весь промпт прогоняется через модель одним батчем: токены обрабатываются параллельно, GPU загружен полностью. Тысяча входных токенов стоит почти столько же машинного времени, сколько сотня.
- Decode. Ответ рождается по одному токену за проход. Каждый следующий токен требует полного прохода по весам модели и не может быть посчитан раньше предыдущего. Параллелить нечего, GPU упирается в пропускную способность памяти, а KV-кэш растёт с каждым шагом.
Отсюда правило: сокращать выход выгоднее, чем сокращать вход. Если модель отвечает на вопрос классификации словом «да» вместо абзаца рассуждений, вы экономите на самой дорогой части счёта. Просите короткий ответ прямо в system-промпте и ставьте max_tokens — это ещё и страховка от бесконечной генерации.
Отдельно про reasoning-модели вроде openai/o4-mini и deepseek/deepseek-r2: скрытые токены рассуждений тарифицируются как выходные, хотя в ответе вы их не видите. На простых задачах reasoning-модель может обойтись дороже флагмана.
Из чего складывается вход
prompt_tokens — это не только вопрос пользователя. Туда попадает всё, что вы отправили.
System-промпт
Он уходит на сервер с каждым запросом. Инструкция на 800 токенов при 40 000 запросов в месяц — это 32M входных токенов, то есть 1 088 ₽ на openai/gpt-4.1-mini только за то, что модель заново читает одни и те же правила. Держите system-промпт коротким: убирайте примеры, которые модель и так отрабатывает, и вежливые обороты, которые ни на что не влияют.
История диалога
Главный источник роста счёта. Модель не помнит предыдущие ходы — вы пересылаете их целиком каждый раз. Десятый вопрос в диалоге тащит за собой девять предыдущих пар «вопрос-ответ», поэтому расход растёт не линейно, а квадратично по числу ходов.
| Ход диалога | Токенов в запросе | Накоплено токенов |
|---|---|---|
| 1 | 500 | 500 |
| 5 | 2 100 | 6 500 |
| 10 | 4 100 | 23 000 |
| 20 | 8 100 | 86 000 |
Что с этим делать: держать скользящее окно из последних N ходов, суммировать старую часть диалога в короткую справку и класть в system-промпт, обрезать историю по бюджету токенов, а не по числу сообщений.
Описания функций и документы
Массив tools уходит в промпт целиком, вместе с JSON Schema каждого параметра. Двадцать функций по 150 токенов — это 3 000 токенов на каждом запросе. Отдавайте модели только те функции, которые уместны в текущем шаге сценария.
То же с RAG: подмешивайте три релевантных фрагмента вместо десяти. Качество ответа от этого чаще растёт, чем падает, — длинный контекст размывает внимание модели.
Кэширование префикса
Часть провайдеров умеет кэшировать общее начало промпта: если следующий запрос начинается ровно теми же токенами, prefill для них не пересчитывается, и повторное чтение префикса стоит дешевле обычного входного токена. Поддержка и размер скидки зависят от провайдера — фактическое списание всегда видно в разделе «Расходы» в консоли.
Чтобы кэш вообще имел шанс сработать, порядок сообщений должен быть стабильным:
- неизменяемое — в начало: system-промпт, описания функций, справочники;
- переменное — в конец: текущий вопрос, метки времени, идентификаторы сессии;
- никаких случайных элементов в начале промпта — один изменившийся токен обнуляет весь префикс.
Типовая ошибка — подставлять текущую дату первой строкой system-промпта. Она ломает кэш на каждом запросе.
Выбор модели под задачу
Самая крупная экономия — не в промпте, а в решении, какая модель нужна для этой конкретной операции. Разброс цен в каталоге — три порядка.
| Модель | Вход, ₽ за 1M | Выход, ₽ за 1M |
|---|---|---|
anthropic/claude-4.5-opus |
1 260 | 6 300 |
openai/gpt-5 |
105 | 840 |
openai/gpt-4.1-mini |
34 | 134 |
google/gemini-2.5-flash-lite |
8 | 34 |
mistral/mistral-small-3.2 |
4 | 13 |
deepseek/deepseek-flash-0731 |
1 | 3 |
Ориентир по типам задач:
- Классификация, извлечение полей, определение интента. Маленькая открытая модель, короткий ответ,
temperature: 0. Флагман здесь не даст прироста точности, за который стоит платить. - Диалог с пользователем. Средний класс:
openai/gpt-4.1-mini,google/gemini-2.5-flash,anthropic/claude-4-haiku. - Сложное рассуждение, длинный код, анализ документов. Флагман — но точечно, а не на каждый запрос.
- Эмбеддинги. Отдельная категория:
openai/text-embedding-3-largeстоит 11 ₽ за 1M входных токенов, выходных у неё нет. Раздел embeddings.
Рабочая схема — каскад: дешёвая модель отвечает сама, а сложные случаи по явному признаку передаёт наверх. Если наверх уходит 10% запросов, счёт падает почти во столько же раз, во сколько отличаются цены.
Расчёт на живом примере
Поддержка в чате: 40 000 обращений в месяц, в каждом system-промпт 400 токенов, история 1 200 токенов, вопрос 100 токенов, ответ 250 токенов. Итого 68M входных и 10M выходных токенов.
| Модель | Вход | Выход | В месяц |
|---|---|---|---|
anthropic/claude-4.5-sonnet |
17 136 ₽ | 12 600 ₽ | 29 736 ₽ |
openai/gpt-5 |
7 140 ₽ | 8 400 ₽ | 15 540 ₽ |
google/gemini-2.5-flash |
1 700 ₽ | 2 100 ₽ | 3 800 ₽ |
openai/gpt-4.1-mini |
2 312 ₽ | 1 340 ₽ | 3 652 ₽ |
deepseek/deepseek-v3.2 |
272 ₽ | 170 ₽ | 442 ₽ |
Два наблюдения из таблицы.
Первое: google/gemini-2.5-flash дешевле на входе, но дороже на выходе, и по итогу проигрывает openai/gpt-4.1-mini на профиле с длинными ответами. Сравнивать модели по одной цифре бессмысленно — считайте на своём соотношении вход/выход.
Второе: если срезать историю с 1 200 до 300 токенов скользящим окном, вход падает с 68M до 32M, и месяц на openai/gpt-4.1-mini стоит 2 428 ₽ вместо 3 652 ₽. Треть счёта — за одно изменение в коде сборки сообщений.
Что сделать в первую очередь
- Включите
stream_options.include_usageи пишитеprompt_tokensиcompletion_tokensв свои логи рядом с именем сценария. Без этого любая оптимизация — гадание. - Посмотрите в консоли, какой ключ и какая модель дают основную долю расхода. Обычно это один сценарий из десяти.
- Ограничьте историю бюджетом токенов и поставьте
max_tokensна всех вызовах. - Проверьте, не решается ли самый массовый сценарий моделью классом ниже. Прогон на сотне реальных запросов занимает вечер.
- Сократите system-промпт — он уходит на сервер с каждым запросом, поэтому каждая лишняя сотня токенов умножается на весь месячный объём.
Порядок списания и работа с балансом описаны в разделе биллинг, актуальные цены — в витрине цен.