LLM API и интеграция

Почему prompt_tokens больше, чем вы отправили

Почему prompt_tokens больше, чем вы отправили

Служебный контекст маршрута занимает от 2000 до 9500 токенов и попадает в ваш prompt_tokens вместе с текстом запроса. Разница между семействами моделей — 4,75 раза: у Gemini и GLM это 2000 токенов, у линейки GPT и Grok 2700, у Haiku 4.5 — 7062, у Opus и Sonnet 5 — 9500. В деньгах на Opus 5 это 617 ₽ за тысячу запросов ещё до того, как вы отправили хоть один символ. На Gemini 2.5 Flash те же тысяча запросов стоят 14 ₽ накладных. Числа опубликованы в GET /v1/models в поле billing.estimated_route_context_tokens, дата последнего измерения — 6 августа 2026 года.

Это тот случай, когда цена за миллион токенов ничего не говорит о счёте. Разберём, откуда берётся разница и что с ней делать.

Что такое служебный контекст и почему он оплачивается

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

Ничего необычного в этом нет — так устроен любой маршрут поверх модели. Необычно другое: почти никто не публикует, сколько именно это занимает. В каталоге KeyDealer оценка лежит в открытом виде для каждой модели, вместе с датой измерения, чтобы можно было посчитать бюджет до первого запроса.

Сколько служебных токенов у каждого семейства

Данные из GET /v1/models на 8 августа 2026 года, измерение от 6 августа.

СемействоСлужебный контекст, токеновСтавка входа, ₽ за 1 млн
Gemini 2.5 Flash, 3 Flash, 3.5 Flash, 3.1 Pro2 0006–20
GLM-4.6V, GLM-4.7, GLM-5.22 0004–20
Sonnet 4.62 06830
GPT-5.4, 5.4 Mini, 5.5, 5.6 Luna, 5.6 Sol, 5.6 Terra2 7008–25
Grok 4.20 Research2 70025
Haiku 4.57 06220
Opus 4.6, 4.7, 4.8, Opus 5, Sonnet 59 50020–65

У gpt-oss-120b объём не измерен — в ответе стоит null, и мы не подставляем туда правдоподобное число.

Первое, что бросается в глаза: Sonnet 4.6 и Sonnet 5 отличаются в 4,6 раза — 2068 против 9500 токенов. Это соседние поколения одной линейки.

Второе: Haiku 4.5 стоит 20 ₽ за миллион, столько же, сколько Sonnet 5, но накладных у него на четверть меньше.

Во что это обходится в рублях

Считаем накладные на тысячу запросов, только служебную часть, без вашего текста и без ответа модели.

МодельСлужебных токеновСтавка входаНакладные на 1000 запросов
Gemini 2.5 Flash2 0007 ₽14 ₽
GLM-4.72 0004 ₽8 ₽
GPT-5.4 Mini2 7008 ₽22 ₽
GPT-5.6 Sol2 70025 ₽68 ₽
Haiku 4.57 06220 ₽141 ₽
Sonnet 59 50020 ₽190 ₽
Opus 59 50065 ₽617 ₽

Разрыв между GLM-4.7 и Opus 5 — 77 раз. И это ещё до того, как вы отправили первый символ.

Для короткого сценария вроде классификации сообщения в одно слово служебная часть может оказаться больше вашего промпта. Для длинного анализа документа на 50 тысяч токенов она растворяется в общем объёме и роли не играет. Отсюда практический вывод: накладные важны там, где запросы частые и короткие, и почти не важны там, где они редкие и длинные.

Два сценария, где разница видна и где нет

Возьмём два типовых случая и посчитаем долю служебной части.

Классификация обращений в поддержке. Промпт короткий: инструкция плюс сообщение клиента, около 300 токенов. Ответ в одно слово, 5 токенов.

МодельВаши токеныСлужебныеДоля служебных
Gemini 2.5 Flash3002 00087%
Sonnet 53009 50097%

То есть вы платите почти целиком за служебную часть, а не за свой текст. На таком сценарии выбор семейства решает всё.

Анализ договора на 40 тысяч токенов. Ответ развёрнутый, 2 тысячи токенов.

МодельВаши токеныСлужебныеДоля служебных
Gemini 2.5 Flash40 0002 0005%
Sonnet 540 0009 50019%

Здесь служебная часть уже фон, а решают ставка и качество разбора.

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

Как это выглядит в ответе API

В завершённом ответе поле usage показывает фактические числа:

{
  "usage": {
    "prompt_tokens": 9743,
    "completion_tokens": 128,
    "total_tokens": 9871,
    "prompt_tokens_details": {
      "estimated_user_tokens": 243
    }
  }
}

Здесь prompt_tokens — всё, что получила модель, а estimated_user_tokens — приблизительная оценка того, сколько из этого прислали вы. Разница и есть служебная часть.

Важная оговорка: estimated_user_tokens информационное поле, независимое от токенизатора конкретной модели, и источником окончательного списания оно не является. Деньги считаются по prompt_tokens и completion_tokens. Полный контракт биллинга описан в документации API.

Как измерить свой случай за пять минут

Оценка из каталога усреднённая, ваш сценарий может отличаться. Порядок проверки простой.

Отправьте один типовой запрос и посмотрите в ответе разницу между prompt_tokens и estimated_user_tokens. Повторите десять раз на разных входных данных — служебная часть должна держаться примерно на одном уровне, а ваша меняться. Если разница скачет сильно, значит в неё попадает что-то из вашей обвязки: системное сообщение фреймворка, описания инструментов, история диалога.

Последнее — самая частая причина неожиданного счёта. Описания инструментов в поле tools уходят в модель при каждом запросе, а не один раз за сессию. Пять подробно описанных функций легко добавляют больше токенов, чем весь ваш промпт.

Почему оценка в каталоге — это оценка

GET /v1/models публикует не константу, а измерение с датой. У части моделей рядом идут p50, p95 и размер выборки, когда замер проводился.

Причина простая: объём служебного контекста может меняться от запроса к запросу и от версии маршрута к версии. Публиковать одно число как гарантию было бы враньём.

Отсюда правило, которое стоит держать в голове: оценка нужна для планирования, usage — для сверки счёта. Если вы строите модель расходов, берите оценку. Если разбираетесь, почему списалось именно столько, смотрите usage в ответе и keydealer_billing.operation_id в истории запросов.

Что с этим делать

Четыре приёма по убыванию эффекта.

  1. Выбирайте модель под форму запроса, а не только по цене за миллион. Для частых коротких обращений Gemini Flash и GLM выигрывают дважды: и ставкой, и накладными. Для длинных редких задач разница в накладных не заметна, и решает качество.
  2. Считайте на реальных запросах. Возьмите десять типовых обращений своего сценария, посмотрите usage и выведите среднее. Прикидка в уме на коротких запросах ошибается в разы именно из-за служебной части.
  3. Ужимайте свою часть контекста. На служебную вы не влияете, а на свою — да. Измерить и консервативно сжать помогает KD Context: он работает на стороне клиента до отправки и не трогает маршрут.
  4. Не закладывайте скидку за кэш. У всех моделей каталога prompt_cache.status сейчас unsupported, и служебная часть кэшем не покрывается. Подробнее про цены и то, что в них не входит — в разборе, сколько стоит 1 млн токенов в рублях.

Что держать в голове

Цена за миллион токенов — половина картины. Вторая половина в том, сколько токенов уходит в модель помимо вашего текста, и здесь разброс между семействами достигает 4,75 раза, а в деньгах на тысячу запросов — 77 раз.

Числа опубликованы и проверяемы: GET /v1/models, поле billing.estimated_route_context_tokens, рядом дата измерения. Мы публикуем их в том числе там, где они неудобны — у линейки Opus служебный контекст самый большой в каталоге.

Модели меняются, маршруты тоже. Календарь того, что и когда выключают вендоры, собран отдельно: что сломается до конца 2026. Как мы проверяем факты — на странице о проекте.

Частые вопросы

Что такое служебный контекст маршрута?

Это системная часть промпта, которую добавляет маршрут перед отправкой запроса модели. Она попадает в prompt_tokens и оплачивается по обычной входной ставке. GET /v1/models публикует её оценку для каждой модели вместе с датой измерения.

Почему у разных моделей он разный?

Объём зависит от маршрута конкретной модели, а не от вашего запроса. На 8 августа 2026 года у линейки Gemini и GLM это около 2000 токенов, у линейки GPT и Grok 2700, у Haiku 4.5 — 7062, у Opus и Sonnet 5 — 9500.

Можно ли уменьшить служебный контекст?

Нет, это часть маршрута. Уменьшить можно свою часть промпта. Измерить и консервативно ужать её помогает KD Context, но на служебную часть он не влияет.

По какому числу списываются деньги?

По полю usage в завершённом ответе, а не по оценке из каталога. Оценка нужна для планирования бюджета, авторитетным для списания остаётся фактический usage.

Источники