Memory 与 RAG 边界
DB-Agent-Memory:精读: tencentdb-agent-memory WeKnora(RAG):精读: WeKnora 腾讯生态:腾讯记忆生态 记忆设计模式:记忆设计模式目录
调研元信息
| 项目 | 值 |
|---|---|
| 调研日期 | 2026-06-22 |
| 涉及研究轴 | 跨赛道(AI Memory + RAG/Knowledge) |
| 证据等级 | [已有] 为主 |
一句话定位
Memory 和 RAG 不是同一件事——Memory 是 Agent 从交互中学到的,RAG 是 Agent 从外部文档中查到的。但两者在”提炼后知识”区域存在重叠,需要明确的边界判断才能避免重复建设 [已有]。
记忆类型标注
| 类型 | 涉及 | 说明 |
|---|---|---|
| Working | 否 | 不涉及 session 上下文 |
| Profile | 否 | 不涉及规则配置 |
| User | 是 | Memory 系统的核心 |
| External | 是 | RAG 系统和 MCP 记忆服务 |
日常类比
想象你是一个新入职的员工:
Memory(记忆):你每天工作中学到的东西——”老板喜欢简短的邮件”“部署前必须跑 smoke test”“上次数据库迁移踩了连接池的坑”。这些是经验,来自你的亲身经历。
RAG(检索增强生成):你在公司 Wiki、Confluence、内部文档中查到的东西——”数据库迁移 SOP”“API 接口文档”“产品需求规格说明”。这些是知识,来自别人整理好的文档。
重叠区:你从经验中学到”部署前必须跑 smoke test”,而公司 Wiki 也有一份”部署检查清单”包含同样的内容。两者说的是同一件事,但来源和更新机制不同。
决策树:何时用 Memory vs RAG
flowchart TB
START[Agent 需要信息] --> Q1{信息来源是什么?}
Q1 -->|"来自 Agent 与用户的对话"| Q2{是否跨 session 有用?}
Q2 -->|否| WORKING["Working Memory<br/>(session 内上下文)"]
Q2 -->|是| Q3{是否个性化?}
Q3 -->|是| USER_MEM["User Memory<br/>(memdir / Codex memories)"]
Q3 -->|否| Q4{是否可沉淀为文档?}
Q4 -->|是| BOTH["Memory + 考虑沉淀到 RAG"]
Q4 -->|否| USER_MEM
Q1 -->|"来自外部文档/知识库"| Q5{文档是否经常更新?}
Q5 -->|是| RAG["RAG 系统<br/>(WeKnora / Dify 等)"]
Q5 -->|否| RAG_STATIC["RAG + 可缓存"]
Q1 -->|"来自 Agent 自身的推理结论"| Q6{结论是否可复用?}
Q6 -->|是| USER_MEM
Q6 -->|否| WORKING
系统性对比
| 维度 | Memory | RAG |
|---|---|---|
| 数据来源 | Agent-用户对话 | 外部文档/知识库 |
| 写入触发 | 自动(extractMemories/Phase1/flush) | 手动(文档上传/爬取) |
| 写入者 | Agent/系统自动 | 人工管理员或爬虫 |
| 更新频率 | 实时(每次对话) | 批量(文档变更时) |
| 操作粒度 | 对话/会话级 | 文档/段落级 |
| 个性化 | 高(per user/project) | 低(共享知识库) |
| 知识形态 | 经验、偏好、历史 | 事实、文档、规范 |
| 生命周期 | 跟随 Agent/用户 | 跟随知识库 |
| 检索需求 | “你上次说过什么?” | “文档里怎么说的?” |
| 代表系统 | mem0、DB-Agent-Memory、Letta | WeKnora、RAGFlow、Dify |
重叠区域分析
Memory 和 RAG 在三个区域存在功能重叠 [已有]:
重叠 1:提炼后事实
Memory 侧:DB-Agent-Memory 的 L1 原子事实(”用户偏好 TypeScript”),mem0 的扁平事实,Claude Code 的 topic.md。
RAG 侧:WeKnora 的知识图谱节点,RAGFlow 的文档问答提炼。
冲突场景:Agent 从对话中学到”项目 X 用 Redis”(Memory L1),但公司文档更新了”项目 X 迁移到 Memcached”(RAG)。谁为准?
建议:RAG 数据通常由管理员维护,更权威但更新可能滞后。Memory 数据来自最新对话,时效性好但可能是临时状态。解决方案是给两者的事实标注时间戳和数据源,查询时做交叉验证。
重叠 2:知识图谱
Memory 侧:Graphiti 的时序知识图谱,supermemory 的 Memory Graph。
RAG 侧:WeKnora 的知识图谱,cognee 的 Ontology 驱动图。
区别:Memory 的图是对话驱动的——实体和关系来自与用户的交互历史。RAG 的图是文档驱动的——实体和关系来自结构化文档解析。两者的图模式(schema)可能不同,合并需要实体对齐。
重叠 3:知识生命周期管理
Memory 侧:Claude Code 的 autoDream(整合去重),Codex 的 Phase2(全局合并),DB-Agent-Memory 的 L2→L3 蒸馏。
RAG 侧:WeKnora 的自维护 Wiki(wiki/inspector.go 巡检过期/矛盾内容)。
观察:WeKnora 的自维护机制从 RAG 侧越过了边界——”主动发现过期知识”本质上是记忆系统的”遗忘/淘汰”功能。DB-Agent-Memory 目前缺少这个能力(无时序维度),可以借鉴 WeKnora 或 Graphiti 的做法。
能否用 RAG 替代 Agent Memory?
结论:不能。
三个核心理由:
理由 1:个性化粒度不同
RAG 系统的知识库是共享的——所有用户看到同一份文档。Memory 是个性化的——每个用户/项目有独立的记忆。用 RAG 存储”用户 A 偏好 4 空格缩进”需要为每个用户建独立的知识库分区,这在 RAG 系统中不是自然的设计。
理由 2:写入触发机制不同
RAG 的写入是人工管理的(上传文档 → 切片 → 索引),而 Memory 的写入是自动的(对话产生 → Agent 提取 → 持久化)。如果用 RAG 替代 Memory,每次对话后都需要触发一次”文档摄入”流程,这在延迟和复杂度上不可接受。
理由 3:时效性要求不同
Memory 需要实时反映最近的交互(”刚才用户说了什么”),RAG 通常有分钟到小时级的索引延迟。用 RAG 做 Memory 意味着刚说过的话可能还没被索引就已经被 compaction 丢失了。
反例:可以用 Memory 替代简单 RAG 吗?
在某些场景下可以——如果”知识库”就是用户自己的对话历史(如个人助理记住用户的所有偏好),那 Memory 系统(如 mem0、DB-Agent-Memory)足以胜任,不需要额外的 RAG 系统。但如果需要检索大量外部文档(技术文档、产品规格),Memory 系统的容量和检索能力不足以替代专业 RAG。
互补模型
flowchart TB
subgraph input["信息输入"]
CONV["对话流"]
DOCS["外部文档"]
end
subgraph memory["Memory 系统"]
MEM_WRITE["自动提取<br/>extractMemories / Phase1 / flush"]
MEM_STORE["持久存储<br/>memdir / SQLite / 文件"]
MEM_READ["按需检索<br/>语义匹配 / 全量注入"]
end
subgraph rag["RAG 系统"]
RAG_INGEST["文档摄入<br/>切片 / 嵌入 / 索引"]
RAG_STORE["知识库<br/>向量 DB / 图 DB"]
RAG_SEARCH["混合检索<br/>BM25 + 向量 + 图"]
end
CONV --> MEM_WRITE --> MEM_STORE --> MEM_READ --> AGENT[Agent]
DOCS --> RAG_INGEST --> RAG_STORE --> RAG_SEARCH --> AGENT
MEM_READ -.->|"交叉验证"| RAG_SEARCH
最佳实践:Memory 和 RAG 应该是互补关系,而非替代关系。Agent 同时具备两种能力时——从 Memory 中获取个性化上下文(”用户偏好”“历史交互”),从 RAG 中获取权威知识(”文档规范”“最佳实践”)——回答质量最高。
局限性
- 重叠区域分析基于现有项目的推导:实际生产环境中的冲突频率和严重程度未经验证
[推导]。 - “不能替代”的结论基于当前技术水平:未来 RAG 系统若支持实时索引 + per-user 分区,边界可能模糊
[推导]。 - WeKnora 自维护 Wiki 与 Memory 遗忘机制的类比为概念层面:代码实现差异可能很大
[已有]。
证据等级汇总
| 论点 | 证据等级 |
|---|---|
| Memory vs RAG 系统性对比 | [已有] 多篇精读推导 |
| WeKnora 自维护 Wiki 越界分析 | [已有] deep-dive-weknora.md |
| DB-Agent-Memory L1 事实与 RAG 知识图谱重叠 | [已有] deep-dive-tencentdb-agent-memory.md |
| RAG 不能替代 Memory 的三个理由 | [推导] 基于架构分析 |
| tRPC-Agent-Go Fact/Episode Memory | [已有] deep-dive-trpc-agent-go.md |