179 lines
7.3 KiB
Markdown
179 lines
7.3 KiB
Markdown
# 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 Cloud(PostgreSQL + 向量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
|