Skip to content

什么是 Tokenize(分词)

Token:模型眼里的"字"

大语言模型不直接处理字符或单词,而是处理 token。Tokenize(分词)就是把文本切成 token 序列、再映射成整数 ID 的过程:

text
"function calculateTotal(items) {"
        │  tokenizer(BPE)

["function", " calculate", "Total", "(items", ") {"]

[1723, 11294, 7575, 17444, 8850]   ← 模型实际看到的

主流模型(GPT 系列、Claude 系列)都使用 BPE(Byte Pair Encoding) 类算法:从字节开始,把语料中高频出现的相邻片段逐步合并成更大的单元。于是:

  • 高频英文单词通常是 1 个 token(functionreturn);
  • 低频词被拆成几段(calculateTotalcalculate + Total);
  • 任何生僻字符最终都能回退到字节级表示,所以模型永远不会"不认识"某个字符,只是会用更多 token。

经验换算

内容大致比例
英文散文1 token ≈ 4 个字符 ≈ 0.75 个单词
代码比英文散文略费,大量符号、缩进各占 token
中文1 个汉字 ≈ 1~2 个 token,比英文按信息量算更贵
JSON/日志非常费,引号、括号、转义符全是 token

这解释了几个日常现象:

  • 同样一段话,中文提示词消耗的 token 常比英文多,用中文和 Agent 交流没问题,但往上下文里塞大段中文文档要有预算意识;
  • 把一个 500KB 的 JSON 日志直接粘贴给 Agent,可能一下吃掉十几万 token;
  • 压缩变量名并不能显著省 token(反而可能因为变成生僻组合被拆得更碎)。

为什么开发者必须关心 token

  1. 计费单位就是 token:API 按输入 token + 输出 token 计价,缓存命中的 token 打一折(见缓存篇)。
  2. 上下文窗口按 token 计:200K / 1M 说的都是 token 数,不是字符数(见上下文窗口篇)。
  3. 工具输出也是 token:Agent 跑一条 npm test 打出 2000 行日志,这些日志会 tokenize 后进入上下文——所以 Claude Code 会截断超长命令输出,你自己写工具/脚本时也应该让输出精简(| tail -20--quiet)。

实用技巧

  • 估算:粗略地,英文文本字节数 ÷ 4 ≈ token 数;精确计数可用 Anthropic 的 count_tokens API 或 OpenAI 的 tiktoken 库。
  • 在 Claude Code 里查看:/context 命令可以看到当前上下文里系统提示、工具定义、MCP、消息各占多少 token。
  • 控制粘贴物:贴日志前先自己筛一遍;贴代码时只贴相关函数而非整个文件。
  • 让 Agent 的"眼睛"省着用:引导它用 grep/局部读取而不是整文件通读——这正是 RepoPromptExplore 子代理 要解决的问题。

AI Coding Guideline — 面向 Claude Code / Codex 等 AI 编程工具的实践指南