OpenClaw Agent 省钱指南:上下文优化与 Token 节约实战
你的 OpenClaw Agent 每天烧掉多少 Token?如果你没有刻意优化,答案可能会让你肉疼。
有用户反馈,默认配置下 OpenClaw 每天 API 开销可达 $50-100——不是因为做了什么复杂任务,而是框架默认把所有记忆文件一股脑塞进上下文。你问它一个简单问题,它先把你三周前的调试日志、上个月的项目笔记全部加载一遍。你在为毫无关联的 Token 买单。
这篇文章整理了我在部署 Pilot(个人 OpenClaw Agent)过程中总结的优化策略,每一条都经过实际验证。
一、先搞清楚 Token 花在哪了
OpenClaw 每次请求的 Token 消耗由以下几部分组成:
- Bootstrap 文件注入:SOUL.md、AGENTS.md、USER.md、TOOLS.md、IDENTITY.md、HEARTBEAT.md——每次会话启动全部加载进 system prompt
- 记忆文件加载:MEMORY.md + 每日日志,默认加载今天和昨天的
- 对话历史回放:之前的 user/assistant/tool 对话全部重放
- 工具输出:一次
cat大文件或ls -R就能吃掉几千 Token - 心跳任务:每 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 → 信息大量丢失。
如何确保走好的路径
- 切换任务前手动保存:告诉 Agent "把当前任务进度写入记忆",然后再给新任务
- **主动触发
/compact**:不要等溢出,在合适的时机主动压缩 - **调高
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+ 版本的实际部署经验撰写。配置细节可能随版本更新而变化,请以官方文档为准。
📭
暂无评论,来做第一个发言的人吧!