Оптимизация расходовИнструкция
Как посчитать токены до запроса: tiktoken в Python
Оцените число токенов промпта офлайн через tiktoken, проверьте окно контекста, прикиньте стоимость и сверьтесь с полем usage из ответа API.

Содержание
Токены промпта можно посчитать у себя на машине ещё до отправки: поставьте tiktoken, закодируйте текст и возьмите len() от результата. tiktoken — токенизатор OpenAI, поэтому для моделей DeepSeek, GLM и MiniMax это оценка. Настоящее число API вернёт в usage. после первого вызова, и сравнить их — одна лишняя строка.
Зачем это? Потому что и счёт, и ошибки начинаются с размера входа. Вставили длинный договор в скрипт — и узнали, что он велик, только когда API ответил 400. Запустили пакет из пяти тысяч писем — и узнали цену, когда баланс уже уменьшился. Если посчитать заранее, обе неожиданности превращаются в число, которое видно наперёд.
Пять строк, которые считают токены#
Идея целиком есть в README tiktoken (проверено 1 ноября 2026): выбрать кодировку, закодировать текст, длина списка — это число токенов.
pip install tiktokenimport tiktoken
enc = tiktoken.get_encoding('o200k_base')
text = 'Hello world'
tokens = enc.encode(text)
print(len(tokens)) # how many tokens the text is
enc. возвращает исходный текст — удобная проверка, что вы смотрите на тот же текст, который увидит модель. В README есть и tiktoken.: он выбирает токенизатор под конкретную модель OpenAI. Тут и подвох: токенизаторы привязаны к семействам моделей. Правило из README — примерно четыре байта текста на токен, и оно описывает токенизаторы OpenAI.
Что делать с DeepSeek? Брать тот же подсчёт как рабочую оценку и откалибровать его, как показано ниже.
Угадайте число
Сколько примерно токенов в английском тексте на 2 000 символов?
Ваш вариант
02 000
Показать ответ
Ответ: 500
Около 500. По правилу из README — четыре байта на токен, а простой английский текст — около байта на символ: 2 000 ÷ 4 = 500. Другие языки и эмодзи занимают больше байт на символ, поэтому те же 2 000 символов по этому правилу обычно дают больше токенов.
Влезает ли промпт в окно?#
У каждой модели есть окно контекста, и вход вместе с разрешённым ответом должен в него поместиться. Окна наших моделей: DeepSeek-V4-Flash — 380K, GLM-5.3-Flash — 390K, MiniMax-M2.7 — 180K токенов. Самый длинный ответ: 32 768 токенов у DeepSeek-V4-Flash и 8 192 у двух других (список моделей CheapTokens, 1 ноября 2026).
Страж перед вызовом — четыре строки:
CONTEXT = {
'deepseek-ai/DeepSeek-V4-Flash-0731': 380_000,
'zai-org/GLM-5.3-Flash': 390_000,
'MiniMaxAI/MiniMax-M2.7': 180_000,
}
def fits(prompt_tokens, max_tokens, model):
return prompt_tokens + max_tokens <= CONTEXT[model]Допустим, у вас документ на 250 000 токенов. fits(250_ вернёт False: отправляете задачу на модель с окном побольше или режете документ — и 400 не случается. fits(250_ вернёт True. Как выглядит сама ошибка, разобрано в статье запрос слишком длинный: 400 и 413, окно контекста и max_tokens.
Сколько это будет стоить?#
Теперь бюджет. Берёте один типичный элемент, считаете и умножаете. Допустим, вы сортируете 5 000 писем о заказах. Один показательный текст письма — около 800 токенов на входе, а метку и короткую причину вы ограничили 200 токенами на выходе. Итого: 5 000 × 800 = 4 000 000 входных токенов и 5 000 × 200 = 1 000 000 выходных.
Таблица ниже считает именно эту нагрузку по живым ценам, вход и выход вместе:
| Модель | Вход $/1M | Выход $/1M | За запрос | 5 000 запросов | OpenRouter, 5 000 запросов |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000024 | $0.12 | $0.217 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000032 | $0.16 | $0.42 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.00007 | $0.35 | $4.20 |
800 входных и 200 выходных токенов на запрос. Цены за 1M токенов актуальны и меняются вместе с нашими тарифами; столбец OpenRouter показывает справочные цены для той же нагрузки.
В сумме, с учётом входа и выхода, колонка CheapTokens для этих моделей дешевле OpenRouter. Подставьте свои три числа — и бюджет у вас есть до первого запроса. О разнице между двумя сторонами счёта — в статье входные и выходные токены: за что платит API, а реальные замеры — в сколько токенов уходит на запрос. Актуальные цены всегда на странице цен.

Сверьте оценку с usage#
Оценка — это догадка о чужом токенизаторе, так что один раз сверьте её с ответом. В каждом ответе есть поле usage, а usage. — то, сколько токенов на входе насчитал API. Поставьте два числа рядом и разделите.
Шаг за шагом
Запустите сравнение
Подготовка
Установите пакеты и положите ключ в переменную окружения. В сам скрипт его вставлять не нужно.
pip install tiktoken openai
export CHEAPTOKENS_API_KEY='your-key-here'Запуск скрипта
Сохраните как compare.py. Скрипт считает локально, отправляет запрос на https:/ и печатает оба числа. Идентификатор модели — полный, из списка моделей CheapTokens: сокращённые имена не принимаются.
import os
import tiktoken
from openai import OpenAI
MODEL = 'deepseek-ai/DeepSeek-V4-Flash-0731'
enc = tiktoken.get_encoding('o200k_base')
messages = [{'role': 'user',
'content': 'Classify this email as order, refund or other: Hi, my parcel from last Tuesday has not arrived yet.'}]
estimate = sum(len(enc.encode(m['content'])) for m in messages)
client = OpenAI(base_url='https://api.cheaptokens.dev/v1',
api_key=os.environ['CHEAPTOKENS_API_KEY'])
r = client.chat.completions.create(model=MODEL, messages=messages, max_tokens=200)
real = r.usage.prompt_tokens
print(f'estimate {estimate}, usage.prompt_tokens {real}, ratio {real / estimate:.2f}')Разберите разницу
Последняя строка печатает три числа. Скажем, выйдет estimate 24, usage.. Тогда свои будущие оценки умножайте на это отношение перед расчётом бюджета. Кроме того, настоящий промпт обёрнут в служебную разметку чата, поэтому реальный счёт может выйти чуть выше оценки по чистому тексту. Прогоните несколько типичных промптов, а не один, и возьмите среднее отношение.
Дальше привычка такая: оценить локально, проверить окно, применить свой коэффициент к бюджету, а usage в каждом ответе пусть держит вас в тонусе. Нужен суммарный счёт за всю работу? В статье учёт стоимости токенов агента в Python он строится на том же поле. Если ещё не подключались, начните с первого запроса к CheapTokens, а остальное есть в документации.
Найдите пары
Сопоставьте название и то, что оно показывает
Нажмите на элемент слева, затем на его пару
- len(enc.encode(text))Ваша локальная оценка размера входа
- usage.prompt_tokensРазмер входа так, как его насчитал API
- usage.completion_tokensРазмер ответа, считается по цене выхода
- max_tokensПотолок длины ответа, который вы закладываете при проверке окна
Считать токены дёшево, быстро и локально. Сделайте это до вызова, который стоит денег.



