跳到正文
docai.cc

DOCAI · 概念 · L2

分词器是什么,为什么中文更费 token

一句话定义

把文本切成 token 的那套规则;不同模型的词表不同,同一段文字算出来的 token 数也不同。

开发者更新 2026-11-13核验 2026-11-13 · docai 编辑部

模型看到的是 token,不是字

文本进入模型前,先被分词器切成 token:可能是整词、词的一部分、 一个汉字、甚至一个字节。模型只处理 token 序列,价格和上下文长度也都按 token 算。

所以「我这段只有 500 字,为什么算出来 900 token」不是 bug, 是你数的单位和模型数的单位不一样。

不同文字的密度

大致经验(不同模型差异较大,仅供估算):

内容 大约多少 token
英文散文 1 token ≈ 4 个字符
中文 常见 1 个字 ≈ 1 个 token,生僻字可能更多
代码 受符号和缩进影响,通常比同长度英文更费
数字与 JSON 标点、括号、键名都会各占 token

中文更费,是因为多数词表以英文语料为主,一个汉字常被切成一个甚至多个 token; 而英文的常见词往往一个词就是一个 token。

怎么准确知道

不要靠字数换算,直接用对应的分词工具:

  • OpenAI 系模型可以用 tiktoken 计算;
  • 其他开源模型用 Hugging Face 的 tokenizers,加载对应模型的词表;
  • 商用 API 通常在响应里返回 usage,那是唯一权威的计费数字。

换模型就要重新算:词表不同,同一段文字的 token 数可能差 20% 以上。

对实践的三个影响

  1. 成本:输入按 token 计费,中文内容多时,账单会比按字数估的高。
  2. 上下文:上下文窗口以 token 为单位,中文能放的字数比英文少。
  3. 截断:按字符截断可能把一个 token 切断,最好按 token 数截。

常见误解

  • 「一个汉字一个 token」:常见但不绝对,标点和生僻字会让比例变化。
  • 「所有模型的 token 一样」:词表不同,计数不同,价格也不同。
  • 「token 等于单词」:不是,一个单词可能被切成多个 token。

下一步

来源

定义与事实以以下来源为准;表述与取舍是本站整理的。
  1. [1]GitHub · openai/tiktoken
  2. [2]Hugging Face · Tokenizers

相邻概念