压缩
Compaction(压缩)是 OpenClaw 的上下文自动摘要机制。当对话历史积累到接近上下文窗口限制时,系统将旧消息摘要化以释放空间,同时尽可能保留关键信息。
什么是压缩
核心思想
压缩 = 用 LLM 将长对话历史摘要为简短总结,用更少的 Token 保留最重要的上下文。
压缩前(92K tokens):
┌────────────────────────────┐
│ 消息 1: 你好 │
│ 消息 2: 你好!有什么... │
│ 消息 3: 帮我写一个函数 │
│ 消息 4: [长代码块] │
│ ... │
│ 消息 86: 最后再改一下 │
└────────────────────────────┘
压缩后(12K tokens):
┌────────────────────────────┐
│ [摘要] 用户请求编写一个 │
│ Python 数据处理函数,经过 │
│ 多轮迭代优化了性能和错误 │
│ 处理。最终版本使用 pandas │
│ 实现,包含类型注解。 │
├────────────────────────────┤
│ 消息 82: 添加类型注解 │
│ 消息 83: [更新后的代码] │
│ 消息 84: 性能测试结果 │
│ 消息 85: 最终确认 │
│ 消息 86: 最后再改一下 │
└────────────────────────────┘自动触发
当上下文 Token 使用量接近限制时,压缩自动触发:
yaml
compaction:
autoTrigger: true
triggerThreshold: 0.85 # Token 使用率达到 85% 时触发
keepRecentMessages: 5 # 保留最近 5 条消息不压缩触发条件:
当前 Token 使用量 / 上下文窗口大小 >= triggerThreshold触发延迟
自动压缩在当前 Agent Loop 完成之后触发,不会中断正在进行的对话。
静默记忆持久化
压缩前,Agent 会执行一次Silent Agentic Turn(静默 Agent 轮次),确保重要信息不会丢失:
压缩触发
│
▼
┌─────────────────────────┐
│ Silent Agentic Turn │
│ 静默 Agent 轮次 │
│ │
│ 1. 扫描对话历史 │
│ 2. 提取关键事实 │
│ 3. 更新 MEMORY.md │
│ 4. 写入每日记忆日志 │
└─────────┬───────────────┘
│
▼
┌─────────────────────────┐
│ Compaction 压缩 │
│ │
│ 1. LLM 生成对话摘要 │
│ 2. 替换旧历史 │
│ 3. 保留最近 N 条消息 │
└─────────────────────────┘记忆保护
静默轮次确保 Agent 在压缩前将用户偏好、关键决定、重要数据等保存到持久化记忆中。这是 OpenClaw 记忆系统的关键环节。
手动触发
用户可以随时手动触发压缩:
bash
/compact手动压缩同样会先执行静默记忆持久化。
压缩配置
yaml
compaction:
# 自动触发设置
autoTrigger: true # 是否启用自动压缩
triggerThreshold: 0.85 # 触发阈值(0-1)
# 压缩行为
keepRecentMessages: 5 # 保留最近的消息数
summaryMaxTokens: 2000 # 摘要最大 Token 数
summaryModel: null # 摘要使用的模型(null = 使用当前模型)
# 静默记忆持久化
silentMemoryTurn: true # 压缩前执行记忆持久化保留与摘要
压缩过程中的信息处理:
| 内容类型 | 处理方式 |
|---|---|
| 最近 N 条消息 | 完整保留 |
| 用户偏好/指令 | 写入 MEMORY.md |
| 关键决策/结论 | 写入每日记忆 |
| 代码/数据 | 如果重要则摘要引用 |
| 闲聊/寒暄 | 简要提及或忽略 |
| 工具调用历史 | 摘要为结果描述 |
摘要质量
压缩使用 LLM 生成摘要,质量取决于:
- 模型能力 — 更强的模型生成更好的摘要
- 对话复杂度 — 简单对话摘要效果更好
- 摘要长度 —
summaryMaxTokens越大,保留的细节越多
yaml
compaction:
summaryMaxTokens: 4000
summaryModel: openai/gpt-4o
keepRecentMessages: 10yaml
compaction:
summaryMaxTokens: 1000
summaryModel: deepseek/deepseek-chat
keepRecentMessages: 3压缩日志
每次压缩操作会记录详细日志:
[COMPACT] Session general::user123
- Pre-compact: 86 messages, 92,450 tokens
- Silent memory turn: saved 3 facts to MEMORY.md
- Summary: 1,842 tokens
- Kept recent: 5 messages (8,200 tokens)
- Post-compact: 6 messages, 10,042 tokens
- Savings: 82,408 tokens (89.1%)🇨🇳 中国用户须知
- 中文摘要质量在国产模型(如 DeepSeek、GLM-4)上表现良好
- 中文内容的 Token 密度较高,
triggerThreshold可适当降低至0.80 - 建议
summaryMaxTokens适当增大以保留更多中文上下文
