
Token 与字节的区别:AI 大模型到底怎么读你的文字
Token 与字节的区别:AI 大模型到底怎么读你的文字#
你给 GPT-5 发了一句"你好 Hello"——7 个字符。但模型实际处理的是 2 个 Token,而你的账单也是按 Token 收费的。
与此同时,你的电脑把这句话存储为 12 个字节。
那么字节、字符、单词和 Token 到底有什么区别?为什么 AI 不直接读字节?为什么同一句话,中文比英文更贵?
这篇文章从最底层讲起,带你看清从硬盘上的字节到 AI 实际处理的 Token 的完整链路。
从最底层开始:什么是字节#
字节(Byte) 是计算机存储数据的最小单位。1 字节 = 8 位(bit)= 一个 0 到 255 之间的数字。
当你把文字保存到文件时,计算机会按照 UTF-8 编码标准,把每个字符转换成字节:
| 字符 | UTF-8 字节 | 字节数 | 十六进制 |
|---|---|---|---|
H | 72 | 1 | 48 |
e | 101 | 1 | 65 |
你 | 228, 189, 160 | 3 | e4 bd a0 |
好 | 229, 165, 189 | 3 | e5 a5 bd |
🚀 | 240, 159, 154, 128 | 4 | f0 9f 9a 80 |
规律很清楚:
- 英文字母:1 个字节
- 中日韩字符:3 个字节
- Emoji:4 个字节
所以"你好 Hello"存储为 12 个字节:
你 好 空格 H e l l o
e4 bd a0 e5 a5 bd 20 48 65 6c 6c 6f
(3字节) (3字节) (1) (1) (1) (1) (1) (1) = 12 字节
字节是计算机存储文本的方式。但 AI 模型并不直接读字节。
四级阶梯:字节 → 字符 → 单词 → Token#
同一段文本,有四种不同粒度的拆分方式:
英文示例:"Hello, World"
| 层级 | 拆分结果 | 数量 | 说明 |
|---|---|---|---|
| 字节 | 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 | 12 | 原始存储单位 |
| 字符 | H e l l o , ␣ W o r l d | 12 | 人类可读的字母 |
| 单词 | Hello, World | 2 | 按空格分割 |
| Token | Hello , World | 3 | AI 实际处理的单位 |
中文示例:"你好世界"
| 层级 | 拆分结果 | 数量 | 说明 |
|---|---|---|---|
| 字节 | e4 bd a0 e5 a5 bd e4 b8 96 e7 95 8c | 12 | 每个汉字 3 字节 |
| 字符 | 你 好 世 界 | 4 | 每个字就是一个字符 |
| 单词 | 你好 世界 | 2 | 按语义分词 |
| Token | 你好 世界 | 2 | 取决于 tokenizer |

核心结论:Token 不是字节,不是字符,也不是单词。 它是一种介于字符和单词之间的"子词"单位,是效率和覆盖率的最佳平衡点。
为什么不直接用字节或单词?#
既然字节和单词更简单,为什么 AI 要发明 Token 这个概念?因为两个极端都有严重问题。
字节的问题:序列太长#
"Hello"是 5 个字节,一篇 1000 字的文章是约 5000 个字节,一本小说是 50 万个字节。
AI 模型需要计算序列中每个位置之间的关系(注意力机制),计算量随序列长度呈平方增长(O(n²))。序列翻倍 → 计算量翻四倍。
如果直接用字节,序列会比 Token 长 3-4 倍,AI 的运行成本将高得离谱。
单词的问题:词表爆炸#
英语常用词超过 17 万个,加上技术术语、人名、URL、代码和其他语言,词表可能膨胀到数百万。
巨大的词表意味着:
- 嵌入表(embedding table)占用海量内存
- 大多数词出现频率极低,模型根本学不好
- 任何不在词表中的词完全无法处理(OOV 问题)
Token:最佳平衡点#
Token 把文本拆分成子词单元——比字节大,比单词小:
"unbelievable" → ["un", "bel", "ievable"] (3 个 Token)
"tokenization" → ["Token", "ization"] (2 个 Token)
"Hello" → ["Hello"] (1 个 Token —— 足够常见,保留完整)
"你好" → ["你好"] (1 个 Token —— 高频词组合为一个)
这样既保证了短序列(高效处理),又维持了小词表(约 10-20 万条),还不会遇到未知词(任何文本都能拆成已知的子词)。
BPE 分词算法:Token 是怎么产生的#
几乎所有主流大模型都用 BPE(Byte Pair Encoding,字节对编码) 算法来构建 tokenizer。原理并不复杂:
第一步:拆成单个字符#
把训练语料中的所有文本拆成最小单位:
"low" → ["l", "o", "w"]
"lower" → ["l", "o", "w", "e", "r"]
"newest" → ["n", "e", "w", "e", "s", "t"]
第二步:统计最高频的相邻对#
扫描所有相邻字符对,找出出现次数最多的:
("l", "o") 出现 2 次 ← 最高频
("o", "w") 出现 2 次
("e", "w") 出现 1 次
...
第三步:合并最高频的对#
把所有 ("l", "o") 替换为新 Token "lo":
"low" → ["lo", "w"]
"lower" → ["lo", "w", "e", "r"]
第四步:重复数万次#
不断统计、合并,直到达到目标词表大小(通常 5-20 万)。
经过大量合并后,"the"、"Hello"、"你好"这些高频词会变成单个 Token,而罕见词则被拆成多个子词片段。

用 tiktoken 亲手验证#
你可以用 OpenAI 的 tiktoken 库查看 GPT-5 实际的分词结果:
import tiktoken
# o200k_base 是 GPT-4o / GPT-5 使用的 tokenizer
enc = tiktoken.get_encoding("o200k_base")
text = "你好 Hello"
tokens = enc.encode(text)
token_strings = [enc.decode([t]) for t in tokens]
print(f"原文: {text}")
print(f"UTF-8 字节数: {len(text.encode('utf-8'))}")
print(f"Token 数 ({len(tokens)}): {token_strings}")
print(f"Token ID: {tokens}")
实测输出:#
原文: 你好 Hello
UTF-8 字节数: 12
Token 数 (2): ['你好', ' Hello']
Token ID: [177519, 32949]
12 个字节压缩成了 2 个 Token。这就是 BPE 的威力——高频词组会被合并成单个 Token,大幅缩短序列长度。
不同模型,不同 Tokenizer#
每个 AI 模型家族都有自己的 tokenizer 和词表。同一段文字在不同模型上的 Token 数可能不同:
| 文本 | cl100k_base (GPT-4) | o200k_base (GPT-4o/5) | UTF-8 字节 |
|---|---|---|---|
| Hello, how are you today? | 7 | 7 | 25 |
| Explain quantum computing | 7 | 6 | 41 |
| 你好,请用中文解释一下什么是token | 15 | 9 | 47 |
| こんにちは、トークンとは何ですか? | 12 | 10 | 51 |
| Python fibonacci 函数(5行) | 28 | 28 | 92 |
关键发现:GPT-5 的 tokenizer(o200k_base)对中文和日文的效率显著提升——同一句中文,GPT-4 需要 15 个 Token,GPT-5 只需要 9 个,节省了 40%。
Claude 使用自研 tokenizer,Gemini 使用 SentencePiece。不同模型处理同一段文字的 Token 数不同,这意味着同样的 prompt 在不同模型上的费用也不同。
Token 数量如何影响你的账单#
AI API 按 Token 计费,不是按字节也不是按字数。而不同语言的 Token 效率差异很大:
各语言 Token 效率对比(o200k_base)#
| 语言 | 文本 | Token 数 | 字节数 | 字节/Token |
|---|---|---|---|---|
| 英文 | "Hello, how are you today?" | 7 | 25 | 3.6 |
| 中文 | "你好,今天怎么样?" | 5 | 27 | 5.4 |
| 日文 | "こんにちは" | 1 | 15 | 15.0 |
| 韩文 | "안녕하세요" | 2 | 15 | 7.5 |
| 代码 | def fibonacci(n): (5行) | 28 | 92 | 3.3 |
在 GPT-5 的 tokenizer 下,日文实际上是 Token 效率最高的语言——"こんにちは"把 15 个字节压缩成了 1 个 Token。
实际成本对比#
假设你用 GPT-5(输入 $1.25/百万 Token)处理 100 万字符的文本:
| 语言 | 约 Token 数 | 费用 |
|---|---|---|
| 英文 | ~33 万 | $0.41 |
| 中文 | ~50 万 | $0.63 |
| 中英混合 | ~40 万 | $0.50 |
中文文本比英文贵约 50%——因为平均每个汉字消耗的 Token 更多。
优化建议:先比较再决定用哪个模型#
不同模型有不同的 tokenizer、不同的价格、不同的能力。最划算的选择可能出乎你的意料。
用统一 API 网关,你可以用同一个 Key 测试多个模型,同时对比质量和成本:
from openai import OpenAI
client = OpenAI(
api_key="your-crazyrouter-key",
base_url="https://crazyrouter.com/v1"
)
# 同一个 prompt 测试多个模型
for model in ["gpt-5", "gpt-5-mini", "deepseek-v3.2", "claude-sonnet-4"]:
response = client.chat.completions.create(
model=model,
messages=[{"role": "user", "content": "用两句话解释什么是 tokenization"}],
max_tokens=100
)
usage = response.usage
print(f"{model}: {usage.prompt_tokens} 输入 / {usage.completion_tokens} 输出")
通过 Crazyrouter 一个 API Key 即可调用 627+ 模型,轻松找到最适合你的语言和业务场景的高性价比模型。
前沿动态:字节级模型会取代 Token 吗?#
2024 年底,Meta 发布了 BLT(Byte Latent Transformer)——一种直接处理原始字节的模型架构,完全绕过了 tokenizer。
字节级模型的优势:#
- 真正语言无关——不存在 tokenizer 对英文的偏向
- 没有未知词问题——任何字节序列都是合法输入
- 没有 tokenizer-模型不匹配——模型看到的就是你输入的原文
为什么 2026 年仍然是 Token 的天下:#
- 字节序列长 3-4 倍——处理成本高得多
- 所有主流商用模型(GPT-5、Claude、Gemini)仍使用 Token 架构
- BLT 还在研究阶段——没有商用 API 可调用
实际情况:Token 至少还会统治 3-5 年。理解它的工作原理,是每个 AI 开发者的必备技能。
速查表:Token vs 字节 vs 字符 vs 单词#
| 属性 | 字节 | 字符 | 单词 | Token |
|---|---|---|---|---|
| 是什么 | 存储最小单位 | 人类可读符号 | 按空格/语义分割 | AI 处理的子词单位 |
| 大小 | 固定 1 字节 | 1-4 字节 (UTF-8) | 不固定 | 不固定 |
| "Hello" | 5 | 5 | 1 | 1 |
| "你好" | 6 | 2 | 1 | 1 |
| "unbelievable" | 12 | 12 | 1 | 3 |
| 用在哪 | 计算机存储 | 人类阅读 | 搜索引擎 | AI 模型 |
| API 计费? | 否 | 否 | 否 | 是 |
换算关系:#
- 1 个英文 Token ≈ 4 个字符 ≈ 4 字节 ≈ 0.75 个单词
- 1 个中文 Token ≈ 1-3 个汉字 ≈ 3-9 字节
- 1000 个 Token ≈ 750 个英文单词 ≈ 4000 个字符
实用工具:#
- OpenAI Tokenizer — GPT 模型在线 Token 计数
- tiktoken (Python) — 编程方式计算 Token
- Anthropic Token Counter — Claude 模型 Token 计数
常见问题#
Token 和字节是一回事吗?#
不是。字节是计算机的原始存储单位(1 字节 = 8 位),Token 是 AI 模型处理的最小文本单位。"Hello"是 5 个字节但只有 1 个 Token;"你好"是 6 个字节也只有 1 个 Token。字节和 Token 之间的关系取决于语言和具体的 tokenizer。
为什么 AI 不直接处理字节?#
效率问题。"Hello"用字节表示是长度为 5 的序列,用 Token 表示只有长度 1。对于一篇千字文章,字节级处理的序列会长 3-4 倍。Transformer 注意力机制的计算量是 O(n²),序列越长成本增长越猛。
同一段文字在不同模型上的 Token 数一样吗?#
不一样。GPT-5 用 o200k_base tokenizer,GPT-4 用 cl100k_base,Claude 用自研 tokenizer。同一句中文可能在 GPT-4 上是 15 个 Token,在 GPT-5 上只要 9 个。这意味着同一个 prompt 在不同模型上的费用也不同。
为什么中文比英文更贵?#
两个原因:第一,中文字符在 UTF-8 中每个占 3 字节(英文只有 1 字节);第二,即使用了现代 tokenizer,中文字符的压缩效率也不如英文。一句中文通常比表达相同含义的英文多消耗约 50% 的 Token。
怎么降低 Token 成本?#
五个实用方法:(1)精简 prompt——每多一个字就多一分钱。(2)设置 max_tokens 限制输出长度。(3)选够用的最便宜模型。(4)缓存重复查询。(5)用 Crazyrouter 这样的 API 网关,一个 Key 横向对比 627+ 模型的价格和效果。
延伸阅读#
理解字节与 Token 的区别,是控制 AI 成本的第一步。更多开发者指南和最新模型定价数据,请访问 Crazyrouter 博客。


