分词器

分词器(tokenizer)是一种工具,用于将一段文本拆分为更小的单元,这些单元称为 token(词元)。这些 token 可以是完整的单词,也可以是单词的一部分,例如前缀、后缀或标点符号。一般经验法则是:一个 token 大致对应 3~4 个字符。

SillyTavern 提供了一个“最佳匹配(Best match)”选项,它会根据所使用的 API 提供商,按照以下规则尝试匹配分词器。

文本补全 API (可覆盖)

  1. NovelAI Clio:NerdStash 分词器。
  2. NovelAI Kayra:NerdStash v2 分词器。
  3. 文本补全:API 分词器(若支持)或 Llama 分词器。
  4. KoboldAI Classic / AI Horde:Llama 分词器。
  5. KoboldCpp:模型 API 分词器。

如果结果不准确,或者你希望进行试验,可以为 SillyTavern 设置一个 覆盖分词器,供其在对 AI 后端发起请求时使用:

  1. None(无)。每个 token 估算为约 3.3 个字符,并向上取整为最接近的整数。如果你的提示词在较高上下文长度下被截断,请尝试此项。 KoboldAI Lite 采用此方式。
  2. Llama 分词器。用于 Llama 1/2 模型家族:Vicuna、Hermes、Airoboros 等。如果你使用 Llama 1/2 模型,请选择此项。
  3. Llama 3 分词器。用于 Llama 3/3.1 模型。如果你使用 Llama 3/3.1 模型,请选择此项。
  4. NerdStash 分词器。用于 NovelAI 的 Clio 模型。如果你使用 Clio 模型,请选择此项。
  5. NerdStash v2 分词器。用于 NovelAI 的 Kayra 模型。如果你使用 Kayra 模型,请选择此项。
  6. Mistral V1 分词器。用于较旧的 Mistral 模型家族及其微调版本。如果你使用较旧的 Mistral 模型,请选择此项。
  7. Mistral Nemo 分词器。用于 Mistral Nemo 模型家族及其微调版本。如果你使用 Mistral Nemo/Pixtral 模型,请选择此项。
  8. Yi 分词器。用于 Yi 模型。如果你使用 Yi 模型,请选择此项。
  9. Gemma 分词器。用于 Gemini/Gemma 模型。如果你使用 Gemma 模型,请选择此项。
  10. DeepSeek 分词器。用于 DeepSeek 模型(如 R1)。如果你使用 DeepSeek 模型,请选择此项。
  11. API 分词器。向生成 API 发起查询,直接从模型获取 token 计数。已知支持的后端有:Text Generation WebUI (ooba)、koboldcpp、TabbyAPI、Aphrodite API。如果你使用的是受支持的后端,请选择此项。

聊天补全 API (不可覆盖)

  1. OpenAI:通过 tiktoken 实现的、与模型相关的分词器。
  2. Claude:通过 WebTokenizers 实现的、与模型相关的分词器。
  3. OpenRouter:为各自的模型使用 Llama、Mistral、Gemma、Yi 分词器。
  4. Google AI Studio:Gemma 分词器。
  5. AI21 API:Jamba 分词器(需一次性下载)。
  6. Cohere API:Command-R 或 Command-A 分词器(需一次性下载)。
  7. MistralAI API:Mistral V1 或 V3 分词器(需一次性下载)。
  8. DeepSeek API:DeepSeek 分词器(需一次性下载)。
  9. 回退分词器:GPT-3.5 turbo 分词器。

附加分词器

这些分词器由于体积较大,未包含在默认安装中。首次使用时需要进行一次性下载。

  1. Qwen2 分词器。
  2. Command-R / Command-A 分词器。用于聊天补全中的 Cohere 来源。
  3. Mistral V3 (Nemo) 分词器。用于聊天补全中的 MistralAI 来源(Nemo 与 Pixtral 模型)。
  4. DeepSeek (deepseek-chat) 分词器。用于聊天补全中的 DeepSeek 来源。

如果你不希望从网络下载,可以在 config.yaml 中通过 enableDownloadableTokenizers 选项退出下载:将其设为 false 即可禁用下载。

你也可以从 SillyTavern-Tokenizers 仓库手动下载分词器。下载 JSON 文件后,将它们放入数据根目录下的 _cache 子目录中,默认路径为 ./data/_cache。如果该目录不存在,请自行创建。完成后,重启 SillyTavern 服务器以重新初始化分词器。

如果所需的分词器模型未被缓存且下载已被禁用,则使用回退分词器(Llama 3)进行计数。

Token 填充

除非 SillyTavern 使用的是运行模型的远端后端 API 所提供的分词器,否则在生成提示词期间所假定的所有 token 计数都是根据所选的分词器类型估算出来的。

由于在上下文大小接近模型定义的最大值时,分词结果可能不准确,因此提示词的某些部分可能会被裁剪或丢弃,这可能会对角色定义的连贯性产生负面影响。

为防止出现这种情况,SillyTavern 会将上下文大小的一部分分配为填充(padding),以避免添加超过模型所能容纳的聊天条目。如果你发现即使选择了最匹配的分词器,提示词的某些部分仍被裁剪,请调整填充量,使描述不被截断。

你可以输入负值以实现反向填充,从而允许分配超过所设最大 token 数量的额度。