TOPIC / MODELS

OpenClaw 模型成本控制:先控住上下文、工具调用和 fallback

模型账单失控通常不是因为单价太贵,而是因为多轮对话、工具定义、上下文膨胀和 fallback 一起放大了成本。这页讲 OpenClaw 中最有效的成本控制动作,包括硬限额设置、上下文长度管理、工具调用频率优化和 fallback 策略调整。

适合谁

  • 已经开始担心调用成本和上下文膨胀
  • 希望先做最有效的降本动作
  • 想把预算控制写进长期配置

成本不是后面再看的问题

很多人第一次会把成本理解成“等真的用起来再说”。
但模型路线一旦选错,成本不会等你把系统做大才冒出来,它会从一开始就悄悄累积。

账单通常由什么组成

OpenClaw 的模型成本,常见会被下面几层一起放大:

  • 多轮对话上下文
  • 工具定义和工具调用
  • 长文档输入
  • fallback 触发
  • 同一任务链里的重复推理

这也是为什么很多人看单价觉得还好,实际账单却超预期。

更细一点看,一次调用通常包含 5 层成本

一次调用常见成本构成

1. 系统提示(SOUL / 长期规则)
2. 对话历史
3. 工具定义
4. 用户输入
5. 模型输出

很多人只盯第 4 和第 5 层,但真正最容易无限增长的通常是第 2 和第 3 层。

为什么多轮对话会越来越贵

一条会话只要不断往下叠,模型通常要带着越来越长的历史一起工作。
这意味着:

  • 不是只为“这句话”付费
  • 而是在为“这句话 + 前面很多句 + 工具定义 + 相关上下文”一起付费

所以成本增长常常不是线性的。

为什么工具调用会放大成本

很多人只盯模型,不盯工具。
但一旦工具多起来,模型为了理解“能用什么”“该用什么”,本身也会消耗更多上下文。

如果工具链很长,问题会进一步放大:

  • 触发更多轮推理
  • 让任务更难回滚
  • 让你更难判断到底是哪一层最贵

为什么 fallback 不是免费保险

fallback 的价值是更稳,但它几乎一定会带来额外成本:

  • 主模型失败后会重新跑一次
  • 你可能为同一任务付两次以上推理成本
  • 如果触发条件写得太宽,账单会被不必要地抬高

所以 fallback 要有,但不能乱开。

先做这 5 个最有效的控制动作

如果你现在就想收预算,先从下面 5 个动作开始:

成本控制 checklist

1. 先缩短不必要的历史上下文
2. 先减少同时挂载的工具和技能
3. 先让 fallback 只在真正失败时触发
4. 先用单模型跑通,再决定需不需要分层
5. 先把高频任务和低频高价值任务分开

这 5 条通常比“换一个便宜 10% 的模型”更有用。

再往下走,最值的 4 个动作

如果你已经把上面 5 条做了,再继续看下面几件事:

  • 压缩过长的对话历史
  • 对系统提示和工具定义做缓存
  • 能批量处理的,不逐条处理
  • 给成本阈值设置不同级别的动作

一个更现实的限额思路

{
  "costControl": {
    "enabled": true,
    "limits": {
      "perRequest": 0.05,
      "hourly": 5,
      "daily": 20,
      "monthly": 400
    },
    "actions": {
      "onHourlyLimit": "slowdown",
      "onDailyLimit": "alert_and_pause",
      "onMonthlyLimit": "stop"
    }
  }
}

这类配置真正值钱的地方不是字段,而是你终于把:

  • 单次失控
  • 小时级放量
  • 全天级事故
  • 月度失控

分成了四种不同处理层级。

配置写入后,可以用以下命令验证是否生效:

openclaw config list | grep costControl

如果输出为空,说明配置路径或字段名不对,需要回到 官方文档 确认当前版本支持的写法。

对话历史为什么是最大成本坑

蓝皮书里最值得记的一句话其实是:
很多调用贵,不是因为这次问题本身贵,而是因为模型每次都背着前面一大坨历史一起工作。

所以如果你有:

  • 长线程
  • 高频来回追问
  • 技能和工具越来越多

那上下文清理和压缩,通常比“再去找一个稍便宜的模型”更值。

什么时候该上 prompt caching 和 compaction

更适合上的时候通常是:

  • 系统提示已经比较稳定
  • 工具定义比较固定
  • 对话链开始变长

这类动作的特点是:

  • 不一定最容易感知
  • 但长期通常最值

如果你要把预算思路写进配置里

一份更保守的预算思路通常会长这样:

{
  "budgetMode": "conservative",
  "primaryGoal": "先稳定,不先追最强",
  "contextPolicy": "限制长上下文常驻",
  "toolPolicy": "只保留当前任务必要工具",
  "fallbackPolicy": "仅在主模型失败时启用"
}

这同样是思路模板,不是你仓库里唯一正确的字段名。
真正配置时,还是要回到当前版本支持的写法。

最后别忘了这件事

成本控制不是“少花钱”这么简单。
它真正决定的是:

  • 你能不能长期运行
  • 你敢不敢扩大场景
  • 你能不能把系统交给别人一起用

下一步建议

FAQ

本页常见问题

更常见的是上下文越来越长、工具调用频繁、fallback 过多,而不是单纯因为某个模型单价高。

不一定。先做最小控制动作通常更有效,比如减少历史上下文、收紧工具和控制 fallback。