跳到主要内容MemClawz 三层记忆架构集成指南:为 OpenClaw 注入持久记忆 | 极客日志PythonAI算法
MemClawz 三层记忆架构集成指南:为 OpenClaw 注入持久记忆
MemClawz 通过三层架构解决 OpenClaw 智能体会话重启后上下文丢失的问题。QMD 提供毫秒级工作记忆,Zvec 实现混合向量与关键词搜索,因果图支持多跳推理。集成过程包含环境配置、服务启动及 AGENTS.md 协议调整,配合自动压缩与备份策略,显著降低延迟并提升检索精度。
猫巷少女1 浏览 MemClawz 三层记忆架构集成指南
OpenClaw 智能体在每次会话启动时往往面临'全新'的状态,缺乏工作记忆来记住之前的上下文。虽然内置的 memory_search 工具支持语义搜索,但在处理活跃任务、精确关键词匹配及日志压缩方面存在明显局限。
MemClawz 引入了一套三层记忆架构,针对不同访问模式进行了优化,旨在让智能体从'金鱼记忆'进化到'过目不忘'。
核心优势对比
| 特性 | MemClawz | OpenClaw 内置 | 改进 |
|---|
| 工作记忆 | ✅ QMD JSON | ❌ 无 | ∞ |
| 搜索延迟 | <10ms | ~50ms | 5× 更快 |
| 关键词搜索 | ✅ BM25 | ❌ 仅语义 | 更精准 |
| 自动索引 | ✅ 60 秒内 | ❌ 手动 | 实时 |
| 自动压缩 | ✅ 完成的任务归档 | ❌ 无限增长 | 零维护 |
| API 密钥 | ❌ 无需 | ✅ 需本地嵌入 | 100% 离线 |
架构设计
数据流逻辑
写入路径遵循即时更新与异步索引结合的原则:
智能体执行操作 ↓ 更新 QMD (current.json) ← 即时,<2ms
↓ OpenClaw 写入 SQLite ← 内置行为
↓ Watcher 检测新块 ← 每 60 秒轮询
↓ Watcher 发送至 Zvec /index ← 嵌入 + 更新
↓ Zvec HNSW 索引更新 ← <10ms 可搜索
↓ 因果图节点添加 ← 可选,带因果边
读取路径则采用分层降级策略,确保速度与准确性的平衡:
智能体需要回忆某事 ↓ 检查 QMD (current.json) ← <1ms,JSON 解析
├─ 找到 → 立即返回
↓ 搜索 Zvec (/search) ← <10ms,混合搜索
├─ 找到 → 返回结果
↓ 搜索因果图 (/graph/search) ← ~15ms,多跳推理
├─ 置信度低 → 遍历因果边
├─ 仍不足 → 关键词回退
↓ 回退到 memory_search ← ~50ms,语义搜索
└─ 返回所有可用结果
压缩路径
当会话结束或上下文填满时,系统会自动触发压缩流程:
会话结束或上下文填满 ↓ qmd-compact.py 运行
↓ 已完成任务 → 每日日志 (memory/YYYY-MM-DD.md)
↓ 活跃任务 → 保留在 QMD
↓ 每周心跳检查
↓ 重要决策 → MEMORY.md
↓ 旧日志 (>30 天) → archive/
核心组件详解
1. QMD — 快速记忆转储 (Quick Memory Dump)
位置: memory/qmd/current.json
这是结构化 JSON 工作记忆,记录智能体当前正在处理的内容。相比 Markdown,JSON 能让智能体即时解析而无需 LLM 解释。
- 活跃任务(进度、决策、阻碍)
- 实体追踪(提到的人、URL、凭证)
- 决策日志('为什么选择 X 而非 Y')
{
"session_id": "main-2026-03-07",
"started_at": "2026-03-07T08:30:00Z",
"tasks": [
{
"id": "hotel-search",
"status": "active",
"title": "查找利马索尔月租房",
"context": "2 成人 +3 儿童,3 月 5 日–4 月 5 日",
"progress": ["发送 20 份 RFP", "四季酒店回复:€1,360/晚"],
"entities": ["四季酒店", "Amara 酒店"],
"decisions": ["使用 AgentMail 而非个人邮箱"],
"blockers": ["Royal Apollonia 邮件被退回"],
"next": "等待回复,每 6 小时检查",
"caused_by": ["research-ama-bench"],
"confidence": 0.85
}
],
"entities_seen": {"people": ["Omer Levi"], "urls": ["clawz.org"]},
"updated_at": "2026-03-07T20:00:00Z"
}
- 会话开始: 读取
current.json 恢复感知
- 工作中: 每次重要操作后更新 QMD(新任务、决策、完成)
- 会话结束: 完成任务压缩到日志,活跃任务保留
- 每周: 重要决策提升到
MEMORY.md
2. Zvec 服务器 — 混合向量 + 关键词搜索
位置: memclawz_server/server.py
端口: localhost:4010
技术栈基于 FastAPI + Uvicorn,底层使用阿里巴巴的 Zvec (HNSW 向量数据库),支持 768 维嵌入(兼容 OpenClaw 的 embeddinggemma-300m)。
- HNSW 向量搜索: 适用于语义相似性场景,如'查找酒店定价相关上下文'。
- BM25 关键词搜索: 适用于精确匹配,如'查找 Four Seasons 提及'。
- 混合评分: 默认采用 70% 向量 + 30% 关键词融合排序。
3. 自动索引 Watcher
位置: memclawz_server/watcher.py
Watcher 监控 OpenClaw 的 SQLite 记忆数据库,每 60 秒自动同步新块到 Zvec。关键特性包括无需手动重新索引、新记忆 60 秒内可搜索、批量处理(每次 50 块)以及错误重试机制。
4. 因果图 (Causality Graph) — v3.0 新增
位置: memclawz_server/causality_graph.py
存储: SQLite (~/.openclaw/zvec-memory/causality.db)
基于 AMA-Bench 研究发现,因果图结合工具增强检索能显著提升得分。边类型包括 Causality(有向)、Association(无向关联)和 Similarity(无向相似度)。
{"id":"deploy-v3","status":"active","title":"部署 v3","caused_by":["research-ama-bench"],"causes":["testing-v3"],"confidence":0.85}
5. 压缩脚本
位置: scripts/qmd-compact.py
用于将已完成的 QMD 任务移动到日志文件,修剪工作记忆。支持手动运行、cron 定时或通过心跳检查钩子触发。
python3 scripts/qmd-compact.py
安装与配置
前置条件
- OpenClaw:已安装并运行
- Python:3.10–3.13 (x86_64 Linux)
- pip 包:
zvec, numpy
注意: zvec 仅提供 x86_64 Linux wheels,暂不支持 macOS/ARM64/Windows。
一键安装
cd ~/.openclaw/workspace
git clone https://github.com/yoniassia/memclawz.git
cd memclawz && bash scripts/first-run.sh
首跑脚本会自动完成依赖安装、目录创建、服务启动、历史导入及验证注册。
bash scripts/bootstrap-history.sh
python3 scripts/verify.py
bash scripts/search.sh "查询内容"
环境变量
| 变量 | 默认值 | 说明 |
|---|
ZVEC_PORT | 4010 | HTTP 服务器端口 |
ZVEC_DATA | ~/.openclaw/zvec-memory | HNSW 索引存储目录 |
SQLITE_PATH | ~/.openclaw/memory/main.sqlite | OpenClaw 记忆数据库 |
CAUSALITY_DB | ~/.openclaw/zvec-memory/causality.db | 因果图数据库 |
systemd 服务(生产环境)
sudo cp systemd/zvec-server.service /etc/systemd/system/
sudo cp systemd/zvec-watcher.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now zvec-server zvec-watcher
systemctl status zvec-server zvec-watcher
journalctl -u zvec-server -f
API 参考
基础端点
| 方法 | 路径 | 说明 | 示例 |
|---|
| GET | /health | 健康检查 | {"status": "ok", "engine": "zvec"} |
| GET | /stats | 集合统计 | {"total_docs": 295, "dim": 768} |
| GET | /info | 集合信息 | {"dim": 768, "collection_loaded": true} |
| GET | /migrate | 一次性 SQLite 导入 | {"migrated": 1166, "skipped": 0} |
搜索端点
请求体包含 embedding 或 text(自动嵌入):
{"embedding":[0.1,0.2,...], "text":"可选,自动嵌入", "topk":5, "filter":"可选过滤表达式"}
{"results":[{"id":"chunk_123","score":0.95,"text":"匹配内容...","path":"memory/2026-03-07.md","source":"sqlite","start_line":10,"end_line":25}],"count":5}
索引端点
{"text":"内容", "meta":{"path":"source.md","source":"manual"}}
因果图端点(v3.0)
{"text":"事件描述", "node_id":"custom-id", "caused_by":["node_id_1"], "causes":["node_id_2"]}
{"embedding":[0.1,0.2,...], "topk":5, "similarity_threshold":0.5, "max_depth":2}
OpenClaw 集成
AGENTS.md 配置
在智能体的 AGENTS.md 中添加以下记忆协议,指导智能体如何读写记忆:
## Memory Protocol
1. **On session start:** Read `memory/qmd/current.json` — your working memory
2. **During work:** Update QMD after significant actions (new task, decision, completion)
3. **For search:** Check QMD first → then curl Zvec (port 4010) → then memory_search
4. **On session end:** Run `python3 scripts/qmd-compact.py` to archive completed tasks
搜索脚本封装
创建便捷的搜索脚本 scripts/search.sh,封装了调用嵌入器与搜索的逻辑:
#!/bin/bash
QUERY="$1"
TOPK="${2:-5}"
ZVEC_URL="${ZVEC_URL:-http://localhost:4010}"
if [ -z "$QUERY" ]; then
echo "Usage: $0 \"query text\" [topk]"
exit 1
fi
curl -s -X POST "$ZVEC_URL/search" \
-H 'Content-Type: application/json' \
-d "{\"text\": \"$QUERY\", \"topk\": $TOPK}" | \
python3 -c "import sys, json; data = json.load(sys.stdin);
for r in data.get('results', []): print(f\"\\n[Score: {r['score']:.3f}] {r.get('path', 'unknown')}:{r.get('start_line', 0)}\");
print(r['text'][:200] + '...' if len(r['text']) > 200 else r['text'])"
子智能体调度模式(Dispatch Pattern)
最佳实践是生成领域专家子智能体,并在预加载阶段从 MemClawz 获取相关记忆。
规则: 每个需要工作的请求都生成一个子智能体,主智能体保持轻量。
- 提取请求中的关键术语
- 查询
POST http://127.0.0.1:4010/search_text
- 将结果作为'过往上下文'包含在 spawn 任务中
curl -s -X POST http://127.0.0.1:4010/search \
-H 'Content-Type: application/json' \
-d '{"text":"[request keywords]","topk":5}'
sessions_spawn(
task="[Task]\n\n## Past Context (from memclawz):\n[results]\n\n ## Memory Access:\nSearch memclawz during work:\n curl -s -X POST http://127.0.0.1:4010/search \
-H 'Content-Type: application/json' \
-d '{\"text\":\"query\",\"topk\":5}'\n ALWAYS search before starting to find relevant history.",
label="[domain]-[short-desc]"
)
性能基准
测试环境: AMD EPYC 9354P, 32GB RAM, 1,166 索引块
| 操作 | 延迟 | 说明 |
|---|
| QMD 读取 | <1ms | 直接 JSON 文件读取 |
| QMD 写入 | <2ms | JSON 文件写入 |
| Zvec 搜索 (top-5) | ~8ms | HNSW + BM25 混合 |
| Zvec 索引 (单文档) | ~15ms | 嵌入 + 更新 + 刷新 |
| 因果图搜索 | ~15ms | 多跳遍历 |
| OpenClaw memory_search | ~50ms | 内置语义搜索 |
| Watcher 同步周期 | ~200ms | 50 新块批量处理 |
| QMD 压缩 | ~5ms | 移动完成任务到日志 |
最佳实践
1. QMD 更新时机
- 开始新任务
- 做出重要决策
- 完成任务
- 遇到阻碍
- 发现关键实体(人、URL、凭证)
- 每次工具调用(过于频繁)
- 琐碎的中间步骤
- 临时想法(除非重要)
2. 搜索策略选择
| 场景 | 推荐层 | 理由 |
|---|
| 当前任务状态 | QMD | 即时访问,结构化 |
| 语义相关上下文 | Zvec | 混合搜索,快速 |
| 精确术语匹配 | Zvec 关键词 | BM25 精确匹配 |
| 因果推理 | 因果图 | 多跳遍历 |
| 历史策划记忆 | memory_search | curated 长期记忆 |
3. 压缩策略
自动压缩(推荐):
添加到 crontab,每小时运行:
0 * * * * cd ~/.openclaw/workspace/memclawz && python3 scripts/qmd-compact.py --auto
import subprocess
subprocess.run(["python3", "scripts/qmd-compact.py", "--auto"])
4. 监控与告警
#!/bin/bash
ZVEC_URL="http://localhost:4010"
if ! curl -sf "$ZVEC_URL/health" > /dev/null; then
echo "❌ Zvec server not responding"
exit 1
fi
STATS=$(curl -sf "$ZVEC_URL/stats")
DOCS=$(echo "$STATS" | python3 -c "import sys,json; print(json.load(sys.stdin).get('total_docs',0))")
if [ "$DOCS" -lt 100 ]; then
echo "⚠️ Low doc count: $DOCS"
fi
if [ ! -f "memory/qmd/current.json" ]; then
echo "❌ QMD file missing"
exit 1
fi
echo "✅ All systems operational ($DOCS docs indexed)"
5. 备份策略
tar -czf memclawz-backup-$(date +%Y%m%d).tar.gz \
~/.openclaw/zvec-memory/ \
memory/qmd/current.json
systemctl stop zvec-server zvec-watcher
tar -xzf memclawz-backup-20260307.tar.gz -C ~/
systemctl start zvec-server zvec-watcher
故障排查
常见问题
1. Zvec 服务器无法启动
症状: curl localhost:4010/health 无响应
cat /tmp/zvec-server.log
lsof -i :4010
python3 --version
python3 -c "import zvec; print(zvec.__version__)"
pip3 install --upgrade zvec numpy
rm -rf ~/.openclaw/zvec-memory/memory/.lock
cd memclawz && python3 memclawz_server/server.py
2. 搜索结果为空
可能原因: 索引为空、嵌入维度不匹配、查询向量维度错误。
curl localhost:4010/stats
curl localhost:4010/info
curl -X POST localhost:4010/search \
-H 'Content-Type: application/json' \
-d '{"text": "test", "topk": 5}'
3. Watcher 未同步新文件
ps aux | grep watcher.py
cat /tmp/zvec-watcher.log
curl -X POST localhost:4010/index \
-H 'Content-Type: application/json' \
-d '{"text": "test content", "meta": {"path": "test.md"}}'
项目结构
memclawz/
├── README.md
├── LICENSE
├── CONTRIBUTING.md
├── clawhub.json
├── requirements.txt
├── qmd/
│ ├── schema.json
│ └── current.json.example
├── memclawz_server/
│ ├── server.py
│ ├── embed_server.py
│ ├── fleet_server.py
│ ├── file_watcher.py
│ ├── chunker.py
│ ├── watcher.py
│ ├── embedder.py
│ ├── embed_bridge.py
│ └── causality_graph.py
├── skill/
│ ├── SKILL.md
│ ├── install.sh
│ └── config.example
├── scripts/
│ ├── first-run.sh
│ ├── bootstrap-history.sh
│ ├── search.sh
│ ├── qmd-compact.py
│ ├── verify.py
│ └── optimize-context.py
├── systemd/
│ ├── zvec-server.service
│ └── zvec-watcher.service
├── tests/
└── docs/
├── architecture.md
├── fleet-memory.md
└── explainer.html
参考资料
研究论文
'AMA-Bench: Evaluating Long-Horizon Memory for Agentic Applications' (Zhao et al., 2026)
https://arxiv.org/abs/2602.22769
关键发现: Mem0 得分 0.2104,因果图 + 工具增强检索得分 0.5722(2.7× 提升)
相关项目
ClawHub 安装
clawhub install yoniassia/memclawz
相关免费在线工具
- 加密/解密文本
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Gemini 图片去水印
基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online
- curl 转代码
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online