Back to Articles
Feb 15, 20265 hours ago

The Complete Optimization Guide for How OpenClaw Saves 90% of Tokens

C|
ccjing | (✱,✱) 🐬@ccjing_eth

AI Summary

This article is an essential guide for anyone using the OpenClaw AI agent framework who is concerned about rapidly escalating token costs. It begins by demystifying the core issue, breaking down token consumption into a simple formula involving input, output, model price, and call frequency. The piece reveals a critical, often overlooked insight: the primary token drain isn't the AI's responses, but the massive input context—including system prompts, tool definitions, workspace files, and full conversation history—that gets sent with every single request, potentially amounting to tens of thousands of tokens per interaction. The guide then systematically walks through a suite of powerful optimization strategies. It emphasizes that the most effective starting points are meticulously pruning the default workspace files and enabling prompt caching, which can dramatically reduce input costs. Beyond these foundational steps, it explores advanced techniques like using context pruning and compaction to manage long conversations, deploying sub-agents to isolate contexts for parallel tasks, and implementing semantic search tools like qmd to retrieve only relevant memory snippets instead of entire documents. The article also provides practical advice on optimizing call frequency through cron and heartbeat tuning and strategically selecting models, advocating for using cost-effective models like Claude Sonnet for daily tasks while reserving premium models like Opus for complex work. Ultimately, this comprehensive resource provides a clear pathway to gaining control over your AI operational costs. By applying the layered strategies outlined—from simple configuration tweaks to advanced architectural changes—users can achieve substantial savings. For a detailed breakdown of configuration examples and step-by-step implementation instructions that can help you potentially reduce token consumption by 50 to 90 percent, the full article is an invaluable read.

很多人刚开始用 OpenClaw 的时候,都会遇到一个问题:Token 消耗得特别快。明明只是聊了几轮,账单就蹭蹭往上涨。

为什么会这样呢?

其实,要理解Token 消耗,我们可以用一个简单的公式来理解:

Token消耗 = (输入 + 输出) × 调用次数 × 模型价格

其中,这里的输入输出就是你的上下文,模型价格就是不同模型的计费标准,调用次数就是调用大模型的次数。

所以下面我们用这个公式来分析一下,OpenClaw 为什么会这么消耗 Token,以及我们如何解决这个问题。

输入:看不见的大头

很多人以为,Token 主要花在 AI 的回复上。但实际上,输入才是真正的大头。
OpenClaw 的设计哲学是无状态到有状态的转变,为了让 Agent 像人类一样记住一切,框架每次都会默认将完整对话历史发送出去。

也就是你每次和 OpenClaw 对话,它都会发送以下这些内容:

首先是 System Prompt(系统提示词 + 自定义),大约 3,000-10,000 tokens。然后是 Tool Schema(工具定义),约 8,000 tokens。

接着是 Workspace 文件,OpenClaw 会自动注入这些文件(如果存在的话):AGENTS.md、SOUL.md、TOOLS.md、IDENTITY.md、USER.md、HEARTBEAT.md,以及 MEMORY.md(可选)。如果启用了 Memory Search,还会检索相关的每日记忆文件(memory/YYYY-MM-DD.md)。

最后是历史对话,也就是之前的聊天记录。

加起来,一次请求的输入可能就有 2-3 万 tokens。如果你聊了 10 轮,那就是 20-30 万 tokens 的输入。

那怎么优化输入?

1. 精简 Workspace 文件(最简单有效)

OpenClaw 的 Workspace 文件每次对话都会注入,是隐形的 Token 大户。这些文件包括 MEMORY.md(长期精选的记忆)、memory/YYYY-MM-DD.md(每天自动生成的日志)、AGENTS.md(Agent 配置)、SOUL.md(性格文件)、TOOLS.md(工具配置)等。

很多人刚开始用的时候,这些文件都是默认配置,里面有大量用不到的功能说明。比如 AGENTS.md 里可能有群聊规则、TTS 配置、各种你根本不用的功能,这些都在白白消耗 tokens。

精简这些文件是性价比最高的优化。直接用提示词让 AI 帮你:

帮我精简 OpenClaw 的上下文文件以节约 token。

具体包括:
1) AGENTS.md 删掉不需要的部分(群聊规则、TTS、不用的功能),压缩到 800 tokens 以内
2) SOUL.md 精简为简洁要点,300-500 tokens
3) MEMORY.md 清理过期信息,控制在 2000 tokens 以内
4) 检查 workspaceFiles 配置,移除不必要的注入文件
5) 定期清理 memory/YYYY-MM-DD.md 中的过期日志

经验法则:每减少 1000 tokens 注入,按每天 100 次调用 Opus 算,月省约 $45。

2. 启用 Prompt Caching

Prompt Caching 可以缓存重复的输入内容,能节约 90% 的输入成本。

工作原理:

• 第一次请求:10,000 tokens 输入,正常计费

• 第二次请求:100 tokens 新内容 + 10,000 tokens 缓存

• 100 tokens 正常计费

• 10,000 tokens 按缓存读取计费(便宜 10 倍)

配置方法:

{
"models": {
"anthropic/claude-opus-4-6": {
"params": {
"cacheRetention": "long",
"maxTokens": 65536
}
}
}
}

3. 配置 Heartbeat 保持缓存温暖

Prompt Caching 的缓存时间是 1 小时。如果超过 1 小时没有对话,缓存就会过期,下次对话需要重新缓存(cache write 成本更高)。

Heartbeat 机制可以定期发送心跳,保持缓存不过期:

{
"heartbeat": {
"every": "55m",
"target": "last",
"model": "minimax/MiniMax-M2.5"
}
}

为什么是 55 分钟?因为缓存时间是 1 小时,55 分钟发一次心跳,可以保持缓存温暖。虽然 Heartbeat 会增加调用次数,但避免了重新缓存的成本,整体是划算的。

注意:Heartbeat 可以使用免费/轻量模型,成本更低。

4. 使用 Context Pruning 自动修剪

跟 OpenClaw 聊了一整天,到晚上的时候发现它开始变慢,或者突然说上下文太长了?这是因为历史消息一直在累积,从早上到晚上可能已经积累了几万 tokens 的对话历史。

Context Pruning 就是用来解决这个问题的。它会自动移除旧的对话内容,保持上下文在合理范围内。配合 Prompt Caching 使用效果更好:

{
"contextTokens": 200000,
"contextPruning": {
"mode": "cache-ttl",
"ttl": "55m"
}
}

这个配置的意思是:上下文窗口最大 200K tokens,保留 55 分钟内的对话(配合 Heartbeat 和 Prompt Caching 的 1 小时缓存)。超过 55 分钟的旧对话会被自动移除,但不影响缓存的使用。

5. 使用 Compaction 压缩历史

有时候你需要跟 OpenClaw 进行长时间的深度对话,比如一起完成一个复杂的项目,可能要聊几个小时甚至几天。这种情况下,即使有 Context Pruning,对话历史还是会越来越长,最终超出限制。

Compaction 可以把长对话压缩成摘要。它不是简单地删除旧对话,是让 AI 把重要信息提炼出来,保存到 Memory 文件中,然后再清理历史。这样既节约了 tokens,又不会丢失重要信息。

{
"compaction": {
"mode": "safeguard",
"reserveTokensFloor": 24000,
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 6000,
"systemPrompt": "Session nearing compaction. Store durable memories now.",
"prompt": "Write any lasting notes to memory/YYYY-MM-DD.md; reply with NO_REPLY if nothing to store."
}
}
}

memoryFlush 的作用是:在压缩前,自动提醒 AI 保存重要信息到 Memory 文件。这样你就不用担心压缩后丢失重要的讨论内容了。

你也可以在对话中手动触发压缩:

/compact
/compact Focus on decisions and open questions

6. 使用子 Agent 隔离上下文

当你需要让 OpenClaw 并发处理多个独立任务时,比如同时搜索 10 个文件、运行 5 个测试、检查 3 个 API,如果都在主 Agent 里串行执行,不仅慢,而且每个操作都会累积到主 Agent 的上下文中。

子 Agent(Sub-Agent)的核心优势是:每个子 Agent 有独立的上下文,不会继承主 Agent 的完整对话历史。这意味着你可以避免主模型的上下文长度爆炸,变相缩减主模型的上下文,而且子任务可以使用便宜的模型。

{
"subagents": {
"model": "minimax/MiniMax-M2.5",
"maxConcurrent": 12,
"archiveAfterMinutes": 60
}
}

使用场景:需要并发处理多个独立任务(如同时搜索多个文件)、需要并行执行的测试或检查、简单的信息收集任务。

子 Agent 的工作原理:每个子 Agent 在独立的 session 中运行,有自己的 token 使用统计,不会继承主 Agent 的对话历史,完成后将结果返回给主 Agent。

这样,主任务用高性能模型保证质量,子任务用免费模型节省成本,同时避免上下文爆炸。

7. 启用 Memory Search 精准检索

OpenClaw 用久了,MEMORY.md 和每天的 memory/YYYY-MM-DD.md 文件会越来越大。传统方式是每次对话都读取整个文件,但你想想,一个几千行的 MEMORY.md,可能有 5000-10000 tokens,但 AI 真正需要的可能只是其中几段相关的内容。

Memory Search 可以根据当前对话内容,只检索相关的 Memory 片段(约 400 tokens 的块),而不是读取整个文件。就像你在图书馆找书,不需要把整个书架的书都搬出来,只需要找到相关的那几本。

{
"memorySearch": {
"provider": "local",
"cache": {
"enabled": true,
"maxEntries": 50000
}
}
}

Memory Search 的工作原理:将 MEMORY.md 和 memory/**/*.md 分成约 400 tokens 的块(有 80 token 重叠),根据当前对话进行语义检索,只返回相关片段(约 700 字符),而不是整个文件,大幅节约输入 tokens。

Provider 选择:local(本地嵌入,零成本,适合记忆文件不多的情况)、openai(使用 OpenAI 嵌入模型,质量更高)、voyage(使用 Voyage AI,每账号 2 亿 token 免费)、qmd(使用 qmd 作为 backend,见下文)。

8. 使用 qmd 进一步减少上下文(进阶)

如果你有大量文档需要检索,或者想要更强大的语义搜索能力,可以使用 qmd 作为 memory backend。

qmd 的核心价值:精准检索,只返回相关段落,而不是读取整个文件。

传统方式:

• Agent 查资料时默认"读全文"

• 一个 500 行文件 3000-5000 tokens

• 但 Agent 只需要其中 10 行

• 90% 的 input token 被浪费了

qmd 方式:

• 建立全文 + 向量索引

• Agent 精准定位段落

• 只读取需要的 10-30 行

• 节约 90% tokens

安装和配置:

# 安装 qmd
npm install -g https://github.com/tobi/qmd

# 为工作目录建立索引
cd ~/.openclaw/workspace
qmd collection add . --name main-workspace --mask "**/*.md"

# 生成向量嵌入
qmd embed

配置 OpenClaw 使用 qmd 作为 memory backend:

{
"memory": {
"backend": "qmd",
"citations": "auto",
"qmd": {
"includeDefaultMemory": true,
"update": {
"interval": "5m",
"debounceMs": 15000
},
"limits": {
"maxResults": 8,
"timeoutMs": 5000
},
"paths": [
{
"name": "main-workspace",
"path": "/home/user/.openclaw/workspace",
"pattern": "**/*.md"
},
{
"name": "obsidian-kb",
"path": "/path/to/knowledge-base",
"pattern": "**/*.md"
}
]
}
}
}

qmd 的优势:

• 完全本地运行,零 API 成本

• 93% 准确率(hybrid search:向量 + 全文)

• 自动索引 MEMORY.md 和 memory/**/*.md(includeDefaultMemory: true)

• 可以添加额外的知识库路径(如 Obsidian)

• 自动更新索引(每 5 分钟)

与 Memory Search 的区别:

• Memory Search 是功能(使用不同的 provider:local/openai/voyage)

• qmd 可以作为 Memory Search 的 backend

• qmd 的能力更强:可以索引额外的路径,不仅仅是 MEMORY.md

实测效果:每次查资料从 15000 tokens 降到 1500 tokens,减少 90%。

调用优化:减少不必要的调用

每次对话都是一次 API 调用。虽然我们无法完全避免调用,但可以通过优化来减少不必要的调用。

怎么减少调用?

1. 优化 Cron 任务

Cron 任务每次触发都是一次完整的对话调用,会重新注入全部上下文。一个每 15 分钟跑的 cron,一天 96 次,Opus 下一天可能花费 $10-20。

使用提示词优化:

帮我优化 OpenClaw 的 cron 任务以节约 token。

请:
1) 列出所有 cron 任务及其频率和模型
2) 把所有非创作类任务降级为 Sonnet 或免费模型
3) 合并同时间段的任务(比如多个检查合为一个)
4) 降低不必要的高频率(系统检查从 10 分钟改为 30 分钟)
5) 配置 delivery 为按需通知,正常时不发消息

核心原则:不是越频繁越好,大多数"实时"需求是假需求。合并 5 个独立检查为 1 次调用,可以省下 75% 上下文注入成本。

2. 优化 Heartbeat 频率

Heartbeat 虽然能保持缓存温暖,但它本身也是一次 API 调用。如果你设置得太频繁,比如每 10 分钟一次,一天就是 144 次调用。即使用免费模型,也会产生不必要的开销。

可以通过以下方式优化:设置工作时间间隔为 45-60 分钟;深夜 23:00-08:00 设为静默期(反正你也在睡觉);精简 HEARTBEAT.md 到最少行数;把分散的检查任务合并到 heartbeat 批量执行。

{
"heartbeat": {
"every": "55m",
"target": "last",
"model": "minimax/MiniMax-M2.5",
"quiet": {
"start": "23:00",
"end": "08:00"
}
}
}

模型选择:平衡性能和成本

不同模型的价格差距太大,特别是Claude模型,价格较高,所以尽可能的不要一直主模型设置为Claude Opus

策略1:日常 Sonnet,关键 Opus(手动切换)

Sonnet 定价约 Opus 的 1/5,但是80% 日常任务完全够用。所以可以保持这样的配置,然后再需要的时候进行切换。

如何切换模型:

在对话中使用 /model 命令:

/model sonnet # 切换到 Sonnet
/model opus # 切换到 Opus
/model haiku # 切换到 Haiku
/model gemini # 切换到 Gemini

你也可以配置模型别名:

{
"agents": {
"defaults": {
"models": {
"anthropic/claude-opus-4-6": {
"alias": "opus"
},
"anthropic/claude-sonnet-4-5": {
"alias": "sonnet"
}
}
}
}
}

然后根据不同场景进行切换: Opus 场景:长文写作、复杂代码、多步推理、创意任务 Sonnet 场景:日常闲聊、简单问答、cron 检查、heartbeat、文件操作、翻译

策略2:基于频道/分组的差异化配置

在 Discord 或 Telegram 等平台上,可以针对不同的频道或分组设置不同的模型:

代码频道:

• 使用高性能模型(Claude Opus 4.6、GPT-5.3)

• 适合复杂的代码任务

日常聊天频道:

• 使用便宜模型(MiniMax、Gemini Flash)

• 适合简单问答和闲聊

创作频道:

• 使用 Claude Opus

• 适合长文写作和创意任务

通过这种方式,我们可以更有效地控制成本。

免费模型和订阅计划

如果你想进一步降低成本,可以考虑:

1. MiniMax M2.5、智谱 GLM Coding Plan:针对开发者的订阅计划,性价比很高,不用担心用量问题

智谱链接:https://www.bigmodel.cn/glm-coding?ic=AD6AIXFQOH

2. 各平台的免费、低价模型:在一些小型任务上使用免费低价的模型,同样能完成任务,价格可以更低,不过一定要注意稳定性。

实战:一套完整的优化配置

基于上面的分析,这里是一套完整的优化配置。

配置文件(~/.openclaw/openclaw.json):

{
"agents": {
"defaults": {
"model": {
"primary": "anthropic/claude-sonnet-4-5",
"fallbacks": [
"minimax/MiniMax-M2.5",
"google/gemini-2.0-flash-exp"
]
},
"models": {
"anthropic/claude-opus-4-6": {
"alias": "opus",
"params": {
"maxTokens": 65536,
"cacheRetention": "long"
}
},
"anthropic/claude-sonnet-4-5-20250929": {
"alias": "sonnet",
"params": {
"maxTokens": 16384,
"cacheRetention": "long"
}
},
"anthropic/claude-haiku-4-5-20251001": {
"alias": "haiku",
"params": {
"maxTokens": 16384,
"cacheRetention": "long"
}
}
},
"contextTokens": 200000,
"contextPruning": {
"mode": "cache-ttl",
"ttl": "55m"
},
"compaction": {
"mode": "safeguard",
"reserveTokensFloor": 24000,
"memoryFlush": {
"enabled": true,
"softThresholdTokens": 6000,
"systemPrompt": "Session nearing compaction. Store durable memories now.",
"prompt": "Write any lasting notes to memory/YYYY-MM-DD.md; reply with NO_REPLY if nothing to store."
}
},
"heartbeat": {
"every": "55m",
"target": "last",
"model": "minimax/MiniMax-M2.5"
},
"maxConcurrent": 6,
"subagents": {
"model": "minimax/MiniMax-M2.5",
"maxConcurrent": 12,
"archiveAfterMinutes": 60
},
"memorySearch": {
"provider": "local",
"cache": {
"enabled": true,
"maxEntries": 50000
}
}
}
},
"memory": {
"backend": "qmd",
"citations": "auto",
"qmd": {
"includeDefaultMemory": true,
"update": {
"interval": "5m",
"debounceMs": 15000
},
"limits": {
"maxResults": 8,
"timeoutMs": 5000
},
"paths": [
{
"name": "main-workspace",
"path": "/home/user/.openclaw/workspace",
"pattern": "**/*.md"
},
{
"name": "obsidian-kb",
"path": "/path/to/knowledge-base",
"pattern": "**/*.md"
}
]
}
}
}

这套配置的核心思路:

1. 日常任务用 Sonnet(性价比高),用 /model opus 手动切换到 Opus

2. 启用 Prompt Caching(节约 90% 输入成本)

3. 配置 Context Pruning 自动修剪上下文

4. 配置 Heartbeat 保持缓存温暖

5. 启用 Compaction 和 memoryFlush,避免信息丢失

6. 启用 Memory Search 精准检索

7. 配置 qmd 语义搜索(可选)

8. 子 Agent 使用免费模型,独立上下文避免爆炸

9. 精简 AGENTS.md、SOUL.md、MEMORY.md 文件

总结

总结

回到最开始的公式:Token消耗 = (输入 + 输出) × 调用次数 × 模型价格

根据这个公式,我们的优化策略是:

• 输入优化:精简 Memory 文件、启用 Prompt Caching、使用子 Agent 隔离上下文、qmd 语义搜索

• 调用优化:优化 Cron 和 Heartbeat 频率

• 模型选择:日常用 Sonnet,复杂任务用 /model opus 切换

最重要的是精简 Memory 文件 + Prompt Caching,这两项就能节约 60-80% 的输入成本。根据使用场景,整体成本可降低 50-90%。

By
C|ccjing | (✱,✱) 🐬