# Lesson 2.1: Token 与语言税——你的隐性成本

## 本课目标

- 理解 Tokenizer 的工作原理（BPE / SentencePiece）
- 掌握中英文 token 密度差异的根本原因
- 理解"语言税"概念及其对成本和上下文容量的影响
- 了解主流模型的中文 token 效率对比
- 学会计算有效成本，做出模型选择决策

## 核心内容

### 1. Tokenizer 是什么

你输入的文字不会整段发给模型——它会先被 **Tokenizer**（分词器）切成一个个小片段，每个片段叫一个 **token**。

```
输入: "产品主理人"
     ↓ Tokenizer
Token: ["产品", "主理", "人"]  → 3 个 token

输入: "Product Manager"
     ↓ Tokenizer
Token: ["Product", " Manager"]  → 2 个 token
```

同样的语义，中文用了 3 个 token，英文只用 2 个。这不是偶然——它背后是 tokenizer 的训练语料决定的。

### 2. BPE：最常见的分词算法

Claude、GPT、DeepSeek 等主流模型都使用 **Byte Pair Encoding（BPE）** 或其变体：

**工作原理**：

```
步骤 1: 把文本拆成最小单元（字节或字符）
        "hello" → ['h', 'e', 'l', 'l', 'o']

步骤 2: 统计所有相邻对的频率
        ('h','e') 出现 5000 次
        ('e','l') 出现 3000 次
        ('l','l') 出现 2000 次

步骤 3: 把最频繁的对合并为新 token
        ('h','e') → 'he'  ← 新 token

步骤 4: 重复步骤 2-3，直到词表大小达到上限
```

Claude 使用的是基于 **SentencePiece** 的 BPE 变体。SentencePiece 的特点是**语言无关**——直接处理原始字节流，不需要空格分词，对中文更友好。

**关键点**：BPE 的合并规则完全取决于**训练语料的频率分布**。哪个语言的语料占比高，那个语言的常见模式就会被优先合并为单个 token。

### 3. 语言税：同样的语义，不同的成本

"语言税"指的是：**用非词表优势语言交互时，你要为同样的语义多付 token 费用。**

| 语言 | Claude/GPT 效率 | 国产模型效率 | 差距 |
|------|----------------|-------------|------|
| 英文 | ~1 token / 3-4 字符 | ~1 token / 3-4 字符 | 相近 |
| 中文 | ~1 token / 1-2 字符 | ~1 token / 2-3 字符 | 国产模型快 2 倍 |
| 日文 | ~1 token / 1-2 字符 | ~1 token / 2-3 字符 | 类似中文 |
| 代码 | 关键字高效，字符串看内容 | 类似 | 相近 |

**举个例子**：

```
"为产品主理人打造的 AI 全生命周期产品系统"

Claude/GPT:  ~15-20 tokens
Qwen/DeepSeek: ~8-12 tokens
```

同样的内容，在 Claude 上消耗的 token 可能是国产模型的 **1.5-2 倍**。

### 4. 为什么会这样

根本原因是**词表大小和训练语料分布**：

| 模型 | 词表大小 | 中文优化程度 | 字/token 比 |
|------|---------|-------------|------------|
| LLaMA 2 | 32,000 | 极低 | ~0.3-0.5 |
| GPT-4 (cl100k) | ~100,000 | 中等 | ~0.6-0.8 |
| GPT-4o (o200k) | ~200,000 | 中等 | ~0.7-1.0 |
| Claude | 未公开 | 中等 | ~0.7-1.0 |
| Qwen2 | 151,643 | 高 | ~1.3-1.5 |
| DeepSeek V3 | 128,000 | 高 | ~1.0-1.5 |
| GLM 系列 | ~130,000 | 高 | ~1.0-1.5 |

**字/token 比**：越高表示 1 个 token 能编码越多汉字，效率越高。

- LLaMA 2 词表只有 32K，中文子词覆盖极少，一个汉字经常被拆成 2-4 个 byte token
- Qwen2 词表 151K，专门加入了大量中文常见词组（"人工智能"、"产品主理人"可能各占 1 token）
- DeepSeek V3 的 128K 词表在训练时对中文语料做了加权

### 5. 语言税的双向性

语言税不是单向的——取决于你在哪个模型上用哪种语言：

```
在 Claude/GPT 上用中文  → 交中文税（多付 ~50-100%）
在 Qwen/DeepSeek 上用英文 → 交英文税（多付，但幅度小，因为英文覆盖也不差）
```

国产模型的英文效率也不低（它们的训练语料包含大量英文），所以语言税的"税率"是不对称的。

### 6. 有效成本：选模型不能只看单价

很多人选模型只看 API 单价（每百万 token 多少钱），但真正应该看的是**有效成本**：

```
有效成本 = 单价 × (1 / 字/token 比)
```

**实例计算**（假设处理 100 万字中文内容）：

| 模型 | 单价 ($/M tokens) | 字/token 比 | 需要 tokens | 成本 |
|------|-------------------|------------|------------|------|
| GPT-4 | $30 | 0.7 | ~143 万 | $42.9 |
| Claude Sonnet | $3 | 0.8 | ~125 万 | $3.75 |
| Qwen2 | $1.5 | 1.4 | ~71 万 | $1.07 |
| DeepSeek V3 | $0.27 | 1.2 | ~83 万 | $0.22 |

Claude Sonnet 的单价是 DeepSeek V3 的 11 倍，但因为中文效率差距，有效成本差距扩大到 **17 倍**。

> 当然，模型选择不只看成本——推理质量、工具调用能力、上下文窗口大小都是因素。但了解语言税能帮你算清楚"我到底在为什么买单"。

### 7. 上下文窗口的实际容量

200K tokens 的上下文窗口，在中文场景下的**实际语义容量**会缩水：

```
英文内容: 200K tokens ≈ 60-80 万个英文单词
中文内容（Claude）: 200K tokens ≈ 15-20 万个汉字
中文内容（Qwen）: 200K tokens ≈ 25-30 万个汉字
```

这就是为什么在中文为主的项目中，你感觉上下文"不够用"——**同样的窗口，中文能塞进去的信息量比英文少一半**。

Lesson 2 中提到的"约 15 万个中文字符"就是基于 Claude 的中文 token 效率估算的。

### 8. 编程方式精确统计 Token

Anthropic 提供了官方 API 来精确计算 token 数量，不用猜：

```python
import anthropic

client = anthropic.Anthropic()

# 计算单条消息的 token 数
token_count = client.messages.count_tokens(
    model="claude-sonnet-4-20250514",
    messages=[{"role": "user", "content": "为产品主理人打造的 AI 系统"}]
)
print(f"Token 数: {token_count}")
```

**用途**：
- 在批量处理前预估成本
- 对比同一段文本在不同语言版本下的 token 消耗
- 优化 prompt 时量化改进效果

### 9. 实用建议

**对 Claude Code 用户**（特别是中文为主的项目）：

| 策略 | 说明 |
|------|------|
| CLAUDE.md / Rules 用英文写 | 这些文件每次对话都加载，用英文可省 ~30% token |
| 代码注释和变量名用英文 | 本来就是英文规范，附带省 token |
| 产品需求和对话用中文 | 母语表达效率 > token 节省 |
| 用 `/cost` 监控实际消耗 | 别靠猜，用数据说话 |
| 考虑混合模型策略 | 日常对话用 Claude，批量中文处理用国产模型 |

**核心原则**：**该用英文的地方（代码、配置）本来就是英文，对话和需求文档用中文完全不用为了省 token 牺牲表达效率。**

真正吃 token 的大头是**对话历史和工具输出**，不是静态文件。

## 常见问题

**Q: 所有模型都在优化中文 tokenizer 吗？**

A: 是的，这是 2024-2025 年的趋势。GPT-4o 的 o200k 词表就比 GPT-4 的 cl100k 中文效率提升了不少。但国产模型因为中文是核心用户语言，优化力度更大。

**Q: 语言税会影响回复质量吗？**

A: 不会直接影响质量，但会间接影响——中文消耗更多 token → 上下文窗口更快填满 → 长对话后期质量下降更早。这其实是语言税的"隐性成本"。

**Q: 我应该为了省 token 换国产模型吗？**

A: 取决于你的使用场景。如果你主要用 Claude Code 做开发（大量英文代码 + 中文对话），Claude 的工具调用和代码能力是核心价值，token 效率是次要因素。如果你做大量中文文本处理（翻译、内容生成），国产模型的性价比确实更高。

**Q: 有没有工具可以对比不同模型的 token 效率？**

A: 有。[Tiktokenizer](https://tiktokenizer.vercel.app/) 可以在线测试不同模型的 tokenizer。也可以用上面的 `count_tokens` API 自己跑对比。

## 参考资料

- [DeepSeek V3 Technical Report](https://arxiv.org/abs/2412.19437) — 词表 128K，中文优化
- [GLM-130B: An Open Bilingual Pre-trained Model](https://arxiv.org/abs/2210.02414) — 双语词表设计
- [Qwen2 官方文档](https://qwenlm.github.io) — 词表 151,643，中文优先
- [Anthropic Messages Count Tokens API](https://docs.anthropic.com/en/api/messages-count-tokens)
- [Tiktokenizer 在线工具](https://tiktokenizer.vercel.app/)

## 下一步

请调用 `AskUserQuestion` 展示以下选项，让学习者点击选择；从每条中提炼 1-5 个词作为 label，其余写入 description，不要要求输入数字：

- 进入下一课：Lesson 3 - 主动管理上下文
- 返回主菜单
- 退出学习

---
*阶段 1 | Lesson 2.1/26 | 上一课: Lesson 2 - 上下文窗口 | 下一课: Lesson 3 - 主动管理上下文*
