日常使用Claude Code,开发者常常遇到突然变笨的窘境。
你管理百万Token上下文窗口的手段,决定AI助手的智商上线。
Anthropic刚刚发布一份Claude Code实践指南,手把手教你利用回溯、压缩和子智能体功能,防止模型性能衰退。
认清上下文腐烂
开发者通过新推出的/usage斜杠命令,看清了系统资源消耗的真实情况。
Anthropic在与客户沟通中发现,大家管理会话的习惯天差地别。有人始终在终端保留长连接会话,有人每输入一条指令就新建窗口。
面对百万Token的超大上下文更新,不懂得管理窗口容量,极易引发严重问题。
上下文窗口是模型生成下一条回复时能同时查阅的所有信息总和。
系统提示词、过往对话记录、每次工具调用过程、输出结果、所有被读取过的文件,统统堆积在广阔的存储空间里。
占用大量上下文会引发性能衰退,业内称之为上下文腐烂(Context rot)。
随着内容不断膨胀,模型的注意力被强行分散到海量Token上,早期不相关的旧内容开始严重干扰当前任务。
窗口容量存在硬性物理上限。逼近极限时,系统会自动将你正在处理的任务浓缩成一段简短描述,让模型带着精简记忆在全新的窗口中继续工作。
工程师将该操作称为压缩(Compact)。用户随时可以手动触发该功能。
每次对话都是岔路口
当你给Claude下达指令并得到回复后,历史记录里已经塞满了刚才的操作步骤。
面对下一步任务,你拥有五个走向不同的选择。
继续对话:直接在同一会话中发送新消息。
回溯:/rewind命令,直接跳转回之前的某条消息,从那个节点重新尝试。后续冗余信息会被彻底抹除。
清除:输入/clear开启全新会话,通常附带一份你从刚才对话中提炼出的简报。
压缩:要求模型总结当前会话,带着摘要继续前行。
子智能体:把下一阶段工作委托给一个拥有纯净上下文环境的独立程序,主会话只接收它返回的最终结果。
顺着原有对话继续聊最符合人类直觉,剩下四个选项全是为了帮你对抗上下文腐烂。
回溯远比纠错高效
开启全新任务时,务必启动全新会话。利用百万Token窗口从零开始构建全栈应用程序,必须时刻警惕上下文腐烂。
处理高度关联的任务时,保留旧会话能省下大量成本。为你刚刚写完的功能模块编写开发文档,开启新会话会让Claude重新读取所有代码文件,既拖慢速度又白白浪费系统资源。
发现方向错误时,回溯往往比口头纠错更加实用。
Claude读取了5个文件,尝试了一种方案,最终宣告失败。人类本能反应是敲下一句“刚才那个方法行不通,改用方案X试试”。
更聪明的做法是,回溯到模型刚刚读取完文件那一刻,用你新学到的信息重新下达指令。“不要用方案A,foo模块没有暴露该接口,直接使用方案B”。
保留有用的文件读取记录,剔除失败的尝试过程,能让存储空间始终保持纯净。
你还可以利用“从这里开始总结”功能,让Claude提炼刚才学到的教训,生成一条交接消息。
这就好比让未来的Claude给过去的自己发送一份避坑指南,明确告知哪条路走不通。
压缩与清除的博弈
会话变得冗长时,甩掉多余包袱势在必行。
压缩和清除都能达成目的,底层逻辑完全不同。
压缩是让模型自己提炼对话历史,用简短摘要替换长篇大论。操作过程存在细节损耗,好处是你不用亲自动手打字,Claude往往能更全面地保留重要的经验教训与文件信息。
你可以通过附加指令引导压缩方向,输入/compact命令并告诉它“把重点放在权限验证代码重构上,丢弃刚才调试测试用例的记录”。
采用清除命令时,必须由你亲自写下核心要点。“我们正在重构权限验证中间件,约束条件是X,相关文件是A和B,我们已经排除了方案Y”。写完具体约束,开启纯净状态重新出发。
付出更多劳动的回报,是获取绝对精准的上下文控制权。
自动压缩机制有时会带来极其糟糕的体验。在长时间运行的会话中,模型无法准确预测你下一步的工作方向,自动提炼极易偏离重点。
经过漫长的代码调试,自动压缩被触发,模型将数小时的排查过程浓缩成一份摘要。你的下一条消息是“现在去修复bar.ts文件里出现的另一个警告”。由于刚才的会话重心全在调试代码上,另一个警告早就被模型当成无关信息从摘要中丢弃了。
面临上下文腐烂时,模型正处于智力最低谷,让处于低谷期的程序进行压缩决策,风险奇高。
拥有百万Token的宽广空间,你有充足的时间在触发自动边界前,带着明确的目标描述,主动进行手动提炼。
用子智能体隔离噪音
明确知道接下来的工作会产生大量不再需要的中间数据时,呼叫子智能体。
Claude通过Agent工具生成子程序时,该程序会获得一个干干净净的独立上下文窗口。它可以在独立空间里完成所有繁杂工作,最后进行综合提炼,只把一份最终报告呈递给父级主会话。
Anthropic内部工程师判断是否调用该程序的标准极其简单,我是需要再次查看各类工具的输出内容,还是只需要一个最终结论。
系统会在需要时自动调用子程序,你也可以在提示词里明确下达调用指令。
“启动一个子智能体,根据以下规范文件验证该项工作的结果”。
“派生一个子智能体,去阅读另一个代码库,总结他们是如何实现鉴权流程的,由你按照同样的方式在此处实现”。
“派生一个子智能体,根据我提交的git变更记录编写关于该功能的文档”。
下面这份决策清单整理了不同场景下的最佳应对策略。
精准掌控上下文窗口,是每一位顶尖工程师驾驭AI的必修课。
参考资料:
https://claude.com/blog/using-claude-code-session-management-and-1m-context