OpenClaw降低Token消耗实践

1. 引言:OpenClaw 的“吞金”之痛

OpenClaw 无疑是当前最强大的 AI Agent 框架之一,它让开发者能够构建出真正自主的智能体。然而,几乎所有深度用户都面临两个核心痛点 :

  • 失忆:长对话中,关键信息被内置的压缩机制随机丢弃,任务执行到一半就偏离目标,Agent 的行为发生退化。
  • 吞金:默认的滑动窗口压缩机制虽然试图控制上下文长度,但往往导致上下文冗余,Token 消耗剧增。

更糟糕的是,这两个问题会形成恶性循环:脏上下文导致高 Token 消耗,为了省钱被迫降低模型规格,结果 Agent 表现更差,用户体验直线下滑。

转折点出现在 2026.3.7 版本——OpenClaw 引入了上下文引擎的插件架构,为社区贡献者打开了优化的大门。而 2026.3.13 紧急修复版本进一步修复了压缩一致性、记忆文件重复注入等关键问题 。

本文基于 OpenClaw 2026.3.13 最新版本,从配置调优、记忆系统、上下文管理三个层面,提供一套完整的、可落地的降本增效方案。


2. 原因剖析:Token 都花在了哪里?

在动手优化之前,先要理解钱到底花在了哪儿。每次你与 OpenClaw 对话,发送给模型的远不止你的问题,而是一个完整的工作包:

组成部分 说明
系统提示词 给 AI 的”员工手册”
Workspace 文件 AGENTS.md、TOOLS.md、MEMORY.md 等配置文件
对话历史 越聊越长,产生雪球效应
工具输出 执行命令的 stdout/stderr、抓取的网页内容
你的问题 这才是你真正想问的

Token 消耗的底层逻辑可以用一个公式来概括 :
Token 消耗 = (输入 + 输出) × 调用次数 × 模型价格
其中输入才是真正的大头。OpenClaw 的设计哲学是从无状态到有状态的转变,为了让 Agent 记住一切,框架每次都会默认将完整对话历史发送出去。一次请求的输入可能就有 2-3 万 tokens,聊了 10 轮就是 20-30 万 。

好消息是:2026.3.13 版本修复了多个与 Token 消耗相关的核心问题

  • 压缩后的会话 token 计数不准确 → 已修复,可开启 postCompactionCheck
  • 大小写不敏感挂载上记忆文件被注入两次 → 已修复
  • 会话重置提示触发 Azure 内容过滤器 → 已优化

3. 架构级优化:引入分层路由思路

3.1 传统方案的局限

将不同职能拆分到独立 Agent(多智能体架构)虽然能实现上下文隔离,但系统复杂度急剧增加,且主控 Agent 的意图识别本身也在消耗 Token。

3.2 分层路由的核心思想

Viking 分层路由系统的思路值得借鉴:在调用昂贵的主模型之前,先用一个极轻量的模型做意图识别,判断用户到底想干什么,然后只加载与之相关的工具、技能和上下文片段。

如何借鉴:即使不 fork 项目,你也可以手动精简 AGENTS.md 等引导文件,移除对终端用户无用的开发规范、不常用技能的详细说明,从源头减少基础提示词的长度。


4. 配置级优化:精细化管理上下文

4.1 利用新版压缩修复

2026.3.13 修复了压缩后会话 token 计数不准的问题,建议开启完整性检查 :

1
2
3
4
5
6
7
8
9
10
{
"agents": {
"defaults": {
"compaction": {
"postCompactionCheck": true, // 确保压缩后 token 数量准确
"dropThinkingOnReplay": true // 重放时丢弃 Anthropic 思考块
}
}
}
}

4.2 开启会话剪枝

自动移除旧的对话内容,保持上下文在合理范围内 :

1
2
3
4
5
6
7
{
"contextTokens": 200000,
"contextPruning": {
"mode": "cache-ttl",
"ttl": "55m" // 保留 55 分钟内的对话
}
}

4.3 子任务模型降级

后台任务(如定时早报、心跳检查)不需要最强的模型 :

1
2
3
4
5
6
{
"subagents": {
"model": "minimax/MiniMax-M2.5", // 便宜模型
"maxConcurrent": 12
}
}

4.4 合并连续消息

设置防抖,避免用户在短时间内连续发送多条消息时重复触发处理:

1
2
3
4
5
{
"inbound": {
"debounceMs": 3000 // 3秒内合并消息
}
}

4.5 降低无效心跳

心跳(Heartbeat)是 OpenClaw 的定时唤醒机制,用于检查任务、发送提醒。但如果不加控制,它会成为隐形的 Token 杀手 :

算笔账:心跳频率 30 分钟/次,每月心跳次数 1,440 次,每次输入 3,000 Token,每月仅心跳就消耗 432 万 Token!

优化建议:

  • 设置工作时间间隔为 45-60 分钟
  • 深夜 23:00-08:00 设为静默期
  • 精简 HEARTBEAT.md 到最少行数

4.6 关闭非必要附加功能

以下配置项对 Token 消耗的影响程度 :

配置项 功能 影响程度 说明
ENABLE_TITLE_GENERATION 自动标题生成 仅在新建对话时触发
ENABLE_TAGS_GENERATION 自动标签生成 保存记忆时触发
ENABLE_FOLLOW_UP_GENERATION 后续问题建议 中等 每次回复后额外调用模型
ENABLE_AUTOCOMPLETE_GENERATION 输入自动补全 通常在端侧实现

建议根据场景选择性关闭,尤其是 ENABLE_FOLLOW_UP_GENERATION


5. 记忆系统优化:从默认 Memory Search 切换到 QMD

5.1 默认 Memory Search 的问题

OpenClaw 默认的记忆搜索存在几个关键缺陷 :

  • 使用 SQLite 做向量存储,性能不佳
  • 单一向量搜索,结果不够精准
  • 容易把整个记忆文件塞进上下文,导致 Token 爆炸

5.2 QMD 简介

QMD(Queryable Markdown Database) 是 Shopify 创始人 Tobi 开发的一个本地语义搜索引擎,专为 AI Agent 量身定制 。

它的核心逻辑是:不再读全库,只读最相关的那几段。

技术原理

  • 基于 TypeScript + Bun 开发
  • 三层混合检索:BM25 全文搜索 + 向量语义搜索 + LLM 重排序
  • 所有模型在本地运行,完全离线

实际效果

  • 📊 Token 削减:60-97%(平均 95% 以上)
  • ⚡ 响应速度提升:5-50 倍
  • 🎯 精准度:93%(纯语义搜索仅 59%)

5.3 QMD 与默认 Memory Search 的关系

QMD 是替代关系,配置后 QMD 完全接管记忆检索职责,但依然兼容原有记忆文件 。

5.4 QMD 详细配置指南

前置条件

  • OpenClaw 版本 ≥ 2026.2.2
  • SQLite ≥ 3.40.0

安装 QMD CLI

1
2
3
4
5
# 使用 Bun 安装(推荐)
bun install -g @tobilu/qmd

# 或使用 npm 安装
npm install -g @tobilu/qmd

修改 OpenClaw 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
{
"memory": {
"backend": "qmd", // 切换到 QMD 后端
"citations": "auto",
"qmd": {
"includeDefaultMemory": true, // 包含原有的 MEMORY.md
"update": {
"interval": "5m",
"debounceMs": 15000,
"onBoot": true
},
"limits": {
"maxResults": 7, // 最多注入几段
"maxSnippetChars": 700, // 每段长度限制
"timeoutMs": 4000
},
"scope": {
"default": "allow" // Windows 用户必需
},
"paths": [
{
"name": "memory",
"path": "~/.openclaw/workspace/memory/",
"pattern": "**/*.md"
},
{
"name": "notes",
"path": "~/obsidian/", // 可添加外部笔记库
"pattern": "**/*.md"
}
]
}
}
}

Windows 特别注意事项

  • command: "qmd.exe" 可能需要显式指定
  • scope.default: "allow" 必不可少,避免权限拒绝

初始化索引

1
2
cd ~/.openclaw/workspace
qmd update --dir .

验证效果

1
openclaw memory search "你的搜索词"

观察日志确认 Using QMD memory backend


6. 上下文管理革命:lossless-claw 插件深度解析

6.1 lossless-claw 原理与优势

为什么需要 lossless-claw

OpenClaw 内置的上下文压缩机制存在一个根本性缺陷:它是有损的(lossy) 。具体来说,内置压缩会:

  • 把数十轮对话一股脑压成一段几百 Token 的摘要
  • 不保留原始消息——压缩后细节永远丢失
  • 导致 Agent 行为退化:跳过验证步骤、忽略安全规则

当 LCM 论文的作者告知 OpenClaw 维护者 Josh Lehman 他们的工作时,Josh 立刻意识到这会是 OpenClaw 的一个极棒的补充。他花了 9 天时间疯狂开发,在自己的 Agent 上运行了一周,结果令人印象深刻:”对话感觉永远不会丢失信息(因为某种程度上确实不会),始终在 30-100K Token 范围内运行,零维护” 。

LCM 核心原理:DAG 层次化摘要

Lossless Context Management (LCM) 插件用 DAG(有向无环图)结构的摘要系统替代滑动窗口压缩 :

graph TD
    A[Immutable Store<br>所有原始消息的逐字副本]
    subgraph B [DAG摘要层]
      direction LR
      B1["Depth 0:<br> [摘要A] ← 消息1-8  <br>[摘要B] ← 消息9-16"]
      B2["Depth 1:<br> [浓缩X] ← 摘要A+摘要B"]
      B3["每个摘要都链接回源消息 ← '无损'"]
    end
    B["DAG摘要层<br>Depth 0:<br> [摘要A] ← 消息1-8  <br>[摘要B] ← 消息9-16<br>Depth 1:<br> [浓缩X] ← 摘要A+摘要B<br>每个摘要都链接回源消息 ← '无损'"]
    subgraph C [模型接收内容(Context)]
      direction TB
      C1[系统提示词]
      C2[DAG摘要]
      C3[最近N条原始消息]
    end
    A --> B --> C
    B1 --> B2 --> B3

关键创新

  • 全量持久化:所有消息存入 SQLite,无信息丢失
  • 分层摘要:超出最新 N 条消息后异步生成摘要,同层摘要积累后向上凝练o
  • 动态上下文组装:每轮自动拼接”最新原始消息 + 历史层级摘要”
  • 按需回溯:提供 lcm_greplcm_describelcm_expand 工具,随时调取原始内容

性能实测:OOLONG 基准测试

OOLONG 是什么:长上下文推理基准测试,测的是模型能否理解和推理整段长文本的全局信息 。

测试结果(使用相同模型):

  • lossless-claw:得分 74.8
  • Claude Code:得分 70.3

关键发现:上下文越长,差距越大——在所有测试的上下文长度上,lossless-claw 的得分都高于 Claude Code。

Token 消耗:实测降低 30% 以上,额外消耗的 Token 主要是摘要计算,不会大幅增加总消耗 。

6.2 lossless-claw 配置指南

前置条件

  • OpenClaw 版本 ≥ 2026.3.7(推荐 2026.3.13)
  • SQLite(OpenClaw 默认预装)
  • Node.js ≥ v22

安装步骤

1
2
3
4
5
6
# 1. 确保 OpenClaw 已更新到最新版
npm install -g openclaw@latest
openclaw --version # 应显示 2026.3.13

# 2. 安装 lossless-claw 插件
npm install -g @martian-engineering/lossless-claw

配置文件示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"agents": {
"defaults": {
"contextEngine": "lossless-claw", // 启用无损上下文插件
"compaction": {
"postCompactionCheck": true,
"dropThinkingOnReplay": true
}
}
},
"losslessClaw": {
"maxRecentMessages": 32, // 保留的原始消息数量
"summaryModel": "gpt-4", // 用于生成摘要的模型
"enableTools": true // 启用 lcm_grep 等工具
}
}

注意事项

  • 现有会话不能直接切换:需要 /reset 重置或 /new 开新会话才能使用 lossless-claw
  • 磁盘存储增长:长期使用会导致磁盘存储占用增长,建议定期清理旧会话
  • 重启网关:修改配置后务必重启服务 openclaw gateway restart

7. 综合实践:一次完整的优化旅程

假设你有一个运行了一段时间的 OpenClaw 实例,以下是建议的优化步骤:

7.1 升级到最新版本

1
2
npm install -g openclaw@latest
openclaw --version # 确认显示 2026.3.13

7.2 开启配置级优化

合并以下配置到你的 ~/.openclaw/openclaw.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"agents": {
"defaults": {
"contextEngine": "lossless-claw",
"compaction": {
"postCompactionCheck": true,
"dropThinkingOnReplay": true
},
"contextTokens": 200000,
"contextPruning": {
"mode": "cache-ttl",
"ttl": "55m"
},
"heartbeat": {
"every": "55m",
"target": "last",
"model": "ollama://qwen2.5:7b" // 本地模型跑心跳
}
}
},
"inbound": {
"debounceMs": 3000
}
}

7.3 切换到 QMD 记忆后端

按照第 5 章的配置指南安装 QMD 并修改配置文件。

7.4 安装 lossless-claw 插件

按照第 6 章的指南安装插件,并开新会话验证效果。

7.5 检查并停止重复服务

1
2
systemctl list-units | grep openclaw  # Linux
# 确保没有同时运行用户级和系统级服务

7.6 优化前后对比

建议用实际监控数据展示效果。根据社区反馈,这套组合拳通常可以实现:

  • Token 消耗降低 60-90%
  • 响应速度提升 5-10 倍
  • 记忆精准度大幅提升

8. 避坑指南与注意事项

  1. 现有会话不能直接切换到 lossless-claw,需要 /reset/new
  2. 不要同时运行用户级和系统级 OpenClaw 服务,会导致冲突
  3. 修改配置后务必重启服务openclaw gateway restart
  4. QMD 首次索引可能需要时间,耐心等待完成
  5. 定期检查磁盘空间,防止旧会话占用过多存储
  6. 注意版本号差异:Git Tag 是 v2026.3.13-1,但 npm 版本是 2026.3.13,升级时无需纠结
  7. Windows 用户特别注意 QMD 的 scope 配置

9. 总结与展望

本文基于 OpenClaw 2026.3.13 版本,从三个层面提供了完整的降本增效方案:

优化层面 核心方案 效果
配置级优化 会话剪枝、消息合并、心跳本地化 减少 30-50% 无效消耗
记忆系统 QMD 混合检索 Token 削减 60-97%,精准度 93%
上下文管理 lossless-claw DAG 摘要 无损记忆,OOLONG 得分 74.8

这三者并不互斥,而是可以协同工作:QMD 负责外部知识的精准检索,lossless-claw 负责对话历史的高效管理,配置优化则贯穿始终。

核心指导思想:按需加载、本地优先。让昂贵的云端模型只处理真正需要它的事情,其他工作尽可能交给本地计算。

展望未来,OpenClaw 社区仍在快速进化。2026.3.13 版本带来的浏览器控制、安全加固、Slack 深度集成等更新 ,为 AI 智能体打开了更广阔的应用空间。期待更多优秀的插件和方案涌现,让 OpenClaw 既强大又亲民。


附录:常用命令速查表

目的 命令
查看 OpenClaw 版本 openclaw --version
升级到最新版 npm install -g openclaw@latest
安装 lossless-claw npm install -g @martian-engineering/lossless-claw
安装 QMD bun install -g @tobilu/qmd
重启网关 openclaw gateway restart
查看日志 openclaw logs --follow
重置会话(启用新插件) /reset 或在聊天中发送 /new
QMD 手动索引 qmd update --dir .
QMD 测试搜索 qmd search "关键词" -c .
查看服务状态 systemctl list-units | grep openclaw

本文基于 OpenClaw 2026.3.13 版本编写,配置路径和参数可能随版本更新而变化,请以官方文档为准。