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 计数不准确 → 已修复
  • 大小写不敏感挂载上记忆文件被注入两次 → 已修复
  • 会话重置提示触发 Azure 内容过滤器 → 已优化

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

3.1 传统方案的局限

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

3.2 分层路由的核心思想

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

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

⚠️ 注意:Viking 分层路由系统的官方版本不能通过安装插件的方式实现,需要安装社区版 openclaw-viking

1
openclaw plugins install @viking-engineering/openclaw-viking

4. 配置级优化

4.1 利用新版压缩修复

2026.3.13 修复了压缩后会话 token 计数不准的问题,当前版本支持的压缩配置项包括:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"agents": {
"defaults": {
"compaction": {
"mode": "safeguard", // 使用 safeguard 模式保护最近上下文
"postIndexSync": "async", // 压缩后异步同步会话记忆
"reserveTokens": 8000, // 为回复生成保留 token 空间
"keepRecentTokens": 15000, // 保护最近 15000 tokens
"maxHistoryShare": 0.6 // 历史最多占 60% 上下文
}
}
}
}

4.2 开启会话剪枝

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

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

4.3 降低无效心跳

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

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

优化建议:

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

4.4 关闭非必要附加功能

以下配置项对 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

安装步骤(推荐方式)

使用 OpenClaw 的插件安装命令(会自动配置):

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

# 2. 使用插件安装命令(推荐)
openclaw plugins install @martian-engineering/lossless-claw

安装命令会自动完成:

  • 下载并安装插件到 ~/.openclaw/extensions/lossless-claw
  • plugins.entries 中添加配置
  • plugins.slots.contextEngine 中注册上下文引擎

手动配置(如需自定义)

如果需要手动配置,确保在 plugins 下正确设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
"plugins": {
"allow": [
"openclaw-qqbot",
"openclaw-lark",
"lossless-claw"
],
"entries": {
"lossless-claw": {
"enabled": true,
"config": {
"freshTailCount": 16,
"contextThreshold": 0.8,
"summaryModel": "astroncodingplan/astron-code-latest"
}
}
},
"slots": {
"contextEngine": "lossless-claw"
}
}
}

配置说明

配置项 说明 推荐值
freshTailCount 保留的原始消息数量 16-32
contextThreshold 触发压缩的上下文阈值 (0-1) 0.8
summaryModel 用于生成摘要的模型 使用主模型

⚠️ 注意contextEngine 应配置在 plugins.slots 下,而非 agents.defaults.contextEngine

验证安装

安装后重启网关,查看日志确认插件加载:

1
2
openclaw gateway restart
openclaw logs --follow | grep -i lcm

正常输出应类似:

1
2
[plugins] [lcm] Plugin loaded (enabled=true, db=/Users/sean/.openclaw/lcm.db, threshold=0.8)
[plugins] [lcm] Compaction summarization model: astroncodingplan/astron-code-latest (override)

注意事项

  • 现有会话不能直接切换:需要 /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 开启配置级优化

以下配置经实际测试验证可正常工作(2026.3.13 版本):

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
35
36
37
38
39
40
41
{
"agents": {
"defaults": {
"compaction": {
"mode": "safeguard",
"postIndexSync": "async",
"reserveTokens": 8000,
"keepRecentTokens": 15000,
"maxHistoryShare": 0.6
},
"contextPruning": {
"mode": "cache-ttl",
"ttl": "55m"
},
"heartbeat": {
"every": "55m",
"target": "last"
}
}
},
"memory": {
"backend": "qmd",
"citations": "auto",
"qmd": {
"includeDefaultMemory": true,
"update": {
"interval": "5m",
"debounceMs": 15000,
"onBoot": true
},
"limits": {
"maxResults": 7,
"maxSnippetChars": 700,
"timeoutMs": 4000
},
"scope": {
"default": "allow"
}
}
}
}

7.3 安装 lossless-claw 插件

1
2
# 使用插件安装命令(推荐,自动配置)
openclaw plugins install @martian-engineering/lossless-claw

安装后会自动配置 plugins.slots.contextEngine

7.4 重启网关

1
openclaw gateway restart

7.5 验证效果

1
2
3
4
5
# 查看插件加载日志
openclaw logs --follow | grep -i lcm

# 测试 QMD 记忆搜索
openclaw memory search "测试关键词"

7.6 优化前后对比

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

  • Token 消耗降低 30-60%
  • 响应速度提升 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 版本,从三个层面提供了完整的降本增效方案:

优化层面 核心方案 效果
配置级优化 会话剪枝、compaction 模式调优 减少 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(推荐) openclaw plugins install @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 .
查看服务状态 openclaw doctor
验证 lossless-claw 加载 openclaw logs --follow | grep lcm

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