--- title: 使用Claude Code:session管理与1M上下文 source_url: https://mp.weixin.qq.com/s/IOSlKDkKVB1djBO0RpOSgA publish_date: 2026-05-09 tags: [wechat, article, claude, agent, harness] review_value: 7 review_confidence: 7 review_recommendation: neutral ingested: 2026-05-16 sha256: 45c85099f6c12e1ab04055d37325f28869f2d801ae63b2a75e6f6630a1d35649 --- # 使用Claude Code:session管理与1M上下文 本文来自 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 输出高质量代码的最佳方式。 ## 参考阅读 * [ 很多企业做完 AI PoC,为什么还是上不了生产 ]() * [ 一名谷歌工程师如何利用 Claude Code 简化 80% 工作 ]() * [ Cursor如何把一个通用模型,训成顶级编程 Agent ]() * [ 长时自主Agent,先解决这8个Harness核心问题 ]()