你跟 Claude 在一个会话里聊到第 50、60 轮,突然发现它开始”失忆”:忘记你 10 轮前定下的命名约定、把之前已经否决的方案又拿出来推荐、甚至在同一句话里前后矛盾。这不是 Claude 在偷懒,是上下文窗口的工作机制决定的——长会话注定会变不稳定,关键是知道什么时候 reset。
Claude 的上下文窗口(Sonnet 200K、Opus 200K-1M)虽然名义上很大,但模型对”末尾内容”的注意力远大于”中间内容”(lost-in-the-middle 现象)。聊得越长,早期决定越容易被忽视。
常见原因
按命中率从高到低:
1. 上下文接近窗口上限,老消息静默截断
当 input token 超过模型上限(200K 左右),UI 会自动从中间砍掉部分消息但不告诉你。砍掉的常常是”中段不那么近、不那么远”的内容——恰好是你早期的设计决定。
如何判断:Settings → Usage 看当前 input token,如果接近 180K-200K,几乎肯定有内容被截。
2. lost-in-the-middle:模型偏向首尾、忽略中间
即使上下文没满,模型对中间 30-70% 区间的回忆率显著下降。聊到 40 轮时,第 15-25 轮的决定就处在这个”遗忘带”里。
如何判断:让 Claude 复述第 N 轮的某个决定,复述模糊或缺失就是这种情况。
3. 同一问题前后给了相互矛盾的指令
第 5 轮你说”用 snake_case”,第 20 轮顺嘴说了句”camelCase 也行”,第 40 轮 Claude 就开始混用——因为它看到两个矛盾的”老板原话”。
如何判断:往回翻你自己的 prompt,找是否有自相矛盾的指令。
4. 大块 Artifact / 文件占满 attention budget
如果会话里有一个 5000 行的 Artifact,每次发问 Claude 都要把它读一遍,剩下能给”实际推理”的 attention 就少了。
如何判断:你是否在会话里保留了未关闭的大 Artifact?
5. 多个话题并行交织
一个会话里同时讨论 3 个 feature 的设计,每个都有自己的决定。Claude 会把它们的细节互相串味。
如何判断:会话主题是否单一?还是 A 问题 + B 问题 + C 问题混着聊?
6. Extended Thinking 累积影响
Thinking 模式的”内心独白”虽然不显示,但会占 context。多轮 thinking 后窗口被 thinking 内容稀释。
如何判断:你启用了 thinking 模式且对话很长。
最短修复路径
Step 1:让 Claude 自己输出”当前决策清单”
在乱掉的会话里发:
请把我们到目前为止做过的所有决定列成清单:
- 命名约定
- 架构选择
- 已经放弃的方案
- 还未定的开放问题
输出 markdown,不要新增任何评论。
复制这份清单。如果你觉得它列错了,自己改对——这就是你的”决策摘要”。
Step 2:开新会话,第一句就贴决策摘要
新会话第一句:
我们之前讨论过 X 项目,关键决定如下:
[贴上一步的清单]
请基于这些继续,不要重新讨论已定的事项。
新会话 attention 完全 fresh,远比硬撑着在旧会话里强。
Step 3:大资料用文件附件,不要直接粘
如果有 200 行以上的代码或文档,上传成附件,而不是用三个反引号粘进对话。附件在 Claude 内部是按需引用,比直接粘文本对 attention 更友好。
Step 4:单会话单主题
如果你在讨论 3 个 feature,开 3 个会话。把每个会话当一个 PR 或一个 issue 来管理,不要混。
Step 5:定期 /clear-style 重置
Claude Code 用户:/compact 命令让 Claude 压缩自身会话;网页端没有等价命令,但你可以手动:
请用 500 字总结我们到目前为止的:
1. 任务背景
2. 已完成的工作
3. 当前正在做的事
4. 下一步计划
之后我会开新会话,把这段贴进去继续。
Step 6:避免在长会话里改基础约定
如果你确实想从 snake_case 改成 camelCase,不要在第 40 轮顺嘴说——开新会话,重新规定一次。在旧会话里改,老约定还会”残影”存在 attention 里。
预防建议
- 设定 20-30 轮的硬阈值,到了就主动总结 + 开新会话,别等乱了再补救
- 长项目把”决定清单”维护在 Claude Project 的 Knowledge 里或外部 doc 里,每个会话开头引用
- 单会话单主题:不要在同一个会话里讨论 A、B、C 三个独立 feature
- 大资料用附件 / Projects Knowledge,不要直接 paste 入对话
- 重要决定(架构、约定)用 SYSTEM PROMPT 固定,不要靠 chat 里的”老板原话”
- Claude Code 长 session 主动用 /compact