Claude Code 对话压缩机制:MicroCompact、AutoCompact、ManualCompact

背景 在长会话里,Agent 会不断积累历史消息、工具调用结果和中间思考,最终逼近模型上下文窗口上限。 claude-code 为了解决这个问题,没有只做一种“统一压缩”,而是设计了多层机制: MicroCompact:轻量、优先、尽量不动核心对话语义 AutoCompact:系统自动触发的总结式压缩 ManualCompact:用户显式触发的 /compact 这三层组合起来,本质是“先局部瘦身,再自动兜底,最后用户可控介入”。 1) Claude Code 的对话压缩机制整体是怎样的? 从源码看,压缩链路并不是单点触发,而是分布在请求前后与命令层: 请求前的轻量压缩(MicroCompact) 在 microCompact.ts 中先尝试清理“可压缩工具结果”(如 file read/shell/grep/glob/web fetch/search 等历史输出),减少噪声 token。 接近阈值时的自动压缩(AutoCompact) 在 autoCompact.ts 中根据 token 使用量与阈值比较,超过阈值后触发自动压缩流程(优先 session memory compact,不行再走 compactConversation 生成摘要替换长历史)。 用户手动压缩(ManualCompact) /compact 命令在 src/commands/compact/compact.ts 中实现,可由用户主动触发,还支持附加摘要指令(例如“总结时更关注 bug 线索”)。 2) 三种压缩方式分别在什么情况下触发? 2.1 MicroCompact 触发时机 A. 时间驱动触发(time-based) microCompact.ts 里有 evaluateTimeBasedTrigger(): 当满足以下条件时触发: time-based 配置启用 querySource 是主线程会话 当前距离上一条 assistant 消息的时间间隔超过 gapThresholdMinutes 触发后会清空较旧 tool_result 内容,只保留最近 keepRecent 条,清空内容替换为: [Old tool result content cleared]。...

April 23, 2026 · 1 min · LwQ