几轮对话后 Claude 变笨了
用了几个月 Claude Code 之后, 我遇到了一个奇怪的现象: 同一个会话, 做到后面感觉 Claude 变蠢了。
不是你的错觉, 也不是模型的问题。是上下文炸了。
上下文是怎么炸的
Claude 的工作记忆是有限的。会话一开始, 它清楚地记得目标是什么、做了哪些决策、还有哪些事没做完。到了第 50 轮, 上下文里塞满了走过的弯路、讨论过的方案、和你争论的对话历史。
输出质量下降是必然的。
每轮对话都是检查点
Claude Code 有一个很方便的机制: 每发出一条 prompt 就会自动创建一个快照。不只是记对话, 还会快照被修改的文件状态。
按两次 Escape 或者输入 /rewind, 会打开回退菜单。你可以选择:
- 只回退对话
- 只恢复代码
- 两者都回退
- 从某个节点开始压缩
有了这个, 你可以大胆地让 Claude 尝试高风险方案。不行就回退, 不丢任何代码。检查点会随会话保存, 关掉终端回来还能继续回退。
但要注意: 检查点只追踪 Claude 通过编辑工具做的修改。通过 Bash 命令或外部进程改的东西不在此列。它不是 git 的替代品。
几个习惯, 保持上下文干净
走偏了立刻打断
按 Escape 中断它。按两次 Escape 打开回退菜单, 可以回滚到之前的状态。
我踩过的一个坑: 当 Claude 反复回到一个错误假设的时候, 我下意识用了 /compact。结果它把那个错误假设也保留了, 问题没解决。正确做法是:
- 最好的是
/clear清空, 用更精确的 prompt 重新开始 - 如果你想保留当前的关键上下文, 用
/compact 只保留 API 变更相关的部分, 丢掉调试过程——加上 focus 指令告诉它该留什么
常用命令
/clear: 任务之间清空上下文, 别让上个任务的逻辑污染下个任务/compact: 加 focus 指令, 用在长而连贯的会话里, 保留关键部分丢掉噪音- Subagent: 把大量研究类的工作交给它, 在独立上下文里完成, 还你一个总结
/rename: 给重要的会话打标签, 方便之后找回
我自己用的土办法
每次完成一个逻辑单元——一个函数、一个组件——就 git commit, 然后 /clear, 再开始下一个。
这样每段会话的上下文都很干净, Claude 不会因为前面的决策影响后面的工作。
把重复工作打包成 Skill
如果你发现自己经常干同一类活——比如 review 新代码、加单元测试、分析构建性能——把这些流程打包成 skill。
Skill 本质上是可复用的指令集, 放在项目目录下就能用斜杠命令调用:
.claude/skills/code-review.md → /review
.claude/skills/write-tests.md → /tests
一个 skill 文件里写清楚: 目标是什么、要读哪些文件、输出什么格式、怎么验证结果。
Subagent 帮你分担
Subagent 是在独立上下文里跑的小 agent, 它干完活把结果给你, 不会污染你的主会话。
适合 subagent 干的事:
- 大量文件的分析和搜索
- 独立的调研任务
- 用新视角审查主 agent 的代码
- 并行处理互不依赖的任务
MCP 连外部工具
MCP 是 Claude Code 连接外部数据的标准协议。配上之后, Claude 可以直接查数据库、调内部 API、读 Sentry 的错误日志, 不需要你来贴截图传话。
调试的时候体验特别好——你可以直接说 “查一下生产环境最近一个小时的错误分布”, 它自己去拉数据回来分析。
这些东西用熟了之后, 你会发现 agent 的能力边界被撑开了很多。从单会话的简单任务, 到多会话协作、外部工具联动——每一层都是在扩展你能交给 agent 做的事的范围。