$ ssh clawdbot.space --loading...
$ ssh clawdbot.space --loading...
先搞清楚钱花在哪,再砍掉那些砍了不心疼的部分。
Agent 的计费方式和聊天机器人不同:它每一轮都重发累积的上下文,还会按计划自己醒过来。这两件事都会累乘,而且都不出现在每 token 单价的对比里。这篇讲的是——在改任何东西之前,先找出四个驱动因素里是哪一个在主导你的账单。因为代价最小的那个修法,往往不是大家第一个想到的换模型。
| Task | Model | Cost | Saving |
|---|---|---|---|
| 心跳/状态检查 | Gemini Flash | ~$0.001/次 | 比 Opus 省 99% |
| 简单格式化/摘要 | Claude Haiku | ~$0.01/次 | 比 Opus 省 95% |
| 核心代理任务 | Claude Sonnet | ~$0.05/次 | 比 Opus 省 70% |
| 仅复杂推理 | Claude Opus | ~$0.15/次 | 基准 |
# openclaw.config.yaml
models:
heartbeat: gemini-2.0-flash
simple: claude-haiku-4-20250514
default: claude-sonnet-4-20250514
complex: claude-opus-4-20250514
routing:
- match: "heartbeat|status|ping"
model: heartbeat
- match: "summarize|format|extract"
model: simple
- match: "analyze|decide|plan"
model: complex
- default: default设置每个提供商的每日最大消费。达到限额时代理暂停。
openclaw config set limits.daily_usd 5.00限制每次 API 调用的输入+输出 Token 防止膨胀。
openclaw config set limits.max_tokens_per_call 4000总结旧消息而非保留完整历史。
openclaw config set context.sliding_window 15缓存相同查询。天气、状态查询、重复问题。日常任务节省 30-50%。
openclaw config set cache.enabled true openclaw config set cache.ttl 3600
缓存网页抓取和 API 响应。不重复获取未变化的数据。
openclaw config set cache.skills true
本地运行 Llama 3.1 8B 做心跳/状态任务。零 API 成本。
ollama pull llama3.1:8b
openclaw config set agents.defaults.heartbeat.model ollama/llama3.1:8b简单任务用本地模型,复杂推理用云 API。最佳成本/质量平衡。
全用 Opus、无限制、100K 上下文、无缓存
简单任务用 Haiku、默认 Sonnet、推理用 Opus
上下文修剪至 15K、每次调用限制
Ollama 心跳、启用响应缓存
谈成本时大家默认去比较各家的每 token 单价,而那恰恰是最没用的一根杠杆。Agent 和聊天机器人的区别在于:它每一轮都会把累积的上下文重发一遍,而且它会自己醒过来。这两件事都会累乘,而且都不会出现在「每百万 token 多少钱」的对比里。
| 驱动因素 | 为什么会累乘 | 通常能省多少 |
|---|---|---|
| 上下文长度 | 每一轮都计费,而 Agent 的会话记录在被截断之前只会单调增长。 | 大。上下文减半,输入成本基本也随之减半。 |
| 心跳与定时任务 | 在没有人提问的时候把 Agent 叫醒。一个五分钟心跳等于每天 288 轮没人看的对话。 | 大,而且在你去查之前通常是隐形的。 |
| 工具调用失败后的重试 | 失败的工具可能会打转,而每一次尝试都带着完整上下文。 | 尖峰型。通常没事,偶尔就是全部账单。 |
| 模型档位 | 所有人第一个去调的那个。 | 中等,而且它是用能力换来的。 |
重点在于这个顺序。换便宜模型会让每一条回复都变差;而砍掉上下文、关掉一个你根本不想要的心跳,什么都不会变差。从上往下做,你通常会发现账单降到「模型选哪个」这个问题已经不重要了。
三条命令告诉你现在究竟处在什么位置。不先跑它们就去改设置,结果往往是 Agent 变慢了、账单却没动。
# Find out what you are actually spending before changing anything. openclaw gateway usage-cost
这是后面所有动作的对照基准。在碰任何设置之前先把它记下来,否则你无法判断自己做的事到底有没有用。
# What is waking the agent when nobody asked it to? openclaw cron list openclaw config get agents.defaults.heartbeat
定时任务和心跳,是「没人记得自己配过」的成本里最常见的来源。这里的每一条都应该是你有意想要的。
# Which model is actually being used, and what are the fallbacks? openclaw models status openclaw models fallbacks
有 fallback 机制意味着你配置的模型未必是正在回答的那个。故障期间回退到更贵的档位,是一种完全合法、也完全不可见的花钱方式。
按顺序执行,每做完一步就重新看一次用量。一次改好几个地方,结果是你不知道哪个起了作用,而其中很可能有一个在没省下钱的前提下让 Agent 变差了。
# 1. Context is charged on every turn. Trim what gets injected. # There is no single "context length" knob — these are the budgets # that decide how much is pushed into the prompt each time: openclaw config set agents.defaults.bootstrapTotalMaxChars 30000 openclaw config set agents.defaults.bootstrapMaxChars 10000 # Heartbeat runs can skip workspace bootstrap files entirely: openclaw config set agents.defaults.heartbeat.lightContext true
从这里开始。这里没有单一的「上下文长度」旋钮;你能控制的是有多少工作区材料被推进提示词,靠的是 bootstrap 的字符预算。调小它们同时还能降低模型在长会话中间跟丢线索的概率。先减半,看看有没有东西坏掉,只在确实坏了的地方加回去。心跳上的 lightContext 几乎是白捡的——那些运行本来就很少需要工作区。
# 2. Route cheap turns to a cheap model instead of the default. openclaw models list openclaw models set <cheap-model-id>
分类、路由和简短确认不需要前沿模型。也正是在这一点上,本地跑变得有吸引力:本地一轮的边际成本就是电费,这让高频的琐碎工作实际上变成免费的。
# 3. Cap the blast radius of a runaway loop. openclaw cron list # remove anything you did not deliberately add openclaw sessions cleanup # orphaned sessions still hold context
无人值守的循环是这里唯一能产生真正吓人账单的失败模式。你没加过的 cron 条目,和仍然占着上下文的孤儿会话,都值得定期清理。