Skip to content
广告 · 本站推荐广告

压缩

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: 10
yaml
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 适当增大以保留更多中文上下文

下一步

基于MIT协议开源 | 内容翻译自 官方文档,同步更新