OpenClaw v2026.4.11 内置记忆系统 vs OpenClaw memory-system 插件
全面技术对比分析
作者:乔巴 🦌
日期:2026-04-13
版本:OpenClaw v2026.4.11 | memory-system v4.0.0
一、背景与概述
1.1 问题的由来
OpenClaw 在 2026.4.11 版本中大幅增强了内置记忆系统,新增了 active-memory、memory-wiki、Honcho、QMD 等一系列记忆相关插件。与此同时,团队自研的 memory-system 插件(v4.0.0)已经在生产环境中运行了相当长的时间,承担着 WAL 协议、多层记忆管理、自动提取、评分晋升等核心功能。
核心问题是:新版内置插件与现有的自定义插件之间,是否存在功能重叠?性能效率差异有多大?未来的技术路线应该如何规划?
1.2 我们的记忆架构现状
Copy
┌─────────────────────────────────────────────────────────┐
│ 用户对话 │
└──────────────────────┬──────────────────────────────────┘
│
┌─────────────▼──────────────┐
│ memory-system v4.0.0 │ ← 自定义插件
│ ┌─────────────────────┐ │
│ │ • WAL 协议 │ │
│ │ • autoExtract │ │
│ │ • 评分/晋升/维护 │ │
│ │ • 主动预判 │ │
│ │ • 矛盾检测 │ │
│ └─────────────────────┘ │
└─────────────┬────────────────┘
│ 建立在之上
┌───────────────┼───────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌──────────────┐
│memory-core │ │lossless- │ │ builtin │
│(内置slot) │ │claw │ │ active-memory│
│ • SQLite │ │(contextEng) │ │ (当前禁用) │
│ • FTS5+向量 │ │ • LCM压缩 │ │ │
│ • memory_ │ │ • 摘要管理 │ │ │
│ search │ │ • lcm_grep │ │ │
└─────────────┘ └─────────────┘ └──────────────┘
核心认识:memory-system 并不是替代品,而是建立在内置系统之上的编排层。
二、系统架构对比
2.1 OpenClaw v2026.4.11 内置记忆体系
2.1.1 memory-core(内置默认 / 记忆插槽)
|
属性 |
说明 |
|---|---|
|
定位 |
OpenClaw 默认的记忆后端,分配在 插槽 |
|
存储介质 |
SQLite 数据库(
)+ Markdown 文件 |
|
检索方式 |
FTS5 全文搜索(BM25 评分)+ Ollama 向量搜索(nomic-embed-text)的混合检索 |
|
索引对象 |
+ 文件 |
|
提供工具 |
、
|
|
配置 |
|
|
特殊功能 |
文件监视自动重建索引(1.5s 防抖)、Temporal Decay、MMR 多样性重排 |
索引流程:
Markdown 文件 → Chunking (~400 tokens, 80 overlap)
→ Ollama nomic-embed-text 向量化
→ SQLite 存储(向量 + FTS5)
→ 用户查询时:向量检索 ∪ BM25 → Weighted Merge → Top Results
2.1.2 active-memory(内置可选插件 / v2026.4.11 新增)
|
属性 |
说明 |
|---|---|
|
定位 |
阻塞式记忆子代理,在主模型生成回复 之前 执行 |
|
工作方式 |
启动一个受限制的子代理(只允许 + ) |
|
查询模式 |
(仅最新消息)/ (用户+助手最近几轮)/ (完整上下文) |
|
Prompt 风格 |
strict / balanced / contextual / recall-heavy / precision-heavy / preference-only |
|
默认超时 |
15000ms |
|
摘要长度 |
默认 220 字符,最大 1000 字符 |
|
结果格式 |
"NONE" 或 1 条紧凑纯文本摘要 |
|
注入方式 |
标签注入 prompt |
|
缓存机制 |
15 秒 TTL,相同查询直接返回缓存 |
|
当前状态 |
未启用 (
中无配置) |
执行流程:
Copy
用户发消息
→ 启动 blocking 子代理(15s 超时)
→ 根据 queryMode 组装上下文(message/recent/full)
→ 子代理调用 memory_search → memory_get
→ LLM 生成 "NONE" 或 <220 字符摘要
→ <active_memory_plugin>标签注入主 prompt
→ 主模型生成回复
2.1.3 lossless-claw(内置上下文管理 / v2026.4.11)
|
属性 |
说明 |
|---|---|
|
定位 |
LCM(Lossless Context Management)会话压缩与上下文管理 |
|
插槽 |
|
|
版本 |
v0.8.0 |
|
摘要模型 |
Ollama qwen3.5:9b(本地) |
|
提供工具 |
、
、
、
|
|
核心功能 |
会话压缩摘要、增量深度展开、 DAG 遍历式召回 |
2.1.4 其他内置插件(未安装)
|
插件 |
功能 |
未安装原因 |
|---|---|---|
|
|
知识保险库、provenance、claims、dashboards |
尚未探索 |
|
|
跨会话记忆、用户建模 |
尚未探索 |
|
|
本地搜索侧车、reranking、query expansion |
尚未探索 |
2.2 memory-system 自定义插件架构
2.2.1 核心定位
┌──────────────────────────────────────────────────────────┐
│ memory-system v4.0.0 │
│ Multi-layer memory optimizer for OpenClaw agents │
│ WAL + SelfReflection + Proactive │
└──────────────────────────────────────────────────────────┘
|
属性 |
说明 |
|---|---|
|
定位 |
建立在 memory-core + lossless-claw 之上的 多层记忆编排层 |
|
核心功能 |
WAL 协议、autoExtract、记忆评分/晋升/维护、主动预判、矛盾检测 |
|
数据目录 |
|
|
存储模式 |
文件系统 Markdown(hot/warm/daily/cold 四层) |
|
LLM 调用 |
Ollama qwen3.5:9b(仅用于提取,其他纯 CPU) |
|
触发方式 |
心跳 cron(默认每 30 分钟) |
|
autoExtract |
Node.js 脚本,直接读 原始消息,pattern matching 提取事实 |
2.2.2 核心子系统
WAL 协议(Write-Ahead Logging Protocol)
- 核心思想:会话状态变更先写 WAL,再原子性提交
- 纠正 3 次自动写入
learnings.md - Session 级隔离:
session:all/session:<id>双轨制 - P0-SEC 路径安全:防止路径遍历攻击
autoExtract(自动提取)
- 直接读
lcm.dbSQLite 原始消息(绕过 memory-core 索引) - Pattern matching 提取四类事实:
- 💡 决策:包含决定/选用/新建/修复/配置等关键词
- 🔧 教训:包含教训/经验/踩坑等关键词
- ✅ 完成:包含已完成/已创建/已修复等关键词
- 📋 信息:版本号/error 报错/编译构建等
- 循环引用修复:检查
proactive-tracker.md的 resolved 状态 - 文件系统验证:检查项目目录是否存在,避免过时信息
- 写入
memory/agents/main/daily/YYYY-MM-DD.md
Consolidator(记忆合并)
- 跨日记忆合并
- 重复检测与去重
- 事实一致性校验
CorrectionTracker(矛盾检测)
- 检测记忆文件中的矛盾内容
- 版本变更、端口变更、决策反转、路径变更等多种矛盾模式
ProactiveTracker(主动预判)
- 维护
proactive-tracker.md - 逾期提醒、待回答问题追踪
- 自动晋升机制
三、功能逐项对比
3.1 功能矩阵
|
功能项 |
builtin memory-core |
builtin active-memory |
builtin lossless-claw |
memory-system |
|---|---|---|---|---|
|
FTS5 全文搜索 |
✅ |
- |
- |
- |
|
向量语义搜索 |
✅ |
- |
- |
- |
|
Hybrid 混合搜索 |
✅ |
- |
- |
- |
|
记忆文件索引 |
✅ |
- |
- |
- |
|
memory_search/get 工具 |
✅ |
- |
- |
- |
|
Pre-reply 阻塞注入 |
- |
✅ |
- |
- |
|
子代理记忆检索 |
- |
✅ |
- |
- |
|
6 种 Prompt 风格 |
- |
✅ |
- |
- |
|
Session 级 on/off |
- |
✅ |
- |
- |
|
LCM 会话压缩 |
- |
- |
✅ |
- |
|
lcm_grep/expand 工具 |
- |
- |
✅ |
- |
|
增量 DAG 展开 |
- |
- |
✅ |
- |
|
autoExtract 原消息提取 |
- |
- |
- |
✅ |
|
WAL 协议 |
- |
- |
- |
✅ |
|
纠正 3 次自动晋升 |
- |
- |
- |
✅ |
|
多层记忆(hot/warm/daily/cold) |
- |
- |
- |
✅ |
|
记忆评分 |
- |
- |
- |
✅ |
|
Consolidator 合并 |
- |
- |
- |
✅ |
|
CorrectionTracker 矛盾检测 |
- |
- |
- |
✅ |
|
ProactiveTracker 主动预判 |
- |
- |
- |
✅ |
|
心跳 Cron 调度 |
- |
- |
- |
✅ |
|
每日简报生成 |
- |
- |
- |
✅ |
|
备份与恢复 |
- |
- |
- |
✅ |
3.2 检索链路对比
Builtin active-memory 的检索链路:
对话消息
→ 组装 query(message/recent/full)
→ memory_search (SQLite FTS5 + Ollama 向量)
→ LLM 子代理生成摘要(15s timeout)
→ <active_memory_plugin> 注入 prompt
→ 主模型回复
memory-system 的检索链路:
lcm.db 原始消息(每 30 分钟)
→ autoExtract pattern matching
→ 写入 daily/*.md 文件
→ memory-core 监视文件变化(1.5s 防抖)
→ 自动重新索引
→ memory_search 可检索
→ 未来任何会话调用 memory_search 时召回
关键差异:
active-memory是实时检索 → 注入当前回复memory-system是批量提取 → 写入文件 → 索引 → 供未来检索
四、性能对比
4.1 延迟分析
active-memory 延迟分解
|
阶段 |
耗时(典型) |
备注 |
|---|---|---|
|
子代理启动 + 模型加载 |
500-2000ms |
冷启动更慢 |
|
memory_search(Ollama 向量) |
100-500ms |
本地,但需网络到 Ollama |
|
LLM 生成摘要 |
500-2000ms |
MiniMax-M2.7 |
|
结果注入 + 主模型回复 |
额外 ~500ms |
- |
|
总用户感知延迟 |
1.6-5 秒/次 |
每次消息必发生 |
⚠️ 重要:这是用户必须等待的阻塞时间。每次用户发消息,系统额外等待 1.6-5 秒。
memory-system autoExtract 延迟分解
|
阶段 |
耗时(典型) |
备注 |
|---|---|---|
|
心跳触发调度 |
<1ms |
后台 cron |
|
SQLite 读最近消息 |
50-200ms |
本地 lcm.db |
|
Pattern matching 提取 |
100-300ms |
纯 CPU 正则 |
|
写 daily 文件 |
10-50ms |
磁盘 IO |
|
文件监视触发索引 |
1500ms(防抖)+ ~500ms |
memory-core 自动 |
|
总耗时 |
~1.7-2.5 秒/次 |
用户零感知 |
✅ 关键:所有处理都在后台完成,用户完全无感知。
4.2 量化对比表
|
性能指标 |
active-memory |
memory-system |
胜者 |
|---|---|---|---|
|
单次触发用户延迟 |
1.6-5 秒 |
0ms(后台) |
memory-system |
|
每小时最大触发次数 |
~60 次(每小时 60 条消息) |
2 次(每 30 分钟) |
memory-system |
|
LLM 调用次数/小时 |
~60 次 |
0 次 |
memory-system |
|
Token 消耗/小时 |
高(子代理 prompt + 摘要) |
0 |
memory-system |
|
内存占用 |
子代理进程 + 模型上下文 |
脚本临时进程 |
memory-system |
|
冷启动开销 |
高(每次 spawn 新 agent) |
无 |
memory-system |
4.3 资源消耗对比(假设每小时 30 条消息)
|
资源 |
active-memory |
memory-system |
|---|---|---|
|
LLM API 调用次数 |
30 次/小时 |
0 次/小时 |
|
Token 消耗 |
~2000 token/次 × 30 = 6 万 token/小时 |
0 |
|
预估 API 费用(MiniMax) |
¥2.16/小时 |
¥0 |
|
用户额外等待时间 |
60 秒/小时 |
0 秒 |
五、效率深度分析
5.1 信息流效率
active-memory 的信息流:
现有记忆文件(索引过的)
→ memory_search 检索
→ LLM 总结
→ 注入当前 prompt
→ 影响 1 次当前回复
→ 记忆本身不增加
memory-system 的信息流:
原始对话消息(lcm.db)
→ autoExtract 提取
→ 写入 daily/*.md
→ memory-core 自动索引
→ memory_search 可检索
→ 影响当前及**所有未来**回复
结论:从信息利用率角度,memory-system 的效率远高于 active-memory:
active-memory提取的知识只服务 1 次当前对话memory-system提取的知识服务无限次未来对话
5.2 系统复杂度对比
|
维度 |
active-memory |
memory-system |
|---|---|---|
|
代码行数 |
~960 行(TypeScript) |
~数千行(多模块) |
|
进程模型 |
子代理(spawn) |
Node.js 脚本 |
|
配置复杂度 |
高(6 种 prompt 风格,3 种 query mode) |
中(pattern + cron) |
|
Session 管理 |
完整(toggle、persistTranscripts) |
通过 WAL 协议 |
|
Bug 修复 |
社区维护 |
自主维护(更快响应) |
|
功能定制 |
受插件 API 限制 |
完全自主可控 |
六、场景适用性分析
6.1 何时使用 active-memory( builtin)
|
场景 |
推荐理由 |
|---|---|
|
单会话质量优先 |
需要在 当前对话 中立即体现记忆效果 |
|
短时一次性咨询 |
用户问一个具体问题,需要快速调用相关记忆 |
|
实验性功能探索 |
评估内置能力,作为是否自研的参考 |
不适合:长时间多会话、注重 token 成本、需要多轮次累积记忆的场景。
6.2 何时使用 memory-system(自定义)
|
场景 |
推荐理由 |
|---|---|
|
长期记忆建设 |
提取的事实写入文件,供无数未来会话使用 |
|
多会话上下文连续性 |
跨越几十条消息的工程决策、教训、进度跟踪 |
|
低延迟对话体验 |
用户发消息立即响应,不等任何记忆处理 |
|
LLM 成本控制 |
零 token 消耗的记忆提取 |
|
深度定制需求 |
WAL 协议、矛盾检测、主动预判等自研能力 |
6.3 两者并存的可能性
技术上可行,但效率低下,不建议同时启用:
- 延迟叠加:开
active-memory会让每次消息变慢 1.6-5 秒 - 信息重复:同一段对话被两个系统同时处理
- 收益递减:
active-memory搜到的新记忆,恰好是memory-system刚写的
七、核心结论与建议
7.1 关键发现
- 架构层面无冲突:
memory-system是建立在memory-core+lossless-claw之上的编排层,不是替代品。 - active-memory 的核心代价:每次消息增加 1.6-5 秒用户延迟 + 高 Token 消耗,换来当前 1 次回复更好。
- memory-system 的核心优势:零用户延迟、零 LLM 成本、知识复用率极高(一次提取服务无数次未来会话)。
- 信息流效率差距巨大:
active-memory只服务 1 次当前对话;memory-system服务无限次未来对话。
7.2 建议(当前状态)
|
组件 |
建议 |
理由 |
|---|---|---|
|
|
✅ 保持启用 |
内置记忆后端,无可替代 |
|
|
✅ 保持启用 |
LLM 压缩,摘要管理 |
|
|
✅ 保持启用 |
核心记忆编排层 |
|
|
❌ 保持禁用 |
延迟高、Token 消耗大、收益有限 |
|
|
🔍 探索 |
知识保险库可能有价值 |
|
|
🔍 探索 |
跨会话建模可能有价值 |
7.3 长期路线建议
- 继续深化
memory-system:WAL 协议、矛盾检测、主动预判是内置系统不具备的差异化能力 - 探索
memory-wiki:如果未来需要知识保险库功能,可以评估 - 保持
lossless-claw:会话压缩和上下文管理的最佳方案 - 不依赖
active-memory:除非产品方向转向即时咨询场景
八、附录
8.1 版本信息
|
组件 |
版本 |
备注 |
|---|---|---|
|
OpenClaw |
v2026.4.11 |
2026-04-12 升级 |
|
memory-system |
v4.0.0 |
自定义插件 |
|
lossless-claw |
v0.8.0 |
内置 contextEngine |
|
memory-core |
stock v2026.4.11 |
内置 memory slot |
|
active-memory |
stock v2026.4.11 |
当前禁用 |
|
Ollama |
本地部署 |
qwen3.5:9b / nomic-embed-text |
|
向量模型 |
nomic-embed-text:latest |
461MB,本地 |
8.2 配置参考
当前 memory-core 配置:
{
"plugins": {
"slots": { "memory": "memory-core" },
"entries": {
"memory-core": {
"enabled": true,
"config": { "dreaming": { "enabled": false } }
}
}
},
"agents": {
"defaults": {
"memorySearch": {
"enabled": true,
"provider": "ollama",
"model": "nomic-embed-text:latest"
}
}
}
}
当前 lossless-claw 配置:
{
"plugins": {
"slots": { "contextEngine": "lossless-claw" },
"entries": {
"lossless-claw": {
"enabled": true,
"config": {
"summaryModel": "ollama/qwen3.5:9b",
"summaryProvider": "ollama",
"expansionModel": "ollama/qwen3.5:9b",
"expansionProvider": "ollama",
"freshTailCount": 64,
"contextThreshold": 0.5,
"incrementalMaxDepth": 1
}
}
}
}
}
没有要显示的评论
没有要显示的评论