Токенизация
Модель не читает текст как человек — она работает с токенами. Понимание токенизации напрямую влияет на стоимость, качество и поведение модели.
Что такое токен
Токен — минимальная единица текста, с которой работает модель. Это не всегда слово — чаще всего часть слова, символ или пробел.
"Hello, world!" → ["Hello", ",", " world", "!"] → 4 токена
"привет" → ["пр", "ивет"] → 2 токена
"tokenization" → ["token", "ization"] → 2 токена
"2024" → ["2", "0", "2", "4"] → 4 токена
BPE — как строится словарь токенов
Большинство LLM используют Byte Pair Encoding (BPE):
- Начинаем с отдельных символов как базовых токенов
- Считаем самые частые пары символов в корпусе
- Объединяем самую частую пару в новый токен
- Повторяем до нужного размера словаря (обычно 50K–100K токенов)
Результат: частые слова → 1 токен. Редкие слова → много токенов.
"the" → 1 токен (очень частое)
"cat" → 1 токен (частое)
"concatenation" → ["con", "caten", "ation"] → 3 токена
"магнитопласт" → ["маг", "нито", "пласт"] → 3 токена
Практические следствия
Русский текст дороже английского
Кириллица занимает больше байт и хуже представлена в обучающих данных → больше токенов на тот же смысл.
| Фраза | EN токены | RU токены |
|---|---|---|
| "Hello, how are you?" | 6 | — |
| "Привет, как дела?" | — | 8 |
| Примерный коэффициент | 1x | 1.5–2x |
Практика: если пишешь промт на русском и ответ нужен на русском — стоимость вырастает примерно в 1.5–2 раза по сравнению с английским.
Числа токенизируются посимвольно
"42" → ["4", "2"] → 2 токена
"3.14159" → ["3", ".", "1", "4", "1", "5", "9"] → 7 токенов
"$1,000" → ["$", "1", ",", "0", "0", "0"] → 6 токенов
Из-за этого модели плохо считают "в уме" — каждая цифра обрабатывается отдельно.
Пробелы — часть токена
"cat" ≠ " cat" — это разные токены
Пробел перед словом обычно включается в токен следующего слова. Это важно при работе с форматированием.
Специальные символы разбиваются
"<|endoftext|>" → ["<", "|", "end", "of", "text", "|", ">"]
Специальные символы в промтах могут неожиданно разбиваться на много токенов.
Как считать токены
Быстрая оценка
~1 токен = 4 символа (английский)
~1 токен = 2–3 символа (русский)
1 000 токенов ≈ 750 слов (EN)
1 страница A4 ≈ 500–700 токенов (EN)
Точный подсчёт
OpenAI: библиотека tiktoken
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
tokens = enc.encode("Hello, world!")
print(len(tokens)) # 4
Anthropic: токенизатор похожий на cl100k, точный подсчёт через API:
client.messages.count_tokens(
model="claude-sonnet-4-5",
messages=[{"role": "user", "content": "Hello"}]
)
Онлайн: platform.openai.com/tokenizer
Стоимость токенов (ориентиры, 2025)
| Модель | Input ($/1M) | Output ($/1M) |
|---|---|---|
| GPT-4o | $2.50 | $10.00 |
| GPT-4o mini | $0.15 | $0.60 |
| Claude Sonnet 4.5 | $3.00 | $15.00 |
| Claude Haiku 4.5 | $0.25 | $1.25 |
| Gemini 1.5 Pro | $1.25 | $5.00 |
Output токены дороже input — модель генерирует их последовательно, это затратнее.
Как экономить токены
| Приём | Эффект |
|---|---|
| Короткий системный промт | Экономия на каждом запросе |
| Сжатый контекст истории | Обрезать старые сообщения |
| Убрать повторения в промте | -20–30% токенов |
| Prompt caching (Anthropic/OpenAI) | Повторные части промта дешевле |
| Структурированный вывод | Нет "рассуждений вслух" в ответе |
| Английский промт + русский ответ | Баланс качества и стоимости |
Токены и лимиты контекста
Лимит context window считается в токенах и делится между:
[System prompt] + [История] + [Новый запрос] + [Ответ модели]
↑
Тоже занимает место!
Если модель "заполнит" контекст — старые сообщения будут обрезаны или запрос завершится ошибкой.
Резюме
| Вопрос | Ответ |
|---|---|
| Что такое токен? | Часть слова, ≈4 символа EN |
| Русский vs английский? | RU в 1.5–2x дороже по токенам |
| Как посчитать? | tiktoken или онлайн-счётчик |
| Числа в токенах? | Посимвольно, отсюда плохой счёт у LLM |
| Как экономить? | Краткий промт, кэширование, history pruning |