替代小龙虾OpenClaw自带的memory-enhancement-engine记忆引擎使用Claude-Mem升级小龙虾大脑记忆实现原生永久长效记忆:
🔍 Claude-Mem 核心架构
基于DZ插件网小龙虾 claw.dz-x.net 对接经验分享,由 DZ插件网统一算力平台:api.dz-x.net(支持任何站长接入,解决token焦虑) 提供算力支撑(已支持语音接口、图片识别接口,已接入阿里云API短信、正在接入阿里云语音电话API)。
工作原理
用户操作 → 自动捕获 (tool usage) → AI 压缩 (10x token 优化) → SQLite 存储 → 语义检索 → 注入会话
关键特性
| 特性 |
实现方式 |
| 持久化记忆 |
~/.claude-mem/本地存储 |
| 自动捕获 |
记录所有 tool usage (file reads/writes/searches) |
| AI 压缩 |
Claude agent-sdk 语义压缩 (约 10x) |
| 记忆注入 |
相关记忆自动注入新会话 |
| 三层检索 |
search → timeline → get_observations |
📊 与现有 memory-enhancement-engine 对比
| 维度 |
Claude-Mem |
现有 memory-enhancement-engine |
| 捕获方式 |
✅ 自动 (tool usage hooks) |
❌ 手动 (需调用脚本) |
| 压缩方式 |
✅ AI 语义压缩 (10x) |
⚠️ 规则 + 摘要 (需人工触发) |
| 存储后端 |
✅ SQLite (高性能) |
⚠️ Markdown 文件 |
| 检索方式 |
✅ 语义搜索 + 自然语言 |
⚠️ 关键词 + 语义 (Gemini embedding) |
| 记忆注入 |
✅ 自动注入会话 |
❌ 需手动调用 memory_search |
🔍 阶段 1:挂载点 (Hooks) 可行性分析
✅ 已确认的 OpenClaw 原生 Hooks
| Hook 类型 |
事件名称 |
触发时机 |
用途 |
| Plugin Hooks |
before_tool_call |
工具调用前 |
拦截工具参数 |
| Plugin Hooks |
after_tool_call |
工具调用后 |
捕获工具结果 ✅ |
| Plugin Hooks |
message_received |
收到消息时 |
捕获用户输入 |
| Plugin Hooks |
message_sending |
发送消息前 |
捕获 AI 回复 |
| Internal Hooks |
command:new |
新会话创建 |
初始化上下文 |
✅ 最佳挂载点组合
用户消息 → message_received → 捕获输入
↓
AI 思考 → before_tool_call → 拦截工具调用
↓
工具执行 → after_tool_call → 捕获结果 ✅ (核心记忆源)
↓
AI 回复 → message_sending → 捕获输出
↓
会话结束 → command:stop → 触发 AI 压缩 ✅
↓
下次启动 → gateway:startup → 注入相关记忆 ✅
🗄️ 阶段 2:SQLite Schema 设计
核心表结构
-- 记忆主表
CREATE TABLE memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_key TEXT NOT NULL, -- 会话 ID
event_type TEXT NOT NULL, -- 'tool_call' | 'message' | 'session_end'
timestamp_ms INTEGER NOT NULL, -- 时间戳 (毫秒)
-- 原始数据
raw_content TEXT NOT NULL, -- 原始内容 (JSON)
tool_name TEXT, -- 工具名称 (如 'exec', 'read')
tool_params TEXT, -- 工具参数 (JSON)
tool_result TEXT, -- 工具结果 (JSON)
-- AI 压缩
compressed_summary TEXT, -- AI 生成的语义摘要
embedding_vector BLOB, -- Gemini embedding (1024 维)
token_count_before INTEGER, -- 压缩前 token 数
token_count_after INTEGER, -- 压缩后 token 数
-- 检索优化
tags TEXT, -- 自动标签 (JSON 数组)
importance_score REAL DEFAULT 0.5, -- 重要性评分 (0-1)
access_count INTEGER DEFAULT 0, -- 访问次数 (热度)
last_accessed_ms INTEGER, -- 最后访问时间
created_at INTEGER DEFAULT (strftime('%s', 'now') * 1000),
updated_at INTEGER DEFAULT (strftime('%s', 'now') * 1000)
);
-- 索引优化
CREATE INDEX idx_memories_session ON memories(session_key);
CREATE INDEX idx_memories_event_type ON memories(event_type);
CREATE INDEX idx_memories_timestamp ON memories(timestamp_ms DESC);
CREATE INDEX idx_memories_importance ON memories(importance_score DESC);
CREATE INDEX idx_memories_tags ON memories(tags);
-- 会话上下文表 (用于快速注入)
CREATE TABLE session_contexts (
session_key TEXT PRIMARY KEY,
project_name TEXT, -- 项目名称 (如 'dz-x.net')
last_summary TEXT, -- 上次会话摘要
key_decisions TEXT, -- 关键决策 (JSON 数组)
pending_tasks TEXT, -- 待办任务 (JSON 数组)
created_at INTEGER,
updated_at INTEGER
);
🤖 阶段 3:AI 压缩触发时机
三层压缩策略
| 层级 |
触发时机 |
压缩方式 |
Token 优化 |
| L1: 实时捕获 |
after_tool_call |
规则过滤 (去重/白噪音) |
20-30% |
| L2: 会话结束 |
command:stop |
AI 语义摘要 (Gemini) |
60-70% |
| L3: 定期归档 |
每日凌晨 (cron) |
跨会话合并 + 主题聚类 |
80-90% |
L2 压缩流程 (会话结束时)
会话结束 (command:stop)
↓
-
收集本次会话所有 memories (raw_content)
↓
-
调用 Gemini API 生成摘要
Prompt: "将以下操作记录压缩为 3-5 条关键决策,每条不超过 50 字"
↓
-
存储 compressed_summary + embedding_vector
↓
-
更新 session_contexts (last_summary, key_decisions)
↓
-
删除原始 raw_content (仅保留压缩后内容)
💉 阶段 4:上下文自动注入策略
注入触发条件
| 场景 |
触发条件 |
注入内容 |
| 新会话创建 |
command:new |
最近 3 次会话摘要 + 待办任务 |
| 网关启动 |
gateway:startup |
全局项目状态 (所有 session_contexts) |
| 用户提问 |
message_received |
语义检索 Top 5 相关记忆 |
| 工具调用前 |
before_tool_call |
相关工具的历史使用记录 |
语义检索流程
用户消息:"Discuz X5 的 PHP7.4 补丁进度如何?"
↓
-
调用 Gemini embedding-001 生成查询向量
↓
-
SQLite 向量相似度搜索 (余弦相似度)
SELECT * FROM memories
WHERE cosine_similarity(embedding_vector, ?) > 0.75
ORDER BY similarity DESC LIMIT 5
↓
-
注入到 AI 上下文
System: "以下是相关历史记忆:[5 条压缩摘要]"
↓
-
AI 生成回答 (基于注入的记忆)
🔧 阶段 5:OpenClaw 原生实现路径
方案 A:Hook 中间件(推荐)
位置: ~/.openclaw/hooks/openclaw-mem/openclaw-mem/
├── HOOK.md # 元数据 + 文档
├── handler.ts # 主处理器
├── memory-service.ts # 记忆服务 (SQLite + AI 压缩)
├── schema.sql # SQLite Schema
└── package.json # 依赖 (better-sqlite3, @google/generative-ai)
优势:
0 ✅ OpenClaw 原生支持,无需修改核心代码
0 ✅ 自动发现,openclaw hooks enable openclaw-mem 即可启用
0 ✅ 与现有 session-memory hook 兼容
方案 B:Plugin 插件
位置: ~/.openclaw/plugins/openclaw-mem/openclaw-mem/
├── plugin.json
├── index.ts # 插件入口
├── hooks/
│ ├── after_tool_call.ts
│ ├── command_stop.ts
│ └── gateway_startup.ts
└── services/
├── sqlite-service.ts
└── compression-service.ts
优势:
0 ✅ 更强大的扩展能力
0 ✅ 可注册自定义命令 (如 /mem search)
⚖️ 大圣的决策建议
推荐:[A] Hook 中间件方案
理由:
- ✅ OpenClaw 官方推荐方式 (文档明确支持)
- ✅ 轻量级,仅拦截关键事件
- ✅ 与现有 hooks 无缝集成
- ✅ 开发成本低 (预计 4-6 小时)
实施步骤:
- 创建 ~/.openclaw/hooks/openclaw-mem/
- 实现 handler.ts (监听 5 个关键事件)
- 初始化 SQLite 数据库
- 集成 Gemini embedding-001
- 测试自动捕获 + 压缩 + 注入
📋 与现有 memory-enhancement-engine 协同
| 功能 |
现有引擎 |
openclaw-mem |
协同方式 |
| 记忆存储 |
Markdown 文件 |
SQLite |
迁移或并存 |
| 嵌入模型 |
Gemini embedding-001 |
Gemini embedding-001 |
✅ 复用 |
| 检索方式 |
手动调用脚本 |
自动注入 |
互补 |
| 压缩方式 |
规则 + 摘要 |
AI 语义压缩 |
升级 |
迁移策略:
保留现有 69 个记忆文件作为历史归档
openclaw-mem 从启用之日起自动捕获新记忆
提供迁移工具 (可选): python3 migrate-to-sqlite.py
✅ 关键成果
| 功能 |
状态 |
证明 |
| AI 压缩 |
✅ 工作 |
DeepSeek API 生成 3 条摘要 |
| 向量嵌入 |
✅ 工作 |
Gemini embedding-001 |
| 语义检索 |
✅ 工作 |
余弦相似度 0.679 |
| 数据库 |
✅ 工作 |
13 条记录,1 条 AI 摘要 |
🎯 预期效果
生产环境行为
- 自动捕获: 每次工具调用、用户消息自动存储
- 会话结束: 自动生成 AI 摘要(DeepSeek API)
- 语义检索: 用户提问时自动检索相关记忆(相似度 >0.5)
- 上下文注入: Top 3-5 相关记忆注入到 AI 上下文
Token 优化
| 场景 |
优化前 |
优化后 |
优化率 |
| 长会话历史 |
10,000 tokens |
1,000 tokens |
90%⬇️ |
| 跨会话检索 |
全量加载 |
Top 5 记忆 |
80%⬇️ |
| 会话摘要 |
人工总结 |
AI 自动生成 |
100%⬆️效率 |
⚠️ 注意事项
- 首次启用: 数据库自动创建(~/.openclaw/openclaw-mem.db)
- API 成本: DeepSeek(摘要)+ Gemini(Embedding)按量计费
- 隐私控制: 敏感操作不会存储(Bash 命令结果已过滤)
- 性能影响: <10ms/次(SQLite + 本地缓存)
©DZ插件网所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站内容为站长个人技术研究记录或网络,不提供用户交互功能,所有内容版权归原作者所有。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,得到更好的正版服务。
您在本站任何的赞助购买、下载、查阅、回复等行为等均表示接受并同意签订《DZ插件网免责声明协议》。
如有侵权请邮件与我们联系处理: discuzaddons@vip.qq.com 并出示相关证明以便删除。敬请谅解!