OpenClaw 部署指南:https://www.azman.cn/

平台永久地址:www.azman.cn/

温馨提示: 本站内容精选自优质公开渠道,仅供分享与交流。我们尊重原创,如涉及版权问题,请权利方及时与我们联系,我们将在核实后第一时间处理。感谢您的理解与支持!

OpenClaw 省 Token 实操手册:八个维度,节省 60–90%

OpenClaw 省 Token 实操手册:八个维度,节省 60–90%

OpenClaw 省 Token 实操手册:八个维度,节省 60–90%

技术博主 Federico Viticci 一个月烧掉 180 万 Token,账单 $3,600。GitHub Issue #23254 算得更细:一个默认配置的 Heartbeat,30 分钟一次,每天 38 次 API 调用,每次 8,000–15,000 Token,光 Heartbeat 一项每天就要 $10–20。

一位工程师追踪 API 日志后发现:90% 的 Token 花销与实际让 Agent 做的工作没有关系。三个配置改动,每周账单从 $50 压到不到 $10。

这篇文章基于官方文档、GitHub Issue #21999 / #22133 / #23254 / #30983 / #9742 / #30894 以及多位工程师的实测整理。每个技巧都标注来源。

目录

先搞清楚:钱烧在哪里
维度一:模型分级
维度二:配置文件瘦身
维度三:Skills 精简
维度四:会话管理
维度五:Heartbeat 和 Cron(含 Bug 警告)
维度六:多 Agent 体系的分级配置
维度七:Prompt Cache 最大化
维度八:工具调用与并发控制
消费保险 + 优先级速查表


先搞清楚:每次 API 调用你在为什么付钱

Token 消耗 ≠ 你说的话 + AI 回的话。GitHub Issue #21999(一份 150k+ Token 系统提示的完整拆解)给出了这张成本图:

成本来源
典型量级
可优化
框架系统提示 + 工具列表(50+ 工具 schema)
3,000–5,000
不可改
配置文件注入(SOUL / AGENTS / USER / TOOLS + Skills 描述列表)
3,000–14,000
最高优先级
历史对话上下文
随轮次指数增长,严重时占 58% 窗口
可优化
工具大输出(永久留在历史,拖累每次后续调用)
视工具可达数万,session 文件可达 2.9MB
可优化
你的输入 + AI 的输出
通常几百
占比极小

Issue #9157 的总结一针见血:“浪费了 93.5% 的 Token 预算”——大部分钱花在上下文注入和历史积累上,不在实际工作上。

先用这几条命令看清楚自己的情况,再针对性优化:

/status              # 当前会话 Token 消耗和费用估算
/usage full          # 每次回复后显示消耗明细
/context detail      # 查各注入文件各占多少 Token

# 查看 session 文件大小,超过 500KB 需要警惕
du -h ~/.openclaw/agents/*/sessions/*.jsonl | sort -h

维度一:模型分级 — 杠杆最高,立竿见影

Haiku 约是 Sonnet 的 1/5 价格,约是 Opus 的 1/25。用 Opus 回答”今天日历上有什么”,是在用外科手术刀切菜。

模型
每 M Token 输入价
适合任务
Claude Opus
~$15
复杂深度推理,需明确说明原因才调用
Claude Sonnet
~$3
代码、写作、日常推理,大多数 Agent 的主力
Claude Haiku
~$0.6
简单问答、格式化、状态检查、监控类 Agent
Gemini 2.5 Flash
~$0.30
Heartbeat / Cron 专用。每次 $0.005 vs Opus 的 $0.24,一天 48 次差距是 $0.24 vs $11.52
DeepSeek V4
极低,人民币充值
大陆用户性价比最优解
{
  "agents": {
    "defaults": {
      "model": {
        "primary": "anthropic/claude-sonnet-4-6",    // 日常默认主力
        "fallbacks": ["anthropic/claude-haiku-3.5"]
      },
      "subagents": {
        "model": "anthropic/claude-haiku-3.5"        // 子 Agent 自动用便宜模型
      }
    }
  }
}

会话中途随时切换,不需要重启:

/model anthropic/claude-haiku-3.5    # 切到便宜模型
/model anthropic/claude-opus-4-6     # 切到旗舰

两个特殊陷阱:
Gemini 2.5 Pro 是已知的 Token 黑洞,几十次调用烧掉 190 万 Token,务必用 Flash 替代。
Thinking / Reasoning 模式消耗暴增 10–50 倍,在 config 里明确关闭:"thinking": {"type": "disabled"}


维度二:配置文件瘦身 — 每次调用都在省

SOUL.md、AGENTS.md、USER.md、TOOLS.md 在每次 API 调用时全量注入,包括每次 Heartbeat 和 Cron。MEMORY.md 只在主会话加载,memory/ 子目录的日期文件通过 memory 工具显式调用才加载——这两类比较省,优先往那里写。

文件
目标体量
精简方向
SOUL.md
500 Token 以内
只保留核心原则,操作细节挪到 TOOLS.md 或 Skill
AGENTS.md
800 Token 以内
删掉未用到的规则(未开启的渠道、TTS 等)
MEMORY.md
只保留持久性事实
临时记录写 memory/YYYY-MM-DD.md,不堆进主文件

一个容易踩的坑:TOKEN-RULES.md 本身也在消耗 Token。如果你为每个 Agent 创建了独立的 TOKEN-RULES.md 放在 workspace 根目录下,它会和 SOUL.md 一起每次注入。建议把规则内容直接合并进 AGENTS.md——少一个文件,少一次文件元数据注入。或者用 $include 引用一份全局共享规则,七个 Agent 的共同规则只维护一份(官方文档支持 $include),各 Agent 的本地文件只保留差异部分。

频繁改配置文件会让 Prompt Cache 反复失效。每次改动后第一次调用要重新按全价写入缓存。把频繁变动的内容放进 memory/YYYY-MM-DD.md,核心配置文件保持少改。

# 让 OpenClaw 自己分析并执行优化
分析我当前的配置文件,找出哪些内容可以提取成按需加载的 Skill,
估算优化后能节省多少 Token,然后帮我执行

维度三:Skills 精简 — 隐性成本,很多人不知道

官方 Skills 文档给出了精确公式:每个 Skill 每次调用的固定注入 = 97 字符 + 名称和描述的长度(字符数除以 4 约等于 Token 数)。一个描述 200 字符的 Skill,每次注入约 75 Token。好消息是 Skill 的完整指令内容只有 Agent 决定使用它时才加载(Tier 2),每次都注入的只是描述摘要(Tier 1)。

10 个 Skill 的描述注入约 400–500 Token,每天 100 次 Opus 调用 = 每月额外 $180。三个优化方法:

方法一:只保留真正常用的 Skills,移除不常用的。不是每个能用上的 Skill 都要挂在 Agent 上,按需手动调用一样生效。

方法二:用 disable-model-invocation 让 Skill 彻底不注入系统提示。官方支持这个字段,设为 true 后 Skill 从系统提示里消失,只能通过用户手动调用:

---
name: my-heavy-skill
description: 这个 skill 很少用,不要自动注入
disable-model-invocation: true
---

方法三:精简 Skill 的描述字段。描述只写触发条件,完整说明放在 SKILL.md body 里——body 是 Tier 2,按需加载,不影响基础成本。


维度四:会话管理 — 堵住历史积累的黑洞

35 条消息的会话,session 文件已达 2.9MB(GitHub Issue #21999 实测)。历史积累最终可占 58% 的上下文窗口,每次调用都在拖着这个包袱。

/compact 前先切便宜模型

/compact 本身是一次完整 API 调用,用当前会话的模型做总结。用 Opus 的话 compact 本身就很贵。正确做法:

/model anthropic/claude-haiku-3.5    # 先切便宜模型
/compact                              # 用便宜模型做总结
/model anthropic/claude-sonnet-4-6   # 再切回主力

softThresholdTokens + 每日重置:双保险

softThresholdTokens 是被动防御(达到阈值时写 memory 再刷新),每日重置是主动清零,两个一起用才稳:

{
  "session": {
    "softThresholdTokens": 40000,
    "flushPrompt": "记录关键决策、状态变更和教训,跳过日常例行对话。若没有值得记录的内容,回复 NO_FLUSH。",
    "reset": {
      "mode": "daily",
      "atHour": 4,          // 凌晨 4 点自动重置,不影响白天使用
      "idleMinutes": 120    // 或者闲置 2 小时后重置
    }
  }
}

大输出任务用子 Agent 隔离

子 Agent 的中间输出不会进入主会话历史,只有最终结论返回。同时子 Agent 自动使用 promptMode: "minimal",不注入 Skills 和 Docs 区块,本身就比主会话省:

/subagents spawn main "扫描 ~/projects,列出超过 100MB 的文件"
/subagents spawn main "总结过去 24 小时 Discord 消息,给我关键要点"

直接清理膨胀的 session 文件

du -h ~/.openclaw/agents/*/sessions/*.jsonl | sort -h
rm ~/.openclaw/agents/main/sessions/main.jsonl   # 清理主会话(不影响配置文件里的长期记忆)

维度五:Heartbeat 和 Cron — 含一个正在坑人的 Bug

Bug 警告(Issue #9742 / #13009 / #14279 / #21144 / #30894,跨越整个 2026 年 2–3 月):
heartbeat.model 覆盖在当前版本不可靠——Heartbeat 实际运行时会忽略这个字段,使用 agents.defaults.model 的主模型。你以为在用 Haiku,实际没有。Issue #30894 的结论:绕过方案是把 Heartbeat 逻辑移到 Cron + isolated session,Cron 的 model override 是正常的。

除了 Bug,原生 Heartbeat 还有两个问题:实际触发频率比设置值高(设了 30 分钟,观测到 10–20 秒触发一次),每次携带全部会话上下文(170k–210k Token/次是真实观测值)。

推荐方案:关掉原生 Heartbeat,改用隔离 Cron

// 第一步:关掉原生 Heartbeat
{
  "agents": {
    "defaults": {
      "heartbeat": { "every": "0m" }
    }
  }
}

// 第二步:改用隔离会话 + 便宜模型的 Cron 替代
openclaw cron add --every 55m --session isolated 
  --model google/gemini-2.5-flash-preview 
  "读取 HEARTBEAT.md;若一切正常回复 HEARTBEAT_OK,发现异常才通知我"

Cron 的 sessionRetention — 磁盘清理的小事也别忘

每次 isolated 会话结束后文件默认保留,多个 Agent 跑时间长了会积累大量废弃文件拖慢 Gateway。加上这两行:

{
  "cron": {
    "sessionRetention": "24h",                    // 自动清理 24 小时前的 Cron session 文件
    "runLog": { "maxBytes": "2mb", "keepLines": 2000 }   // 限制日志大小
  }
}

多任务合并成一次 Cron 调用。5 个独立检查任务变 1 次批量调用,节省 75% 的上下文注入成本——工作量没变,API 调用次数变少了。


维度六:多 Agent 体系的分级配置 — 一刀切是浪费

如果你有多个 Agent,agents.defaults 的全局配置是底线,不是终点。不同 Agent 的工作性质差很大:sysmon 只需要看 10 条日志,agent-creator 在写代码时需要更大窗口,wechat-writer 需要保留更多写作上下文。全局 contextTokens: 50000 对监控类 Agent 是浪费,对开发类 Agent 又不够用。

官方文档确认 modelcontextTokenscompaction 都可以在 agents.list[] 级别单独覆盖。按 Agent 类型分三档:

类型
适合的 Agent
推荐配置
监控 / 情报类
sysmon、intel、news-curator
Haiku,contextTokens: 20000,compaction: aggressive
内容 / 写作类
wechat-writer、content-curator
Sonnet,contextTokens: 40000,compaction: safeguard
开发 / 创建类
agent-creator、findjob
Sonnet,contextTokens: 100000,compaction: safeguard
{
  "agents": {
    "defaults": {
      "model": { "primary": "anthropic/claude-sonnet-4-6" },
      "contextTokens": 50000
    },
    "list": [
      // 监控类:最便宜,窗口最小,激进压缩
      {
        "id": "sysmon",
        "model": { "primary": "anthropic/claude-haiku-3.5" },
        "contextTokens": 20000,
        "compaction": { "mode": "aggressive" }
      },
      {
        "id": "intel",
        "model": { "primary": "anthropic/claude-haiku-3.5" },
        "contextTokens": 30000,
        "compaction": { "mode": "aggressive" }
      },
      // 内容类:Sonnet,保守压缩(不能随意丢失写作上下文)
      {
        "id": "wechat-writer",
        "model": { "primary": "anthropic/claude-sonnet-4-6" },
        "contextTokens": 40000,
        "compaction": { "mode": "safeguard" }
      },
      // 开发类:需要更大窗口(代码上下文)
      {
        "id": "agent-creator",
        "model": { "primary": "anthropic/claude-sonnet-4-6" },
        "contextTokens": 100000,
        "compaction": { "mode": "safeguard" }
      }
    ]
  }
}

compaction.mode 说明:aggressive 更激进地丢弃历史细节,适合监控类这种”结论重要、过程不重要”的 Agent;safeguard 更保守,适合写作和开发这种”上下文连贯性很重要”的 Agent。


维度七:Prompt Cache 最大化 — 把固定成本变折扣

配置文件内容被缓存后,后续调用只收约 10% 费用读取缓存。关键是保持配置文件前缀稳定——”每条消息里的元数据注入会破坏稳定性”(Issue #21999)。

{
  "agents": {
    "defaults": {
      "models": {
        "anthropic/claude-sonnet-4-6": {
          "params": { "cacheControlTtl": "1h" }    // 启用 1 小时长窗口缓存
        }
      },
      "contextPruning": {
        "mode": "cache-ttl",    // TTL 到期时先剪枝再重缓存
        "ttl": "1h"
      }
    }
  }
}

如果保留了原生 Heartbeat(等 Bug 修复后),把间隔设为略小于 TTL 的值,可以保持缓存热度避免冷启动费用——55m Heartbeat 刷新 1h 缓存,缓存不会到期失效。


维度八:工具调用与并发控制

{
  "agents": {
    "defaults": {
      "contextTokens": 50000,         // 全局底线,各 Agent 可单独覆盖
      "imageMaxDimensionPx": 800,     // 截图密集场景降低视觉 Token
      "maxConcurrent": 1,             // 日常用 1,并发请求 = 并发倍的注入成本
      "subagents": { "maxConcurrent": 3 }
    }
  }
}

把这几条写进 AGENTS.md(或合并进来的 TOKEN-RULES 内容):

## 工具调用成本控制
- 读取文件前优先使用精确检索,不读整个文件
- 多个独立查询任务合并成一次批量工具调用
- 目录扫描、日志汇总等大输出任务用 /subagents spawn 隔离

额外一项:消费保险,杜绝意外失控

保险措施
在哪里设
API Key 每日消费上限
Anthropic 控制台 → API Keys → Spend Limit
子 Agent 并发上限
"subagents": {"maxConcurrent": 3}
TOOLS.md 写月度预算提醒
超过预算 75% 时主动通知,不等到月底看账单

优先级速查表

优先级
操作
预计效果
难度
P0
关掉原生 Heartbeat,全部改用隔离 Cron + Gemini Flash(绕过 heartbeat.model Bug)
节省 50–80%,同时修复潜在的 Bug 导致的额外消耗
P0
把默认模型从 Opus 换成 Sonnet;Haiku 处理简单任务
节省 60–80%
P1
按 Agent 类型分级配置 model + contextTokens(监控/内容/开发三档)
精准控制,消除全局一刀切的浪费
P1
精简 SOUL / AGENTS / MEMORY.md;把 TOKEN-RULES 内容合并进 AGENTS.md
每减 1,000 Token ≈ $45/月(100次Opus/天)
P1
移除不常用 Skills,或设 disable-model-invocation: true;精简 Skill 描述
10 个 Skills ≈ 月省 $180(Opus)
P1
softThresholdTokens + session.reset.mode: “daily” 双保险
阻止历史无限膨胀
P1
/compact 前先 /model haiku;大输出用 /subagents spawn 隔离
防历史污染
P2
开 cacheControlTtl: “1h” + contextPruning: cache-ttl
减少冷启动重缓存费用
P2
cron.sessionRetention: “24h”;runLog.maxBytes: “2mb”
防止废弃 session 文件堆积拖慢 Gateway
P3
imageMaxDimensionPx: 800;maxConcurrent: 1;按 Agent 设 compaction.mode
精细化控制
安全网
API Key 控制台设每日消费上限 + subagents.maxConcurrent: 3
防失控

写在最后

你已经做了全局配置优化和每个 Agent 的 TOKEN-RULES,这是对的基础。还没做的三件事按优先级排:

第一,把所有 Heartbeat 换成 Cron——heartbeat.model 的 Bug 意味着你以为在省钱但实际没有,这是现在最紧急的一件事。

第二,给每个 Agent 配独立的 model 和 contextTokens——sysmon 用 Haiku + 20k,agent-creator 用 Sonnet + 100k,不要全部用全局的 50k。

第三,加 session.reset.mode: “daily”,和已有的 softThresholdTokens 形成双保险,每天凌晨自动清零历史。

其他的优化都是在这三个基础上的递进,按需叠加即可。

给TA打赏
共{{data.count}}人
人已打赏
教程与学习

OpenClaw 多 Agent 协作实战完全教程

2026-3-18 4:14:40

教程与学习

Docker 一键部署 OpenClaw:最干净的本地 AI 助手安装方式

2026-3-18 4:57:20

版权与安全声明:本文内容来源于第三方平台,相关素材的原始链接及标识均与原出处无关。我们致力于传递有价值的信息,若无意中侵犯了您的权益,请联系我们删除或调整。联系6065565#qq.com(请替换#为@)

网络信息繁杂,请读者自行甄别内容真实性,谨防受骗。本站目前无任何收费项目,官方福利群https://t.me/

官方福利群: https://t.me/

觉得内容不错?欢迎分享给好友,复制链接使用浏览器打开,让更多朋友看到!

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索