为什么龙虾 OpenClaw 费 token?

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

大家好,我是煎鱼。

最近几个月看到不少人在聊 OpenClaw 和爱马仕,有一个问题反复出现:为什么它这么费 token

很多时候不是因为你“问了一句很贵”,而是因为它每次触发,都不是单纯把用户消息发给模型,而是跑了一个完整的 agent runtime

具体我们今天这篇文章展开来看看。

成本结构与普通聊天不同

普通聊天产品,最直观的成本是输入和输出。OpenClaw 不是这个路子。

它每轮运行前都要先拼 system prompt、挂工具、补工作区上下文、接会话历史,必要时再带上工具结果、附件、压缩摘要。

后台 heartbeat 也是同一套流程,只是触发者不是你。

所以你看到的是一句提问,模型实际收到的更像是:

用户问题
+ system prompt
+ bootstrap files
+ skills metadata
+ tool list
+ tool schemas
+ conversation history
+ tool results
= 真正送进模型的输入

system prompt 的上下文成本

OpenClaw 的 system prompt 不是一两句人格设定。

从运行路径看,src/agents/pi-embedded-runner/run/attempt.ts 每次都会重新 resolve 当前 run 需要的 skillsPromptbootstrap context、工具集合,再走 buildAttemptSystemPrompt(...) 拼成最终 prompt。

最容易被忽略的是工作区 bootstrap 文件注入。默认情况下,像 AGENTS.mdSOUL.mdTOOLS.mdIDENTITY.mdUSER.mdHEARTBEAT.mdBOOTSTRAP.mdMEMORY.md 这些内容,都会进入 prompt 组装流程。

源码里的真实默认值,resolver 写得很明确:

agents:
  defaults:
    contextInjection: "continuation-skip"
    bootstrapMaxChars: 12000
    bootstrapTotalMaxChars: 60000

这里有两个点:

  • contextInjection 不是彻底懒加载,continuation-skip 只是安全续写时少注一点。

  • bootstrapMaxChars 和 bootstrapTotalMaxChars 是“截断后仍然进 prompt 的量”,不是说超过就不算。项目说明文档越长,默认上下文就越重。

SKills 上下文开销

很多人会误会,以为 OpenClaw 会把所有 SKILL.md 全文都塞给模型。

当前实现不是,是默认进 system prompt 的是技能目录元数据:技能名、描述、位置,先整理成一个 <available_skills> 清单,让模型知道有哪些技能可读。

真要用某个技能,再去调用 read 打开对应的 SKILL.md

<available_skills>
  <skill>
    <name>...</name>
    <description>...</description>
    <location>...</location>
  </skill>
</available_skills>

但这不等于它没成本。OpenClaw 对技能 prompt 也专门做了预算控制,默认 maxSkillsPromptChars 是 18000

技能会费 token,但主要费在技能目录,不是每个技能正文都默认注入。

工具 schema 的隐藏成本

工具对上下文有两层消耗。第一层是工具列表、工具描述。第二层更重:发给模型的 JSON schema

这部分平时不显眼,但源码算得很老实。/context detail 那条链路里,会把每个工具的参数 schema 做 JSON.stringify(parameters).length,再累计出总字符数。

官方文档也明说了:Tool schemas (JSON) 算上下文,只是不按普通文本展示。

有时候你明明只问了一句,账单看起来却不像只问了一句,问题往往就出在这里。真想查,先跑 /context detail,很多时候大头根本不在聊天记录里。

会话历史与工具结果的累积成本

只要你还在同一个 session 里聊,历史消息就会一直累。

工具调用和工具结果也会进 transcript,后面的每一轮都得重新背这些东西。

OpenClaw 也知道这里容易炸,所以专门加了几道保险,比如:

agents:
  defaults:
    contextLimits:
      toolResultMaxChars: 16000
    contextPruning:
      mode: "cache-ttl"
      ttl: "1h"

这里的 toolResultMaxChars 默认是 16000

不是说工具输出超过就没了,而是 live path 上会做截断,避免一条超长命令输出把下一轮 prompt 顶爆。

contextPruning.mode = "cache-ttl" 也很关键,它缓存的是内存里的上下文,不是磁盘上的 transcript。

heartbeat 的后台消耗

这个点很多人会漏。它确实存在,而且不是“象征性消耗”,而是实打实的模型调用成本。

OpenClaw 的 heartbeat 不是传统意义上那个轻量 ping。它跑的是完整 agent turn。

官方文档写得很直白:heartbeat runs full agent turns,间隔越短,token 消耗越高。

如果 heartbeat 直接复用主会话,它通常会带上:

  • 当前 system prompt

  • 必要的 bootstrap 文件。

  • 当前会话上下文。

  • 很多情况下,还有主会话历史。

所以它消耗的不是“监控 token”,而是真正的输入输出 token。有人会觉得奇怪:我明明没发消息,为什么 /status/usage 里的数字还在涨?因为后台 agent 还在按计划跑。

这一块官方也给了两个很关键的降耗开关:

agents:
  defaults:
    heartbeat:
      every: "55m"
      lightContext: true
      isolatedSession: true

lightContext: true 的意思是,heartbeat 尽量走轻量上下文,只保留必要的 HEARTBEAT.mdisolatedSession: true 更狠,直接让 heartbeat 用隔离 session 跑,不复用整段主会话历史。官方文档里给了很直接的量级对比:这样做可以把单次 heartbeat 从大约 ~100K token 级别,压到 ~2-5K

所以“定时探活是不是费 token”,答案就是:费,而且很可能是后台最容易被忽略的一笔持续成本。

compaction 与 heartbeat 的成本取舍

很多人一看到 /compactcacheheartbeat,就会把它们自动翻译成“省钱按钮”。这就想多了。

compaction 的逻辑是:先花一次摘要成本,把太长的历史压一压,换后面的上下文窗口继续能跑。

配置里像 reserveTokensFloorkeepRecentTokens,就是在控制什么时候开始压、最近原文保留多少。

heartbeat 也一样,它能帮你保连续性、保缓存热度、保后台任务不断线,但这部分成本不会自己消失。

总结

看到这里,OpenClaw 为什么费 token,已经比较清楚了。

不是单点问题,而是几层东西叠在一起:每轮都要重建自己的 system prompt,技能目录和工具 schema 本身就占上下文,会话历史和工具结果会持续累积。

后台 heartbeat 还会继续烧,compaction 和缓存只能挪成本、打折,不能把成本抹掉。

很多时候,贵的不是单一的模型价格,而是龙虾带了多少东西在跑。

关注和加煎鱼微信,

一手消息和知识,拉你进技术交流群👇

你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路

日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!

原创不易 点赞支持

AI 时代程序员必备技能

Codex、Claude Code、Cursor、Hermes Agent、OpenClaw等工程化实战专栏 ,讲透 AI 如何接管脏活累活

下载代码方式:https://pan.quark.cn/s/a4b39357ea24 依据所提供的资料,我们深入剖析此问题以及所给出的两种算法方案。 ### 问题背景 该问题源自王晓东编撰的《算法设计与实验题解》一书,书中阐述了一个值得注意的数学议题:针对一本页码从1到n顺序编号的书籍,要求统计所有页码中数字0至9各自出现的频次。例如,若n=13,则页码序列为1、2、...、13,其中数字1出现5次(体现在1、10、11、12、13中),数字0出现1次(体现在10中)。 ### 问题描述 具体而言,我们需要开发一种算法,其输入参数为一个正整数n,输出结果需为0至9这十个数字各自出现的频次。所有页码均以十进制形式呈现,且不包含任何前导零,即不会出现如006之类的页码表示。 ### 解决方案一:时间复杂度为O(n*log10(n))的算法 首先,介绍一种时间复杂度为O(n*log10(n))的算法实现。其核心构思在于遍历从1到n的每一个数值,然后逐一分解每个数值的各个位,并统计各类数字出现的频次。具体步骤如下: 1. 初始化一个长度为10的数组`count`,用于记录0至9每个数字出现的频次,初始值均为0。 2. 从1开始遍历至n,对于每一个数值i,将其转换为整数并进行以下操作: - 利用循环结构,持续将当前数值除以10,获取余数(即当前最低位的数字),并累加到对应的计数器中。 3. 遍历完成后,输出`count`数组中的每一个元素,即为所求的结果。 ### 解决方案二:优化算法 为了提升效率,提出了一种更为优越的算法。该算法基于以下观察:在1到10^n-1之间的任意区间内,每一种数字0至9出现的频次是相等的。例如,在1到999之间,每一种数字0至9出现的频次均相...
内容概要:本文档详细介绍了基于直驱永磁同步发电机(PMSG)的1.5MW风力发电系统在Simulink环境下的建模与仿真方法,涵盖风力机、传动系统、PMSG本体及电力电子变换器等核心组件的数学建模与系统集成。通过构建完整的风电系统仿真平台,实现了对风速扰动、机械动力学响应、电磁能量转换及并网运行特性的动态模拟,重点解析了PMSG在不同工况下的运行行为与先进控制策略的设计与实现,如最大功率点跟踪(MPPT)和矢量控制技术。该模型不仅可用于风电系统的性能评估与优化,还可作为控制器设计与算法验证的有效工具,支持新能源领域的教学、科研与工程应用。; 适合人群:具备电力系统、电机控制或可再生能源发电等相关背景的科研人员、工程技术人员及高校研究生;熟悉MATLAB/Simulink仿真环境者尤佳。; 使用场景及目标:①开展风力发电系统的动态特性分析与先进控制策略研究;②完成课程设计、学位论文或科研项目中的系统建模任务;③复现高水平学术论文中的风电仿真案例,支撑科研成果的验证与发表。; 阅读建议:建议结合文档中提到的相关控制算法与优化策略进行拓展学习,重点关注模型结构搭建、参数配置与仿真调试过程,并通过改变风速输入、负载条件等变量开展多工况仿真实验,深入理解系统动态响应机制与控制效果。
内容概要:本文系统研究了基于粒子群PSO、灰狼GWO、鲸鱼WOA、哈里斯鹰HHO、蜣螂DBO、麻雀SSA等多种智能优化算法的无人机三维路径规划方法,利用Matlab代码实现了在复杂三维环境下的路径搜索与避障功能,并构建包含路径长度、飞行高度、障碍物规避、转弯代价等多维度的综合成本函数体系,对各算法的收敛速度、寻优能力、路径平滑性及全局搜索性能进行了定量对比分析。研究不仅展示了各类群智能算法在路径规划中的实现机制与参数敏感性,还提供了可复现的仿真平台,为无人机自主导航系统的开发与优化提供了理论依据和技术支撑。; 适合人群:具备Matlab编程基础和基本优化算法知识,从事无人机路径规划、智能控制、自动化、机器人技术等相关领域的科研人员、工程技术人员及高校研究生。; 使用场景及目标:① 对比分析主流群智能优化算法在复杂三维空间路径规划中的性能差异与适用条件;② 构建并优化多目标成本函数以提升路径规划的安全性与经济性;③ 为科研项目、学术论文撰写或实际工程应用提供可靠、可复现的Matlab代码参考与仿真框架; 阅读建议:建议读者结合所提供的Matlab代码逐模块调试运行,深入理解各算法的迭代机制与路径生成过程,重点关注参数设置对优化结果的影响,并可根据具体应用场景调整环境建模与成本权重,进一步拓展和优化算法性能。
内容概要:本文围绕“风光制氢合成氨系统优化研究”展开,详细介绍了利用Python代码对该综合能源系统进行建模与优化的全过程。通过复现高水平学术论文,构建了集成风能、光伏等可再生能源的制氢及合成氨系统模型,充分考虑了可再生能源出力的随机性与波动性、关键设备运行的技术约束以及系统整体的经济性目标,采用先进的数学优化算法对系统的容量配置与运行调度策略进行联合求解,旨在提升绿氢与绿氨生产的效率,促进可再生能源的高效消纳并推动工业领域深度脱碳。文中提供了完整的Python代码实现方案,涵盖数据处理、模型构建、求解器调用与结果可视化等环节,具有较强的可复现性和二次开发价值。; 适合人群:具备一定Python编程基础和优化建模能力,从事新能源系统规划、综合能源系统优化、绿色化工、电力系统调度及相关领域的科研人员、工程技术人员和高校研究生。; 使用场景及目标:①深入学习并复现风光耦合电解水制氢与合成氨的集成系统优化模型;②掌握基于Python的能源系统建模、多目标优化与不确定性处理方法;③应用于绿色氨生产系统设计、可再生能源大规模消纳、低碳工业流程优化等前沿科研与工程项目。; 阅读建议:建议读者结合文中提供的完整代码,使用实际气象与负荷数据进行调试与验证,深入理解目标函数的构建逻辑、各类物理与运行约束的数学表达以及优化求解器(如Pyomo+CBC或Gurobi)的具体应用,进而可拓展至考虑更多不确定性因素(如价格波动)或多能互补(如储能)的复杂场景研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值