本文来自 Anthropic Claude Code 团队成员,宣布 /usage 工具更新,并基于客户反馈详细指导如何管理 100 万 token 上下文窗口,以减少上下文腐化(context rot)对模型性能的影响。

文章解释了关键技巧:使用 /rewind 回溯修正错误、/compact 主动总结会话、启动子代理处理独立子任务,以及在新任务开始时新建会话,避免不必要文件重读。

这些策略帮助用户在长会话中保持模型高效,作者建议在每个回复后评估分支选项(如继续、压缩或清空),以提升复杂编程任务的可靠性和成本效益。

作者 Thariq(@trq212)是 Anthropic Claude Code 团队成员,曾参与 YC W20 项目,并有 MIT Media Lab 背景。他专注于 AI agent 与上下文管理,致力于打造“通往仁爱机器”的工具,帮助开发者高效利用长上下文窗口。

今天,我们针对 /usage 命令发布了新更新,旨在帮助你更好地了解在使用 Claude Code 时的额度消耗情况。这次更新源于我们与客户的大量交流。

在这些交流中,我们反复发现,用户在管理会话(Session)的方式上存在巨大差异,尤其是在 Claude Code 最近更新支持 100 万(1M)上下文之后。

你是倾向于在终端里只保持一两个长期开启的会话?还是每发一条指令都开启新会话?你什么时候会用到 compact(压缩)、rewind(回退)或 subagents(子智能体)?是什么导致了“糟糕的压缩”?

这里隐藏着惊人的细节,它们会直接塑造你的 Claude Code 使用体验,而核心几乎都指向一点:管理你的上下文窗口

上下文、压缩与“上下文腐化”入门

图像

上下文窗口(Context Window)是模型在生成下一个响应时能一次性“看到”的所有内容。它包括你的系统提示词(System Prompt)、此前的对话、每一次工具调用及其输出,以及读取过的每一个文件。Claude Code 拥有高达 100 万 token 的上下文窗口。

遗憾的是,使用上下文是有隐含成本的,这通常被称为上下文腐化(Context Rot)。这种现象是指:随着上下文的增长,模型性能会下降。因为注意力被分散到了过多的 token 上,陈旧且无关的内容开始干扰当前任务的完成。

上下文窗口是一个“硬限制”。当你接近窗口上限时,你需要将当前任务总结成一段较短的描述,并在新的上下文窗口中继续工作,我们称之为压缩(Compaction)。你也可以手动触发压缩。

图像


每一轮对话都是一个分叉点

假设你刚刚让 Claude 完成了一项任务,现在你的上下文中已经包含了一些信息(工具调用、输出、你的指令)。此时,对于下一步操作,你有以下几种选择:

  • 继续(Continue) —— 在同一个会话中发送下一条消息。

  • 回退(/rewind 或双击 Esc) —— 跳回到之前的某条消息,并从那里重新开始。

  • 清除(/clear) —— 开启一个全新会话,通常带上你从上个会话中提炼的简报(Brief)。

  • 压缩(Compact) —— 让模型总结目前的会话,并在总结的基础上继续。

  • 子智能体(Subagents) —— 将下一块工作委托给一个拥有“干净上下文”的代理,只将其最终结果取回。

虽然“继续”是最自然的反应,但其他四个选项才是管理上下文的关键工具。

图像


何时开启新会话?

你是该维持一个长会话,还是开个新的?我们的经验法则是:当你开始一项新任务时,就应该开启一个新会话。

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

有时你处理的任务相互关联,部分上下文仍有必要,但不需要全部。例如,为你刚刚实现的功能编写文档。虽然你可以开新会话,但 Claude 必须重新读取那些文件,这会更慢且更贵。


用“回退”代替“修正”

图像

如果让我选一个最能体现良好上下文管理习惯的做法,那就是 rewind(回退)

在 Claude Code 中,双击 Esc(或运行 /rewind)可以让你跳回之前的任何一条消息并重新下达指令。该点之后的所有消息都会从上下文中移除。

回退通常是比修正更好的方法。 举个例子:Claude 读取了五个文件,尝试了一种方法,结果行不通。你的本能可能是输入“那没用,试试方法 X”。但更好的做法是回退到读取文件之后的那一刻,然后结合你刚学到的教训重新发指令:“别用方法 A,foo 模块没暴露那个接口——直接用 B 方案。”

你还可以使用“从此处总结”(summarize from here)让 Claude 总结它的经验教训,生成一条“交接消息”。这就像是“未来的 Claude”给“过去的 Claude”留的小便条,告诉它哪里踩坑了。

图像


压缩 vs. 开启新会话

当会话变得冗长时,你有两种减重方式:/compact 或 /clear(重新开始)。它们看起来很像,但逻辑完全不同。

Compact(压缩):要求模型总结目前的对话,然后用摘要替换历史记录。这是有损的,你在信任 Claude 去决定哪些信息重要。不过优点是你不需要自己写任何东西,而且 Claude 可能会更全面地保留重要的学习成果或文件引用。你也可以通过指令引导它(例如:/compact 重点关注 auth 重构,丢掉测试调试的部分)。

图像

Clear(清除):你亲自动手写下重点(“我们正在重构 auth 中间件,限制条件是 X,相关文件是 A 和 B,已排除方案 Y”),然后干干净净地开始。这更费力,但得到的上下文完全由你掌控。


为什么会产生“糟糕的压缩”?

图像

如果你经常运行长会话,可能会发现有时压缩后的效果很差。我们发现,当模型无法预测你工作方向时,通常会发生糟糕的压缩。

例如:在漫长的调试后触发了“自动压缩(autocompact)”,总结了整个排查过程。接着你的下一条消息是:“现在修复我们在 bar.ts 中看到的另一个警告。”

但因为之前的会话重点在调试上,那个“另一个警告”可能在摘要中被当做无关信息丢掉了。

这种情况非常棘手,因为受上下文腐化的影响,模型在进行压缩处理时,往往处于它能力最弱的时刻。有了 1M 上下文,你有更充裕的时间根据接下来的计划,主动运行带描述的 /compact


子智能体:新鲜的上下文空间

图像

子智能体(Subagents)也是一种上下文管理形式。当你预见到某项工作会产生大量你之后不再需要的中间输出时,它非常有用。

当 Claude 通过 Agent 工具派生出一个子智能体时,该子智能体拥有自己独立的、干净的上下文窗口。它可以完成繁重的工作,然后将结果合成一份最终报告返回给父节点。

我们的心理测试标准是:我以后还需要这些工具的原始输出吗?还是只需要结论?

虽然 Claude Code 会自动调用子智能体,但你也可以显式地引导它。例如:

  • “启动一个子智能体,根据以下 spec 文件验证这项工作的成果。”

  • “派一个子智能体去研究另一个代码库,总结它们是如何实现 auth 流程的,然后你自己按同样的方式实现。”

  • “派一个子智能体根据我的 git 改动为这个功能编写文档。”

总结

总之,每当 Claude 完成一轮对话,而你准备发送新消息时,都是一个决策点

随着时间的推移,我们希望 Claude 能自动帮你处理这些选择。但目前,学会这些技巧是你引导 Claude 输出高质量代码的最佳方式。

图像

参考阅读

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐