如何降低OpenClaw运行成本? 降低OpenClaw运行成本的方式有哪些?

小编:魅力 更新时间:2026-03-11 17:05

OpenClaw迅速火爆的同时,许多人遇到一个看似反常的现象。

系统运行一切正常,但token成本却在不知不觉中不断攀升。通过分析一次真实的OpenClaw工作负载,我们发现,问题的根源并不在于用户输入或模型输出,而是被忽视的缓存前缀重放问题。

模型在每一轮调用中反复读取庞大的历史上下文,从而产生了巨量token消耗。

如何降低OpenClaw运行成本? 降低OpenClaw运行成本的方式有哪些?

本文将通过具体的session数据,展示工具输出、浏览器快照、JSON日志等大型中间产物如何被不断写入历史上下文,并在Agent循环中被重复读取,最终导致成本的飙升。

并以此来看看如何降低OpenClaw运行成本的方式。

核心发现

在此次分析中,我们发现最大的成本驱动因素并不是用户消息太长,而是巨量的缓存前缀被反复重放。

数据统计

根据session数据的分析,token消耗的具体情况如下。

1、总tokens: 21,543,714

2、cacheRead: 17,105,970(占比79.40%)

3、input: 4,345,264(占比20.17%)

4、output: 92,480(占比0.43%)

可以看到,大多数调用的成本并非来自于处理新的用户意图,而是来自于反复读取巨大的历史上下文。每次调用都读取了大量稳定的前缀数据,造成了巨大的token消耗。

问题的根本原因

模式发现

我原本以为高token使用量可能来源于以下几个因素。

1、非常长的用户输入(prompt)

2、大量输出生成

3、昂贵的工具调用

然而,真正主导的模式是下面。

1、input:几百到几千tokens

2、cacheRead:每次调用17万到18万tokens

模型在每一轮调用中反复读取同一个巨大的历史上下文数据,而这些数据并没有变化,导致了巨大的重复消耗。

数据范围

我分析了两个层面的数据。

1、运行时日志(runtime logs):用于观察行为信号,如重启、报错、配置问题等。

2、会话记录(session transcripts):提供精确的token统计,来自session JSONL文件中的 usage 字段。

通过分析,我使用了以下脚本。

1、scripts/session_token_breakdown.py

2、scripts/session_duplicate_waste_analysis.py

生成的分析文件包括。

1、tmp/session_token_stats_v2.txt

2、tmp/session_token_stats_v2.json

3、tmp/session_duplicate_waste.txt

4、tmp/session_duplicate_waste.json

5、tmp/session_duplicate_waste.png

Token实际消耗的具体情况

Session集中

一个session的消耗远高于其他:

1、570587c3-dc42-47e4-9dd4-985c2a50af86:19,204,645 tokens

2、ef42abbb-d8a1-48d8-9924-2f869dea6d4a:1,505,038 tokens

3、ea880b13-f97f-4d45-ba8c-a236cf6f2bb5:649,584 tokens

可以看到,某些session的token消耗非常集中,而其余session的消耗相对较低。

行为集中

从token消耗的来源来看,主要集中在:

1、toolUse: 16,372,294 tokens

2、stop: 5,171,420 tokens

这表明问题主要出在工具调用链循环,而不是普通的聊天。

时间集中

token峰值集中在几个特定的时间段:

1、2026-03-08 16:00:4,105,105 tokens

2、2026-03-08 09:00:4,036,070 tokens

3、2026-03-08 07:00:2,793,648 tokens

这些时间段的token消耗明显高于其他时段,反映了系统在某些时间段的负载更高。

巨大的缓存前缀

缓存前缀并不是用户对话内容,而是主要由大型中间产物构成:

1、巨大的toolResult数据块

2、很长的推理过程(reasoning traces)

3、大型JSON快照

4、文件列表

5、浏览器抓取数据

6、子Agent的对话记录

在最大session中,字符量的具体情况如下:

1、toolResult:text: 366,469字符

2、assistant:thinking: 331,494字符

3、assistant:toolCall: 53,039字符

这些内容一旦被保留在历史上下文中,后续的每次调用都会通过缓存前缀重新读取它们,导致token的重复消耗。

解决方案

控制大型工具输出

对于超大工具输出,建议:

1、只保留摘要和引用路径/ID

2、将原始数据写入文件artifact

3、不要将完整原文保留在chat history中

应优先限制以下内容:

1、大型JSON

2、长目录列表

3、浏览器完整快照

4、子Agent完整对话记录

保证compaction机制生效

在数据中,多次出现了配置兼容性问题,导致compaction机制未能正常触发。正确的做法是:

1、只使用版本兼容配置

2、验证并启动compaction:使用命令 openclaw doctor --fix,并检查启动日志确认compaction被接受。

减少推理文本的持久化

尽量避免长推理文本的重复读取。生产环境中,应保存简短的推理摘要,而不是完整的推理过程。

改进prompt缓存设计

优化的目标是减少每次调用中对缓存的依赖,只使用紧凑、稳定且高价值的前缀:

1、将稳定的规则放进system prompt

2、不要将不稳定的数据放入稳定前缀中

3、避免每轮调用都注入大量debug数据

实操止损方案

如果需要立刻处理这个问题,可以:

1、找出cacheRead占比最高的session

2、对runaway session执行 /compact

3、对工具输出进行截断和artifact化

4、每次修改后重新跑token统计

重点关注以下四个KPI:

1、cacheRead / totalTokens

2、toolUse avgTotal/call

3、大于等于100k token的调用次数

4、最大session占比

成功的信号

如果优化生效,你应该看到以下变化:

1、100k+ token调用明显减少

2、cacheRead 占比下降

3、toolUse 调用权重下降

4、单个session的主导程度降低

如果这些指标没有变化,说明上下文策略仍然过于宽松,需要进一步优化。

如果你的OpenClaw看起来一切正常,但成本却在持续上升,不妨检查一下问题的根源:你付费的是新的推理,还是在大规模重放旧上下文?在我的案例中,绝大部分成本其实来自于上下文重放。一旦意识到这一点,解决方案也就非常明确:严格控制进入长期上下文的数据。