VibeCafé
· 通用

一个 Token 是多少汉字?1M 上下文是多少字?换算表 + 切词原理

直接给答案:中文约 1.9 token 一个字,也就是 1 个 token 约半个汉字;1M token 的上下文大约装得下 52 万汉字或 77 万英文单词。这篇给你一张可以直接抄的换算表,再讲清楚为什么是这个数。

「一个 Token 是多少汉字?」直接给答案:中文约 1.9 个 token 一个字,倒过来就是 1 个 token 约等于半个汉字;英文约 1.3 个 token 一个单词。所以模型说的「1M 上下文」大约装得下 52 万汉字,或 77 万英文单词。

一张换算表,可以直接抄走:

Token 数 ≈ 中文 ≈ 英文
1K 530 字 770 词
20K 1 万字 1.5 万词
100K 5.3 万字 7.7 万词
200K 10.5 万字 15 万词
1M 52 万字 77 万词

下面讲这个系数是怎么来的——顺便说下为什么网上常见的「1 token = 4 个字符」「1 token = 0.75 个英文单词」不能用:那是 OpenAI 在 2023 年给的粗略估算,对当代切词器(GPT-5 系列、Claude 5 系列)误差不小。

Token 是子词单元,不是字也不是单词

模型不直接看你的字符。它看的是切词器(tokenizer)切出来的 ID 序列。切词器是一个把文本切成最优子词单元的算法,主流方案叫 BPE(Byte Pair Encoding)。

BPE 的核心思想是:高频出现的字符组合合并成一个 Token,低频的拆开。这就解释了为什么:

  • the 是 1 个 Token(高频)
  • theology 是 2 个 Token(拆成 theology
  • qzxabc 可能是 4-5 个 Token(极低频,几乎逐字符切)

中文情况差不多。常见汉字一字一 Token,生僻字可能要拆成 UTF-8 字节再合并,于是一个字占 2-3 个 Token。

实测几个具体例子

我用 OpenAI 的 tiktoken(cl100k_base,GPT-4 / GPT-5 系列用的切词器)和 Anthropic 的切词器分别跑了一遍,结果差不多:

输入 OpenAI tokens Anthropic tokens
Hello 1 1
Hello, world! 4 4
Hello, world! 重复 100 次 约 400 约 400
helloworld(连写) 3 3
「你好」 2 2
「你好世界」 4 4
「写一个排序算法」 8 8
「龘靐齉龖」(生僻字) 12 12
一段 1000 字的中文段落 约 1900 约 1900
一段 1000 字(英文 word 计数)的英文段落 约 1300 约 1300

几个关键观察:

英文:约 1.3 个 Token / 单词,约 0.25 个 Token / 字符。 写得越普通、越口语,Token 数越接近字符数 / 4。代码、缩写、连写词会让密度变高。

中文:约 1.9 个 Token / 字。 几乎可以粗算「Token 数 ≈ 中文字数 × 2」。这意味着同样意思的一句话,中文消耗大概是英文的 1.5 倍。

代码:偏紧凑。 因为变量名往往是高频英文 subword 的组合,500 行 TypeScript 大概是 5000-7000 Token。

JSON:偏松散。 因为引号、冒号、缩进都是 Token,大量短键值对的 JSON 比同样信息量的 yaml 贵 30% 左右。

为什么这件事对账单影响大

如果你的 Prompt 是 1000 个英文单词,按上面数字大概是 1300 Token。同样意思用中文写大概要 1900 Token。差 600 Token——按 Claude Sonnet 输入价 3 美元 / 百万计算,单次差 0.18 美分。

听上去微不足道,但 Claude Code 这种工具一天可能跑几百次模型调用,每次都包含一份完整的系统提示。如果你能把系统提示从中文改成英文(或者反过来),一个月下来可能省一两百块。

更现实的影响在 Agent 类工具上。Codex CLI 这种 Agent 在一次任务里可能调用模型 100 次以上,每次都把整个上下文发回去。上下文里如果有大段中文项目说明、AGENTS.md 之类的文件,就会被重复发送 100 次——这部分 Token 会被反复计费(虽然有缓存,但不是 100% 命中)。

我自己的项目里有一份 5000 字的中文项目背景说明,这意味着每次 Codex 调用都要扛 9500 个输入 Token 的开销。

具体场景的省字诀

如果你想知道自己项目里最烧 Token 的字段是哪些——

中文长文档、长代码注释、长报错消息、大块 JSON 配置,这四种是最常见的"Token 黑洞"。前两者你能控制,后两者很多时候是工具决定的(比如 Claude Code 本身就会把 git 状态、文件树这些塞进上下文)。

具体每个项目消耗大头在哪,打开 Vibe Usage 按项目看 Token 分布——你装一下就知道了。它能精确到每个项目、每天烧了多少 Token,哪些项目突然冒尖一目了然。

我自己的发现是:那个我以为是"小项目"的 README 仓库,因为有一份 8000 字的中文 README 和大量重复打开关闭的 session,居然占了我一个月消耗的 35%。看到这个数字之后我立刻把 README 拆成了多份文件,按需引用。

怎么估自己的 Token 数

最简单的离线估算法:

  • 中文:字数 × 2
  • 英文:单词数 × 1.3
  • 中英混排:字符数 × 0.5

更准的办法是用 tiktoken playground 把你的实际 Prompt 粘进去,看真实切词结果。

但说实话——「一个 token 多少汉字」这种换算做得再熟,你还是不知道自己一天总共烧了多少。最后还是要靠工具汇总。我个人从手工估算到 用 Vibe Usage 看真实消耗 之间隔了大半年,多花了不少冤枉钱。早装早安心。

相关阅读