Tokenizer:文本如何变成模型输入
理解 BPE 分词的工作原理,学会估算与优化 token 消耗——它直接决定你的 API 账单和上下文余量。
模型不认识"字",只认识 token
文本进入模型前要经过 Tokenizer 切成子词单元并映射为整数 ID。主流算法是 BPE(字节对编码):从字符开始,迭代把最高频的相邻单元合并成词表条目 —— 高频词整体成 token,低频词拆成子词。
"unbelievable" → ["un", "believ", "able"] (低频长词拆开)
"the" → ["the"] (高频词整存)
中文的 token 特点
- 词表含中文越多的模型(GLM、Qwen 等),中文普遍越省 token;
- 粗略估算:英文 1 token ≈ 0.75 词;中文 1 token ≈ 0.5~1 个汉字,视模型词表浮动。
为什么应用开发者必须懂它
- 账单:API 按输入+输出 token 计费;
- 上下文窗口:System Prompt + 历史 + RAG 资料 + 回答全都要塞进窗口,token 数就是硬约束;
- 行为差异:模型偶尔在 token 边界犯错(数单词字母、中英混排空格),提示词层面规避即可;
- 截断策略:Memory 裁剪、RAG 片段数选择,本质都是 token 预算分配。
实用工具
pip install tiktoken
import tiktoken
enc = tiktoken.get_encoding("cl100k_base")
print(len(enc.encode("检索增强生成")))
工程习惯:在链路里为每个环节设 token 预算(提示 500 / 资料 2000 / 历史 1000 / 回答 800),超预算先裁资料再裁历史。
📝 课后练习
quiz-1 BPE 分词算法的基本思路是?