什么是 Token
Token(令牌) 是大语言模型(LLM)处理文本的基本单位,介于"字符"与"词"之间。模型不是逐字符、也不是逐词处理文本,而是把文本切分为 token 序列。
英文示例:
"Hello world" → ["Hello", " world"] → 2 个 token
"unbelievable" → ["un", "believ", "able"] → 3 个 token
中文示例:
"你好世界" → ["你", "好", "世", "界"] → 4 个 token
"人工智能" → ["人工", "智能"] → 2 个 token(常见词合并)
一个粗略的换算经验:
| 语言 | 1 个 token ≈ | 1000 字 ≈ |
|---|---|---|
| 英文 | 4 个字符 / 0.75 个词 | 250 token |
| 中文 | 0.5-1 个字 | 1500-2000 token |
| 代码 | 2-4 个字符 | 300-500 token |
中文比英文贵 4-6 倍,这是中文 LLM 应用的核心成本因素。
Tokenization 的工作原理
LLM 用 Tokenizer 把文本切分为 token。主流方法:
BPE(Byte Pair Encoding)
GPT 系列使用。从字符开始,迭代合并最高频的字符对:
训练语料统计:"the" 出现 1000 次
→ "the" 成为一个 token,不再拆分为 "t"+"h"+"e"
训练语料统计:"人工智能" 出现 500 次
→ "人工智能" 成为一个 token(若有足够中文语料)
WordPiece
BERT 系列使用,类似 BPE 但合并策略略有不同。
SentencePiece
多语言模型常用,直接在字节层面操作,支持任何语言。
Tiktoken(OpenAI 专用)
OpenAI 开源了其 tokenizer,可在线试用:https://platform.openai.com/tokenizer
为什么中文 Token 更贵
根本原因
GPT 系列模型的 tokenizer 主要在英文语料上训练,英文常见词被合并为单 token,中文则多为单字 token:
"apple" → 1 token(英文常见词合并)
"苹果" → 2 token(中文按字切分)
对比
| 文本 | 英文 token | 中文 token | 倍数 |
|---|---|---|---|
| "Hello / 你好" | 1 | 2 | 2× |
| "I love programming / 我爱编程" | 3 | 6 | 2× |
| "Artificial Intelligence / 人工智能" | 2 | 4 | 2× |
| 1000 字文章 | ~250 | ~1500-2000 | 6-8× |
影响:
- 费用:同样字数,中文 API 费用是英文的 4-6 倍
- 上下文窗口:同样窗口(如 128K token),中文能放的内容比英文少 4-6 倍
- 响应速度:中文生成 token 数更多,速度更慢
Token 与计费
主流 LLM 按 token 计费:
| 模型 | 输入价格 | 输出价格 | 说明 |
|---|---|---|---|
| GPT-4o | $2.5/1M | $10/1M | 1M = 100 万 token |
| GPT-4o-mini | $0.15/1M | $0.6/1M | 便宜 16 倍 |
| Claude 3.5 Sonnet | $3/1M | $15/1M | |
| Claude 3 Haiku | $0.25/1M | $1.25/1M | |
| Gemini 1.5 Pro | $1.25/1M | $5/1M | |
| Gemini 1.5 Flash | $0.075/1M | $0.3/1M | 最便宜 |
计费示例
处理一篇 3000 字中文文章(约 5000 token):
| 模型 | 输入费 | 输出费(生成 1000 字 ≈ 2000 token) | 总费 |
|---|---|---|---|
| GPT-4o | $0.0125 | $0.02 | $0.0325 |
| GPT-4o-mini | $0.00075 | $0.0012 | $0.002 |
| Claude 3.5 Sonnet | $0.015 | $0.03 | $0.045 |
批量处理 1000 篇文章:GPT-4o 需 $32.5,GPT-4o-mini 仅需 $2。
Token 与上下文窗口
上下文窗口 = 模型一次能处理的最大 token 数:
| 模型 | 上下文窗口 | 约等于 |
|---|---|---|
| GPT-4o | 128K | 6 万字中文 |
| Claude 3.5 Sonnet | 200K | 10 万字中文 |
| Gemini 1.5 Pro | 2M | 100 万字中文 |
窗口限制的影响:
- 输入超限:会被截断或报错
- 输出超限:生成到一半停止,需"继续"指令
- 越长越贵:输入 token 也计费,长 Prompt 成本高
- 越长越慢:注意力机制复杂度 O(n²),超长上下文延迟显著
Token 优化技巧
1. 精简 Prompt
❌ "请你作为一个资深的数据分析师,帮我分析以下数据..."(冗余)
✅ "分析以下数据:"(精简)
2. 用英文写 Prompt
❌ "请总结以下文章" → 6 token
✅ "Summarize:" → 2 token
指令用英文,内容用中文,能省 30-50% Prompt token。
3. 缓存重复内容
系统提示(system prompt)重复出现,用 Prompt Caching 降 90% 费用。
4. 压缩长文档
❌ 把 50 页 PDF 全文塞进 Prompt(10 万 token)
✅ 先用 RAG 检索 Top-3 相关段落(3000 token)
5. 批量处理
❌ 100 次单条 API 调用(100 次系统提示开销)
✅ 1 次批量调用(1 次系统提示)
6. 选对模型
简单任务(分类/抽取)→ GPT-4o-mini(便宜 16 倍)
复杂任务(推理/写作)→ GPT-4o
7. 控制输出长度
"用一句话回答" → 输出 ~50 token
"详细回答" → 输出 ~500 token(贵 10 倍)
8. 流式输出
流式不省 token,但能提前看到结果,发现跑偏时及时中断,省输出 token。
Token 计算工具
在线工具
- OpenAI Tokenizer:https://platform.openai.com/tokenizer
- Tiktokenizer:https://tiktokenizer.vercel.app
代码计算
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4o")
tokens = enc.encode("你好世界")
print(len(tokens)) # 4
print(tokens) # [57668, 53901, 4593, 10994]
import { encoding_for_model } from "tiktoken";
const enc = encoding_for_model("gpt-4o");
const tokens = enc.encode("你好世界");
console.log(tokens.length); // 4
常见误区
- 误区 1:1 个字 = 1 个 token。中文常见词可能是 1 token(如"智能"),生僻字可能拆成多 token。
- 误区 2:不同模型 token 计算相同。GPT 和 Claude 的 tokenizer 不同,同样文本 token 数可能不同。
- 误区 3:输出 token 与输入同价。输出通常贵 3-5 倍(生成比理解难)。
- 误区 4:上下文越长效果越好。超长上下文会导致"中间遗忘",关键信息放开头和结尾。
- 误区 5:Token 数等于字数。英文 1 token ≈ 0.75 词,中文 1 token ≈ 0.5 字。
- 误区 6:代码 token 与自然语言相同。代码的特殊符号(
{}();)各占 token,比自然语言更"贵"。
与其他术语的关系
- LLM:大语言模型,以 token 为基本单位
- Embedding:嵌入,把 token 序列转为向量
- Fine-tuning:微调,按 token 计算训练数据量
- Hallucination:幻觉,长 token 序列更易触发
- Context Window:上下文窗口,以 token 为单位
小结
Token 是 LLM 时代的"字数单位":决定费用、限制上下文、影响速度。理解 Token 的关键要点:
- 中文比英文贵 4-6 倍:核心成本因素
- 输入与输出不同价:输出贵 3-5 倍
- 上下文窗口是 token 上限:不是字数上限
- 优化 = 精简 Prompt + 选对模型 + 缓存 + RAG
掌握 Token 计量,是控制 LLM 应用成本的基本功。每次写 Prompt 前,先估一下 token 数,能省 30-50% 的 API 费用。