Files
2026-06-06 10:40:48 +08:00

179 lines
7.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Supermemory 插件学习报告 vs 小龙记忆系统对比
> 学习对象:github.com/supermemoryai/openclaw-supermemory
> 学习日期:2026-06-02
> 镜像:git666.u7f.cn/sawz/openclaw-supermemory
---
## 一、项目总览
| 维度 | 内容 |
|------|------|
| 用途 | 给 OpenClaw Agent 提供云端长期记忆:Auto-Recall + Auto-Capture + 用户画像 |
| 核心能力 | 回忆注入、自动捕获、画像构建、多容器隔离、语义搜索 |
| 技术栈 | TypeScript ESM、Sinclair TypeBox、esbuild、Supermemory SDK |
| 文件规模 | 17 源文件,核心源码 < 30KB |
| 协议 | MIT |
---
## 二、核心调用链
```
用户消息
→ isInteractiveTrigger() 过滤心跳/cron
→ before_prompt_build → getProfile(query)
├── static profile (长期偏好)
├── dynamic context (近期动态)
└── searchResults (语义相似记忆)
→ formatContext → XML 块注入 prependContext
→ AI 生成回复
→ agent_end → getLastTurn()
├── stripInboundMetadata (剥离元数据)
├── filter injected context (移除 <supermemory-context>)
├── filter short texts (< 10字)
└── addMemory → 云端异步处理
```
---
## 三、核心模块
### 1. 插件入口 (index.ts)
- **优雅降级**:无 API Key → 只注册 CLI stub,不崩溃
- **新旧 API 兼容**registerMemoryCapability / registerMemoryRuntime 双路径
- **工具双注册**supermemory_search + supermemory-search 兼容命名
### 2. Auto-Recall (hooks/recall.ts)
- **分层频率**static profile 低频注入(新会话 + 每50轮),search 每轮查询
- **静默指令**"Do not proactively bring up memories" 避免突兀
- **记忆使用计数**[Supermemory: X memories loaded, Y used]
### 3. Auto-Capture (hooks/capture.ts)
- **只取最后一轮**getLastTurn() 避免重复
- **三层过滤**:元数据 → 注入上下文 → 短文本
- **session 关联**customId = buildDocumentId(sessionKey)
### 4. 配置系统 (config.ts)
- **白名单校验**:未知 key 直接抛异常
- **环境变量插值**${SUPERMEMORY_API_KEY}
- **Schema 驱动 UI**configSchema 同时用于校验 + 自动生成配置表单
### 5. CLI 命令 (commands/cli.ts)
- **交互式向导**:readline 逐项问答,有默认值
- **安全确认**wipe 需输入 "yes"
### 6. 内容处理 (memory.ts)
- **元数据剥离**sentinel 模式识别 provider 注入前缀
- **内容分类**preference / decision / entity / fact / other
- **实体上下文模板**:指导 Supermemory 提取规则
---
## 四、小龙 🐉 vs Supermemory 🔌 — 全面对比
### 4.1 架构对比
| 维度 | 小龙(本地文件系统) | Supermemory(云端 API |
|------|---------------------|------------------------|
| 存储 | MEMORY.md + vault.md + daily/ | Supermemory CloudPostgreSQL + 向量DB |
| 检索 | memory_search(语义,需 API Key/ memory_get(精确) | 全语义搜索,自动嵌入 |
| 写入 | 手动写文件 | 自动捕获 + AI Tool 写入 |
| 画像 | 手动维护 USER.md | 自动提取 static + dynamic |
| 配置 | 文件级约定 | Schema 驱动 + GUI + CLI |
| 部署 | 零依赖 | 需要 API Key + 网络 |
| 费用 | 免费 | Pro 付费 |
| 延迟 | < 1ms | ~50ms API 调用 |
### 4.2 能力对比
| 能力 | 小龙 | Supermemory | 谁优 |
|------|------|-------------|------|
| **自动捕获** | ❌ 无,需手动写 daily/ | ✅ 每次对话自动捕获 | 🔌 |
| **自动召回** | ❌ 无,需手动 memory_get | ✅ 每轮自动搜索 + 注入 | 🔌 |
| **用户画像** | ⚠️ 手动 USER.md | ✅ 自动 static + dynamic | 🔌 |
| **语义搜索** | ⚠️ memory_search(依赖 embedding API,目前挂) | ✅ 内置,SOTA 基准第一 | 🔌 |
| **去重/降噪** | ⚠️ 靠我自己判断 | ✅ 自动过滤 + 短文本 + 元数据剥离 | 🔌 |
| **多容器隔离** | ❌ 无 | ✅ containerTag + 自定义容器 | 🔌 |
| **缓存友好** | ✅ MEMORY.md 瘦身到 2KB + 缓存线以上锁定 | ⚠️ 注入内容每次变→前缀变→缓存可能炸 | 🐉 |
| **透明度** | ✅ 文件可读可改 | ⚠️ 黑盒,用户看不到存了什么 | 🐉 |
| **零依赖** | ✅ 不依赖外部服务 | ❌ 依赖网络 + API | 🐉 |
| **延迟** | ✅ 无额外延迟 | ⚠️ 每轮 ~50-200ms | 🐉 |
| **离线可用** | ✅ | ❌ | 🐉 |
| **费用** | ✅ $0 | ❌ Pro 月度订阅 | 🐉 |
### 4.3 设计哲学对比
| 维度 | 小龙 | Supermemory |
|------|------|-------------|
| 核心理念 | "我知道我要记什么" | "我不知道我要记什么,你帮我" |
| 人机关系 | 工具辅助人决策 | 自动代理减轻人的负担 |
| 记忆质量 | 高(我筛选过才写) | 中(自动提取,可能漏/误) |
| 记忆数量 | 少而精 | 多而全 |
| 适用场景 | 精准工作,少量偏好 | 海量对话,长期积累 |
---
## 五、综合评价
### Supermemory 胜出的场景
- 长期大量对话 → 自动积累,人不需要操心
- 多对话 channel → 跨 session 记忆统一
- 用户画像 → 自动识别偏好、习惯、项目
- 新手用户 → 不需要手动维护记忆文件
### 小龙胜出的场景
- **缓存命中率** → 稳定前缀不动,DeepSeek 缓存不炸
- 精准关键决策 → 我判断重要才记,不是全量
- 离线/弱网 → 不依赖外部服务
- 零成本 → 不花钱
- 透明度 → 尘哥可以随时看、改、删任何记忆
- 安全 → 数据不出机器
---
## 六、最佳方案:双轨制 🐉🫧
**不是二选一,是互补:**
```
本地骨架(小龙) 云端引擎(Supermemory
├── MEMORY.md (2KB) ├── 自动捕获对话
├── vault.md (决策/项目) ├── 语义搜索 + 画像
├── daily/ (日志) ├── 跨 session 关联
├── 缓存友好 ✅ └── 多容器隔离
└── 零依赖 ✅
↕ ↕
关键记忆 + 工程规范 海量对话 + 模式发现
```
具体分工:
- **小龙负责**:工程范式、关键决策、工具环境、时间规则 —— 缓存线上不动
- **Supermemory 负责**:日常对话的自动捕获、语义召回、用户画像 —— 上下文注入
- **互不干扰**:缓存线上的文件不动,Supermemory 的注入在缓存线以下
---
## 七、从 Supermemory 学到可迁移到小龙的能力
| 能力 | 如何迁移 |
|------|---------|
| **元数据剥离** | 写入 daily/ 前 strip 注入的前缀和 JSON 块 |
| **短文本过滤** | 对话片段 < 20 字不记录 |
| **分类标签** | vault.md 条目加 preference/decision/fact 标签 |
| **回忆计数** | 每次回复后标注用了多少条记忆 |
| **频率控制** | vault.md 不全量注入,按需 memory_get |
| **触发器过滤** | 心跳/cron 触发时不写记忆 |
| **优雅降级** | memory_search 不可用时降级到 memory_get 精确读 |
---
## 八、结论
**Supermemory 是一个成熟的记忆引擎,但我们的本地文件系统在缓存友好性、零成本、透明度上有不可替代的优势。**
最优策略是双轨:本地做骨架(缓存友好 + 关键决策),云端做血肉(自动捕获 + 语义召回)。如果只选一个,对于缓存敏感情景,小龙的本地系统更优。
> 报告生成:小龙 🐉 + 团子 🫧 · 2026-06-02