Что такое токен
Используйте библиотеку tiktoken для токенизации реального текста и узнайте, как слова, знаки препинания и пробелы преобразуются в последовательности токенов в разных моделях.
«Что такое токен» — бесплатный урок AI Engineering Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Engineering Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Engineering Academy содержит 4 уроков всего.
LLM обрабатывают токены, а не слова
Когда Вы отправляете текст в LLM, модель видит не символы и не слова, а токены. Токен — это фрагмент текста, которому словарь модели сопоставляет один целочисленный ID. В зависимости от токенизатора токенами могут быть целые слова, части слов, знаки пунктуации или пробелы.
Понимание токенов имеет практическое значение: OpenAI взимает плату за токены, размер контекстного окна измеряется в токенах, а максимальная длина ответа задаётся параметром max_tokens. Неожиданности в стоимости и поведении почти всегда связаны с непониманием того, как Ваш текст разбивается на токены.
Как работает токенизация: BPE
Модели GPT используют токенизацию на основе кодирования пар байтов (BPE). BPE начинает со словаря отдельных байтов и итеративно объединяет наиболее часто встречающиеся соседние пары, пока не будет достигнут желаемый размер словаря. В моделях GPT от OpenAI используется словарь примерно из 100 000 токенов.
В результате распространённые слова становятся одним токеном (hello — это один токен), а редкие или выдуманные слова разбиваются на несколько субсловных токенов (subaqueous может превратиться в три токена: sub, aque, ous). Благодаря этому модель может обрабатывать любой текст, в том числе слова, которых она никогда не встречала, составляя их из небольших знакомых фрагментов.
Подсчёт токенов с помощью tiktoken
OpenAI предоставляет библиотеку tiktoken, которая позволяет токенизировать текст локально, не выполняя вызов API. Это необходимо для подсчёта токенов перед отправкой запроса, оценки стоимости и проверки того, что Вы укладываетесь в контекстное окно.
import tiktoken
# Get the encoding for a specific model
enc = tiktoken.encoding_for_model('gpt-4o')
text = 'Hello! How many tokens does this sentence use?'
tokens = enc.encode(text)
print(f'Text: {text}')
print(f'Token count: {len(tokens)}')
print(f'Token IDs: {tokens}')
# You can also decode tokens back to text
decoded = enc.decode(tokens)
print(f'Decoded: {decoded}')
# Inspect individual token strings
for token_id in tokens:
token_str = enc.decode([token_id])
print(f' Token {token_id}: "{token_str}"')Практическое количество токенов
Полезное эмпирическое правило: 1 токен ≈ 4 символа английского текста, или примерно 0,75 слова. Таким образом, 1 000 токенов — это приблизительно 750 слов или 3–4 страницы текста. Однако это соотношение существенно меняется:
- Распространённые английские слова: примерно 1 токен на слово
- Редкие технические термины: 2–4 токена на слово
- Числа: часто 1 цифра на токен (поэтому «12345» — это 5 токенов)
- Код: сильно зависит от содержания, но Python обычно эффективен — примерно 1–2 токена на символ
- Письменности не на основе латиницы (китайская, арабская): часто 1 токен на символ, поэтому одно слово обходится значительно дороже, чем в английском
Токенизация разных типов содержимого
Давайте рассмотрим с помощью tiktoken, как количество токенов сильно различается для разных типов содержимого.
import tiktoken
enc = tiktoken.encoding_for_model('gpt-4o')
examples = {
'English sentence': 'The quick brown fox jumps over the lazy dog.',
'Number sequence': '1234567890',
'Python code': 'def fibonacci(n):\n if n <= 1:\n return n\n return fibonacci(n-1) + fibonacci(n-2)',
'Technical jargon': 'autoregressive transformers tokenization subword BPE',
'URL': 'https://api.openai.com/v1/chat/completions',
'Chinese text': '大型语言模型使用令牌处理文本',
}
for label, text in examples.items():
count = len(enc.encode(text))
ratio = len(text) / count
print(f'{label}: {count} tokens ({ratio:.1f} chars/token)')Как токенизируются сообщения чата
Общее количество токенов в вызове API чата включает не только текст сообщений, но и служебные данные форматирования, добавляемые шаблоном чата. Каждое сообщение содержит несколько дополнительных токенов для метки роли и разделителей. В документации OpenAI указана следующая формула:
- Каждое сообщение добавляет примерно 4 токена служебных данных форматирования
- Каждый ответ начинается с 3 дополнительных токенов для задания роли помощника
Для коротких разговоров эти служебные данные несущественны, но в системах, управляющих длинными разговорами, они накапливаются. Библиотека tiktoken предоставляет вспомогательные функции для правильного подсчёта токенов во всём массиве сообщений.
import tiktoken
def count_messages_tokens(messages, model='gpt-4o'):
enc = tiktoken.encoding_for_model(model)
# 4 tokens per message (role + content structure), 3 for reply priming
total = 3
for msg in messages:
total += 4
for key, value in msg.items():
total += len(enc.encode(str(value)))
return total
messages = [
{'role': 'system', 'content': 'You are a helpful assistant.'},
{'role': 'user', 'content': 'What is the capital of France?'},
{'role': 'assistant', 'content': 'The capital of France is Paris.'},
{'role': 'user', 'content': 'And what is the population?'},
]
print(f'Total tokens: {count_messages_tokens(messages)}')Ограничения на количество токенов у моделей
У каждой модели есть максимальное контекстное окно, измеряемое в токенах. По состоянию на 2025 год показательные ограничения включают:
- gpt-4o: контекст из 128 000 токенов, до 16 384 токенов в результате
- gpt-4o-mini: контекст из 128 000 токенов, до 16 384 токенов в результате
- Claude 3.5 Sonnet: контекст из 200 000 токенов
- Gemini 1.5 Pro: контекст из 1 000 000 токенов
Сумма входных и выходных токенов не должна превышать размер контекстного окна. При превышении возникает ошибка context_length_exceeded. Перед отправкой запросов с длинными документами всегда проверяйте количество токенов.
Токены и тарификация
OpenAI отдельно взимает плату за входные токены (отправляемый Вами запрос) и выходные токены (получаемый Вами ответ). Выходные токены обычно в 3–4 раза дороже входных, поскольку требуют последовательной генерации. По состоянию на начало 2025 года ориентировочная стоимость для gpt-4o-mini составляет 0,15 доллара за миллион входных токенов и 0,60 доллара за миллион выходных токенов.
Это означает, что запрос из 2 000 токенов с ответом из 500 токенов стоит примерно ($0.15 × 2/1000 + $0.60 × 0.5/1000) = $0.00060 за запрос. При 10 000 запросов в день это 6 долларов в день — приемлемо, но стоимость растёт вместе с использованием. В рабочем масштабе важными становятся кэширование, выбор маршрута модели и сокращение количества токенов.
Сокращение количества токенов без потери смысла
Короткие запросы стоят дешевле и оставляют модели больше места для ответа. К распространённым методам сокращения количества токенов относятся:
- Удаляйте избыточные инструкции: «Будьте так любезны...» → «Пожалуйста...»
- Сжимайте примеры: используйте минимальное количество слов в каждом примере с несколькими вариантами
- Сокращайте названия полей в структурированных запросах: используйте «Q:» и «A:» вместо «Question:» и «Answer:»
- Используйте JSON вместо обычного текста для структурированного контекста: JSON эффективнее с точки зрения количества токенов, чем обычное текстовое описание тех же данных
Запускайте tiktoken до и после любого сжатия, чтобы убедиться, что токенов действительно стало меньше: некоторые виды «сжатия» парадоксальным образом увеличивают их количество.
Специальные токены и управляющие токены
Помимо текстовых токенов, словарь модели включает специальные токены, используемые для структурирования входных данных. Распространённые примеры: <|endoftext|> (обозначает конец документа), <|im_start|> и <|im_end|> (разделители сообщений чата в формате ChatML, используемом внутри системы).
При использовании API OpenAI Вам не нужно управлять ими напрямую — SDK делает это за Вас. Однако понимание их существования объясняет, почему запрос с «пустыми» сообщениями иногда всё равно расходует несколько токенов. Специальные токены также объясняют, почему нельзя создавать необработанные строки с шаблонами <|...|> во входных данных пользователя без предварительной очистки: они могут нарушить форматирование входных данных модели.
Всегда считайте токены перед отправкой
Практический вывод этого урока: всегда считайте токены перед отправкой любого запроса, в котором используются динамически собранные запросы. Напишите небольшую вспомогательную функцию-обёртку для tiktoken и вызывайте её в месте сборки массива сообщений. Записывайте количество токенов в журнал, чтобы отслеживать его изменения со временем.
Для систем RAG это особенно важно: извлечённые фрагменты, которые Вы добавляете в запрос, могут сильно различаться по размеру, поэтому необходимо следить, чтобы их общий объём оставался в пределах контекстного окна модели. Именно такую сборку контекста с учётом количества токенов мы реализуем в уроках о конвейере RAG.
import tiktoken
def token_count(text, model='gpt-4o'):
enc = tiktoken.encoding_for_model(model)
return len(enc.encode(text))
def safe_assemble_prompt(system, user_content, max_tokens=120000):
combined = system + user_content
count = token_count(combined)
if count > max_tokens:
raise ValueError(
f'Prompt too long: {count} tokens (limit {max_tokens})'
)
return [{'role': 'system', 'content': system},
{'role': 'user', 'content': user_content}]Быстрая проверка
Проверьте, насколько хорошо Вы поняли концепции инженерии ИИ из этого урока.
Итоги урока
В этом уроке Вы узнали, что LLM обрабатывают текст как токены, а не слова, используя токенизацию BPE со словарём примерно из 100 000 элементов, библиотека tiktoken позволяет локально считать токены перед вызовами API, чтобы оценивать стоимость и проверять ограничения контекста, а тарификация выполняется за токены, причём выходные токены значительно дороже входных. Далее мы рассмотрим контекстные окна: что это такое, как они ограничивают Ваше приложение и как сравниваются разные модели.
Часто задаваемые вопросы
Урок «Что такое токен» бесплатный?
Да — полный текст урока «Что такое токен» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Engineering Academy, подпишись на CoddyKit PRO. Курс AI Engineering Academy содержит 4 уроков всего.
Чему я научусь в уроке «Что такое токен»?
Используйте библиотеку tiktoken для токенизации реального текста и узнайте, как слова, знаки препинания и пробелы преобразуются в последовательности токенов в разных моделях. Ты практикуешь AI Engineering Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Engineering Academy?
Предыдущий опыт не требуется. AI Engineering Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Что такое токен»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Engineering Academy?
Да. Каждый урок AI Engineering Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Что такое токен
- Контекстные окна: размер и последствия
- Расчёт и прогнозирование стоимости API
- Стратегии соблюдения ограничений контекста