Токен (token) — это единица, на которую токенизатор разбивает вход и выход модели. В документации OpenAI токены описаны как «building blocks» текста: один токен может быть символом, частью слова или целым словом, а пробелы и знаки препинания влияют на разбиение. Для Gemini токен — это гранулярность обработки ввода и вывода, причём токенизация относится не только к тексту, но и к изображениям и другим нетекстовым данным.
Главное практическое правило: токен почти никогда не стоит оценивать «на глаз». Точный счёт зависит от конкретной модели и encoding, поэтому OpenAI рекомендует проверять его через Tokenizer tool или tiktoken.encoding_for_model(model), а в Gemini и Vertex AI для этого предусмотрены count_tokens и models.countTokens.
Английский термин: token. Также встречается: единица токенизации, токен ввода, токен вывода. Рядом по смыслу, но не тождественно: токенизация.
Простыми словами
Грубо говоря, токены можно представить как кусочки, на которые система режет ваш ввод перед тем, как «понять» его. Это не обязательно слова целиком: слово может распасться на несколько частей, а короткий знак препинания или пробел — тоже повлиять на разбиение.
Если говорить совсем бытово, модель читает не готовые предложения, а конструктор из мелких элементов. Поэтому два текста одинаковой длины в символах могут давать разное число токенов, а один и тот же текст в разных моделях — тоже.
Как это работает
С технической точки зрения токенизатор — это отдельный компонент перед моделью. В документации Hugging Face Transformers он описан как часть pipeline, которая нормализует и делит текст, добавляет специальные токены, превращает результат в input_ids и при необходимости декодирует их обратно в текст.
- Нормализация входа. Текст приводится к форме, с которой работает конкретный tokenizer.
- Разбиение на части. Строка делится на токены. В современных системах это часто не слова, а subword-единицы.
- Преобразование в идентификаторы. Каждый токен сопоставляется с числовым ID из словаря.
- Передача модели. Уже эти ID попадают в трансформер и учитываются в контекстном окне.
- Обратное декодирование. Выходные ID преобразуются обратно в текст.
Текст / изображение / другой ввод
↓
tokenizer
↓
[token_1, token_2, token_3, ...]
↓
[id_1, id_2, id_3, ...]
↓
модель
↓
[output_id_1, output_id_2, ...]
↓
detokenization
↓
ответ модели
Почему токены часто бывают «кусочками слов»? Потому что subword-подход помогает работать с редкими словами и открытым словарём. Это классически показано в работе Sennrich и соавторов для neural machine translation. В практике токенизации используются разные алгоритмы: например, tiktoken у OpenAI описан как быстрый BPE-tokenizer, а SentencePiece реализует subword units, включая BPE и unigram language model, и позиционируется как language-independent.
Отсюда следует важная деталь: точное разбиение определяется не русским языком «вообще», а конкретным tokenizer и словарём модели. Поэтому ориентиры уровня «примерно 4 символа на токен» допустимы только как грубая оценка. В документации Gemini это прямо дано как rule of thumb и отдельно уточняется оценка порядка 60–80 английских слов на 100 токенов; переносить её один в один на русский текст нельзя.
Где применяется
- Проверка, влезет ли запрос в модель. Перед отправкой длинного промпта, истории чата или документов считают токены, чтобы не превысить лимит контекстного окна.
- Учёт потребления в API. В Gemini
usageвозвращает детальные счётчики: input, output, thought, cached, tool use и total tokens. Это полезно для отладки, контроля расходов и анализа цепочек вызовов. - Биллинг и кэш. По документации Gemini API биллинг основан, среди прочего, на счётчиках input, output и cached tokens. Актуальные условия free tier, paid tier и возможные требования к prepaid-плану зависят от региона, аккаунта и даты, поэтому в продукте это нужно перепроверять на официальной странице.
- Обучение моделей. На этапе претрейнинга корпус сначала превращают в токены и ID, а уже затем подают в модель. Без этого трансформер не работает с сырой строкой.
- Мультимодальный ввод. В Gemini токенизация относится ко всему вводу, включая текст, изображения и другие нетекстовые данные. Поэтому «сколько стоит запрос» и «сколько места он занимает» в таких сценариях нельзя оценивать только по длине текста.
Практический пример
Если вы работаете с OpenAI-совместимой моделью, безопасный базовый сценарий — считать токены программно до отправки запроса. В README проекта tiktoken показан вызов encoding_for_model("gpt-4o").
import tiktoken
text = "Ваш промпт или фрагмент диалога"
enc = tiktoken.encoding_for_model("gpt-4o")
token_ids = enc.encode(text)
count = len(token_ids)
print(count)
Что здесь важно:
- Вы выбираете encoding не «вообще BPE», а под конкретную модель через
encoding_for_model(...). - Счёт идёт по результату
encode(), а не по словам или символам. - Если вы меняете модель, число токенов может измениться.
Для Gemini практический сценарий такой же по смыслу: сначала вызвать count_tokens, затем сравнить результат с вашим лимитом и только потом отправлять основной запрос. В корпоративных сценариях Google Cloud/Vertex AI для этого документирован REST-метод models.countTokens. Это удобнее, чем строить собственные приближённые калькуляторы.
Чем отличается от…
| Термин | Что это | Чем отличается от токена |
|---|---|---|
| Символ | Отдельная буква, цифра, пробел или знак | Токен не равен символу: один токен может включать несколько символов, а пунктуация и пробелы влияют на разбиение. |
| Слово | Лексическая единица языка | Токен не равен слову: слово может стать одним токеном или распасться на несколько частей. |
| Токенизация | Процесс разбиения входа на токены | Токен — результат, токенизация — процедура. Их часто путают, но это не одно и то же. |
| Контекстное окно | Максимальный объём входа/истории, который модель может учитывать | Контекстное окно измеряется токенами, но само по себе токеном не является. |
Ограничения и заблуждения
- Заблуждение: «один токен = одно слово». Нет. Официальные источники OpenAI прямо указывают, что токен может быть символом, частью слова или словом целиком.
- Заблуждение: «если я знаю число символов, я знаю число токенов». Нет. Даже ориентир Gemini «около 4 символов на токен» — это только грубое правило, а не точный расчёт.
- Заблуждение: «у разных моделей один и тот же текст всегда имеет одинаковый счёт». Нет. Точный результат зависит от модели и encoding.
- Заблуждение: «текст — единственное, что токенизируется». Для Gemini это неверно: документация относит токенизацию ко всему вводу, включая изображения и другие нетекстовые данные.
- Ограничение практики: релизы tokenizer-библиотек, версии SDK и правила биллинга меняются. В source pack отдельно отмечено, что версии
tiktokenи условия Gemini billing нужно перепроверять перед фиксацией в документации или продукте.
Практический вердикт. Если вы проектируете промпты, агентные пайплайны или бюджеты на API, считайте токены только штатным инструментом конкретной модели:
tiktoken,count_tokensилиmodels.countTokens. Оценка «на глаз» годится лишь для очень грубого планирования.Редакционное ограничение. Эта статья сознательно не приводит фиксированные цены, лимиты контекста и универсальные коэффициенты для русского текста: supplied sources подчёркивают, что такие значения зависят от модели, encoding, API, региона и даты проверки.
Связанные термины и инструменты
Чтобы лучше понять тему, полезно отдельно разобрать токенизацию, контекстное окно, архитектуру трансформера и претрейнинг. Из инструментов для практики в источниках этой статьи фигурируют tiktoken, Hugging Face Tokenizers, SentencePiece, Gemini count_tokens и Vertex AI models.countTokens.
Источники
- What are tokens and how to count them? | OpenAI Help Center
- GitHub – openai/tiktoken
- Understand and count tokens | Gemini API | Google AI for Developers
- Billing | Gemini API | Google AI for Developers
- Method: models.countTokens | Gemini Enterprise Agent Platform | Google Cloud Documentation
- Tokenizers | Hugging Face
- Fast tokenizers | Hugging Face Transformers
- GitHub – google/sentencepiece
- Neural Machine Translation of Rare Words with Subword Units
Вопросы и ответы
Токен — это слово?
Нет. По официальному описанию OpenAI токен может быть символом, частью слова или словом целиком. Именно поэтому подсчёт «по словам» обычно неточен.
Почему один и тот же текст даёт разное число токенов в разных моделях?
Потому что модели используют разные encoding и словари. Для точного результата нужно считать токены инструментом, привязанным к конкретной модели.
Можно ли заранее примерно оценить число токенов?
Да, но только грубо. В документации Gemini есть ориентир порядка 4 символов на токен и 60–80 английских слов на 100 токенов, однако это не универсальное правило и не точный расчёт для русского текста.
Зачем считать токены до запроса?
Чтобы не выйти за пределы контекстного окна, понять ожидаемое потребление API и избежать ошибок в длинных промптах или мультимодальных запросах.
Чем отличаются count_tokens и usage в Gemini?
count_tokens помогает посчитать токены во входе до отправки запроса, а usage возвращает детальные счётчики уже по факту обработки: input, output, thought, cached, tool use и total tokens.