给 OpenClaw 配了 4 个 agent,跑了一周后看账单,300 块没了。逐项扒拉才发现,默认配置有太多隐形浪费。
先说结论
改了 6 个配置项,token 消耗降了 40%。不用换模型,不用砍功能,纯粹是堵上默认配置的漏洞。
说实话之前我以为 OpenClaw 的默认配置已经够合理了。直到我用 /context detail 看了一眼单次请求的 token 构成:
erlang
Bootstrap(系统提示): 35,000 tokens 28%
Context replay(历史回放): 65,000 tokens 52%
工具结果: 18,000 tokens 15%
模型输出: 6,000 tokens 5%
52% 花在历史消息回放上。意思是,每一轮对话,OpenClaw 都把之前说的所有话重新发给模型。对话越长,这个数字越恐怖。
第一刀:给上下文加个上限
默认没有 contextTokens 限制。我用的 DeepSeek 有 200K 上下文窗口,OpenClaw 就真的往 200K 塞。
加一行配置:
json
"contextTokens": 100000
超过 100K 就自动压缩。其实 90% 的场景 100K 绰绰有余,之前那些超出的部分基本是无用的历史消息在占位。
省了多少:长对话场景下 input tokens 直接砍半。
第二刀:旧数据别赖着不走
contextPruning 默认保留 7 天的工具调用结果。一个 web_fetch 动辄 5000-10000 tokens,7 天下来......
json
"contextPruning": {
"mode": "cache-ttl",
"ttl": "6h",
"keepLastAssistants": 3
}
6 小时前的 web 抓取结果你还用得上吗?大概率不会。keepLastAssistants: 3 保留最近 3 轮完整回复就够了。
第三刀:心跳别用贵的模型
这个坑我踩了好久才发现。OpenClaw 每 4 小时发一次心跳------用的是你的主模型。
我的主模型是 DeepSeek-R1,每次心跳注入完整 bootstrap(37,500 tokens)。算下来一天 6 次心跳,纯粹为了告诉系统"我还活着",每月白花 20 块。
json
"heartbeat": {
"every": "4h",
"model": "你最便宜的模型",
"lightContext": true
}
lightContext: true 是关键------只注入 HEARTBEAT.md,跳过那些大文件。token 从 37,500 降到 3,000。
第四刀:压缩也不需要聪明脑子
上下文压缩(compaction)就是把长对话总结成摘要。默认用主模型做这事。但总结摘要真的不需要旗舰模型。
json
"compaction": {
"mode": "safeguard",
"model": "你的便宜模型"
}
第五刀:系统提示瘦身
这是最容易被忽视的。Bootstrap 文件(CLAUDE.md + 所有 skills + memory)在每一次 API 调用中重新发送。
json
"bootstrapMaxChars": 10000,
"bootstrapTotalMaxChars": 75000
默认是 20000/150000。我砍到一半,实际使用完全没感觉。
另外检查一下你有多少 skill 被加载了:
bash
ls ~/.openclaw/skills/ | wc -l
我有 30+ 个 skill,其中一半几乎不用。每个 skill 至少占 24 tokens。禁掉不用的省一点是一点。
第六刀:图片分辨率调低
我的 agent 经常截图分析网页。默认 1200px,实际 800px 就够看了。
json
"imageMaxDimensionPx": 800
Vision token 按像素面积算,800 vs 1200 省 55%。
隐藏大招:让 agent 学会"记笔记"
以上是减少浪费。还有一个思路是避免重复------让 agent 主动存记忆。
没有记忆的 agent 每次都从零开始:读文件、搜代码、抓网页,一通操作 20000 tokens。
有记忆的 agent 直接调出上次的结论,500 tokens 搞定。
OpenClaw 的记忆就是 workspace 下的 Markdown 文件,session 启动时自动加载。关键是配好 memoryFlush:
json
"compaction": {
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 4000
}
}
这会在 session 接近压缩时提醒 agent 把重要信息写到文件里。下次新 session 自动读取,不用重新探索。
ROI:500 tokens 存一条记忆 → 省掉 10 次 × 5000 tokens 的重复探索 = 100 倍回报。
最终效果
| 指标 | 优化前 | 优化后 |
|---|---|---|
| 单次请求平均 input | ~124K | ~72K |
| 心跳成本/月 | ¥20 | ¥0.03 |
| 日均 token | ~280 万 | ~160 万 |
| 周费用 | ¥300 | ¥180 |
40% 的降幅,没砍任何功能。
还能再省吗?
能。最大的杠杆其实是模型选择------简单任务用便宜模型,复杂任务才上旗舰。但手动切模型太麻烦。
我现在的做法是用统一 API 网关,在一个入口里配好不同场景用不同模型。心跳用 Flash Lite,日常用 DeepSeek,复杂任务才调 Claude。网关自动路由,不用改代码。
我用的是 TheRouter,一个 key 调 30+ 模型,支持按需切换,国内直连也没问题。有类似需求的可以看看 therouter.ai。
TheRouter (therouter.ai) --- 多模型统一 API 网关