OpenClaw学习总结_I_核心架构_6:Compaction详解

I. 核心架构 - 6. Compaction

📍 课程位置

阶段 :I. 核心架构
课序 :第 6 课
前置知识 :I-5. Memory 系统
后续课程:I-7. Streaming


🎯 本课核心问题

如果你问我:"对话太长了,Agent 记不住怎么办?历史记录越来越多,空间不够用怎么办?"

我会这样回答:这就是 **Compaction(压缩)**要做的事情------它像"整理房间"一样,把冗长的对话历史压缩成精简的摘要。


📚 为什么需要 Compaction?

问题 1:Context 溢出

  • AI 模型有 Context Window 限制(如 200K tokens)
  • 对话历史越来越长,总会超过限制
  • 超过后 → "Context length exceeded" 错误

问题 2:成本增加

  • Context 越长,AI 调用的 token 越多
  • 费用越来越高
  • 不压缩就是在烧钱

问题 3:性能下降

  • 处理超长 Context 需要更多计算
  • 响应变慢
  • 用户体验变差

🔧 Compaction 的工作原理

三种压缩策略

策略 1:Summarization(摘要)

复制代码
原始对话:
User: 我想买一件蓝色的衣服
Agent: 好的,您喜欢什么款式?
User: 我喜欢休闲风格
Agent: 明白了

压缩后:
"用户想要蓝色的休闲风格衣服"

策略 2:Pruning(剪枝)

复制代码
原始:
[很长的工具执行结果...]
[之前的讨论...]
[无关的细节...]

压缩后:
删除不重要的内容,只保留关键信息

策略 3:池化(Pooling)

复制代码
原始:10 条消息
压缩后:合并成 3 个"池"
- 意图池:用户的需求
- 关键信息池:重要参数
- 上下文池:背景信息

⏱️ 什么时候触发 Compaction?

自动触发

1. 接近 Context 边界

复制代码
当使用 > 80% 的 Context 时
→ 自动开始压缩
→ 保留 20% 空间

2. 定时触发

复制代码
每天/每次会话开始时
→ 检查是否需要压缩
→ 按策略压缩

手动触发

bash 复制代码
# 手动压缩某个 Session
openclaw sessions compact <sessionId>

# 查看压缩日志
openclaw logs | grep compaction

🔍 Compaction 的具体流程

复制代码
1. 检查当前 Context 使用量
   ↓
2. 如果超过阈值(比如 80%)
   ↓
3. 决定压缩策略
   - 摘要?剪枝?池化?
   ↓
4. 执行压缩
   - 调用 AI 生成摘要
   - 或直接删除不重要内容
   ↓
5. 更新 Session 文件
   ↓
6. 验证压缩后的大小
   ↓
7. 如果还是太长 → 再次压缩

🔧 实战:配置 Compaction

基本配置

json5 复制代码
{
  "agents": {
    "defaults": {
      "compaction": {
        // 压缩模式
        "mode": "safeguard",  // auto | safeguard | manual
        
        // 触发阈值
        "threshold": "80%",   // 超过 80% 时压缩
        
        // 保留空间
        "reserveTokens": "10000",  // 保留 10K tokens 空间
        
        // 压缩策略
        "strategy": {
          "type": "hybrid",   // hybrid | summarize | prune
          "preserveIntent": true,  // 保留用户意图
          "preserveKeyInfo": true  // 保留关键信息
        }
      }
    }
  }
}

模式说明

模式 说明 适用场景
auto 完全自动压缩 需要频繁压缩
safeguard 只在快溢出时压缩 保守策略,推荐
manual 手动触发压缩 精确控制

📊 Compaction 的效果

压缩前后对比

压缩前

  • Context 大小:180,000 tokens
  • 费用:$0.54/次调用

压缩后

  • Context 大小:40,000 tokens
  • 费用:$0.12/次调用
  • 节省:77% 费用!

压缩后的质量

  • ✅ 保留用户意图
  • ✅ 保留关键信息
  • ✅ 删除冗余细节
  • ⚠️ 失去一些"人情味"

⚠️ 常见陷阱

陷阱 表现 原因 解决
压缩过度 Agent "失忆"了 删除太多 调整保留策略
压缩不够 仍然溢出 阈值太高 调低阈值
压缩太频繁 性能下降 触发条件太宽松 调整触发频率
信息丢失 重要内容被删 没有设置保留 配置 preserveIntent

📝 学习心得

我学这一课时的体会

我以前以为"压缩"就是"删除旧内容"。

学完后才知道:

  • Compaction 是智能的
  • 它会用 AI 生成摘要
  • 它知道保留什么,删除什么

最大的收获是:

  • Compaction + Session + Memory 是三位一体
  • Session = 本次对话
  • Memory = 长期记忆
  • Compaction = 整理优化

与其他课程的关联

  • 前置课程:Session 管理 - 存储对话
  • 前置课程:Memory 系统 - 长期记忆
  • 后续课程:Streaming - 另一个优化手段
  • 配合课程:Context 管理 - Context 的成本

✅ 你现在应该理解的

  • 解释为什么需要 Compaction
  • 说出三种压缩策略
  • 知道什么时候触发压缩
  • 能配置 Compaction 参数
  • 理解压缩后的效果

📚 快速参考表

概念 简单说
Compaction 压缩对话历史
Summarization 摘要模式
Pruning 剪枝模式
触发阈值 超过多少百分比时压缩
Reserve 保留多少空间

🔗 相关资源

官方文档

相关课程

  • 上一课:I-5. Memory 系统
  • 下一课:I-7. Streaming

📊 本课总结

最关键的 3 点

  1. 为什么压缩

    • 防止 Context 溢出
    • 节省成本
    • 提升性能
  2. 三种策略

    • Summarization:生成摘要
    • Pruning:删除不重要的
    • Pooling:合并信息
  3. 配置建议

    • safeguard 模式
    • 保留关键意图
    • 定期检查效果

现在你应该理解了如何"整理"对话历史。下一课会讲另一个优化手段:Streaming(流式输出)。

相关推荐
存储服务专家StorageExpert2 小时前
NetApp NVME SSD 盘的学习笔记
运维·服务器·笔记·学习·存储维护·emc存储·netapp
无聊大侠hello world2 小时前
黑马大模型 RAG 与 Agent 实战学习笔记
笔记·学习
2501_918126912 小时前
学习所有python写服务器的语句
服务器·人工智能·python·学习·个人开发
承渊政道2 小时前
【优选算法】(实战感悟二分查找算法的思想原理)
c++·笔记·学习·算法·leetcode·visual studio code
Accerlator2 小时前
操作系统学习
学习
16Miku2 小时前
Mapping-Skill:把 AI/ML 人才搜索、作者挖掘与个性化触达整合成一条工作流
爬虫·ai·飞书·agent·skill·openclaw·龙虾
m0_564876842 小时前
nano-vllm学习
学习·vllm
丝斯20112 小时前
AI学习笔记整理(76)——Python学习5
人工智能·笔记·学习
无聊大侠hello world2 小时前
黑马大模型 RAG 与 Agent 实战学习笔记——智扫通 Agent 项目
笔记·学习