OpenClaw Agent 省钱指南:上下文优化与 Token 节约实战

Author闪耀LucianPosted: 4/13/2026

OpenClaw Agent 省钱指南:上下文优化与 Token 节约实战

你的 OpenClaw Agent 每天烧掉多少 Token?如果你没有刻意优化,答案可能会让你肉疼。

有用户反馈,默认配置下 OpenClaw 每天 API 开销可达 $50-100——不是因为做了什么复杂任务,而是框架默认把所有记忆文件一股脑塞进上下文。你问它一个简单问题,它先把你三周前的调试日志、上个月的项目笔记全部加载一遍。你在为毫无关联的 Token 买单。

这篇文章整理了我在部署 Pilot(个人 OpenClaw Agent)过程中总结的优化策略,每一条都经过实际验证。


一、先搞清楚 Token 花在哪了

OpenClaw 每次请求的 Token 消耗由以下几部分组成:

  1. Bootstrap 文件注入:SOUL.md、AGENTS.md、USER.md、TOOLS.md、IDENTITY.md、HEARTBEAT.md——每次会话启动全部加载进 system prompt
  2. 记忆文件加载:MEMORY.md + 每日日志,默认加载今天和昨天的
  3. 对话历史回放:之前的 user/assistant/tool 对话全部重放
  4. 工具输出:一次 cat 大文件或 ls -R 就能吃掉几千 Token
  5. 心跳任务:每 30 分钟一次,每次都重新加载上下文

Bootstrap 文件的总上限默认是 150,000 字符(约 50K Token)。这是字符数不是 Token 数——OpenClaw 内部用 4 字符 ≈ 1 Token 的启发式估算。

关键认知:如果一个文件没被加载进上下文,它对 Agent 的影响为零。 所以优化的核心就是:只加载必要的信息。


二、Bootstrap 文件瘦身

SOUL.md:只写模型不会自己做的事

最常见的浪费是在 SOUL.md 里写一堆模型本身就有的默认行为,比如"请礼貌回答"、"请用清晰的语言"。这些话每次请求都会被注入,白白消耗 Token。

原则:只保留让你的 Agent 独特的内容。 个性特征、硬性规则、特定风格——这些不告诉它就不会做的事才值得写。

我的 SOUL.md 控制在 280 词以内,涵盖身份定义、沟通风格、核心行为、知识领域四个维度,没有一句废话。

AGENTS.md:规则不要重复

一个规则只应出现在一个文件中。如果 AGENTS.md 写了"不用 emoji",SOUL.md 又写了"避免 emoji",你在为同一条规则付两倍 Token。

定期审计所有 bootstrap 文件,问自己:

  • 这条规则在别的文件里重复了吗?
  • 这条规则是针对已经修复的问题吗?
  • 这条规则能用更少的字说清吗?

TOOLS.md:环境信息够用就行

不需要把完整的运维文档塞进去。只写 Agent 实际需要知道的:服务地址、端口、可用工具、关键限制。详细的维护文档放在 workspace 里让它按需读取即可。


三、记忆管理:最容易失控的部分

每日日志精简

每条记忆条目不超过两行,只记关键事实和结果,不记执行过程。

反面例子:

[14:30] 用户让我检查 WordPress 插件状态,我先执行了 docker exec wordpress wp plugin list --allow-root,
输出显示有 2 个插件处于活跃状态,分别是 Download Monitor 和 Tawk.to,
然后我将结果汇报给了用户,用户表示确认。

正面例子:

[14:30] WordPress 插件检查 | 2 个活跃:Download Monitor、Tawk.to

同样的信息,Token 消耗差 5 倍。

每周压缩归档

超过 7 天的日志,价值急剧衰减。设定规则让 Agent 每周日执行压缩:

  • 最近 7 天:保留完整日志
  • 7 天以前:每天压缩为 1-2 行摘要
  • 原文移入 memory/archive/ 目录(不删除,但不再自动加载)

这条规则直接写在 AGENTS.md 里,Agent 会自动执行。

MEMORY.md 定期清理

MEMORY.md 是长期记忆,只存高价值持久信息:环境变更、已验证的操作流程、用户偏好。定期清理过时条目——你三个月前用的某个 workaround 如果问题已修复,就该删掉。


四、Compaction 策略:主动比被动好

OpenClaw 有内置的上下文压缩机制(Compaction)。当对话历史接近上下文窗口上限时,它会自动总结旧的对话。

但这里有两条路径:

好的路径(Maintenance Compaction): 上下文接近阈值 → 先触发 pre-compaction memory flush(自动把重要信息写入磁盘)→ 再压缩旧对话 → 继续工作,关键信息不丢失。

坏的路径(Overflow Recovery): 上下文超限,API 直接拒绝 → 强制压缩所有内容 → 没有 memory flush → 信息大量丢失。

如何确保走好的路径

  1. 切换任务前手动保存:告诉 Agent "把当前任务进度写入记忆",然后再给新任务
  2. **主动触发 /compact**:不要等溢出,在合适的时机主动压缩
  3. **调高 reserveTokensFloor**:给 compaction 留更多缓冲空间,让好的路径更容易触发

不要重复读文件

在 AGENTS.md 中加一条简单规则:"不要重复读取本次会话中已加载的文件。" 这能避免 Agent 在一次会话中反复 cat 同一个文件。


五、心跳和 Cron 任务隔离

如果你开了心跳(Heartbeat),每次心跳都会重新加载上下文并触发一次模型调用。默认 30 分钟一次,一天 48 次。

关键优化:把 Cron/心跳任务隔离到独立会话。

openclaw.json 中设置:

{
  "cron": {
    "jobs": [
      {
        "name": "例行检查",
        "schedule": { "kind": "every", "everyMs": 1800000 },
        "sessionTarget": "isolated",
        "payload": { "kind": "agentTurn", "message": "执行例行检查" }
      }
    ]
  }
}

sessionTarget: "isolated" 确保后台任务不会污染你的主会话上下文。如果任务需要通知你,让它用 message tool 发消息,而不是在主会话里输出。

如果暂时没有定时任务需求,HEARTBEAT.md 留空即可——Agent 只会回复 HEARTBEAT_OK,几乎不消耗 Token。


六、回复风格也是优化

一个被忽视的 Token 来源是 Agent 自己的回复。默认情况下,大模型倾向于生成冗长的回答。

在 SOUL.md 或 AGENTS.md 中明确要求:

  • 简单问题一句话回答
  • 汇报格式:结果 + 关键信息,一行说清
  • 不要客套寒暄

"WordPress 已重启,耗时 3s" 比 "好的尊上,我已经成功帮您重启了 WordPress 服务,整个过程非常顺利,耗时约 3 秒钟" 节省 80% 的输出 Token。

输出 Token 通常比输入 Token 贵 3-5 倍,这条优化的 ROI 非常高。


七、我的实际配置参考

以下是我写入 AGENTS.md 的记忆优化规则全文:

## 记忆优化(节约 Token)

- 每日日志保持精简:每条记录不超过两行,只记关键事实和结果,不记过程细节
- 每周日对 7 天以前的日志进行压缩:每天保留 1-2 行摘要,原文移入 memory/archive/
- MEMORY.md 只存高价值持久信息,定期清理已过时的条目
- 不要重复读取本次会话中已加载的文件
- 切换任务前,先将当前任务的关键上下文写入记忆再继续
- 汇报和回复保持精简,简单问题一句话回答

六条规则,不到 200 字,每次加载成本可忽略,但能显著降低日常运行的 Token 消耗。


总结

Token 优化不是一次性工作,而是持续的习惯。核心原则只有一条:只把 Agent 当前需要的信息放进上下文。

  • Bootstrap 文件精简、不重复
  • 记忆定期压缩归档
  • Compaction 主动触发而非被动溢出
  • 后台任务隔离会话
  • 回复风格极简

这些优化叠加起来,能将月度 API 成本压缩到原来的 1/3 甚至更低——而 Agent 的实际能力不会有任何损失。


本文基于 OpenClaw 2026.3+ 版本的实际部署经验撰写。配置细节可能随版本更新而变化,请以官方文档为准。

留言互动

📭

暂无评论,来做第一个发言的人吧!

🔒 请先登录后参与评论

Login →