AI Agent 的记忆力之战:为什么架构比模型大小更重要

0 阅读20分钟

最近在做一个跨会话的客服 Agent 项目时,我踩了一个大坑。Agent 在单轮对话里表现很好,但一旦对话跨越多个 session——用户上周提过的偏好、三天前反馈的 bug、上个月确认的需求——Agent 就像失忆了一样,要么完全想不起来,要么记错时间,要么把张三的事情安到李四头上。

我一度以为是模型能力不够,想换更大的模型。直到看到一组让我震惊的数据:一个 20B 参数的开源模型,搭配 Hindsight 的记忆架构,在 LongMemEval 基准测试上跑出了 83.6% 的准确率——而全上下文的 GPT-4o 只有 60.2%。

一个小四倍的模型,靠记忆架构的优势,把最强的商业模型甩了 23 个百分点。

那一刻我意识到,AI Agent 的瓶颈不在模型的"智商",而在"记忆力"。而记忆力的好坏,取决于你怎么设计记忆系统的架构,而不是你用多大的模型。

这篇文章是我花了两个多月深入研究 AI Agent 记忆系统之后的系统性总结。我会从基准测试讲起(理解这个领域的评估标准),然后拆解五个最有代表性的记忆框架(Hindsight、Zep/Graphiti、MemGPT/Letta、Mem0、Cognee),分析它们的架构差异和性能表现,最后提炼出几个可以指导实际选型的架构模式。

先搞清楚怎么衡量"记忆力"

LongMemEval:当前的金标准

要讨论谁的记忆系统更好,先得有一把靠谱的尺子。目前行业公认的金标准是 LongMemEval,由 Wu 等人发表、被 ICLR 2025 接收。

LongMemEval 测试五种核心能力:信息提取(能不能准确找到之前提到的事实)、多会话推理(能不能跨多个对话关联信息)、时间推理(能不能处理"上个月"、"三周前"这样的时间相关查询)、知识更新(当信息发生矛盾时能不能正确处理)、以及拒绝回答(不确定的时候能不能说"我不知道"而不是瞎编)。

测试集规模也很硬核:500 个人工标注的问题,对话长度从约 115K token(LongMemEval_S)到 150 万 token(LongMemEval_M)。用 LLM-as-judge 来评分,整个评估框架分为三个阶段:索引 → 检索 → 阅读。

在这个测试上,商业聊天助手普遍出现 30-60% 的准确率下降。全上下文的 GPT-4o 也只能跑到 60-64%。这个数字说明一个残酷的现实:把整个对话历史塞进上下文窗口并不等于"有记忆"。 上下文窗口越长,模型反而越容易在海量信息中迷路。

其他值得关注的基准

LoCoMo(ACL 2024,Snap Research / UNC Chapel Hill)测试长期对话记忆,包含 10 段约 300 轮的对话,评估单跳 QA、多跳推理、时间推理和对抗性问题。它是目前使用最广泛的基准之一,但有一个让行业头疼的问题:Mem0 和 Zep 两家公司在 LoCoMo 上的评分存在公开争议——双方互相指责对方的实现有误,导致 LoCoMo 的排行榜在跨厂商对比时可信度打折扣。

MemBench(ACL 2025)区分了"事实性记忆"(明确说过的信息)和"反思性记忆"(隐含推导的信息),这个区分很有意思。MemoryAgentBench(ICLR 2026)测试四个维度——准确检索、测试时学习、长程理解和冲突解决——发现没有任何现有方法在所有四个维度上都表现优秀。

所有基准测试有一个共识:时间推理是最难的能力。它在所有基准上都展示了系统和人类之间最大的性能差距——在 LoCoMo 上差距高达 73%。不显式建模时间的系统,在所有基准上的得分都不好。

五大框架深度拆解

Hindsight:四路并行检索打破 90%

Hindsight 是 Vectorize 公司在 2025 年 12 月发布的开源记忆系统(MIT 许可证),目前在 LongMemEval 上保持着 91.4% 的最高分(使用 Gemini-3 Pro),同时在 LoCoMo 上也达到了 89.61%。用开源 20B 模型跑也能到 83.6%,用 120B 开源模型跑到 89.0%。这些数字远远领先于其他所有系统。

说它的架构之前,先说一个让我特别佩服的设计决策:它把记忆分成了四个逻辑上独立的网络——世界事实、Agent 经验、实体观察和演化中的观点/信念。 这不是随便分的,它的目的是实现"认知清晰度"——在结构上区分证据和推理。当 Agent 形成一个观点时,这个观点和支撑它的事实被存在不同的地方,并且附带一个置信度评分。

这解决了一个实际中非常头疼的问题:如果你把"张三说他喜欢红色"(事实)和"张三可能是个热情的人"(推断)存在同一个地方,模型很容易把推断当成事实来引用。分开存储之后,模型在回答"张三说过什么?"和"你觉得张三是什么样的人?"这两类问题时,可以从不同的记忆库里取信息。

但 Hindsight 最核心的性能优势来自它的四路并行检索策略

  1. 余弦语义相似度:标准的向量搜索,找语义上相关的记忆
  2. BM25 关键词匹配:传统的全文检索,抓住向量搜索可能漏掉的精确匹配
  3. 图遍历:在共享的记忆图上做关系遍历,找到多跳关联
  4. 时间推理:基于时间维度的检索,理解"上周"、"合并之前"这样的时间表达

这四路检索并行执行,结果通过交叉编码器(cross-encoder)重排序后融合。

为什么多策略检索这么重要?因为不同类型的查询需要不同的检索方式。"张三说了什么?"用语义搜索就行。"那个叫 TechCorp 的公司"用 BM25 关键词匹配更准确(嵌入搜索可能会返回语义相似但名字不同的公司)。"张三和李四之间是什么关系?"需要图遍历。"上个季度发生了什么?"需要时间检索。

单一策略无论多好,都只能覆盖一部分查询类型。Hindsight 用四路并行覆盖所有类型,让重排序器来决定最终结果。

在时间推理这个最难的维度上,Hindsight 从 31.6% 的基线提升到了 91.0%——将近 60 个百分点的提升。它通过存储双时间戳实现这一点:occurrence time(事实发生的时间)和 mention time(Agent 得知该事实的时间)。这让系统能同时回答"2024 年发生了什么?"和"我最近学到了什么?"这两种完全不同的时间查询。

2026 年 3 月,Hindsight 密集发布了一系列集成:MCP Server(兼容 Claude、Cursor 等 MCP 工具)、OpenClaw 集成、Pydantic AI 支持、Ollama 集成。这让它从一个研究项目变成了一个可以实际落地的工具。

Zep / Graphiti:把时间当成一等公民

Zep 的核心引擎叫 Graphiti(Apache 2.0,GitHub 24K+ 星),它构建了一个形式化定义的图 G = (N, E, ϕ),分为三个层级:

  • Episode 子图:存储原始对话轮次,不做压缩——这是"原始证据"
  • 语义实体子图:提取的实体和它们的关系——这是"持久知识"
  • 社区子图:通过标签传播算法聚类强关联实体,生成高层摘要——这是"结构化认知"

这三层映射了心理学上的情景记忆(episodic memory)和语义记忆(semantic memory)的区分。

Graphiti 最重要的创新是它的双时态数据模型(bi-temporal model)。每条实体边记录四个时间戳:

  • valid_at:事实在现实世界中变为真的时间
  • invalid_at:事实被新信息取代的时间
  • created_at:Graphiti 录入该记录的时间
  • expired_at:该记录被逻辑替换的时间

这使得系统可以做"时间点查询"——"截至去年三月,我们对 X 的认知是什么?"在企业合规场景中,这种审计追踪能力非常关键。矛盾的事实不是被删除,而是被标记为无效(invalidated),完整的时间记录被保留下来。

检索管线使用三种并发策略:余弦相似度、BM25 全文搜索、从种子节点出发的广度优先图遍历。关键的一点是:检索阶段不调用任何 LLM——所有计算都是预先完成的,通过向量、BM25 和图索引实现。这让检索延迟可以做到亚 200 毫秒到亚秒级(Zep Cloud P95 约 300ms)。

在基准上,Zep 在 LongMemEval 上跑到 71.2%(GPT-4o),在 LoCoMo 上自称 75.14%(在纠正了 Mem0 评估中的"实现错误"之后)。在 MemGPT 自己的 Deep Memory Retrieval 基准上,Zep 得了 94.8-98.2%,超过了 MemGPT 本身。

Graphiti 的主要代价是构建成本高:大型语料的图构建可能需要数小时,因为实体提取、解析和关系推理需要多次 LLM 调用。Mem0 团队的测试发现 Zep 的记忆占用超过 60 万 token 每个对话(对比 Mem0 的 1,764 token),而且刚入库的记忆有时检索不到——要等后台图处理完成后才能正确返回。

这是一个经典的 richness vs latency 权衡:你想要多丰富的知识表示?你愿意为此等多久?

MemGPT / Letta:把记忆当操作系统来管

MemGPT(UC Berkeley,ICML 2024)提出了一个最有想象力的类比:LLM 管理自己的记忆,就像操作系统管理虚拟内存。 上下文窗口是"物理 RAM",外部数据库是"磁盘",Agent 通过函数调用在两者之间换入换出数据。

这个概念后来被生产化为 Letta(Apache 2.0,约 20.9K GitHub 星),由原来伯克利的研究者支撑。

记忆层级分三层:

  • 核心记忆(类似 RAM) :大小有限的读写文本块,通常包含一个"human"块(存储用户事实)和一个"persona"块(Agent 的自我概念),各约 2K 字符
  • 回忆记忆:所有消息的完整、未压缩历史,作为可搜索的数据库
  • 存档记忆:通用长期存储,后端是 PostgreSQL + pgvector,支持 HNSW 索引的语义搜索

最有特色的设计是自主记忆操作。Agent 自己决定什么时候存、存什么、存在哪里——通过显式函数调用:core_memory_appendcore_memory_replacememory_rethink(重写整个记忆块)、archival_memory_searcharchival_memory_insert。连给用户发消息都是一个函数调用——没有"原生聊天模式"。

当上下文使用率达到约 70% 时,系统会给 Agent 一个"内存压力"警告,让它有机会保存关键信息。到 100% 时强制换出,被换出的消息通过递归摘要压缩。

2025 年 4 月的 Sleep-time compute 论文解决了 MemGPT 的主要弱点——记忆管理消耗用户面对面的延迟。背景"睡眠 Agent"在空闲期间用更强/更慢的模型处理信息,产出精炼的"学习上下文"写入共享记忆块。这把记忆管理从对话中分离出来,同时改善了记忆质量和响应延迟。

Letta 有一个很有意思的发现:一个简单的文件系统方案(Agent + 文件工具)在 LoCoMo 上跑出了 74.0%(GPT-4o-mini),超过了 Mem0 的最佳分数 68.5%。 这说明 Agent 的能力有时候比底层记忆基础设施的复杂度更重要。给 LLM 一个能迭代搜索、阅读和组织自己记忆的能力,可能比精心设计的存储引擎更有效。但代价是记忆操作消耗 token,而且高度依赖底层模型的指令遵循能力。

Mem0:务实派的选择

Mem0 是这个领域里走得最务实的:Y Combinator 背景,2025 年 10 月融了 2400 万美元,GitHub 约 48K 星。它的核心是一个两阶段的提取-更新管线:

提取阶段:把对话摘要、最近 10 条消息和新消息组合起来,用 LLM 提取候选记忆事实。

更新阶段:对每个新事实,检索语义上最相似的前 10 条已有记忆,让 LLM 通过函数调用决定四种操作之一——ADD(新增)、UPDATE(更新现有)、DELETE(删除矛盾)、NOOP(不操作)。

这个冲突解决完全委托给 LLM——没有产品层的编排逻辑,灵活但不透明。

可选的图模式(Mem0ᵍ)在 Neo4j 里存实体和关系,支持实体中心搜索和语义三元组搜索。向量和图操作通过 Python 的 concurrent.futures.ThreadPoolExecutor 并行执行。存储后端支持 24+ 种向量存储(默认 Qdrant)和 5+ 种图存储(默认 Neo4j)。

Mem0 在 LoCoMo 上跑到 66.9-68.5%(基础版和图增强版),延迟表现很好——P95 1.40 秒,远低于全上下文方案的 17 秒和 LangMem 的 60 秒。但在 LongMemEval 上只有约 49%,暴露了单策略/双策略语义检索在面对多样化查询类型时的局限。

坦白说,对于很多场景来说 Mem0 已经够用了。如果你的需求主要是"记住用户偏好并在相关时刻浮现出来"——用户喜欢暗色模式、上次买了某个产品、之前说过不喜欢某种风格——Mem0 的语义搜索完全胜任,你不需要四路检索策略来记住这些。

Mem0 的问题出在更复杂的场景: "团队在一月到三月之间对 API 重设计做了什么决定?" 这种查询需要时间推理、实体解析和多跳遍历,Mem0 的架构天然不擅长。

Cognee:用认知科学和本体论的思路做记忆

Cognee(Topoteretes,柏林,2026 年 2 月获 750 万美元种子轮,约 12K GitHub 星)构建了最丰富的知识表示,通过三存储架构——图(Kuzu)、向量(LanceDB)和关系(SQLite)——全部默认基于文件存储,零基础设施即可本地运行,可切换到生产级数据库。

它最独特的地方在于两点。

第一是本体论验证层。Cognee 使用 RDF/OWL 本体来规范化提取的实体——通过 Python 的 difflib 模糊匹配,把"汽车制造商"、"automobile maker"、"vehicle producer"统一到同一个规范节点。这大幅减少了图的碎片化——如果没有这层规范化,同一个概念的不同表达会变成图中的不同节点,导致知识检索时漏掉关联。

第二是14 种检索模式。从基础 RAG 到图补全 + 思维链推理、自然语言到 Cypher 翻译、时间搜索、甚至一个"I'm feeling lucky"模式让 LLM 自动选择最佳策略。默认的 GRAPH_COMPLETION 模式先用向量搜索找到相关的图三元组,然后遍历图获取结构化上下文——这跟传统的"返回 top-k 相似块"根本不是一回事。

Cognee 还有一个叫 memify() 的后处理管线,灵感来自认知科学:修剪过时的节点、加强频繁访问的连接、添加衍生事实、优化嵌入。在 HotPotQA 上,思维链图遍历比基础配置的精确匹配分数提升了 1618%。

不过要注意,Cognee 的基准测试主要是自报的,独立第三方验证还比较有限。

五个架构模式:赢家的共同特征

跟踪完这些框架之后,我试着提炼出一些跨系统的规律。以下是我认为最重要的五个模式。

模式一:多策略检索是最大的单一差异化因素

这个结论的数据支撑非常强。在 LongMemEval 上:

  • Hindsight 四路策略(语义 + BM25 + 图 + 时间)+ 交叉编码器重排序 → 91.4%
  • Zep 三路策略(余弦 + BM25 + BFS) → 71.2%
  • Mem0 一到两路策略(向量 + 可选图) → 49.0%

这个相关性几乎是线性的:更多样的检索策略产生更好的结果。原因很直觉——BM25 能捕捉到嵌入搜索漏掉的精确匹配;图遍历能发现扁平相似度看不到的多跳连接;时间过滤能防止返回过时的事实。

如果你只能从这篇文章里带走一个结论,就是这个:不要只用向量搜索做记忆检索。 至少加上 BM25 做关键词匹配,如果有条件的话加上图遍历。

模式二:图结构是复杂推理的必要条件,但向量搜索仍然重要

Zep(71.2%,图原生)和 Mem0(49.0%,向量为主)在 LongMemEval 上的 22 个百分点差距,直接反映了纯向量方案在多跳、时间和关系查询上的局限。

但图也不是万能的——纯图检索会漏掉没有显式边连接但语义上相关的内容。所有表现最好的系统都用混合存储。用什么图数据库反而没那么重要——Neo4j、FalkorDB、内存图都出现在高性能系统中。

模式三:时间建模与最大的性能提升相关

时间推理在每个基准测试上都展示了系统与人类之间最大的差距。有显式时间建模的系统——Hindsight 的双时间戳、Zep 的双时态模型、Cognee 的时间搜索模式——在时间查询上比没有时间建模的系统高 20-60 个百分点。

Mem0 的基础时间戳和 LangMem 的最小时间感知(LoCoMo 时间问题上 23.4%)是反面例子。

模式四:主动记忆整合防止规模化时的性能退化

只做"积累"不做"整理"的系统,随着记忆增长会被噪声淹没。高性能系统都有某种形式的整合机制:

  • Hindsight 的 reflect 操作根据新证据更新信念
  • Zep 把矛盾的事实标记为无效而不是删除(保留历史同时防止检索过时信息)
  • Cognee 的 memify 管线修剪过时节点、加强频繁连接
  • Letta 的 sleep-time compute 在后台做记忆精炼
  • Mem0 的 LLM 驱动的 ADD/UPDATE/DELETE/NOOP 也提供了整合能力,但结构化程度较低

模式五:Agent 控制的记忆有时候比专门的基础设施更有效

Letta 的那个发现值得每个做记忆系统的人思考:一个简单的"Agent + 文件工具"方案在 LoCoMo 上跑了 74.0%,超过了 Mem0 的专门记忆基础设施(68.5%)。

这说明给 LLM 一个能力——让它自己迭代搜索、阅读和组织记忆——有时候比底层存储系统的复杂度更重要。但这种方案也有明显的代价:记忆操作消耗 token(慢且贵),而且对底层模型的指令遵循能力高度依赖。

三个未解的根本性权衡

丰富度 vs 延迟

Zep 的图构建产出了最丰富的知识表示,但大型语料的入库可能需要数小时。Mem0 的轻量提取几乎是即时的,但丢失了关系结构。你能接受多长的入库延迟?你需要多丰富的知识表示?这两个问题的答案决定了你应该偏向哪一端。

自主性 vs 确定性

MemGPT/Letta 的 Agent 控制记忆最大化了灵活性,但行为不确定、依赖模型能力。Zep 的预计算检索快速且可预测,但适应性差。对于生产环境来说,你需要在"Agent 可以灵活地管理自己的记忆"和"我能预测系统在任何输入下的行为"之间找到平衡。

完整性 vs 压缩

Zep 在提取知识的同时保留了原始对话(非有损但存储密集)。Mem0 只提取"重要"事实(高效但可能丢失细微信息)。你能承受多大的存储成本?你愿意冒多大的信息丢失风险?

如果你在做选型,怎么选

聊了这么多技术细节,最后落到实操上。根据我的理解,不同场景的推荐如下:

你的需求是简单的用户个性化——记住偏好、历史交互、行为模式——用 Mem0。它最简单、延迟最低、生态最丰富,而且这类查询不需要复杂的检索策略。48K GitHub 星的社区和 Y Combinator 背书也意味着长期维护有保障。

你需要深度的时间推理和关系建模——"这个季度和上个季度的策略有什么变化?"、"谁在什么时候做了什么决定?"——用 Zep / Graphiti。没有其他框架在时间知识图方面能跟它匹敌。代价是复杂度高、入库慢,但如果你的场景需要审计追踪和时间回溯,这是唯一的选择。

你追求最高的检索准确率,能接受一个相对年轻的系统——用 Hindsight。91.4% 的 LongMemEval 分数是任何其他系统都达不到的。四路检索 + 四网络记忆架构在架构上是最完整的。MIT 开源、支持 MCP/OpenClaw/Ollama,2026 年 3 月的集成生态已经相当可用。

你想让 Agent 自主管理记忆,不用外部系统——用 Letta。操作系统式的记忆管理理念独一无二,sleep-time compute 解决了延迟问题。但要理解你买入的是一个完整的 Agent 运行时,不仅仅是一个记忆层。

你做的是知识密集型的 RAG 应用,需要最丰富的知识表示——看看 Cognee。它的本体论验证和 14 种检索模式在知识图谱质量上做得最深。但自报的基准得分需要打一个问号。

这个领域正在收敛

回顾完这些框架和数据,我的一个整体判断是:AI Agent 记忆系统的架构正在收敛到一个模板上——混合向量+图存储、多策略检索+重排序、显式时间建模、主动记忆整合。Hindsight 的 91.4% 是这个模板的最佳实现。

剩下的开放问题不是"用什么架构",而是"怎么让这种架构在经济上可行"。Hindsight 的四路并行检索加交叉编码器重排序成本不低;Zep 的图构建在入库时需要大量 LLM 调用。下一个突破很可能来自让这些丰富的架构变得更便宜更快,而不是来自根本不同的方法。

对于正在做 AI Agent 开发的工程师来说,一个直接可行的建议是:至少从向量搜索升级到向量 + BM25 的混合检索。这是投入产出比最高的一步——实现简单(BM25 库几行代码就能加上),但效果提升显著。如果你的 Agent 需要处理多会话、时间相关的查询,再考虑加上图和时间建模。

AI 的"智商"已经通过大模型竞赛被推到了很高的水平。但"记忆力"这个瓶颈才刚刚开始被认真对待。从 2024 到 2026 年,至少七个主要基准、十几个严肃的开源框架、和一个清晰的架构共识正在形成。这个领域正在快速成熟,现在入场的时机刚刚好。

本文的数据来自 LongMemEval(ICLR 2025)、LoCoMo(ACL 2024)、Hindsight(arXiv 2512.12818)、Zep/Graphiti(arXiv 2501.13956)等公开论文,以及各框架的 GitHub 仓库和官方文档。性能数字以各自最新发布的版本为准。如果你在生产中使用了这些记忆框架,欢迎在评论区分享你的真实体验。