学会这招把 OpenClaw 的Token压缩7成!

B992DB8769FFDF3CF43F7110E6F27283-low_res-scale-2_00x-2.jpg *可以把本文发给你的Openclaw进行配置

Openclaw 为什么是消耗Token的巨兽?

想必很多在用Openclaw的宝子们都会感受到它对token的疯狂消耗,不单只是在快速消费你的金钱,而且在长时间使用 Openclaw后,它会慢慢开始答非所问、忘记之前的对话内容、甚至直接「罢工」。 这其实是Openclaw默认的上下文机制导致的,它每次对话都会把之前所有的历史会话内容,包括工具调用结果(如 exec、read、web_search 等输出)都塞进上下文,上下文像雪球一样快速积累,最终导致 上下文窗口溢出 ——AI 的「大脑」就会因为信息过载而「短路」。

解决方案:OpenClaw 内置的上下文压缩机制

好消息是,OpenClaw 已经内置了完善的 对话历史自动压缩 功能,只是默认状态下并未启用。这套机制包含两套互补的组件:

2.1 Context Pruning(上下文修剪)

位置: dist/agents/pi-extensions/context-pruning/

核心功能:自动裁剪旧的工具调用结果,在保证对话连贯性的同时大幅减少上下文占用。

2.2 Context Window Guard(上下文窗口保护)

位置: dist/agents/context-window-guard.js

核心功能:实时监控上下文窗口使用率,在接近上限前主动触发压缩,避免溢出错误。

技术原理:两级压缩策略

3.1 什么会被压缩?

  • 工具调用结果 (toolResult)——如 exec、read、web_search 的输出
  • 用户消息 ——永不修改
  • 助手消息 ——永不修改
  • 包含图片的工具结果 ——暂不支持压缩

3.2 软修剪(Soft Trim)

  • 触发条件 :上下文使用率 > 30%(默认 softTrimRatio: 0.3)
  • 处理方式 :保留工具结果的头尾部分(各 1500 字符),中间用 ... 替代
  • 压缩示例
    原文: [超长输出 10000 字符]
    压缩后: [前 1500 字符]...[后 1500 字符] [工具结果已裁剪: 保留前 1500 和后 1500,原始 10000 字符]

3.3 硬清理(Hard Clear)

  • 触发条件 :上下文使用率 > 50%(默认 hardClearRatio: 0.5)且可修剪内容 > 50000 字符
  • 处理方式 :完全替换为占位符
  • 压缩示例
    原文: [超长输出]
    压缩后: [旧工具结果内容已清理]

3.4 保护机制

  • 保护最近 3 次助手回复( keepLastAssistants: 3 )之后的工具结果
  • 保护首个用户消息之前的所有内容(包括 SOUL.md、USER.md 等身份文件读取)
  • 跳过包含图片的工具结果

三种运行模式详解

4.1 cache-ttl 模式(推荐)

这是最新针对 Anthropic Claude 优化的模式,仅在距离上次 API 调用超过 TTL 时间后才触发压缩,适配 Anthropic 的 prompt caching 机制,避免频繁重新缓存。

  • 默认 TTL :5 分钟
  • 适用场景 :主要使用 Anthropic Claude 系列模型

4.2 adaptive 模式(传统)

每次请求都根据上下文使用率决定是否压缩,适合需要实时响应的场景。

4.3 aggressive 模式(激进)

直接进行硬清理,不经过软修剪阶段,适合对话历史特别长、工具调用特别多的场景。

配置实战:3 分钟启用自动压缩

5.1 备份当前配置

Copy-Item "C:\Users\Administrator\.openclaw\openclaw.json" "C:\raiderwang\openclaw_bak\openclaw_$(Get-Date -Format 'yyyyMMdd-HHmmss').json"

5.2 启用 context pruning(推荐配置)

openclaw config set agents.defaults.contextPruner '
{
  "mode": "cache-ttl",
  "ttl": "5m",
  "keepLastAssistants": 3,
  "softTrimRatio": 0.3,
  "hardClearRatio": 0.5,
  "minPrunableToolChars": 50000,
  "softTrim": {
    "maxChars": 4000,
    "headChars": 1500,
    "tailChars": 1500
  },
  "hardClear": {
    "enabled": true,
    "placeholder": "[旧工具结果内容已清理]"
  }
}
' --json

5.3 重启 Gateway 使配置生效

openclaw gateway restart

进阶配置:个性化调整

6.1 调整压缩阈值

# 更早触发软修剪(20% 就开始) 
openclaw config set agents.defaults.contextPruning.softTrimRatio 0.2 --json  

# 更晚触发硬清理(70% 才开始) 
openclaw config set agents.defaults.contextPruning.hardClearRatio 0.7 --json  

# 保护最近 5 次助手回复 
openclaw config set agents.defaults.contextPruning.keepLastAssistants 5 --json 

6.2 排除特定工具

如果某些工具的输出很重要,不希望被压缩:

openclaw config set agents.defaults.contextPruning.tools '{ "deny": ["browser", "canvas", "web_search"] }' --json

6.3 调整 cache-ttl 时间

TTL 设为 10 分钟 openclaw config set agents.defaults.contextPruning.ttl "10m" --json

效果验证与监控

7.1 查看实时日志

Get-Content "C:\Users\Administrator\.openclaw\logs\gateway.log" -Tail 50 -Wait

7.2 检查 Session 状态

/status

7.3 压缩效果对比

指标 压缩前 压缩后(软修剪) 压缩后(硬清理)
上下文总量 200,000 tokens 80,000 tokens 55,000 tokens
用户/助手消息 50,000 tokens 50,000 tokens 50,000 tokens
工具调用结果 150,000 tokens 30,000 tokens 5,000 tokens
节省比例 - 60% 72.5%

与 Compaction 的区别

OpenClaw 有两个独立的上下文管理机制:

  • Context Pruning :每次 LLM 请求前运行,仅影响内存中的上下文,不修改历史文件
  • Compaction :会话达到一定长度后运行,会重写历史文件,用摘要替换旧消息

两者配合使用,可以实现「实时压缩 + 长期归档」的最佳效果。

总结

OpenClaw 的上下文压缩功能已经非常成熟:

  • ✅ 智能识别可压缩内容(仅工具结果)
  • ✅ 保护重要上下文(用户/助手消息、最近交互)
  • ✅ 两级压缩策略(软修剪 + 硬清理)
  • ✅ 灵活的工具白名单/黑名单
  • ✅ 与 Anthropic prompt caching 深度集成
  • ✅ 不影响历史记录持久化

你只需要:添加配置 → 重启 Gateway → 享受自动压缩!


*可以把本文发给你的Openclaw进行配置

分享这篇文章

评论 (0)

还没有评论,来说两句吧!