Omni-SimpleMem 自主研究发现的终身多模态记忆¶
这篇笔记整理论文「Omni-SimpleMem: Autoresearch-Guided Discovery of Lifelong Multimodal Agent Memory」及 YouTube 频道「wow」的深度解读。核心亮点:用 AI 自动做科研来发现 AI 记忆系统的最优架构——72 小时 50 次实验,从纯文本记忆扩展到四模态,完全由 AutoResearchClaw 自主完成。
目录¶
- #背景:AI Agent 的记忆困境
- #AutoResearchClaw:AI 自己搞科研
- #SimpleMem:文本记忆三阶段管线
- #Omni-SimpleMem:三大设计原则
- #架构对比:SimpleMem vs Omni-SimpleMem
- #实验结果
- #EvolveMem:自进化检索
- #如何使用
背景:AI Agent 的记忆困境¶
核心矛盾¶
当前 AI Agent 在长期使用中面临一个根本问题:记忆越多,推理越差。
记忆量 ↑
│
├─ 简单方案:存原始对话
│ → Token 膨胀,推理成本暴增,噪音干扰
│
├─ 改进方案:存压缩摘要
│ → 丢失细节,跨时间推理能力下降
│
└─ 理想方案:有损压缩但语义无损
→ "断舍离"式记忆管理
三种退化模式¶
| 模式 | 表现 | 原因 |
|---|---|---|
| 健忘症 | 早期经验被后期覆盖 | 上下文窗口有限 |
| 信息过载 | 检索结果太多,无法有效利用 | 缺乏选择性过滤 |
| 模态割裂 | 文本记忆好但无法关联图像/音频 | 记忆系统只支持单模态 |
AutoResearchClaw:AI 自己搞科研¶
什么是 AutoResearchClaw¶
AutoResearchClaw 是一个全自主 AI 科研系统,能在无人类干预的情况下完成完整的科研流程:
研究目标设定(人类设定方向)
│
└─→ AutoResearchClaw 自主执行
│
├─ 文献调研
├─ 假设生成
├─ 代码实现
├─ 实验运行(50 次)
├─ Bug 修复(自主修)
├─ 结果分析
└─ 论文撰写
关键数字¶
- 72 小时内完成全部实验
- 50 次实验迭代
- 从 SimpleMem(纯文本)自主扩展到 Omni-SimpleMem(四模态)
- Bug 修复和架构变动的贡献超过所有超参调优的总和
自主研究的六大发现类型¶
| 发现类型 | 示例 |
|---|---|
| 架构发现 | Selective Ingestion(选择性摄入) |
| 策略发现 | Progressive Retrieval(渐进检索) |
| 组件发现 | Knowledge Graph Augmentation(知识图谱增强) |
| 超参发现 | 最优 chunk size、top-k 值 |
| Bug 修复 | 自主发现并修复代码中的错误 |
| 跨域迁移 | 在一个 benchmark 上发现的配置迁移到另一个 |
多模态记忆特别适合自主研究的四大特性¶
- 可组合性 — 文本/图像/音频/视频的处理模块可以独立替换
- 可度量性 — 标准化 benchmark(LoCoMo、Mem-Gallery)可自动评估
- 迭代反馈快 — 每次实验运行分钟级出结果
- 失败信号清晰 — 不像基础研究,metric 下降就说明方向错了
SimpleMem:文本记忆三阶段管线¶
SimpleMem 是 Omni-SimpleMem 的前身,专注于纯文本记忆,性能已经很强(LoCoMo F1 +26.4%,推理 token 减少 ~30x)。
三阶段流程¶
原始对话
│
▼
┌─────────────────────────────────────────┐
│ Stage 1: Semantic Structured Compression │
│ 语义结构化压缩 │
│ • 提取自包含的事实单元 │
│ • 解决共指消解 (he/she → 具体人名) │
│ • 添加绝对时间戳 │
│ • 多索引互补视图 │
└─────────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Stage 2: Online Semantic Synthesis │
│ 在线语义合成 │
│ • 会话内合并相关上下文 │
│ • 在记忆构建时就去冗余(不是查询时) │
│ • 生成统一抽象 │
└─────────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Stage 3: Intent-Aware Retrieval Planning │
│ 意图感知检索规划 │
│ • 推断搜索意图 │
│ • 决定检索什么内容 │
│ • 组装精确、紧凑的上下文 │
└─────────────────────────────────────────┘
Omni-SimpleMem:三大设计原则¶
AutoResearchClaw 在 50 次实验中自主收敛到三个核心原则:
原则 1: Selective Ingestion(选择性摄入)¶
不是所有信息都值得记住。"断舍离"——只存高信息量的内容。
多模态输入(文本/图像/音频/视频)
│
▼
信息熵计算
│
├─ 高熵(信息量大)→ 存入记忆
└─ 低熵(冗余/噪音)→ 丢弃
为什么重要:多模态数据量爆炸式增长,不加过滤会导致记忆库迅速膨胀,检索质量下降。
原则 2: Progressive Retrieval(渐进检索)¶
不一次性返回所有相关记忆,而是逐步扩展搜索范围。
查询请求
│
├─ Round 1: FAISS 语义搜索(少量结果)
│ → 不够?→ Round 2
│
├─ Round 2: + BM25 关键词搜索
│ → 不够?→ Round 3
│
└─ Round 3: 扩大 token budget
→ 返回更多结果
混合检索策略(Hybrid):FAISS(语义)+ BM25(关键词),金字塔式 token 预算扩展。
原则 3: Knowledge Graph Augmentation(知识图谱增强)¶
用知识图谱实现跨模态推理。
文本记忆节点 ───── 图像记忆节点
│ │
│ KG 连接 │
│ ────────── │
│ │
音频记忆节点 ───── 视频记忆节点
多跳跨模态推理:从文本问题出发,通过知识图谱边找到相关图像/音频/视频记忆。
示例:问"用户上次提到的那个蛋糕长什么样?"→ 文本记忆找到"蛋糕"→ KG 边→ 图像记忆找到蛋糕照片。
架构对比:SimpleMem vs Omni-SimpleMem¶
| 特性 | SimpleMem | Omni-SimpleMem |
|---|---|---|
| 支持模态 | 文本 | 文本 + 图像 + 音频 + 视频 |
| 摄入策略 | 全量压缩 | Selective Ingestion(熵过滤) |
| 检索策略 | 意图感知 | Progressive Retrieval(渐进式) |
| 推理能力 | 单模态语义 | KG 多跳跨模态推理 |
| 索引方式 | 多视图互补 | FAISS + BM25 混合 |
| 自适应 | 无 | EvolveMem 自进化 |
| 研究方式 | 人工设计 | AutoResearchClaw 自主发现 |
实验结果¶
LoCoMo Benchmark¶
| 系统 | F1 Score | 提升 |
|---|---|---|
| Mem0 (baseline) | 基准 | — |
| MemGPT | — | 中等提升 |
| SimpleMem | — | +26.4% (vs prior SOTA) |
| Omni-SimpleMem | — | +57% (vs Mem0) |
关键发现¶
- Bug 修复和架构变动的贡献 超过所有超参调优的总和
- 在 LoCoMo 和 Mem-Gallery 两个 benchmark 上均达到 SOTA
- 配置具有跨 benchmark 迁移能力
EvolveMem:自进化检索¶
Omni-SimpleMem 还包含一个 EvolveMem 模块,解决"存储内容在变,但检索策略不变"的盲区。
闭环进化循环¶
┌─→ Evaluate (评估当前检索质量)
│ │
│ ▼
│ Diagnose (诊断每个问题的失败原因)
│ │
│ ▼
│ Propose (提出配置变更)
│ │
│ ▼
│ Guard (自动回滚检测)
│ │
│ ├─ 回归?→ 回滚到上一个配置
│ └─ 正常?→ 部署新配置
│ │
│ └─→ Repeat
└─────┘
自主发现的新检索维度¶
| 维度 | 说明 |
|---|---|
| Query Decomposition | 将复杂查询拆成子查询 |
| Entity-Swap | 替换实体验证答案一致性 |
| Answer Verification | 交叉验证答案正确性 |
这些检索策略不在原始设计中,是 EvolveMem 自主发现的。
性能¶
- LoCoMo 上相对提升 25.7%
- 配置可跨 benchmark 迁移
如何使用¶
安装¶
pip install simplemem
代码示例¶
from simplemem import SimpleMem
mem = SimpleMem() # auto mode
# 文本记忆
mem.add_dialogue("Alice", "Bob, let's meet at Starbucks tomorrow at 2pm", "2025-11-15T14:30:00")
mem.add_dialogue("Bob", "Sure, I'll bring the market analysis report", "2025-11-15T14:31:00")
mem.finalize()
answer = mem.ask("When and where will Alice and Bob meet?")
# → "16 November 2025 at 2:00 PM at Starbucks"
# 多模态记忆
mem = SimpleMem() # auto mode
mem.add_text("User loves hiking in the Rocky Mountains.", tags=["session_id:D1"])
mem.add_image("photo.jpg", tags=["session_id:D1"])
mem.add_audio("voice_note.wav", tags=["session_id:D1"])
result = mem.query("What does the user enjoy?", top_k=5)
for item in result.items:
print(item["summary"])
mem.close()
MCP Server 支持¶
- 云端:
mcp.simplemem.cloud - Docker 自托管
- 支持任何 MCP 客户端(Claude Desktop、Cursor 等)