0Pricing
AI Engineering Academy · Урок

Что такое токен

Используйте библиотеку 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 — локальная установка не требуется.

Все уроки этого курса

  1. Что такое токен
  2. Контекстные окна: размер и последствия
  3. Расчёт и прогнозирование стоимости API
  4. Стратегии соблюдения ограничений контекста
← Назад к AI Engineering Academy