Назад в блог

AI для новичковИнструкция

Входные и выходные токены: за что платите в API

Почему AI API считает входные и выходные токены отдельно, где их увидеть в поле usage и как посчитать стоимость одного запроса.

Автор: CheapTokens TeamОпубликовано Обновлено 5 мин чтения

Обложка с заголовком «Входные и выходные токены» и подписью «За что вы платите в запросе к API» на тёмном фоне с сеткой
Содержание
  1. Что считается входом, а что выходом
  2. Где взять числа: блок usage
  3. Почему у сторон разные цены
  4. Формула
  5. Разбор на реальной модели
  6. Как это выглядит в коде
  7. Как тратить меньше токенов
  8. Что запомнить

Если вы только что сделали первый запрос к языковой модели через API, то наверняка заметили в ответе блок usage и задумались, что именно он считает. Коротко: у каждого запроса два счётчика. Один считает токены, которые вы отправили (вход), другой — токены, которые модель написала в ответ (выход). У каждого счётчика своя цена, а стоимость запроса — сумма обоих.

В этом руководстве: где взять числа, как перевести их в доллары и что можно изменить, чтобы тратить меньше. Если слово «токен» пока непонятно, начните со статьи Что такое токен в AI.

Что считается входом, а что выходом#

Входные токены — всё, что модель должна прочитать, чтобы ответить:

  • ваше последнее сообщение;
  • системный промпт (инструкции вроде «отвечай кратко, по-русски»);
  • предыдущие сообщения диалога, если вы отправляете их снова;
  • документы, код или результаты поиска, которые вы вставляете в запрос.

Выходные токены — всё, что модель сгенерировала в ответ. В OpenAI-совместимом формате это текст в choices[0].message.content. Некоторые модели в режиме рассуждений перед финальным ответом генерируют ещё и токены рассуждений; тарифицируются ли они как выход, смотрите на странице цен конкретной модели.

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

Где взять числа: блок usage#

Каждый ответ OpenAI-совместимого API без стриминга заканчивается объектом usage. Учебный пример его формы:

json
{
  "choices": [
    { "message": { "role": "assistant", "content": "..." }, "finish_reason": "stop" }
  ],
  "usage": {
    "prompt_tokens": 2000,
    "completion_tokens": 500,
    "total_tokens": 2500
  }
}
Поле Что означает Как тарифицируется
prompt_tokens Токены всего, что вы отправили Вход
completion_tokens Токены, которые сгенерировала модель Выход
total_tokens prompt_tokens + completion_tokens Отдельной цены нет: это просто сумма

Частая ошибка новичков — умножить total_tokens на одну цену. Цены входа и выхода разные, поэтому нужны оба числа по отдельности.

У некоторых провайдеров есть дополнительные поля. Например, собственный API DeepSeek делит prompt_tokens на prompt_cache_hit_tokens и prompt_cache_miss_tokens, а в режиме рассуждений сообщает reasoning_tokens (источник: документация DeepSeek API, проверено 21 октября 2026 года). Три поля из таблицы — те, на которые можно рассчитывать в любом OpenAI-совместимом ответе.

При стриминге usage в начале ответа ещё неизвестен. В собственном API DeepSeek он приходит в последнем чанке с контентом перед data: [DONE] (документация DeepSeek API, проверено 21 октября 2026 года); другие API могут отправлять его иначе или только по запросу, поэтому проверьте, что получает ваш клиент. О самом стриминге — в статье Стриминг ответов в Python.

Почему у сторон разные цены#

Читать промпт и писать ответ — разная работа. Модель обрабатывает весь промпт за один проход, а ответ должна выдавать по одному токену, и каждый новый токен зависит от предыдущих. Поэтому провайдеры обычно ставят выход дороже входа, и в любом прайсе у модели два числа.

Модель из примера ниже — MiniMax-M2.7 (id minimax-m2.7) — следует этой схеме. Текущие цены за 1M токенов: $0.05 за вход и $0.15 за выход.

Формула#

Цены указывают за 1 миллион токенов, поэтому стоимость одного запроса такая:

text
стоимость = входные_токены × цена_входа ÷ 1 000 000
          + выходные_токены × цена_выхода ÷ 1 000 000

То же самое с выдуманными круглыми ценами — только чтобы показать арифметику (пример, подставьте текущие цены из таблицы ниже):

python
# пример, подставьте текущие цены из таблицы
price_in = 0.20    # USD за 1M входных токенов
price_out = 0.80   # USD за 1M выходных токенов

prompt_tokens = 2000
completion_tokens = 500

cost = (prompt_tokens * price_in + completion_tokens * price_out) / 1_000_000
# 2000 × 0.20 ÷ 1 000 000 = 0.0004 (вход)
# 500 × 0.80 ÷ 1 000 000 = 0.0004 (выход)
# 0.0004 + 0.0004 = 0.0008 USD

Разбор на реальной модели#

Возьмём запрос из примера usage выше: 2 000 входных и 500 выходных токенов. На MiniMax-M2.7 через CheapTokens он стоит $0.00018. Число считается по текущему прайсу при каждом показе страницы.

Один запрос копеечный, поэтому полезно умножить. Небольшое приложение, которое отправляет 10 000 таких запросов, тратит 20 000 000 входных и 5 000 000 выходных токенов — это $1.75.

Тот же запрос на других моделях из нашего списка:

Модель Стоимость OpenRouter
GLM-5.3-Flash $0.00006 $0.00012
DeepSeek-V4-Flash $0.00008 $0.00017
MiniMax-M2.7 $0.00018 $0.0012

2 000 входных и 500 выходных токенов всего. Цены за 1M токенов актуальны и меняются вместе с нашими тарифами; столбец OpenRouter показывает справочные цены для той же нагрузки.

Обратите внимание: выход здесь — небольшая часть токенов (500 из 2 500), но бóльшая часть счёта, чем их доля в токенах, потому что выходные токены стоят дороже (см. таблицу). У этой модели именно по выходу подтверждена экономия относительно референсной цены OpenRouter — это удобно, если ваше приложение пишет длинные ответы.

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

Поле usage можно прочитать через официальный Python-пакет openai, указав базовый адрес CheapTokens:

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key="YOUR_API_KEY",
)

response = client.chat.completions.create(
    model="MiniMaxAI/MiniMax-M2.7",
    messages=[{"role": "user", "content": "Объясни входные и выходные токены в двух предложениях."}],
)

usage = response.usage
print("вход:", usage.prompt_tokens)
print("выход:", usage.completion_tokens)
print("всего:", usage.total_tokens)

# пример, подставьте текущие цены из таблицы выше
price_in, price_out = 0.20, 0.80
cost = (usage.prompt_tokens * price_in + usage.completion_tokens * price_out) / 1_000_000
print(f"примерная стоимость: ${cost:.6f}")

Если вы ещё не отправляли запрос, сначала пройдите Первый запрос к API CheapTokens.

Как тратить меньше токенов#

  • Сократите промпт. Уберите из системного промпта лишние инструкции. Каждый отправленный токен оплачивается в каждом запросе.
  • Обрезайте историю. В длинном чате оставляйте последние несколько реплик или краткое резюме вместо всего диалога.
  • Отправляйте только нужную часть документа. Страница текста дешевле целого файла.
  • Просите нужный формат. «Ответь тремя пунктами» даёт меньше выходных токенов, чем свободное эссе.
  • Ставьте max_tokens осознанно. Параметр ограничивает только выход. Слишком маленькое значение обрежет ответ; подробности — в статье Почему ответ AI обрывается на полуслове. MiniMax-M2.7 в CheapTokens допускает до 8 192 выходных токенов в одном ответе и имеет контекст 180K.

Для оценки стоимости большого сценария см. Как оценить стоимость AI-агента.

Что запомнить#

  1. В каждом запросе есть входные токены (prompt_tokens) и выходные (completion_tokens).
  2. У них раздельные цены, обычно выход дороже.
  3. Стоимость = входные токены × цена входа + выходные токены × цена выхода, цены — за 1M токенов.
  4. Берите числа из usage в ответе, а не угадывайте.

В CheapTokens один предоплаченный баланс на все модели, цены каждой модели фиксированы и без пиковых часов, а API совместим с OpenAI Chat Completions и Anthropic Messages. Чтобы повторить пример выше, получите API-ключ и отправьте первый запрос.

Актуальные цены всех моделей — на странице тарифов CheapTokens.