Skip to content

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/Opus200K - 1M tokens约15万-75万汉字
GPT-4 Turbo128K tokens约10万汉字
GPT-4o128K tokens约10万汉字
Gemini Pro1M tokens约75万汉字
GPT-3.516K 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-44096 tokens约3000汉字
Claude 48192 tokens约6000汉字
GPT-4 Turbo4096 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

工具推荐

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的概念后,让我们学习 清晰表达的艺术,让每一句话都精准传达你的意图。