Using Claude Code: Session Management & 1M Context

April 16, 2026

Using Claude Code: Session Management & 1M Context

作者:Thariq (@trq212) - Anthropic 技术团队成员
来源:https://x.com/trq212/status/2044548257058328723
发布日期:April 16, 2026
浏览量:1.5M Views
封面图

引言

在与 Claude Code用户的交流中,一个主题反复出现:1M token 的上下文窗口是一把双刃剑

它让 Claude Code 能够更长时间地自主运行、更可靠地处理任务,但如果你不刻意管理你的会话,它也为上下文污染敞开了大门。

会话管理比以往任何时候都更重要,围绕它似乎有很多问题:

  • 你是保持一个会话在终端中打开,还是两个?
  • 每次提示都从头开始吗?
  • 什么时候应该使用 compact、rewind 或 subagents?
  • 什么会导致糟糕的 compact?

这里有大量细节可以真正塑造你与 Claude Code 的体验,几乎所有这些都来自管理你的上下文窗口


一、Context、Compaction 与 Context Rot 快速入门

Context Window示意图 Context Window(上下文窗口) 是模型在生成下一个响应时能够"看到"的所有内容。它包括:
  • 你的系统提示(system prompt)
  • 到目前为止的对话
  • 每个 tool call 及其输出
  • 已读取的每个文件

Claude Code 的上下文窗口为 one million tokens

但使用上下文有一个代价,这通常被称为 Context Rot(上下文腐烂)

Context Rot 是一种观察:随着上下文增长,模型性能会下降,因为注意力分散到更多的 tokens 上,旧的、不相关的内容开始分散当前任务的注意力。

对于我们的 1M 上下文模型,我们观察到大约在 300-400k tokens 时会出现某种程度的 context rot,但这高度依赖于任务——不是一个硬性规则。

Compaction流程图

上下文窗口是硬性截止,所以当你接近上下文窗口的末尾时,你需要将你正在进行的任务总结成更小的描述,并在新的上下文窗口中继续工作,我们称之为 Compaction(压缩)。你也可以自己触发 compaction。


二、每个回合都是一个分支点

分支点示意图

假设你刚刚让 Claude 做某事,它已经完成了——现在你的上下文中有一些信息(tool calls、tool outputs、你的指令),你接下来有惊人的多种选择

| 选项 | 说明 |

|------|------|

| Continue | 在同一会话中发送另一条消息 |

| /rewind (Esc Esc) | 跳回到之前的消息,从那里重新尝试 |

| /clear | 开始新会话,通常带上你提炼的简报 |

| Compact | 总结到目前为止的会话,并在总结之上继续 |

| Subagents | 将下一块工作委派给一个有独立 clean context 的 agent,只将其结果拉回来 |

虽然最自然的方式是继续,但其他四个选项的存在是为了帮助你管理上下文。


三、何时开始新会话

新的 1M 上下文窗口意味着你现在可以更可靠地完成更长的任务,例如让它从头构建一个全栈应用。

仅仅因为你的模型没有用完上下文,并不意味着你不应该开始新会话

我们的经验法则是:当你开始新任务时,你也应该开始新会话

一个灰色地带是,你可能想做相关任务,其中一些上下文仍然必要,但不是全部。

例如,为你刚实现的功能编写文档。虽然你可以开始新会话,但 Claude 将不得不重新读取你刚实现的文件,这会更慢且更昂贵。由于文档可能不是一个高度依赖智能的任务,额外的上下文可能值得不必重新读取相关文件的效率增益。


四、Rewinding 而非 Correcting

Rewind示意图

如果我必须选择一个标志着良好上下文管理的习惯,那就是 rewind

在 Claude Code 中,双击 Esc(或运行 /rewind)让你跳回到任何之前的消息并从那里重新提示。该点之后的消息会从上下文中丢弃。

Rewind 往往是比 correction 更好的方法。

例如,Claude 读取了五个文件,尝试了一种方法,但不起作用。你的直觉可能是输入 "that didn't work, try X instead."

更好的做法是 rewind 到文件读取之后,用你学到的知识重新提示:"Don't use approach A, the foo module doesn't expose that — go straight to B."

Summarize from here示意图

你也可以使用 "summarize from here" 让 Claude 总结其学习内容并创建一个 handoff message,就像是未来的 Claude 给之前的 Claude 的消息,告诉它尝试了什么但失败了。


五、Compacting vs Fresh Sessions

Compact vs Clear对比图

一旦会话变长,你有两种方式来减轻重量:/compact/clear(并重新开始)。它们感觉相似,但行为非常不同。

/compact

Compact 要求模型总结到目前为止的对话,然后用该总结替换历史。

  • 它是 lossy 的——你信任 Claude 决定什么重要
  • 但你不需要自己写任何东西
  • Claude 可能在包含重要学习或文件方面更彻底
  • 你可以通过传递指令来引导它:/compact focus on the auth refactor, drop the test debugging

/clear

使用 /clear,你自己写下重要的内容:

  • "we're refactoring the auth middleware, the constraint is X, the files that matter are A and B, we've ruled out approach Y"
  • 然后 clean 开始
  • 更费力,但结果的上下文是你决定相关的内容

六、什么导致糟糕的 Compact?

如果你运行大量长时间运行的会话,你可能注意到 compacting 可能特别糟糕的时候。

在这种情况下,我们经常发现糟糕的 compacts 可能发生在模型无法预测你工作方向的时候

例如:

  • autocompact 在长时间调试会话后触发,总结了调查
  • 你的下一条消息是 "now fix that other warning we saw in bar.ts"
  • 但因为会话专注于调试,另一个 warning 可能已从总结中丢弃

这特别困难,因为由于 context rot,模型在 compacting 时处于最不智能的状态

有了 1M 上下文,你有更多时间主动使用 /compact 并附带你想要做什么的描述


七、Subagents 与 Fresh Context Windows

Subagents 是一种上下文管理形式,适用于你预先知道一块工作会产生大量你不再需要的中间输出时。

当 Claude 通过 Agent tool 生成 subagent 时,该 subagent 获得自己的 fresh context window。它可以做任意多的工作,然后合成其结果,只有最终报告返回给 parent。

我们使用的心理测试:我以后需要这个 tool output 吗,还是只需要结论?

虽然 Claude Code 会自动调用 subagents,但你可能想告诉它明确这样做。例如:

  • "Spin up a subagent to verify the result of this work based on the following spec file"
  • "Spin off a subagent to read through this other codebase and summarize how it implemented the auth flow, then implement it yourself in the same way"
  • "Spin off a subagent to write the docs on this feature based on my git changes"

八、总结

简而言之,当 Claude 结束一个回合,你即将发送新消息时,你有一个决策点

随着时间的推移,我们期望 Claude 会帮助你自己处理这个,但目前这是你可以引导 Claude 输出的方式之一。


附录:决策表格

| 场景 | 推荐 | 原因 |

|------|------|------|

| 同一任务,上下文仍相关 | Continue | 窗口中的内容仍在支撑,无需重建 |

| Claude 走错了方向 | Rewind (双击 Esc) | 保留有用的文件读取,丢弃失败的尝试,用学到的知识重新提示 |

| 任务中途,session 充满过时的调试/探索 | /compact | 低费力,Claude 决定重要内容。可附带指令引导 |

| 开始真正的新任务 | /clear | 零 rot,你完全控制什么内容向前传递 |

| 下一步会产生大量只需结论的输出 | Subagent | 中间工具噪音留在子 context,只返回结果 |


图片来源: 本文图片从原推文截图提取
原推文链接:https://x.com/trq212/status/2044548257058328723