使用 Claude Code:会话管理与 1M 上下文

@trq212
英语3个月前 · 2026年4月15日
2.4M
8.5K
1.0K
288
16.0K

TL;DR

本指南介绍了如何通过回溯、压缩以及利用子 Agent 等技术来管理大上下文窗口,从而优化 Claude Code 的性能。

在我最近与 Claude Code 用户的交流中,一个主题反复出现:100 万 token 的上下文窗口是一把双刃剑。

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

会话管理比以往任何时候都更重要,而且似乎有很多关于它的问题。你是保持一个终端会话打开,还是两个?每次提示都重新开始?什么时候应该使用 compact、rewind 或 subagents?什么会导致糟糕的 compact?

这里有很多细节,它们确实能塑造你使用 Claude Code 的体验,而且几乎所有这些都来自于管理你的上下文窗口。

上下文、压缩与上下文衰减快速入门

Thariq - inline image

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

不幸的是,使用上下文会带来一点代价,通常被称为上下文衰减。上下文衰减是指随着上下文增长,模型性能下降的现象,因为注意力分散到更多 token 上,而旧的、不相关的内容开始干扰当前任务。对于我们的 1MM 上下文模型,我们看到在约 300-400k token 时会出现一定程度的上下文衰减,但这高度依赖于任务——并非硬性规则。

上下文窗口是一个硬性截断,所以当你接近上下文窗口的末尾时,你需要将你一直在处理的任务总结成一个更小的描述,并在一个新的上下文窗口中继续工作,我们称之为压缩。你也可以自己触发压缩。

Thariq - inline image

每一步都是分支点

假设你刚刚让 Claude 做某事并完成了,现在你的上下文中已经有了一些信息(工具调用、工具输出、你的指令),而且对于下一步做什么,你有相当多的选择:

  • 继续 — 在同一会话中发送另一条消息
  • /rewind (esc esc) — 跳回之前的某条消息,然后从那里重新尝试
  • /clear — 开始一个新会话,通常带有一个你从刚才学到的东西中提炼出的简报
  • Compact — 总结到目前为止的会话,并在总结的基础上继续
  • Subagents — 将下一部分工作委托给一个拥有自己干净上下文的 Agent,然后只将其结果拉回来

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

Thariq - inline image

何时开始新会话

新的 100 万上下文窗口意味着你现在可以更可靠地完成更长的任务,例如让它从头构建一个全栈应用。但仅仅因为你的模型没有耗尽上下文,并不意味着你不应该开始一个新会话。

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

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

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

回退而非纠正

Thariq - inline image

如果让我选一个标志良好上下文管理的习惯,那就是回退。

在 Claude Code 中,双击 Esc(或运行 /rewind)可以让你跳回之前的任何一条消息,然后从那里重新提示。该点之后的消息将从上下文中删除。

回退通常是比纠正更好的方法。例如,Claude 读取了五个文件,尝试了一种方法,但没有成功。你的本能可能是输入“那没成功,试试 X 吧。”但更好的做法是回退到文件读取之后,然后用你学到的东西重新提示。“不要用方法 A,foo 模块没有暴露那个——直接去 B。”

你也可以使用“从这里总结”让 Claude 总结它的学习成果并创建一个交接消息,有点像来自未来自己的消息,告诉之前的 Claude 尝试了某事但没有成功。

Thariq - inline image

压缩 vs. 全新会话

一旦会话变长,你有两种方式来减轻负担:/compact 或 /clear(然后重新开始)。它们感觉相似,但行为截然不同。

Compact 要求模型总结到目前为止的对话,然后用该总结替换历史记录。它是有损的,你信任 Claude 来决定什么重要,但你不需要自己写任何东西,而且 Claude 可能更彻底地包含重要的学习成果或文件。你也可以通过传递指令来引导它(/compact focus on the auth refactor, drop the test debugging)。

Thariq - inline image

使用 /clear,写下重要的内容(“我们正在重构认证中间件,约束是 X,重要的文件是 A 和 B,我们已经排除了方法 Y”),然后重新开始。这需要更多工作,但最终的上下文是你认为相关的内容。

什么导致糟糕的压缩?

Thariq - inline image

如果你运行了很多长时间运行的会话,你可能已经注意到有时压缩可能特别糟糕。在这种情况下,我们经常发现糟糕的压缩可能发生在模型无法预测你工作方向的时候。

例如,自动压缩在一次长时间的调试会话后触发,总结了调查过程,然后你的下一条消息是“现在修复我们在 bar.ts 中看到的那个警告。”

但由于会话集中在调试上,那个警告可能被从总结中丢弃了。

这尤其困难,因为由于上下文衰减,模型在压缩时处于最不智能的状态。拥有一百万上下文,你有更多时间主动使用 /compact,并附上你想做什么的描述。

Subagents 与全新上下文窗口

Thariq - inline image

Subagents 是一种上下文管理形式,当你预先知道某部分工作会产生大量你不再需要的中间输出时,它们很有用。

当 Claude 通过 Agent 工具生成一个 subagent 时,该 subagent 会获得自己的全新上下文窗口。它可以做它需要做的所有工作,然后综合其结果,只将最终报告返回给父级。

我们使用的心理测试是:我还会需要这个工具输出吗,还是只需要结论?

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

  • “启动一个 subagent 来根据以下规范文件验证这项工作的结果”
  • “启动一个 subagent 来阅读另一个代码库,总结它如何实现认证流程,然后你自己以同样的方式实现”
  • “启动一个 subagent 来根据我的 git 变更为这个功能编写文档”

总结

总之,当 Claude 完成一个回合,你即将发送一条新消息时,你有一个决策点。

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

Thariq - inline image
存到 YouMind

使用 YouMind 深度阅读爆款文章

保存原文、追问细节、总结观点,并在一个 AI 工作空间里把爆款文章沉淀成可复用笔记。

了解 YouMind

更多可拆解样本

近期爆款文章

探索更多爆款文章