Claude Code 上下文窗口满了?压缩、清空还是重新开始
Claude Code 或其他编程智能体的上下文快用完时,在压缩、清空和新建会话之间做出选择,并用交接说明保留已做的决定。
Claude Code 的上下文窗口快满时,会自行处理:先清掉较早的工具输出,必要时再把对话总结成摘要。这样一来,早先的指令可能会丢失,所以最好由你先做选择。如果还在做同一个任务,运行 /compact,并附上一句说明要保留什么。如果接下来要做无关的工作,运行 /clear。如果智能体总是忘记已经做出的决定,就写一份简短的交接说明,用它开启一个新会话。
其他编程智能体的命令可能不同,但面临的选择是一样的。如果智能体会报告上下文用量,Mono 可以显示上下文已经用了多少,不过压缩和清空仍由智能体完成。
1. 了解是什么占满了上下文窗口
上下文里装着智能体工作所依据的一切:你的消息和它的回复、它读过的文件、命令和测试的输出、已连接 MCP 服务器提供的工具列表,以及启动时加载的指令文件。一份很长的测试日志,占用的空间可能比你输入的所有内容还多。
上下文快满的迹象:
- 智能体违反了你之前给它的规则。
- 它问了一个你已经回答过的问题。
- 出现上下文即将用完的警告。
在 Claude Code 中,/context 会显示哪些内容在占用空间。它的工作原理概述解释了接近上限时会发生什么。
举个虚构的例子:你让智能体把“tidy-recipes”中 30 个文件从旧的日期辅助函数 oldDate() 迁移到新的 formatDate()。两个小时后,它又问了一遍该用哪个库。/context 显示窗口快满了。
2. 在压缩、清空和新会话之间做选择
压缩会在同一个会话中用一份摘要替换原有对话。清空或新建会话会丢掉整段对话,但指令文件会重新加载。每种选择都会损失一些东西:
| 情况 | 怎么做 | 会丢失什么 |
|---|---|---|
| 同一个任务,进展顺利 | 压缩,并附上重点说明 | 摘要没有收录的细节 |
| 接下来做无关的工作 | 清空,或新建会话 | 整段对话 |
| 智能体忘记已做的决定 | 写交接说明,新建会话 | 交接说明里没写到的内容 |
重点说明用来告诉智能体在摘要里保留什么,例如 /compact Focus on date decisions and failing tests(意思是“重点保留日期相关的决定和失败的测试”)。Claude Code 的成本管理指南演示了这种用法,还建议在 /clear 之前先运行 /rename,这样之后可以用 /resume 重新打开这个会话。
在这个例子里,智能体已经忘了一个决定,所以应该写交接说明。
3. 重置前写好交接说明
交接说明是写给新会话的一段简短笔记。你可以自己写,也可以修改智能体起草的版本:
Goal: Replace oldDate() with formatDate() in recipes/ (30 files).
Done: 18 files, on branch tidy-dates.
Decisions: formatDate() uses Intl.DateTimeFormat, so no new library.
Keep oldDate() for importing v1 files, which use the old format.
Open problem: The recipes/print.ts test has failed since the change.
Next step: Fix print.ts, then move the remaining 12 files.每个决定都要写明理由,否则下一个会话可能会把它推翻。把这份说明保存在项目里或你的笔记中,并导出对话,以备之后需要查看细节。
然后运行 /clear,或在同一个项目中新建会话,只粘贴交接说明,不要粘贴完整的对话记录。
4. 把长期规则移出对话
有些纠正不只对一个任务有用。如果你总在重复“使用项目自己的日期辅助函数”或“用项目的脚本运行测试”,就把这条规则写进项目的指令文件,例如 AGENTS.md 或 Claude Code 的 CLAUDE.md。新会话会读取这个文件,所以重置后规则不会丢失。
这个文件要写得简短,因为每个会话都会加载它。成本管理指南建议把 CLAUDE.md 控制在 200 行以内。“30 个文件已完成 18 个”这类进度信息应留在交接说明里。该写些什么,请看 AGENTS.md 指南。
例子中关于 v1 的规则也应该写进去:只要还有 v1 文件,这条规则就一直有效。
5. 减少每一轮新增的内容
每一轮占用的上下文越少,窗口就能撑得越久。每次发出请求前:
- 写明文件和函数,而不是只说“修一下日期”。
- 只粘贴相关的错误行,不要粘贴整份日志。
- 只运行需要的测试,并且只显示失败项。
- 断开项目用不到的 MCP 服务器。
- 如果智能体支持,把大范围的搜索交给子智能体(subagent)。
- 每个会话只做一个任务。
成本管理指南介绍了其中大部分做法,包括一个过滤测试输出的钩子(hook)。
6. 重置后检查智能体
在新会话修改任何内容之前,让它复述目标、已做的决定和下一步,再把回答和你的交接说明对照。在这个例子里,它应该不用提示就说出 v1 规则。如果漏了什么,现在就纠正。然后在它继续之前,审查它的第一份差异(diff),也就是对 print.ts 的修复。代码审查指南里有一份检查清单。
在 Mono 中,如果智能体会报告用量,消息框上方会有一个小圆环显示已用的上下文。用到一半时它由绿色变为橙色,用到 80% 时变为红色;按下圆环会显示“上下文:已用量 / 总量”。输入“/”会列出智能体提供的斜杠命令。根据 Agent Client Protocol,是否公布这些命令由智能体自行决定。想重新开始时,先用“导出对话”保存旧对话,再在项目卡片上选择“新建会话”(电脑已连接时,在手机上也可以操作)。Mono 还没有正式推出,你可以加入候补名单。
