Token/词元:AI眼里的"字"跟你不一样
这篇文章带你理解AI最基础的概念——Token,明白为什么AI数数的方式跟你不一样。
前言
你一定遇到过这样的困惑:
"为什么API说支持4000个Token,我只能输入2000多个汉字?"
"为什么同样的内容,有时候收费高有时候收费低?"
"GPT-4的128K上下文到底是多少字?"
答案都在一个词里:Token
今天我们就来揭开AI"数数方式"的秘密。
一、黑话原文 vs 人话翻译
场景模拟
🎯 开发者讨论群:
程序员A:"这个模型上下文才4K,根本不够用"
程序员B:"你可以用Token截断策略"
程序员C:"中文太费Token了,同样的内容英文便宜一半"
程序员A:"是啊,GPT-4那个128K context window太贵了"
人话翻译表
| 黑话 | 人话翻译 | 一句话理解 |
|---|---|---|
| Token | 词元/标记 | AI眼里的"一个字" |
| Context Window | 上下文窗口 | AI的"短期记忆容量" |
| 4K/128K | 4000/128000个Token | 能处理的Token数量 |
| Token限制 | 字数限制 | 能输入的最大内容量 |
| Token计费 | 按字数收费 | 用多少Token付多少钱 |
二、Token到底是个啥?
2.1 一句话定义
Token = AI处理文本的最小单位
人话版:AI眼里的"一个字",但这个"字"跟你理解的不一样。
2.2 为什么需要Token?
计算机不认识"字",只认识数字。所以需要把文字转换成数字:
你看到的: 今 天 天 气 真 好
↓
Token化: [101, 102, 102, 103, 104, 105]
↓
AI处理的: 一串数字
2.3 Token长什么样?
┌─────────────────────────────────────────────────────────────┐
│ Token的不同形态 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 英文单词 tokenization: │
│ "tokenization" → ["token", "ization"] │
│ 2个Token │
│ │
│ 中文句子: │
│ "今天天气真好" → ["今天", "天气", "真好"] │
│ 3个Token(也可能更多,看分词方式) │
│ │
│ 特殊情况: │
│ "GPT-4" → ["G", "PT", "-", "4"] │
│ 4个Token │
│ │
└─────────────────────────────────────────────────────────────┘
三、中英文Token大不同
3.1 关键差异
这是最重要的一点:中文比英文"费Token"!
| 内容 | 英文 | 中文 | 中文Token数 |
|---|---|---|---|
| Hello world | 2个Token | 你好世界 | ~4-6个Token |
| I love AI | 3个Token | 我爱人工智能 | ~6-8个Token |
| 1000个英文单词 | ~1300个Token | 1000个汉字 | ~1500-2000个Token |
3.2 经验公式
┌─────────────────────────────────────────────────────────────┐
│ Token估算公式 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 英文:1个单词 ≈ 1.3个Token │
│ (1000个单词 ≈ 1300个Token) │
│ │
│ 中文:1个汉字 ≈ 1.5-2个Token │
│ (1000个汉字 ≈ 1500-2000个Token) │
│ │
│ 所以:4000个Token ≈ │
│ 英文:~3000个单词 │
│ 中文:~2000-2500个汉字 │
│ │
└─────────────────────────────────────────────────────────────┘
3.3 实际案例
# 使用 tiktoken 计算 Token 数量
import tiktoken
encoding = tiktoken.encoding_for_model("gpt-4")
text_en = "Hello, how are you today?"
text_cn = "你好,你今天怎么样?"
tokens_en = encoding.encode(text_en)
tokens_cn = encoding.encode(text_cn)
print(f"英文: {len(tokens_en)} tokens") # 输出: 6 tokens
print(f"中文: {len(tokens_cn)} tokens") # 输出: 9-12 tokens (看具体编码)
四、上下文窗口(Context Window)是什么?
4.1 一句话定义
Context Window = AI一次性能"记住"的内容量
人话版:AI的短期记忆容量,超过这个限制它就"忘"了前面的内容。
4.2 各模型上下文对比
| 模型 | 上下文窗口 | 约等于中文 |
|---|---|---|
| GPT-3.5 | 4K Token | ~6000字 |
| GPT-4 | 8K Token | ~12000字 |
| GPT-4-32K | 32K Token | ~48000字 |
| GPT-4-Turbo | 128K Token | ~19万字 |
| Claude 3 | 200K Token | ~30万字 |
| Kimi | 200K Token | ~30万字 |
4.3 超过限制会怎样?
你的输入:
┌────────────────────────────────────────────────┐
│ 这是一段很长的文字...(超过限制)...最后的问题 │
└────────────────────────────────────────────────┘
AI看到的效果:
┌────────────────────────────────────────────────┐
│ [前面的内容被截断了] ...最后的问题 │
└────────────────────────────────────────────────┘
就像:
你让一个人读一本书,但他的记忆只能装下最后一章
4.4 生活类比
Context Window 就像:
📝 一张便利贴
- 小号便利贴(4K):只能写几句话
- 大号便利贴(128K):能写一篇论文
- 超大号便利贴(200K):能写一本书
超过容量?要么写不下,要么得擦掉前面的内容
五、Token计费的秘密
5.1 为什么按Token收费?
AI处理每个Token都需要计算资源,所以收费也按Token算。
5.2 价格对比
| 模型 | 输入价格 | 输出价格 | 备注 |
|---|---|---|---|
| GPT-3.5-Turbo | $0.5/1M tokens | $1.5/1M tokens | 最便宜 |
| GPT-4 | $30/1M tokens | $60/1M tokens | 贵10倍+ |
| GPT-4-Turbo | $10/1M tokens | $30/1M tokens | 性价比高 |
| Claude 3 Sonnet | $3/1M tokens | $15/1M tokens | 平衡之选 |
5.3 省钱技巧
Token省钱攻略:
1. 输入优化:
- 删除无关内容
- 用英文代替中文(如果可以)
- 压缩prompt,减少废话
2. 模型选择:
- 简单任务用小模型(GPT-3.5)
- 复杂任务才用大模型(GPT-4)
3. 缓存策略:
- 相同的prompt缓存结果
- 对话历史适当裁剪
4. 监控用量:
- 记录每次调用的Token数
- 设置预算上限
六、Token的实际影响
6.1 对话场景
你:请帮我总结这篇10万字的小说《XXX》...
AI:抱歉,你的输入超过了Token限制...
为什么会这样?
- 10万字中文 ≈ 15-20万Token
- GPT-4-32K 只能处理 ~48000 Token
- 超出限制,直接报错
6.2 解决方案
# 方案1:分段处理
def process_long_text(text, chunk_size=2000):
chunks = split_text(text, chunk_size)
results = []
for chunk in chunks:
result = model.generate(chunk)
results.append(result)
return merge_results(results)
# 方案2:选择长上下文模型
# 使用 Claude(200K)或 Kimi(200K)处理长文本
七、动手体验Token
7.1 在线工具
- OpenAI Tokenizer - 官方工具
- Tiktokenizer - 可视化工具
7.2 代码计算
import tiktoken
def count_tokens(text, model="gpt-4"):
encoding = tiktoken.encoding_for_model(model)
return len(encoding.encode(text))
# 试试看
text = "今天天气真好,适合出门散步。"
print(f"Token数量: {count_tokens(text)}")
# 比较中英文
en_text = "The weather is nice today, perfect for a walk."
cn_text = "今天天气真好,适合出门散步。"
print(f"英文: {count_tokens(en_text)} tokens")
print(f"中文: {count_tokens(cn_text)} tokens")
小结
| 黑话 | 人话 | 记忆口诀 |
|---|---|---|
| Token | AI的最小处理单位 | AI眼里的"一个字" |
| Context Window | 上下文窗口 | AI的短期记忆容量 |
| 4K/128K | Token数量限制 | 数字越大,能记住越多 |
| Token计费 | 按用量收费 | 用多少Token付多少钱 |
关键认知:
- 中文比英文费Token(约1.5-2倍)
- 上下文窗口是AI的记忆上限
- Token越多,费用越高
黑话等级
⭐⭐ 入门级
├── 理解Token是什么
├── 知道为什么中文费Token
└── 明白上下文窗口的限制
下一级预告:参数/Parameters - 1750亿个参数是啥概念
思考与练习
-
思考题:
- 为什么中文Token化比英文复杂?
- 如果要做中文AI产品,Token成本怎么优化?
-
动手练习:
- 用在线工具测试不同文本的Token数量
- 写一段中文和一段英文,比较Token数量差异
-
延伸探索:
- 了解不同模型的Tokenizer有什么区别
- 研究一下长文本处理的最佳实践
下期预告
下一篇文章,我们来聊:参数/Parameters - 1750亿个参数是啥概念
会解答这些问题:
- 参数到底长什么样?
- 1750亿个参数存在哪里?
- 参数越多真的越好吗?
关注专栏,不错过后续更新!
作者:ECH00O00 本文首发于掘金专栏《AI黑话翻译官》 欢迎评论区交流讨论,点赞收藏就是最大的鼓励