Token、上下文与记忆
三个概念能解开许多"它为什么会那样做?"的瞬间:token、上下文窗口 和 记忆。
Token:模型思考的单位
模型并不读取字符或单词——它们读取 token,即大约相当于英文中四分之三个单词的文本块。"Unbelievable" 可能是 3–4 个 token;常见词各自是一个。你的输入和模型的输出都按 token 计数,而这正是 定价与限制 所衡量的单位。
你无需手动计数,但有个大致的感觉会有帮助:约 750 个英文单词 ≈ 约 1,000 个 token。试试看:
2词
25字符
~3–6估算 token 数
只是大致感受(约为 字符 ÷ 4,或 词 × 1.33)。token 计数因模型而异——切勿使用其他模型的分词器。需要精确数字请使用 Anthropic 的 token 计数接口。
上下文窗口:工作记忆
上下文窗口是模型一次能考虑的最大 token 数——你的提示词,加上它的回复,再加上到目前为止的整段对话。把它想象成模型的书桌:很大,但有限。
当一段对话长到超过窗口时,最旧的内容会从桌面上掉下去。这就是为什么一段很长的聊天似乎会"忘记"你一开始说过的话,或者开始跑偏。
:::tip 实际影响
- 对于长文档,把关键指令放在开头,并在结尾再重申一遍。
- 为新话题开一段全新的对话,而不是拖着庞大的历史一路前行。
- 在 Claude Code 中,要有意识地管理这一点——参见 上下文管理。 :::
记忆:没有记忆,除非你提供
默认情况下,每段对话都是一张白纸。模型不记得你上一次的聊天。表面上的"记忆"来自以下之一:
- 重新发送历史——聊天应用每一轮都重发整段对话(直到窗口填满)。
- 显式的记忆功能——某些 Claude 载体提供跨对话记忆(参见 跨对话记忆)。
- 你提供的文件——项目 和 CLAUDE.md 提供由你掌控的持久上下文。
- API 是无状态的——要延续一段对话,你需要自己把先前的消息回传(首次 API 调用)。
为什么这很重要
几乎每一个"它无视了我先前的指令"或"它跟丢了"的问题,都可以追溯到上下文窗口被填满,或者一个新会话冷启动。明白了这一点,你就会去组织提示词和会话,让重要的东西始终留在桌面上。