OpenClaw Token 消耗实测:6 项配置调整后省了 40% 费用
跑了一周 OpenClaw,账单吓了一跳。逐项排查后发现,默认配置下有大量 token 浪费在心跳、上下文回放和重复探索上。本文分享 6 项实测有效的配置优化,附具体参数。
钱花在哪了?先看 Token 消耗结构
OpenClaw 每次 API 调用的 token 消耗可以拆成四块:
总消耗 = 系统提示(bootstrap) + 历史消息(context replay) + 工具结果(tool outputs) + 模型输出(completion)
用 /context detail 看一下实际数字(某次普通对话):
| 组成部分 | Token 数 | 占比 |
|---|---|---|
| Bootstrap(CLAUDE.md + skills + memory) | 35,000 | 28% |
| Context replay(历史消息回放) | 65,000 | 52% |
| 工具结果(web_fetch, read 等) | 18,000 | 15% |
| 模型输出 | 6,000 | 5% |
| 合计 | 124,000 | 100% |
52% 花在历史回放上——这是最大的浪费源。每一轮对话,OpenClaw 都要把之前所有对话记录重新发给模型。对话越长,这个数字越大。
优化一:设 contextTokens 上限
问题:不设上限 = 用满模型的完整上下文窗口。Claude Sonnet 的 200K 窗口意味着单次请求最多花 200K input tokens。
配置:
{
"agents": {
"defaults": {
"contextTokens": 100000
}
}
}
100K 覆盖 85-90% 的使用场景。超出后自动触发 compaction(上下文压缩),把旧消息总结成摘要。
效果:单次请求 input token 上限从 200K 降到 100K,长对话场景省 30-50%。
优化二:上下文裁剪 TTL 从 7 天改 6 小时
问题:默认 cache-ttl: 7d 意味着 7 天前的工具调用结果还在上下文里。一个 web_fetch 结果可能有 5000-10000 tokens,7 天下来累积惊人。
配置:
{
"agents": {
"defaults": {
"contextPruning": {
"mode": "cache-ttl",
"ttl": "6h",
"keepLastAssistants": 3
}
}
}
}
keepLastAssistants: 3 保留最近 3 轮助手回复的完整内容,更早的工具结果在 6 小时后自动裁剪。
效果:长期运行的 session 中,context replay 部分减少 40-60%。
优化三:心跳用便宜模型 + 轻量上下文
OpenClaw 的心跳机制每隔几小时唤醒 agent 检查状态。默认用主模型(可能是 Claude Sonnet,$3/M input),而且注入完整的 bootstrap 文件。
问题:一次心跳 = 37,500 tokens(完整 bootstrap)× $3/M = $0.11。一天 6 次 = $0.66。一个月 = $20,就为了 “我还活着”。
配置:
{
"agents": {
"defaults": {
"heartbeat": {
"every": "4h",
"model": "google/gemini-2.5-flash-lite",
"lightContext": true
}
}
}
}
model: 用最便宜的模型(Gemini Flash Lite 约 $0.10/M tokens)lightContext: true: 只注入 HEARTBEAT.md,跳过 AGENTS.md、SOUL.md 等大文件
效果:心跳 token 从 37,500 降到 ~3,000,模型单价从 $3 降到 $0.10。单次心跳成本从 $0.11 降到 $0.0003。
优化四:Compaction 用便宜模型
上下文压缩(compaction)是把长对话历史总结成摘要。这个任务不需要旗舰模型。
配置:
{
"agents": {
"defaults": {
"compaction": {
"mode": "safeguard",
"model": "minimax/MiniMax-M2.5"
}
}
}
}
效果:每次 compaction 省下旗舰模型和便宜模型的差价。如果主模型是 Claude Sonnet($3/M),换成 MiniMax M2.5 后这部分成本降 80%+。
优化五:缩减 Bootstrap 文件大小
Bootstrap 文件(CLAUDE.md、skills、memory)在每一次 API 调用中都会重新发送。1000 字符 ≈ 250 tokens,乘以每轮对话的调用次数,累积起来很可观。
配置:
{
"agents": {
"defaults": {
"bootstrapMaxChars": 10000,
"bootstrapTotalMaxChars": 75000
}
}
}
默认是 20000/150000,减半后覆盖率依然够用。
同时检查你的 skills 目录:
# 看哪些 skill 被加载了
ls ~/.openclaw/skills/
# 禁用不常用的
# openclaw.json → skills.entries.unused-skill.enabled = false
每个 skill 至少增加 24 tokens 系统提示。10 个不用的 skill = 每次调用多花 240 tokens。
效果:每次 API 调用的 bootstrap 部分减少 30-50%。
优化六:降低图片分辨率
如果你的 agent 处理截图或图片,默认 1200px 分辨率会产生大量 vision tokens。
{
"agents": {
"defaults": {
"imageMaxDimensionPx": 800
}
}
}
效果:vision token 消耗按像素面积计算,800px vs 1200px 减少约 55%。
隐藏大招:用好记忆
以上都是"减少浪费"。还有一个"避免重复"的大招:让 agent 主动存记忆。
没有记忆:每次新 session → 重新读文件、搜代码、查网页 → 5000-20000 tokens
有记忆:直接调出上次的结论 → 500 tokens
OpenClaw 的记忆是 workspace 下的 Markdown 文件:
~/.openclaw/memory/
├── 2026-04-08.md # 每日日志(自动加载今天+昨天)
└── MEMORY.md # 长期记忆(手动维护)
配合 compaction memoryFlush(session 接近压缩时自动提醒 agent 存记忆):
{
"compaction": {
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 4000,
"prompt": "Write any lasting notes; reply with NO_REPLY if nothing to store.",
"systemPrompt": "Session nearing compaction. Store durable memories now."
}
}
}
记忆的 ROI:花 500 tokens 存一条记忆 → 省掉未来 10 次 session 的重复探索(每次 5000+ tokens)。
完整配置一览
把上面 6 项合在一起,放到 openclaw.json 的 agents.defaults 里:
{
"agents": {
"defaults": {
"contextTokens": 100000,
"bootstrapMaxChars": 10000,
"bootstrapTotalMaxChars": 75000,
"imageMaxDimensionPx": 800,
"contextPruning": {
"mode": "cache-ttl",
"ttl": "6h",
"keepLastAssistants": 3
},
"compaction": {
"mode": "safeguard",
"model": "your-cheap-model-here",
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 4000
}
},
"heartbeat": {
"every": "4h",
"model": "your-cheapest-model-here",
"lightContext": true
}
}
}
}
实测效果
| 指标 | 优化前 | 优化后 | 变化 |
|---|---|---|---|
| 单次请求平均 input tokens | ~124K | ~72K | -42% |
| 心跳单次成本 | $0.11 | $0.0003 | -99.7% |
| Compaction 单次成本 | $0.45 | $0.05 | -89% |
| 日均总 token 消耗 | ~2.8M | ~1.6M | -43% |
省下来的钱可以用来接入更多模型、跑更多 agent,或者单纯地降低账单。
模型选择也是成本杠杆
上面都是配置层面的优化。如果你同时需要接入多个模型(比如便宜模型跑心跳、中档模型跑日常、旗舰模型跑复杂任务),手动管理多个 API Key 和计费很麻烦。
笔者用的方案是统一 API 网关——一个 key 调所有模型,按需切换,计费统一。具体来说用的是 TheRouter,支持 30+ 模型的统一路由,国内直连。
TheRouter (therouter.ai) — 多模型统一 API 网关,一个 Key 调用 30+ 模型
更多推荐

所有评论(0)