YC科技资讯网

翻译下Claude的官方博客:使用 Claude Code:会话管理与 100

翻译下Claude的官方博客:使用 Claude Code:会话管理与 100 万上下文

使用 Claude Code:会话管理与 100 万上下文

你如何管理会话、上下文和压缩,会比你想象中更深地影响你使用 Claude Code 的结果。下面是一份实用指南,帮助你在每一个关键节点做出更合适的选择。

我们发布了 `/usage`,这是一个新的斜杠命令,用来帮助你了解自己在 Claude Code 中的使用情况。这个功能来自我们和客户进行的大量交流。

这些沟通里反复出现的一点是:用户管理会话的方式差异非常大,尤其是在 Claude Code 更新到 100 万上下文之后更是如此。

你是只开一个会话,还是在终端里长期保留两个会话?你会不会每次提问都新开一个会话?你会在什么时候使用 compact、rewind 或 subagents?什么情况会导致一次糟糕的 compact,或者一个糟糕的会话?

这里面有很多细节,它们确实会显著影响你的使用体验,而其中几乎所有问题都和你如何管理上下文窗口有关。

关于上下文、压缩和“上下文腐化”的快速说明

上下文窗口,是模型在生成下一次回复时能够“看到”的全部内容。它包括系统提示、到目前为止的对话、每一次工具调用及其输出,以及所有已读取的文件。Claude Code 的上下文窗口大小是 100 万 token。

遗憾的是,随着上下文变长,性能会受到轻微影响,这通常被称为 **context rot(上下文腐化)**。它指的是:随着上下文不断增长,模型的表现会逐渐下降,因为注意力会被分散到更多 token 上,而较早、较弱相关的内容也会开始干扰当前任务。

上下文窗口存在一个硬性上限。所以当你接近窗口末尾时,系统会自动把你一直在做的任务总结成一段更短的描述,然后在一个新的上下文窗口中继续工作。我们把这个过程叫做 **compaction(压缩)**。你也可以手动触发压缩。

每一轮都是一个分叉点

假设你刚刚让 Claude 做完一件事——现在上下文里已经累积了一些信息,包括工具调用、工具输出,以及你的指令。接下来你会发现,你其实有不少选择:

- **Continue** —— 在同一个会话里继续发下一条消息- **`/rewind`(按两次 Esc)** —— 回到之前某条消息,并从那里重新尝试- **`/clear`** —— 开启一个新会话,通常会带上一份你根据当前结果整理出来的简要任务说明- **Compact** —— 把当前会话压缩成摘要,然后在摘要之上继续- **Subagents** —— 把下一部分工作委托给一个拥有独立干净上下文的代理,只把结果带回主会话

最自然的做法通常是继续当前会话,但另外四个选项的存在,都是为了帮助你更好地管理上下文。

什么时候应该新开一个会话

什么时候应该保留一个长期运行的会话,什么时候又应该重新开始?我们的一般经验法则是:**当你开始一个新任务时,也应该开启一个新会话。**

100 万上下文窗口确实意味着你现在可以更稳定地处理更长的任务,例如从零开始构建一个全栈应用。但即使如此,context rot 依然可能发生。

有时你处理的是一些彼此相关的任务,之前的上下文依旧有价值,但这并不总是成立。比如,你刚刚完成了某个功能的实现,接着要写它的文档。这时你当然可以新开一个会话,但 Claude 就得重新读取你刚刚改过的那些文件,这样会更慢,也更贵。

用 Rewind 代替事后纠正

在 Claude Code 中,连按两次 Esc(或运行 `/rewind`)可以让你回到之前的任意一条消息,并从那里重新提示。那个时间点之后的消息都会从上下文里移除。

很多时候,**rewind 是比“纠正它”更好的修正方式**。例如,Claude 读了五个文件,尝试了一种做法,但没有成功。你的第一反应可能是输入:“这个方法不行,试试 X。”但更好的做法通常是:回退到刚完成文件读取的时候,再基于你刚学到的信息重新提示。比如:“不要用 A 方案,foo 模块并没有暴露那个接口,直接走 B 方案。”

你也可以使用 “summarize from here” 或 `/rewind` 斜杠命令,让 Claude 总结它已经学到的内容,并生成一段交接信息。它有点像是让未来那个试错过一次的 Claude,给过去的自己留下一条消息。

Compact 和重新开一个新会话的区别

当一个会话变得很长时,你有两种办法来丢掉多余的上下文:`/compact` 或 `/clear`(然后重新开始)。两者看上去相似,但行为方式很不一样。

**Compact** 会让模型把到目前为止的对话总结成摘要,然后用这个摘要替换掉原始历史。这个过程会有信息损失,但你不用亲自整理,而且 Claude 往往会更全面地保留重要结论或关键文件。你也可以通过参数引导它,例如:`/compact focus on the auth refactor, drop the test debugging`。

而在 **`/clear`** 的情况下,需要由你自己写下真正重要的内容,例如:“我们正在重构认证中间件,约束条件是 X,相关文件是 A 和 B,方案 Y 已经排除。”然后从一个干净的新会话开始。这更费力,但新上下文里留下来的内容完全由你决定。

什么会导致糟糕的自动压缩

如果你经常运行很长的会话,可能已经注意到某些情况下 compact 的效果会特别差。我们通常发现,**糟糕的 compact 往往发生在模型无法预测你接下来要往哪个方向推进时。**

比如,上下文是在一段很长的调试过程中触发自动压缩的;摘要主要围绕这次排障展开;接着你的下一条消息却是:“现在去修一下我们在 `bar.ts` 里看到的另一个 warning。”

由于此前整个会话都在关注调试,那个“另一个 warning”很可能已经在摘要里被丢掉了。

这类问题尤其棘手,因为受 context rot 影响,模型在进行压缩时,恰恰处在它智能表现最弱的阶段之一。有了 100 万上下文之后,你拥有了更多主动 `/compact` 的空间,也可以在压缩时明确说明你接下来想做什么。

Subagents 与全新的上下文窗口

当你预先知道某一段工作会产生大量中间输出,而这些中间输出之后基本不会再用到时,**subagents 往往很有效。**

当 Claude 通过 Agent 工具启动一个 subagent 时,这个 subagent 会得到一个全新的上下文窗口。它可以做完自己需要做的全部工作,然后把结果整合成一个总结,只把最终报告带回父会话。

我们在 Anthropic 内部常用的判断方式是:**我之后还需要这些工具输出本身,还是只需要最终结论?**

Claude Code 会自动调用 subagents,但你有时也会希望明确要求它这么做。例如,你可以这样指示它:

- “启动一个 subagent,根据下面这份规范文件验证这项工作的结果。”- “分出一个 subagent 去阅读另一个代码库,总结它是如何实现认证流程的,然后按同样方式完成实现。”- “分出一个 subagent,根据我的 git 改动来撰写这个功能的文档。”

综合起来看

为了帮助你判断在什么场景下该用哪种上下文管理方式,我们整理了下面这张表,列出常见情境、建议使用的工具,以及原因。

| 情境 | 建议使用 | 原因 ||---|---|---|| 还是同一个任务,而且上下文依然相关 | Continue | 窗口里的内容仍然都在发挥作用,没有必要付出成本去重新构建。 || Claude 走错了方向 | Rewind(双击 Esc) | 保留有用的文件读取结果,丢掉失败的尝试,再结合新认识重新提示。 || 任务进行到中途,但会话已经塞满了过时的调试或探索内容 | `/compact ` | 成本低;由 Claude 判断什么重要。你也可以通过提示引导它。 || 开始一个真正全新的任务 | `/clear` | 上下文最干净,没有腐化;由你决定哪些信息要带过去。 || 下一步会产生大量输出,而你之后只需要结论(例如代码库搜索、验证、写文档) | Subagent | 中间过程的工具噪音留在子代理自己的上下文里,主会话只接收最终结果。 |

我们期待看到你构建出的成果。

> 核心操作准则:同一任务继续推进用 Continue,走偏了用 Rewind,会话臃肿用 Compact,新任务直接 Clear,大量中间噪音交给 Subagent。How I AI