Claude Code 会话管理与100万上下文实践
DataHot 速览
Anthropic 发布了 /usage 命令,帮助用户了解 Claude Code 的使用情况,该功能源于与客户的多次对话。文章讨论了用户管理会话的多种方式,特别是在更新到100万上下文后,如何通过继续、回退、清空或压缩等操作优化上下文窗口使用。还介绍了上下文窗口、压缩和上下文腐烂的概念,并强调会话管理对体验的重要影响。
为什么值得关注:数据从业者使用 Claude Code 等 AI 编码工具时,上下文管理直接影响效率和质量,本文提供了实用指南。
译文
AI 逐段翻译我们发布了/usage,这是一个新的斜杠命令,旨在帮助你了解如何使用Claude Code。此功能源于与客户的多次对话。
在这些通话中反复出现的问题是,用户管理会话的方式差异很大,尤其是在我们更新了Claude Code的100万上下文之后。
你只在终端中保留一个或两个会话吗?每次提示都开始新会话吗?何时使用compact、rewind或subagents?哪些因素会导致糟糕的compact或会话?
这里有很多令人惊讶的细节,它们能真正影响你使用Claude Code的体验,而几乎所有细节都源于管理你的上下文窗口。
关于上下文、压缩和上下文衰减的快速入门

上下文窗口是模型在生成下一个响应时能“看到”的所有内容,包括系统提示、当前对话历史、每次工具调用及其输出,以及已读取的每个文件。Claude Code的上下文窗口为一百万个tokens。
不幸的是,使用上下文会对性能产生轻微影响,这通常被称为上下文衰减。上下文衰减是指随着上下文增长,模型性能下降的观察结果,因为注意力分散到更多tokens上,而较旧的、无关的内容开始干扰当前任务。
上下文窗口是硬性限制,因此当接近上下文窗口末尾时,你正在进行的任务会被自动总结成较短的描述,模型会在新的上下文窗口中继续工作,我们称之为压缩。你也可以手动触发压缩。

每一轮都是分支点
假设你刚让Claude完成某件事——此时上下文中已有一些信息(工具调用、工具输出、你的指令),而接下来你有许多令人惊奇的选项:
- 继续— 在同一会话中发送另一条消息
/rewind(按Esc两次)— 跳回之前某条消息并从那里重新尝试/clear— 开启新会话,通常使用你从之前内容中提炼的简报- 压缩— 总结当前会话,并在总结基础上继续
- 子代理— 将下一部分工作委托给具有独立干净上下文的代理,并只将其结果带回
虽然最自然的做法是继续,但其他四个选项都是为了帮助你管理上下文。

何时开启新会话
什么时候保持长时间会话,什么时候开始新会话?我们的经验法则是:当你开始新任务时,也应该开启新会话。
虽然100万上下文窗口意味着你现在可以更可靠地完成更长的任务,例如从头构建全栈应用,但可能会出现上下文衰减。
有时你可能执行相关任务,部分上下文仍然必要,但并非总是如此。例如,为你刚实现的功能编写文档。虽然可以开启新会话,但Claude必须重新阅读你刚实现的文件,这会更慢且更昂贵。
用回退而非纠正

在Claude Code中,双击Esc键(或运行/rewind)可以跳回到之前任意一条消息并从那里重新提示。该点之后的消息将从上下文中移除。
回退通常是更好的纠正方法。例如,Claude读取了五个文件,尝试了一种方法但失败了。你的本能可能是输入“那没奏效,换X试试。”但更好的做法可能是回退到刚读完文件之后,并利用你学到的知识重新提示:“别用方法A,foo模块不暴露那个——直接采用B。”
你还可以使用“从此处总结”或/rewind斜杠命令,让Claude总结其学到的东西并创建交接消息,有点像未来的自己给之前迭代的Claude发消息说尝试过某方法但没用。
压缩与开启全新会话
一旦会话变长,你有两种方式来去除无关上下文:/compact或/clear(并重新开始)。它们感觉相似,但行为却大不相同。
压缩要求模型总结当前对话,然后用该总结替换历史记录。它是有损的,但你无需自己编写任何内容,Claude可能更彻底地包含重要的学习成果或文件。你还可以通过传递指令来引导它(/compact 专注于认证重构,放弃测试调试)。

使用/clear 时,你写下重要内容(“我们正在重构认证中间件,约束条件是X,重要文件是A和B,我们排除了方法Y”)并干净地开始。这更费功夫,但产生的上下文是你认为相关的。
是什么导致自动压缩效果不佳?
如果你运行许多长时间会话,你可能会注意到有时压缩特别糟糕。在这种情况下,我们经常发现,当模型无法预测你的工作方向时,就可能发生糟糕的压缩。
在上面的例子中,长时间调试后自动压缩会总结调查过程,而你的下一条消息是“现在修复我们在bar.ts中看到的那个其他警告。”
但由于会话专注于调试,那个其他警告可能被从总结中省略了。
这尤其困难,因为由于上下文衰减,模型在压缩时处于最不智能的状态。有了100万上下文,你可以有更多时间主动使用/compact,并附上你想做什么的描述。
子代理和新上下文窗口
子代理在你知道某部分工作会产生大量你不再需要的中间输出时,往往效果很好。
当Claude通过Agent工具生成子代理时,该子代理会获得自己的全新上下文窗口。它可以做尽可能多的工作,然后综合结果,只将最终报告返回给父代理。

我们在Anthropic使用的心理测试:我是否需要再次使用这个工具的输出,还是只需要结论?
虽然Claude Code会自动调用子代理,但您可能希望明确告诉它这样做。例如,您可能希望告诉它:
- “启动一个子代理,根据以下规范文件验证此工作的结果”
- “启动一个子代理,阅读其他代码库并总结其如何实现认证流程,然后您自己以相同方式实现”
- “启动一个子代理,根据我的git更改为此功能编写文档”
综合运用
为了帮助您选择使用哪个上下文管理功能,我们编制了这个有用的表格,概述了常见情况、应使用的工具以及原因。
| 情况 | 考虑使用 | 原因 |
|---|---|---|
| 同一任务,上下文仍然相关 | 继续 | 窗口中的所有内容仍然承载重要信息;不要付出重建的代价。 |
| Claude走错了路 | 回退(双击Esc) | 保留有用的文件读取,丢弃失败的尝试,根据您学到的东西重新提示。 |
| 任务中途但会话充满了过时的调试/探索内容 | /compact <提示> | 低努力;Claude决定什么重要。如果需要,可以用指令引导它。 |
| 开始一个真正的新任务 | /clear | 零腐化;您精确控制哪些内容继续保留。 |
| 下一步将生成大量输出,您只需要其中的结论(代码库搜索、验证、文档编写) | 子代理 | 中间工具噪音保留在子上下文中;只有结果返回。 |
我们期待看到您的成果。
立即开始使用Claude Code。
关于作者: Thariq Shihipar是Anthropic的技术人员,负责Claude Code。
这篇内容对你有用吗?
反馈只用于改善内容筛选,不等同于收藏