Обзор
Токены — это единицы, с помощью которых модели OpenAI обрабатывают текст. Токен может представлять символ, часть слова, целое слово или знак препинания. Пробелы также влияют на деление текста на токены.
Количество токенов не совпадает с количеством слов. Один и тот же текст может содержать разное количество токенов в зависимости от модели, её кодировки и языка.
Как текст преобразуется в токены
При отправке текста модели:
Текст делится на токены.
Модель обрабатывает эти токены.
Модель генерирует выходные токены. К ним относятся полученный вами текст, а для моделей рассуждений — ещё и внутренние токены рассуждений, которые не отображаются в тексте ответа.
Приблизительные оценки для английского текста
Эти оценки помогут определить объём английского текста:
1 токен — это примерно 4 символа.
1 токен — это примерно три четверти слова.
100 токенов — это примерно 75 слов.
Это приблизительные, а не точные значения. Длина предложений и абзацев различается, а в других языках соотношение символов, слов и токенов может быть иным.
Учёт пробелов и регистра
Слово может делиться на разные токены в зависимости от написания, регистра и окружающего текста.
Например, red, Red и red — не идентичные строки: в последнем примере есть пробел в начале. Кодировка может представлять их по-разному.
Идентификаторы токенов также зависят от кодировки. Не считайте, что приведённый в примере идентификатор токена применим к каждой модели.
Различия между входными и выходными токенами
| Категория | Описание |
| Входные токены | Токены, переданные модели в запросе. Их также называют токенами промпта. |
| Выходные токены | Токены, сгенерированные моделью. В Chat Completions они называются токенами завершения. |
| Кэшированные входные токены | Входные токены, повторно используемые благодаря кэшированию промптов. Их цена может отличаться от цены некэшированных входных токенов. |
| Токены рассуждений | Токены, которые модель рассуждений использует внутри системы перед созданием видимого ответа. |
Токены рассуждений не отображаются в тексте ответа, но учитываются как выходные токены и оплачиваются по тарифу для них.
Поэтому короткий видимый ответ может использовать больше токенов, чем можно предположить по отображаемому тексту.
Подсчёт токенов перед отправкой запроса
Подсчёт токенов в обычном тексте
Используйте токенизатор, чтобы увидеть, как текст делится на токены.
Для программной токенизации обычного текста используйте tiktoken. Выберите кодировку для целевой модели, например с помощью tiktoken.encoding_for_model(model).
Количество токенов в обычном тексте не обязательно включает все токены в запросе API. На общее количество входных токенов могут влиять структура сообщений, инструменты, схемы, изображения и файлы.
Подсчёт полного ввода Responses
Для полного ввода Responses API используйте API подсчёта входных токенов.
Он принимает форматы ввода Responses, включая сообщения, изображения, файлы, инструменты и беседы. При подсчёте учитываются токены форматирования структуры запроса, например роли и границы сообщений.
Количество входных токенов не позволяет предсказать, сколько выходных токенов сгенерирует модель.
Проверка фактического использования токенов
После запроса проверьте сведения об использовании. Названия полей зависят от конечной точки:
Chat Completions сообщает значения prompt_tokens, completion_tokens и total_tokens.
Responses сообщает значения input_tokens, output_tokens и total_tokens.
Динамику активности также можно посмотреть на панели Usage. Инструкции, в том числе по учёту потоковой передачи, см. в статье «Просмотр использования API и расходов».
Соблюдение ограничений модели
Проверьте в документации модели размер её контекстного окна и максимальный объём вывода. Эти ограничения могут различаться в зависимости от модели.
Контекстное окно ограничивает количество токенов, с которыми модель может работать в одном запросе. У моделей также есть ограничение на объём вывода. При работе с моделями рассуждений оставляйте место как для токенов рассуждений, так и для видимого ответа.
Если входные данные слишком велики, можно:
Сократить или переформулировать промпт.
Удалить ненужный или повторяющийся контекст.
Разделить большие входные данные на более мелкие части.
Обобщить или предварительно обработать текст перед отправкой.
Используйте настройку количества выходных токенов, которую поддерживают ваша конечная точка и модель. Chat Completions использует max_completion_tokens, а Responses — max_output_tokens.
Эти ограничения на размер запроса не связаны с ограничениями частоты запросов API и месячными лимитами использования или расходов. Ознакомьтесь с документацией используемой модели.
Цены на токены
При тарификации API по токенам ставка зависит от модели и категории токенов. Цены на входные, кэшированные входные и выходные токены могут различаться. Для других возможностей API могут применяться иные единицы тарификации.
Актуальные тарифы см. на странице цен на API.
Сравнивая модели, учитывайте общее количество токенов и стоимость выполнения задачи. Более низкая цена за миллион токенов не обязательно означает меньшую общую стоимость: модели могут по-разному токенизировать один и тот же текст и генерировать разный объём вывода или рассуждений.
Тестируйте типичные задачи, а не сравнивайте только видимую длину ответа.
Учёт нескольких вариантов завершения
Если конечная точка и модель поддерживают создание нескольких вариантов завершения, дополнительные варианты также расходуют токены.
В Chat Completions значение n больше 1 создаёт несколько вариантов. Плата взимается за токены, сгенерированные во всех этих вариантах.
В устаревшем Completions API параметр best_of может создавать кандидаты, которые возвращаются не все. Например, best_of = 3 может сгенерировать среди кандидатов до 3 × max_tokens токенов завершения.
Эти параметры зависят от конечной точки. Не считайте, что n или best_of поддерживается другим API или моделью.
