7m read
生产级 Agent 记忆系统架构设计
agentarchitectureai
综合 Mem0 / MemGPT / Zep / A-MEM / MemEngine / Memory-as-Metabolism 等主流方案的研究总结。
为什么不能只靠上下文窗口
| 问题 | 数据 |
|---|---|
| 成本失控 | 保留 7 天完整对话日志 ≈ 300× 新请求的 token 消耗 |
| 延迟爆炸 | 上下文超 512K token 后首 token 延迟 > 2s |
| "中间遗忘" | 100 万 token 窗口,早期信息召回准确率降至 35% 以下(Stanford 研究) |
| 事实混淆 | 全量注入历史对话,跨用户信息污染风险提高 3× |
堆上下文不是长久之计,记忆得分层。
分层记忆架构
主流方案通常参考人类认知,分成 3~4 层:
| 层级 | 人类对应 | 时间尺度 | 容量 | 存储实现 |
|---|---|---|---|---|
| 工作记忆 (Working) | 前额叶 | 秒~分钟 | 4K~8K tokens | Prompt 窗口 / 滑动摘要 |
| 情节记忆 (Episodic) | 海马体 | 天~周 | 大量 | 带时间戳的事件记录 + 向量嵌入 |
| 语义记忆 (Semantic) | 大脑皮层 | 持久 | 无上限 | 知识图谱 + 向量库 |
| 感知缓存 (Sensory) | 感觉记忆 | <1s | ~7±2 单元 | Ring buffer |
记忆流动方向
text用户输入 → 感知缓存 → 工作记忆(当前上下文) ↓ 会话结束 情节记忆(时间戳事件) ↓ 高频访问/蒸馏 语义记忆(结构化事实,长期持久)
Mneme 的例子(GitHub: CVPaul/mneme)
textLedger — Facts (长期) ← 项目生命周期 Beads — Tasks (中期) ← 跨会话 OpenCode — Execution(短期) ← 单会话内
核心操作:记录与检索
记忆写入流程:
text对话 → LLM 提取事实 → 向量化 → 混合存储 ├→ 向量库(语义搜索) ├→ 图数据库(关系遍历) └→ 操作日志(审计/回滚)
检索(Retrieve)
text用户查询 → 向量化 → 语义检索(候选×N) ↓ 图关系补充 → Reranker 重排序 → 注入上下文
Mem0 的原子操作
Mem0(ECAI 2025)把记忆更新拆成四种操作,由 LLM 判断:
| 操作 | 触发条件 |
|---|---|
| ADD | 不存在语义等效记忆 |
| UPDATE | 候选事实提供补充信息 |
| DELETE | 存在矛盾 |
| NOOP | 已存在或不相关 |
DELETE 不是物理删除,而是标记无效,保留历史版本做时序推理。
两阶段增量处理
- 提取(Extraction):用对话摘要 + 最近 m 条消息 + 当前消息对,让 LLM 抽候选事实
- 更新(Update):把候选事实和最相似的 s 条已有记忆比对,LLM 决定 ADD/UPDATE/DELETE/NOOP
存储方案
混合架构
| 组件 | 技术 | 用途 |
|---|---|---|
| 向量数据库 | pgvector / Qdrant / Milvus / ChromaDB | 语义相似搜索 |
| 知识图谱 | Neo4j / Apache AGE / NebulaGraph | 实体关系与多跳推理 |
| 关系型数据库 | PostgreSQL | 元数据与结构化查询 |
阿里云三位一体方案:PostgreSQL + pgvector + Apache AGE,事务、向量、图在同一个库里。
选型考量
| 维度 | 建议 |
|---|---|
| 语义搜索 | HNSW 索引,召回候选数 N×3~5,Reranker 后截断 Top-K |
| 热数据 | Redis 缓存高频记忆,P99 < 10ms |
| 冷数据 | 压缩存储,ZFS 自动压缩可省 30% 空间 |
| 成本 | 模型分层:轻量场景 BGE-small,专业领域 BGE-large |
生产环境需要考虑的机制
记忆巩固(Consolidation)
情节记忆被频繁访问后,用 LLM 摘要蒸馏,提升为语义记忆长期存储。
Microsoft Research(arXiv 2605.08538)提出五因子重要性评分:
| 因子 | 权重 | 说明 |
|---|---|---|
| 近因性 (Recency) | 0.25 | 越近越重要 |
| 频率 (Frequency) | 0.25 | 被检索次数 |
| 贝叶斯惊奇 (Surprise) | 0.20 | 与预期的偏差 |
| 实体显著性 (Salience) | 0.15 | 涉及的核心实体 |
| 结果 (Outcome) | 0.15 | 任务成功/失败 |
评分后:top 20% 提升 → 中间 60% 保留 → 底部 20% 修剪。去重后保留精度 97.2%,存储减少 58%。
遗忘机制
遗忘不是 bug,而是需要主动设计的机制。不遗忘的系统会被过时信息干扰,检索精度反而下降。
| 机制 | 实现 | 参数 |
|---|---|---|
| 指数衰减 | relevance = initial × exp(-λ × t) | λ=0.001,半衰期 ~29 天 |
| 干扰遗忘 | 共享特征越多的记忆,遗忘越快 | 回溯权重 0.6,前摄 0.4 |
| LRU 淘汰 | 缓冲区上限触发最早淘汰 | 按层可配 |
| 保真度降级 | L0(100%) → L5(墓碑 0%),由年龄+分数触发 | 6 个等级 |
记忆再巩固(Reconsolidation)
记忆被检索后进入可修改窗口(默认 60 分钟),这期间:
- 新信息可以融进已有记忆
- 矛盾触发冲突解决
- 成功结果强化记忆,错误也被保留为学习信号
记忆引力(Memory Gravity)— Memory-as-Metabolism
有些记忆不是因为"对"才被保留,而是因为删掉它会引发级联断裂,结构上缺不得。
三条力量分开控制:引力保护结构承载项(不衰减),效用驱动活力衰减,审计在发现某条目其实不承载结构时剥掉保护。
双调度器架构
| 路径 | 内容 | 延迟要求 |
|---|---|---|
| 热路径 | 读取 + 写入(TRIAGE 过滤) | 必须在对话延迟预算内 |
| 睡眠周期 | DECAY / CONSOLIDATE / AUDIT | 后台批处理 |
两者混用是最常见的实现失败。
主流方案对比
| 方案 | 核心思路 | 存储 | 性能亮点 | 局限 |
|---|---|---|---|---|
| Mem0 | 两阶段增量 + 原子 CRUD | 向量 + 图(Neo4j) | p95 延迟 1.44s,token 省 90%+ | 图版延迟翻倍 (~2.6s) |
| MemGPT / Letta | LLM 自主调度内存分页 | 虚拟上下文窗口 | 理念先进 | 延迟 500ms+ |
| Zep | 时序知识图谱,双时态 | 图(Neo4j) | 检索快 60%,比 Mem0 准确率高 17% | 图构建需数小时 |
| A-MEM (NeurIPS 2025) | Zettelkasten 方法,动态索引链接 | 结构化笔记 + 连接图 | 新记忆自动更新已有记忆 | 较新,生态待完善 |
| Mem-agent | Markdown 记忆 + 强化学习 | 文件系统 (Obsidian 风格) | Qwen3-4B 4bit 仅 2GB,效果 +35.7% | 容量受限 |
| MemEngine | 统一模块化库,可插拔记忆模型 | 多后端 | 实现 10+ 已发表模型 | 库层面,非独立系统 |
性能对比(LOCOMO 基准)
| 系统 | J 得分 | p95 延迟 | Token 消耗 |
|---|---|---|---|
| Mem0g | 68.44% | 2.59s | ~14k |
| Mem0 | 66.88% | 1.44s | ~7k |
| 全上下文 | — | 17.12s | 极高 |
| LangMem | — | 59.82s | — |
设计原则
- 摄入和整合分开:实时路径只做浅层过滤,深度处理扔给后台批处理
- 上下文窗口是工作台,不是仓库:靠检索填充,不要全量 dump
- 纯文本为主、嵌入为辅:模型一换,嵌入可能失效,纯文本至少还能看懂
- 遗忘是特性:不遗忘的系统会被过时信息拖垮
- 记忆系统要能和模型权重分离:这也是安全承诺
- 记忆污染比没记忆更可怕:错误记忆会反复误导
- 重复三次就值得固化:同一模式被三次检索并确认有用,可以蒸馏成语义记忆
常见踩坑
| 坑 | 现象 | 解法 |
|---|---|---|
| 热路径跑批处理 | 对话延迟抖动 | 摄入与整合严格分离 |
| 只靠向量检索 | 多跳关系问题无法回答 | 向量 + 图 + 关键词混合检索 |
| 不设 token 预算 | 上下文膨胀,成本失控 | 注入上下文设硬上限 |
| 不做冲突检测 | 新旧矛盾信息共存 | UPDATE 时对比已有记忆 |
| 向量模型不更新 | 检索精度持续下降 | 定期重新嵌入 |
| 不做租户隔离 | 跨用户记忆泄露 | namespace/userId 维度隔离 |
参考来源
- Mem0: Building Production-Ready AI Agents with Scalable Long-Term Memory (ECAI 2025) — arXiv 2504.19413
- A-MEM: Agentic Memory for LLM Agents (NeurIPS 2025) — arXiv 2502.12110
- Memory as Metabolism: A Design for Companion Knowledge Systems — arXiv 2604.12034
- Human-Inspired Memory Architecture for LLM Agents (Microsoft Research) — arXiv 2605.08538
- MemEngine: A Unified and Modular Library (WWW 2025) — arXiv 2505.02099
- 阿里云 AI Agent 长期记忆系统选型指南 — developer.aliyun.com