Token与上下文窗口
你可能遇到过这种情况:和AI聊着聊着,它突然"忘记"了之前的对话内容。这不是AI健忘,而是触碰到了它的"记忆边界"——上下文窗口限制。
什么是Token?
AI模型不是以"字"或"词"为单位处理文本的,而是以Token(词元)为单位。
Token是什么?
Token是介于字符和单词之间的文本片段:
| 语言 | 大致换算 |
|---|---|
| 英文 | 1个单词 ≈ 1-2个Token |
| 中文 | 1个汉字 ≈ 1-2个Token |
| 标点符号 | 各自占用Token |
经验公式
1000 Token ≈ 750个英文单词 ≈ 500个中文汉字实际例子
python
# 这段中文大约占用多少Token?
"你好,我是一个AI编程助手,很高兴认识你!"
# 约 18 个汉字 + 标点 ≈ 20-25 个 Token你可以用OpenAI的 Tokenizer工具 直观查看文本的Token数量。
上下文窗口:AI的"工作记忆"
每个模型都有一个上下文窗口(Context Window),即它在一次对话中能处理的最大Token数量。
形象理解
把AI的上下文窗口想象成一个白板:
┌────────────────────────────────────┐
│ │
│ 这是AI的"工作记忆"白板 │
│ 最多能写这么多内容... │
│ │
│ │
│ │
│ [容量有限] │
│ │
└────────────────────────────────────┘- 白板满了,最早写的内容会被"擦掉"
- 超过限制,AI就会"忘记"之前的对话
主流模型的上下文窗口(2025年)
| 模型 | 上下文窗口 | 大约能装多少内容 |
|---|---|---|
| Claude 4 Sonnet/Opus | 200K - 1M tokens | 约15万-75万汉字 |
| GPT-4 Turbo | 128K tokens | 约10万汉字 |
| GPT-4o | 128K tokens | 约10万汉字 |
| Gemini Pro | 1M tokens | 约75万汉字 |
| GPT-3.5 | 16K tokens | 约1.2万汉字 |
提示
Claude 4系列已支持高达100万Token的上下文窗口,相当于可以一次性处理一本长篇小说!
Token意识对提示词设计的影响
1. System Prompt要精炼
❌ 冗长版(浪费Token)
你是一个非常专业、经验丰富、知识渊博的Python编程专家,
你的工作经历超过10年,参与过很多大型项目的开发,
你擅长各种Python框架和库,包括但不限于DjanGo、Flask、
FastAPI、NumPy、Pandas等等...(后面还有一堆废话)
✅ 精炼版(节省Token)
你是资深Python工程师,专精Django和FastAPI,回答简洁专业。原则:核心规则控制在200 Token以内,去掉重复说明。
2. 长文档要分块处理
当你需要让AI处理长文档时:
❌ 一次性塞进去(可能超限)
请分析这个10万字的文档...
✅ 分块处理
1. 先让AI总结文档结构和章节
2. 分章节逐一讨论
3. 最后综合分析或者使用 RAG(检索增强生成) 技术,只传入相关片段。
3. 多轮对话要定期"重置"
历史消息会累积消耗Token:
对话开始 → 100 tokens
第2轮 → 300 tokens
第5轮 → 1500 tokens
第10轮 → 5000 tokens
...
达到限制 → AI开始"忘记"早期内容解决方案:
- 定期开启新对话
- 重要结论自己保存
- 让AI总结关键信息后再继续
4. API调用要注意成本
Token数量直接影响API费用:
| 场景 | 建议 |
|---|---|
| 开发测试 | 用便宜的模型(GPT-3.5/Claude Haiku) |
| 生产环境 | 根据任务复杂度选模型 |
| 批量处理 | 使用批处理API(可省50%) |
实用技巧
技巧1:把重要信息放在开头或结尾
研究发现,大模型存在**"迷失在中间"(Lost in the Middle)**现象:
┌─────────────────────────────────────┐
│ [重要] ← AI最关注这里 │
│ │
│ 普通内容... │
│ 普通内容... │
│ 可能被"忽视"的内容... │
│ 普通内容... │
│ │
│ [重要] ← AI也关注这里 │
└─────────────────────────────────────┘实践:把最关键的指令放在提示词的开头或结尾,中间位置的内容容易被模型"忽视"。
技巧2:使用提示缓存
Claude和OpenAI都支持提示缓存,可以大幅降低成本:
python
# 相同的System Prompt在多次调用中可以缓存
# 缓存命中可节省90%的输入Token费用技巧3:压缩历史对话
当对话变长时,让AI帮你压缩:
请用200字以内总结我们到目前为止讨论的关键结论,
后续对话我们只基于这个总结继续。输出Token也要注意
不仅输入有Token限制,输出也有上限:
| 模型 | 输出Token上限 | 大约能输出 |
|---|---|---|
| GPT-4 | 4096 tokens | 约3000汉字 |
| Claude 4 | 8192 tokens | 约6000汉字 |
| GPT-4 Turbo | 4096 tokens | 约3000汉字 |
如果你需要AI输出很长的内容:
❌ 直接要求
"请帮我写一篇10000字的技术文章"
✅ 分段输出
"请列出这篇文章的大纲"
"请写第一章..."
"请写第二章..."实战案例
案例1:处理长代码文件
python
# 假设你有一个3000行的Python文件
# ❌ 直接粘贴整个文件
"帮我分析这个文件..." [可能超出限制或响应很慢]
# ✅ 先让AI了解结构
"这个文件有3000行,我先告诉你结构:
- 第1-50行:导入和配置
- 第51-200行:数据模型
- 第201-500行:API路由
...
请问你想从哪部分开始讨论?"
# 然后分段讨论
"让我粘贴数据模型部分,帮我审查一下..."案例2:批量处理文档
场景:需要让AI处理100个文档摘要
❌ 低效方式:
每次对话都重新设定背景,累计消耗大量Token
✅ 高效方式:
1. 第一条消息设定好System Prompt
2. 使用同一个对话处理所有文档
3. 利用提示缓存节省Token工具推荐
- OpenAI Tokenizer - platform.openai.com/tokenizer
- Claude Token Counter - Claude API文档中提供
- Tiktoken - Python库,本地计算Token数量
python
import tiktoken
enc = tiktoken.encoding_for_model("gpt-4")
text = "你好,世界!"
tokens = enc.encode(text)
print(f"Token数量: {len(tokens)}")小结
记住这几点,你的Token使用会更高效:
| 要点 | 行动 |
|---|---|
| 了解限制 | 知道你用的模型的Token上限 |
| 精简提示词 | System Prompt控制在200 Token内 |
| 重要信息前置 | 关键指令放开头或结尾 |
| 分块处理 | 长内容分段讨论 |
| 定期重置 | 长对话适时开启新话题 |
下一步
掌握了Token的概念后,让我们学习 清晰表达的艺术,让每一句话都精准传达你的意图。