Перейти к основному содержимому

Токенизация

Подсчёт токенов выполняется локально через реестр токенизаторов, который поддерживает tiktoken-совместимые токенизаторы, SentencePiece, JSON от Hugging Face и модельно-специфичные плагинные токенизаторы, с явным приближённым резервным решением.

Локальный подсчёт

Подсчёт токенов никогда не покидает машину. Реестр выбирает профиль токенизатора для активной модели, и конвейер считает собранный контекст внутри процесса до любого сетевого запроса.

Реестр токенизаторов

Реестр принимает четыре вида токенизаторов:

  • Tiktoken-совместимые — BPE-токенизаторы, совместимые с OpenAI tiktoken, для семейств моделей OpenAI.
  • SentencePiece — модели, поставляющие словари SentencePiece.
  • JSON-токенизатор Hugging Face — файлы tokenizer.json из репозиториев Hugging Face, преобразованные в компактный формат рангов.
  • Модельно-специфичные плагины — провайдерные плагины могут регистрировать точный профиль токенизатора для модели.

Для моделей без зарегистрированного токенизатора существует приближённое резервное решение, и оно всегда помечается явно, поэтому интерфейс никогда не выдаёт оценку за точный подсчёт.

Встроенные профили

Ядро регистрирует офлайн-профили для распространённых семейств:

  • openai:o200k_base — семейства GPT-4o, GPT-4.1, GPT-5, o1, o3 и o4.
  • openai:cl100k_base — GPT-4, GPT-3.5 Turbo и text-embedding-3.
  • deepseek:bytelevel-bpe-v1 — семейства DeepSeek. Подсчёт выполняется через компактный движок только для подсчёта (перенос BPE-слияний без словаря и без декодера) поверх рангов официального tokenizer.json. Файл один раз преобразуется в небольшой файл рангов, кэшируемый в data/cache/tokenizers/deepseek-v4-flash/ через атомарные записи temp-plus-rename; полный JSON и библиотека токенизатора рантайма не хранятся и не загружаются.

Если сеть недоступна, профиль DeepSeek честно переключается на приближённый профиль и повторяет попытку не чаще одного раза за 15 минут — отсутствующий токенизатор никогда не блокирует генерацию.

Приближённое резервное решение

Неизвестные локальные модели используют approximate-character-v1 — эвристику с учётом письменности: примерно 4.6 символа на токен для латиницы, 4.0 для кириллицы, 1.7 для CJK и 2.0 для цифр. Приближение помечается везде, где появляется, а провайдерный плагин может в любой момент заменить его, зарегистрировав точный профиль.

Плагинные профили

Плагины регистрируют профили токенизаторов с приоритетом. Плагинный профиль с приоритетом выше -10 переопределяет семейный профиль для покрываемых им моделей. Выбранный профиль передаётся в конвейер как countTokens, tokenizerProfile и tokenizerApproximate.

Результат бюджета токенов

После подсчёта конвейер предоставляет PipelineResult.tokenBudget, который содержит:

  • использованный профиль токенизатора;
  • флаг approximate;
  • лимит контекста модели;
  • зарезервированное место под ответ;
  • итоговое количество токенов промпта.

О том, как соблюдается бюджет, см. Контекст-шифтинг.