Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Book: Claude Code VS OpenCode: Architecture, Design and The Road Ahead 章节: 第11章 — Claude Code的商业设计 Model: openai/gpt-5.4 Generated: 2026-04-01 Token Usage: 当前API环境不可见

11.5 多策略上下文压缩

Claude Code 的上下文管理非常商业化的一点,是它并不依赖单一的“总结一下历史对话”方案,而是在 services/compact/services/contextCollapse/ 下形成了一套多层压缩体系。可以把它理解成应对上下文溢出的五层防线。

第一层是 auto-compact,核心在 autoCompact.ts。它会估算当前 token 使用量,为摘要输出预留空间,计算有效上下文窗口,并在接近阈值时主动触发压缩。这里的关键思想是“先压缩,再爆掉”,而不是等 API 报 prompt-too-long 才补救。这是一种典型的商业工程选择:提前控制风险,避免会话在用户最需要连续性的时候突然中断。

第二层是 snip-compact,也就是历史裁剪式压缩。它与“全面重总结”不同,更像对旧上下文做局部切除或投影,把价值低、年代久、复用率差的历史段落从活动上下文里移出去。这样做的优点是更轻、更快,也更适合在长会话中持续运行。

第三层是 micro-compact,实现位于 microCompact.ts。这一层不直接针对整段对话,而是针对工具输出,尤其是那些体积巨大、但时效性很差的工具结果,例如文件读取、shell 输出、grep、glob、web fetch、web search 等。这个设计很聪明,因为真实编码代理里最膨胀的通常不是用户自然语言,而是工具返回结果。微压缩抓住了真正的大头。

第四层是 session memory compact,位于 sessionMemoryCompact.ts。Claude Code 不只是压缩表层对话,还会压缩会话记忆本身,同时确保 API 级别的不变量不被破坏,例如 tool_use 与 tool_result 的配对关系。换言之,它已经意识到 memory 也可能成为负担,因此 memory 本身也必须被治理,而不能无限增长。

第五层是 context collapse,对应 services/contextCollapse/。虽然某些外部构建可能对这一层做了裁剪,但架构意图很清楚:把更老的消息逐步折叠成更紧凑的摘要状态。它和普通压缩的区别在于,压缩更像应急措施,而 collapse 更像长期状态演化机制。前者是为了避免马上爆窗,后者是为了让超长会话从一开始就具备可持续性。

之所以说它是“多策略”,就在于每一层解决的问题都不同。auto-compact 负责总体阈值;snip-compact 负责裁掉低价值历史;micro-compact 负责缩短工具输出;session memory compact 负责记忆体积;context collapse 负责把陈旧历史转化为更稳定的摘要状态。五层机制并不是重复,而是面向不同失控模式的分工。

这种设计的商业价值非常直接。上下文越小,成本越低,延迟越稳,prompt-too-long 的概率越低,长会话体验也越可靠。对 Claude Code 来说,这不只是“更聪明的摘要系统”,而是高自治、长生命周期代理的必要基础设施。没有这种多层压缩,远程会话、长会话、协作会话都很难成立。

与 OpenCode 和 Oh-My-OpenCode 相比,Claude Code 在这里的优势不一定是单个策略最先进,而是它把多种策略同时纳入了统一产品体验。用户不需要精确理解每一层细节,系统会在不同场景下自动选择合适的缓冲与压缩手段。

这一节的结论很重要:未来优秀的代理系统,需要的不是更大的上下文窗口,而是更成熟的 上下文分层工程。Claude Code 的多策略压缩栈,正是这种工程观的代表。