OpenClaw 的 Token 消耗怎么计算?(附实操优化方案)

1 阅读10分钟

面试官:“说一下OpenClaw的Token到底是怎么花出去的?哪些能省,哪些是死开销?”
(内心OS:这题我熟!毕竟踩过的坑能绕电脑三圈,今天就把OpenClaw的Token账单扒干净,新手也能看懂,老玩家能省成本!)

先给结论:OpenClaw的Token消耗不是“单一开销”,而是“6大模块叠加”,其中一半能通过配置优化,另一半是天生的固定成本。很多人觉得它费Token,本质是没搞懂每一分Token花在了哪里,白白浪费了配额。

核心前提:Token计算遵循“输入+输出双向计费”,以下估算均为「单次请求的输入Token」,输出Token需额外按模型定价叠加

image.png

一、逐模块拆解:你的Token到底花在了哪里?

计算公式:
OpenClaw Token消耗 = System Prompt + 工具定义 + 会话历史 + Memory Flush + 记忆检索结果 + 工具调用链

1. System Prompt(系统提示词):无法避免的“固定过路费”

这是OpenClaw的“基础开销”,相当于你每次开车上高速,必须交的过路费——不管你开多远、拉多少货,这笔钱都得花。

OpenClaw的System Prompt不是固定一段文字,而是每次请求前,从多个文件中“拼接构建”的,官方规定:构建时参考的每个文件最大20000字符(可通过bootstrapMaxChars配置调整),单次请求的System Prompt总字符数大概在5000-25000之间,折算成Token(1Token≈4字符),单次固定消耗1250-6250 Token。

具体构成看下面的表格,一目了然:

组成部分大小估算说明
核心指令~3000字符(≈750 Token)安全规则、回复格式、消息路由等,相当于OpenClaw的“操作手册”,必带
工具说明列表~2000字符(≈500 Token)每个工具的功能、参数说明,默认启用的工具都会包含
Skills 提示可变(0-5000字符)你启用的技能包描述和位置,启用的技能越多,这部分消耗越多
Bootstrap 文件最大20000字符(≈5000 Token)AGENTS.md、SOUL.md、IDENTITY.md等核心配置文件,默认全量加载
Runtime 信息~500字符(≈125 Token)主机地址、时区、默认模型等环境信息,自动加载,无法精简
Sandbox 信息~300字符(≈75 Token)沙箱配置(比如权限限制),开启沙箱后必带,可简化配置减少字符

面试官追问:“这部分能省吗?”
答:“不能完全省,但能精简!比如Bootstrap文件不用加载全量,Skills只启用必要的,能省30%-50%的消耗。”

2. 工具定义(Tool Schemas):“随身身份证”,每次都要出示

OpenClaw的核心是“Agent调用工具”,而每个工具都有自己的JSON Schema定义——相当于每个工具的“身份证”,每次请求时,都会把当前启用的所有工具的Schema一起发给LLM,让LLM知道“怎么用这个工具”。

这部分消耗是“刚性的”,无法压缩,单次请求大概占3000-5000 Token,具体看你启用的工具数量和复杂度。默认启用的工具及其Token消耗如下(实测数据,误差不超过5%):

工具Schema 复杂度估算 Token备注
browser(浏览器)非常复杂(16种action)~800最费Token的工具,不用可直接禁用
exec(命令执行)中等~200高危工具,高校禁用核心原因之一,不用必关
read/write/edit(文件操作)简单~300常用工具,消耗适中,无法精简
message(消息推送)复杂(多种action)~400对接飞书、Telegram等渠道时启用
cron(定时任务)中等~200不用定时任务可禁用
memory_search/get(记忆检索)简单~150记忆功能核心工具,无法禁用(禁用会导致记忆失效)
sessions_*(会话管理)中等~400会话持久化必备,无法精简
canvas(文档编辑)中等~200不用文档编辑可禁用
nodes(节点管理)复杂~300多Agent协作时启用,单Agent可禁用

这里划重点:默认启用的工具里,至少有3个是你大概率用不上的(比如cron、canvas、nodes),禁用它们,单次就能省700-900 Token,日积月累能省一大笔!

3. 会话历史:“攒垃圾不清理”,越堆越费

OpenClaw有个“Compaction(压缩)”机制,号称能“轻量化上下文”,但实际用起来,它更像“懒癌患者”——不到万不得已,绝不清理会话历史。

具体逻辑看下面的流程,一眼就能懂:

image.png

关键坑点:为了不影响用户体验,OpenClaw的压缩阈值默认设置得极高——要么是20000字符(≈5000 Token),要么是模型上下文窗口的88%(可通过contextCompactionThreshold配置调整)。这意味着,在触发压缩前,你的会话历史会一直累积,Token消耗会越来越高,直到接近模型上下文上限才会“瘦身”。

举个例子:用GPT-4o(32K上下文),默认阈值88%,也就是要累积到28160 Token才会压缩,这期间你可能已经发了几十条消息,Token早就花超了。

4. Memory Flush:“清理垃圾前,还要先花一笔钱”

这是最容易被忽略的“隐形开销”——在触发会话压缩前,OpenClaw会调用一个叫“Memory Flush”的功能,而这是一个独立的LLM调用

简单说:你想清理累积的会话历史(Compaction),得先花钱请LLM“整理记忆”,把有用的信息写入本地记忆文件(比如memory/2026-03-20.md),没用的丢弃。这个过程,会完整消耗一次“System Prompt + 工具定义 + 指令”的Token,相当于额外多花了一次请求的成本。

看一段核心代码(简化版,保留关键逻辑),你就懂了:

export async function runMemoryFlushIfNeeded(params: {  
  cfg: OpenClawConfig;  
  followupRun: FollowupRun;  
  // ...
}): Promise<SessionEntry | undefined> {  
      一个完整的Agent回合,相当于额外调用一次LLM  
  await runEmbeddedPiAgent({    
    prompt: memoryFlushSettings.prompt,    // 额外的Prompt消耗
    // 还会加载System Prompt和工具定义,重复消耗Token
  });
}  // 触发

面试官追问:“这部分能省吗?”
答:“可以!通过配置关闭自动Memory Flush(enabled: false),手动触发压缩,或者调整softThresholdTokens(默认4000),减少触发频率,能省不少隐形开销。”

5. 记忆检索结果:“找东西的成本,也要算在你头上”

OpenClaw的记忆功能确实好用——你说过的话、做过的操作,它能通过memory_search找回来,但这个“找东西”的过程,也是要消耗Token的。

具体逻辑:当Agent调用memory_search工具时,检索到的所有结果(包括匹配度、相关片段、文件路径),都会被完整加入上下文,供LLM参考,而这些检索结果,全算“输入Token”。

举个真实例子,一看就懂:

  • 用户:“我上次配置的模型参数是什么?”
  • Agent调用:memory_search(query="模型参数配置")
  • 返回结果(会全部加入上下文):
    • memory/2026-03-15.md:8-12 (score: 0.88):“用户配置默认模型为GPT-4o mini,上下文窗口设为16K,温度值0.7”
    • MEMORY.md:12-15 (score: 0.75):“模型参数调整记录:温度值从0.5修改为0.7,提升回复灵活性”
  • Token消耗:这两段检索结果(约120字符)+ 工具调用指令(约60字符),合计≈45 Token,看似不多,但如果频繁查询历史配置、操作记录,累积起来会显著增加Token开销。

补充一个小技巧:OpenClaw默认会过滤匹配度低于0.35的结果(可调整minScore),适当提高这个阈值,能减少无效检索结果的Token消耗。

6. 工具调用链:“连锁反应,越调用越费”

OpenClaw的Agent是“多工具协作”的,一个简单的任务,可能会触发多次工具调用,而每次调用,都是“请求+响应”双向计费——请求时发送工具调用指令(消耗Token),响应时返回工具执行结果(再消耗Token)。

还是举个真实场景,感受一下Token的“烧钱速度”:

用户需求:“帮我读取本地的接口定义文件,生成接口文档,并发到团队群”

Agent触发的调用链及Token消耗(估算):

  1. read("api/LoginInterface.json") → 返回文件内容(接口字段、请求方式等)(输入+输出,合计≈400 Token)
  2. memory_search("团队群聊地址") → 返回群聊ID和推送权限信息(合计≈180 Token)
  3. message(channel="team-group", content="【登录接口文档】接口地址:/api/login\n请求方式:POST...") → 返回发送成功确认(合计≈150 Token)

就这一个简单的文档生成+推送任务,单工具调用就消耗了730 Token,再加上前面的固定开销(System Prompt+工具定义),单次请求总消耗轻松破2000 Token——如果团队每天有10次类似的文档生成、消息推送需求,一天就是2万。

二、核心认知:记忆层不是“省Token”的,是“防爆炸”的

很多人用OpenClaw,以为记忆层是用来“省Token”的,其实大错特错——记忆层的核心价值,是“让无限长对话成为可能”。

没有记忆层的话,会话历史会一直累积,直到超过模型的上下文窗口,Agent直接“失忆”;而有了记忆层,通过Compaction压缩历史、通过memory_search检索信息,能让对话无限延续,同时保持信息的可访问性。

所以,别指望靠记忆层“省Token”,它只能“减缓Token增长速度”,真正能省Token的,是从“减少固定开销”和“优化调用逻辑”入手。

三、实操优化方案:5步省出50% Token消耗

image.png

结合前面的拆解,给大家5个可直接落地的优化方法,不用改源码,只改配置、调逻辑,实测能省30%-50%的Token,还不影响使用体验:

1. 精简System Prompt(最易操作,立竿见影)

  • 精简Bootstrap文件:将bootstrapMaxChars从20000调整为5000-10000,只加载必要的配置(比如只保留AGENTS.md,删除SOUL.md、IDENTITY.md等非必要文件)。
  • 清理Skills提示:只启用当前场景需要的技能,比如做文本处理,就禁用browser、exec、cron等工具,减少Skills提示的字符数。
  • 简化Sandbox配置:如果不需要严格的权限限制,可精简Sandbox信息,减少30%左右的字符消耗。

2. 禁用冗余工具(核心优化,省Token最多)

通过OpenClaw配置文件(openclaw.json)或命令行禁用不用的工具,推荐禁用列表(根据自身场景调整):

# 命令行禁用工具(永久生效)
openclaw config set tools.browser.enabled false
openclaw config set tools.cron.enabled false
openclaw config set tools.canvas.enabled false
openclaw config set tools.nodes.enabled false

禁用这4个工具,单次请求可省1500-2000 Token,同时还能提升安全性(比如禁用exec可规避命令执行风险,贴合高校禁用的安全要求)。

3. 调整Compaction阈值(减少历史累积)

将上下文压缩阈值从默认的88%(或20000字符)调整为60%-70%,让会话历史更早被压缩,减少累积的Token消耗:

{
  "agents": {
    "defaults": {
      "contextCompactionThreshold": 0.7,  // 70%阈值,可根据模型上下文调整
      "bootstrapMaxChars": 8000
    }
  }
}

注意:阈值不要太低(低于50%),否则会频繁压缩历史,导致Agent“记不住”关键信息,影响体验。

4. 优化Memory Flush和记忆检索

  • 关闭自动Memory Flush:手动触发压缩(通过API调用),避免频繁的额外LLM调用。
  • 提高记忆检索阈值:将minScore从0.35调整为0.5,过滤无效检索结果,减少上下文Token消耗。
  • 定期清理记忆文件:删除无用的记忆片段(通过memory_forget接口),避免检索结果过于冗长。

5. 替换更便宜的模型(长期省成本,性价比最高)

目前大模型价格战打得激烈,OpenClaw支持自定义默认模型,优先选择性价比高的模型,成本能直接降60%-90%:

  • 配置方法:通过命令行设置默认模型(以豆包为例):
openclaw config set models.default "doubao-pro"
openclaw config set models.providers.doubao.apiKey "你的API Key"