Claude Code 源码解析 (12):上下文压缩与恢复技术
导读: 这是 Claude Code 20 个功能特性源码解析系列的第 12 篇,深入分析上下文管理系统的架构设计。
📋 目录
问题引入:上下文窗口的限制
痛点场景
场景 1:长对话丢失上下文
1 | 用户:"帮我分析这个项目..." (长篇说明) |
场景 2:Token 超限
1 | 上下文窗口:128K tokens |
场景 3:重要信息被压缩掉
1 | 对话历史: |
核心问题
设计 AI 助手的上下文管理系统时,面临以下挑战:
窗口限制问题
- 如何突破 Token 限制?
- 如何保留重要信息?
压缩质量问题
- 如何智能压缩?
- 如何不丢失关键信息?
恢复问题
- 压缩后如何恢复?
- 如何保持上下文连贯?
性能问题
- 压缩操作本身消耗 Token
- 如何平衡压缩成本?
Claude Code 用智能上下文压缩机制解决了这些问题。
技术原理:上下文压缩架构
整体架构
1 | ┌─────────────────────────────────────────────────────────────┐ |
Token 计数器
1 | class TokenCounter { |
压缩策略
1 | class CompressionStrategy { |
上下文恢复
1 | class ContextRestorer { |
设计思想:为什么这样设计
思想 1:分级压缩
问题: 一刀切的压缩会丢失重要信息。
解决: 根据超出程度分级压缩。
1 | 超出程度 压缩策略 Token 回收 信息保留 |
设计智慧:
压缩程度与信息价值成正比。
思想 2:记忆提取
问题: 压缩会丢失长期有价值的信息。
解决: 提取到记忆系统。
1 | // 压缩前 |
记忆类型:
| 类型 | 示例 | 保留时间 |
|---|---|---|
| 用户偏好 | “使用 TypeScript” | 永久 |
| 项目上下文 | “Monorepo 结构” | 项目周期 |
| 技术决策 | “选择 PostgreSQL” | 长期 |
| 临时信息 | “今天的待办” | 短期 |
思想 3:按需恢复
问题: 压缩后信息无法访问。
解决: 按需恢复。
1 | // 用户问:"我之前说过要用什么语言?" |
恢复策略:
- 关键词触发 - 检测到相关关键词时恢复
- 语义检索 - 基于语义相似度检索
- 主动注入 - 在系统提示中注入相关记忆
思想 4:预算感知
问题: 压缩操作本身消耗 Token。
解决: 预算感知压缩。
1 | // 压缩前计算预算 |
思想 5:渐进式压缩
问题: 一次性压缩可能过度。
解决: 渐进式压缩。
1 | 初始状态:150K tokens (超出 22K) |
解决方案:完整实现详解
ContextManager 实现
1 | export class ContextManager { |
配置示例
1 | # ~/.openclaw/config/context.yaml |
OpenClaw 最佳实践
实践 1:查看上下文状态
1 | # 查看当前上下文使用 |
实践 2:手动压缩
1 | # 压缩上下文 |
实践 3:查看提取的记忆
1 | # 列出记忆 |
实践 4:恢复压缩的上下文
1 | # 恢复特定会话的上下文 |
实践 5:配置压缩策略
1 | # ~/.openclaw/config/context-custom.yaml |
总结
核心要点
- 分级压缩 - 根据超出程度选择策略
- 记忆提取 - 保留长期有价值的信息
- 按需恢复 - 压缩后仍可检索
- 预算感知 - 压缩操作本身计入成本
- 渐进式压缩 - 避免过度压缩
设计智慧
好的上下文管理让 AI”记住重要的,忘记次要的”。
Claude Code 的上下文管理设计告诉我们:
- Token 限制不是问题,智能压缩是关键
- 记忆提取保证长期连续性
- 按需恢复平衡存储与访问
压缩效果
| 压缩策略 | Token 回收 | 信息保留 | 适用场景 |
|---|---|---|---|
| 微压缩 | 10-20% | 95%+ | 轻微超出 |
| 智能压缩 | 40-60% | 80-90% | 中度超出 |
| 激进压缩 | 60-80% | 60-70% | 严重超出 |
下一步
- 实现 Token 计数器
- 配置压缩策略
- 启用记忆提取
- 添加上下文监控
系列文章:
- [1] Bash 命令执行的安全艺术 (已发布)
- [2] 差异编辑的设计艺术 (已发布)
- [3] 文件搜索的底层原理 (已发布)
- [4] 多 Agent 协作的架构设计 (已发布)
- [5] 技能系统的设计哲学 (已发布)
- [6] MCP 协议集成的完整指南 (已发布)
- [7] 后台任务管理的完整方案 (已发布)
- [8] Web 抓取的 SSRF 防护设计 (已发布)
- [9] 多层权限决策引擎设计 (已发布)
- [10] 插件生命周期的设计智慧 (已发布)
- [11] 会话持久化的架构设计 (已发布)
- [12] 上下文压缩与恢复技术 (本文)
- [13+] 更多高级功能 (继续中…)
进度:12/N
上一篇: Claude Code 源码解析 (11):会话持久化的架构设计
关于作者: John,OpenClaw 平台开发者,专注 AI 助手架构设计与实现。