跳到主要内容

Token、上下文与记忆

入门

三个概念能解开许多"它为什么会这么做?"的疑惑:token上下文窗口以及记忆。理解了这些,你就不会再为偏离、遗忘和意外账单而感到惊讶了。

What you'll learn
  • 像模型一样读取文本——以 token 为单位,而不是单词或字符
  • 把上下文窗口想象成一张有限的桌面,并预测什么时候内容会掉下去
  • 识别'上下文腐烂'——为什么模型会丢失长输入中间的内容
  • 了解'记忆'的四个真正来源,以及如何有意识地提供它

Token:模型思考的单位

模型不读取字符或单词——它们读取 token,也就是文本块,在英语中大约相当于一个单词的 ¾。"Unbelievable"可能是 3–4 个 token;常见单词各占一个;一个空格、一个逗号或一段代码也都要消耗 token。你的输入以及模型的输出都会被计入,而 token 正是定价与限制所衡量的对象。

你不需要手动去数,但有个大致的感觉会有帮助:约 750 个英文单词 ≈ 约 1,000 个 token。输入一些内容看看:

2
25字符
~36估算 token 数

只是大致感受(约为 字符 ÷ 4,或 词 × 1.33)。token 计数因模型而异——切勿使用其他模型的分词器。需要精确数字请使用 Anthropic 的 token 计数接口。

:::tip 为什么这个比例会变化 普通英语接近每 token ¾ 个单词。代码、JSON、非拉丁文字、长 URL 和生僻词会被拆分成更多的 token——所以一个 500 行的文件或一段中文段落消耗的 token 比其字数所暗示的要多。当账单或限制让你意外时,通常就是这个原因。 :::

上下文窗口:工作记忆

上下文窗口是模型一次能够考虑的最大 token 数——*你的系统提示、到目前为止的整段对话、所有附加的文件,以及它正在撰写的回复,*全部加在一起。把它想象成模型的桌面:很大,但有限。窗口大小因模型而异,并且在不断增长——请查看模型与定价了解当前数字,而不是去记住某一个。

模型此刻所"知道"的一切都摆在那张桌面上:

当对话增长超过窗口时,最旧的内容会掉下去。这就是为什么一段很长的聊天似乎会"忘记"它是怎么开始的,或者偏离你最初的指令。

上下文腐烂:不只是的问题

还有一个更微妙的问题:即使所有内容仍然装得下,模型也倾向于比起中间更可靠地利用长输入的开头和结尾。把那唯一重要的一句话埋在 50 页粘贴内容的正中间,它可能会被低估权重——这种失效模式常被称为*"迷失在中间"*。

Guided walkthrough1 of 4
  1. 把真正的指令或问题放在前面,在粘贴长文档之前——而不是埋在它后面。

下面是同一个请求,经过组织后让指令位于强势位置:

指令在前,结尾重述

任务:找出这份合同中所有限制我方责任上限的地方,并引用确切的条款。

[... 在此粘贴完整的 40 页合同 ...]

任务提醒:仅列出责任上限条款,附上确切引用和章节编号。忽略其他一切内容。

:::tip 在 Claude Code 中 长时间的智能体会话会撞上同样的天花板。Claude Code 会有意地管理它——压缩历史记录,并让你掌控哪些内容留在视野之内。请参阅上下文管理上下文工程。 :::

记忆:默认情况下并不存在,除非你提供它

默认情况下,每段对话都是一张白纸。模型不记得你上一次的聊天。一切看起来像记忆的东西,无非是以下四种之一:

来源它是什么你如何控制它
重新发送的历史记录聊天应用每一轮都重新发送对话,直到窗口被填满开启全新的聊天;保持话题专注
记忆功能某些 Claude 界面会跨聊天携带事实跨聊天记忆设置
你提供的文件你有意附加的持久上下文项目CLAUDE.md
你自己的代码API 是无状态的——你需要重新发送之前的消息第一次 API 调用

贯穿始终的道理:如果你想让模型记住某件事,你就得不断地把它放回桌面上。

为什么这很重要

几乎每一个"它忽略了我之前的指令"或"它跟丢了"的问题,都可以追溯到三件事之一:窗口被填满了、一段新会话从零开始,或者关键细节埋在了一段长粘贴内容的死寂中段。明白了这一点,你就会去组织你的提示和会话,让重要的内容始终保持在视野之内

自我检测

Check yourself

0/3
  1. 750 个普通英文单词大约是多少个 token?
  2. 一段长聊天开始'忘记'它是怎么开始的。最可能的原因是:
  3. 你必须粘贴一份庞大的文档外加一条关键指令。最佳的放置方式?

关键术语

牢记词汇
按 Enter 或空格键翻转卡片。使用左右方向键在卡片之间切换。已显示术语。
1 / 4

:::note 要点

  • Token 既是思考的单位,也是计费的单位——每 750 个英文单词约 1,000 个,代码和其他文字会更多。
  • 上下文窗口是一张有限的桌面;长聊天之所以会忘记,是因为旧内容掉下去了。
  • 即便在窗口之内,也要把你的指令放在前面,并在结尾重述——中间会被利用不足。
  • 默认情况下没有记忆。要有意地提供它:用文件、项目、CLAUDE.md,或者通过重新发送历史记录。 :::

下一步