跑了一周 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.jsonagents.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+ 模型

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐