*可以把本文发给你的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)
还没有评论,来说两句吧!