怎样才算是好的 Agent 记忆系统?

前言

记忆系统(Memory System)是 Agent 保持多轮任务连贯性的核心组件,解决了模型上下文窗口有限的问题。它把 Agent 历史交互上下文保存起来,并在必要时召回,让 Agent 具备了人类的记忆能力。

市面上的记忆系统很多,采用的技术也各不相同。

它们总说自己是最好的,但真的这样吗

对好坏的评价,目前业界更多的把效果,即 Agent 任务成功率,作为唯一的标准,忽略了时延、成本等关键系统因素

如果你增加 100% 的成本才换来 5% 的成功率提升,这通常不会被看作是个好的设计。

本文首先会介绍记忆的生命周期。然后从系统架构、记忆存储、记忆构建、记忆检索、记忆维护等六个维度对比当前主流记忆系统的技术实现。

通过多维度的综合考虑,尝试探讨到底怎样才算是好的 Agent 记忆系统。

记忆系统的实现方式

记忆的生命周期

记忆系统中,记忆的生命周期大致是这样的:

  1. 记忆摄入:Agent 把交互上下文输入给记忆系统。

  2. 记忆构建:将交互上下文转换记忆单元,可以是简单的分块,也可以基于 LLM 做摘要。

  3. 记忆存储:把记忆单元存储到存储系统中,并完成索引更新。

  4. 记忆检索:Agent 调用记忆系统接口,检索出相关记忆,追加到 Prompt 中发给 LLM 做生成。

  5. 记忆维护:更新记忆,完成不同记忆之间的流转、遗忘。 不同的记忆系统使用不同的技术实现这套流程。

系统架构的分类

朴素架构

最朴素的记忆系统实现是,记忆构建时把原始上下文原封不动保存下来,并在此之上建立索引。

Agent 每次访问 LLM 前都根据用户问题在记忆系统中找到 top-k 个相似记忆,追加到 Prompt 中。

朴素架构的主要问题是,原始上下文可能有大量的冗余和噪声,导致记忆效果并不好

可以引入 LLM 解决这个问题。

基于 LLM 的架构

在该架构里,LLM 会被用作记忆抽取,比如对原始上下文做摘要、提取事件、提取实体+关系用于构建图索引等。

另外,LLM 也可以被用作记忆调度,根据用户的原始问题,做意图分析,提炼成更精确的子查询,从而提升检索效果。

目前为止,不管是朴素的架构还是基于 LLM 的架构,记忆更新和检索流程都是固定的。

然而,并非所有的任务、问题都需要用到记忆。这种固定流程有时反而会成为一种负担

基于 Agent 的架构

基于 Agent 的架构会把记忆更新和记忆检索做成工具,由 Agent 自己判断是否需要调用

当然,Agent 判断是否需要工具调用也会有额外的成本。

记忆存储的分类

平铺型记忆

平铺型记忆存储下,原始上下文会被分块或 LLM 提取成独立的记忆单元,随后建立向量、全文等索引,存储在文件系统和数据库中。

平铺型记忆的问题是,记忆单元之间缺少关联关系,无法应对多跳推理等场景

关系型记忆

可以基于图或者树来构建关系型记忆,把割裂的记忆单元关联起来。这时,普通的分块已经无法满足,需要用到模型做实体、关系的抽取

混合型记忆

平铺型记忆具备更好的语义/关键字匹配,关系型记忆则能让孤立的记忆关联起来。所以,要想达到更好的效果,可以结合两者。

记忆构建的分类

固定大小分块

最简单的方式是按照固定大小对原始上下文做切片,比如按照每切片大小固定为 n 个 token。

这种方式的优点是快,记忆构建时延低。但这种一刀切的方式容易造成记忆单元语义不连贯,记忆检索效果一般。

松散 LLM 抽取

一种解决方法是引入 LLM,利用 LLM 的语义理解能力,从原始上下文中抽取出摘要、事件、用户偏好等关键信息。

松散的意思是,给 LLM 输入上下文,输出也是一段文本,无 JSON 这种强结构化的格式。

松散的输出格式对模型能力要求更低,小模型即可完成

这种方法对应的是记忆存储中平铺型记忆,存在缺少关联关系的缺点。

结构化 LLM 抽取

结构化 LLM 抽取会将原始上下文转成类似 JSON 这类结构化的输出,方便后续记忆系统处理。常见如基于图的记忆(实体-关系三元组)。

结构化输出对模型能力要求更高,这也意味着成本和时延更高。

记忆检索的分类

单阶段索引检索

最简单的检索是,根据具体的记忆存储方式,做一次索引检索。

如果是全文索引,就做一次关键字匹配;如果是向量索引,就做一次语义匹配;如果是图索引,就做一次多跳推理。

单阶段索引检索的优点是快、简单。

但前面也有提过,不是所有的问题都需要检索记忆,过度检索记忆有时反而会降低效果

Agent 按需检索

可以把记忆检索做成 Agent 的一项工具,由 Agent 判断是否需要进行工具调用,按需做检索。

不过,只做一次索引检索到的 top-k 记忆,受限于索引本身,可能还是不够精确。

另外,用户问题本身可能也存在一定的模糊性,这样会导致检索到的记忆不准确。

多阶段混合检索

更精准的记忆检索是:

  1. 检索前,利用 LLM 做意图分析,把原始问题扩展成更精确的子查询。

  2. 检索时,多路多模检索,充分利用全文索引的关键字匹配、向量索引的语义匹配、图索引的关系匹配。

  3. 检索后,使用 Rerank 模型对多路检索结果做一次重排序,找到全局最优的 top-k。

记忆维护的分类

Agent 在执行任务过程中会持续产生新的记忆,如果一直放任不管,记忆会膨胀,成为一团大泥球,检索精度也会随之下降。 所以,记忆也需要维护

基于时序的多版本管理

如果不想删除旧记忆,可以为每个记忆注入时间戳。当新记忆与旧记忆冲突时,通过时间戳判断新记忆有效。

容量驱动记忆淘汰

基于时序的多版本管理简单粗暴,但只追加会导致记忆容量越来越大。可以按照一定的策略,比如 FIFO、LRU 等,对旧记忆做淘汰。

LLM 驱动记忆维护

前面两种是偏传统的、基于规则的维护策略。另一个流派是让 LLM 主动理解记忆内容含,然后进行记忆合并、压缩、更新或删除。

可以选择在闲时、记忆达到一定容量、超过 N 轮对话后,用 LLM 对记忆做离线整合,合并冗余记忆、解决记忆冲突。

也可以每次更新记忆时,在线做一次整合。这样能够时刻保持记忆是最优的。代价是更高的成本。

当然,还能把决策权交给 Agent,把记忆维护的操作作为 Agent 的工具。

哪种实现方式最好?

从效果来看

很多人会有这样的直觉:

  • 记忆一定比把长上下文好
  • 基于图的记忆组织一定比基于向量的好
  • 用 LLM 做记忆摘要一定比保存原始上下文好
  • 混合记忆一定比单一记忆好
  • Agent 工具按需调用一定比固定流程好

但真的是这样吗?

下面是不同记忆系统在 LongMemEva、LoCoMo、 DB-Bench 三个 Benchmark 上的表现:

可以看到,不同记忆方式在不同 Benchmark 上的表现可以差异很大。

  • LongMemEva 主要考量跨 Session 时的关键事实的召回、推导能力。

  • LoCoMo 主要考量语义连续的长对话的关键事实的召回能力。

  • DB-Bench 主要考量记忆系统是否能帮助 Agent 按步骤完成操作流程,而不仅是记住一条静态事实。

首先,记忆系统不一定比长上下文好。以 Mem0 为例,除了在 LongMemEva 中表现比 Long Context 稍微好点,LoCoMo 和 DB-Bench 表现要比 Long Context 更差。原因是 Mem0 会对记忆做 LLM 压缩,导致丢失细节,在关注细节的 LoCoMo 表现不佳。

另外,关系型记忆在 LongMemEva 这类存在跨 Session 事实推导的场景变现更好,比如 Zep 拿到了最高的 48.0 分。

而Letta 的分层记忆架构 使记忆能在Recall MemoryCore MemoryArchival Memory之间自动下沉,而不是直接遗忘,更能保留关键状态,所以更适合 DB-Bench 这类多步骤执行的场景。

最后,MemOS、MemoryOS 这类混合型记忆系统在所有任务中的表现都能接近最优,说明混合型记忆比单一型记忆效果更好

那么,混合型记忆系统就是最好的吗?

不一定!

加入成本和时延维度

记忆系统的实现会影响 LLM 生成的时延和成本。比如,对比 Mem0 这类用 LLM 摘要的记忆系统,长上下文的 LLM 生成阶段 Prefill 时延会更长,对应的成本也会更大。

所以,对记忆系统成本和时延的考量,可以分成三个阶段:记忆构建(含记忆维护)、记忆检索、LLM 生成。

现有的记忆系统更多关注记忆检索和LLM 生成阶段,所以,你会看到 MemOS 和 MemoryOS 这类混合型记忆系统会更有优势,它们记忆检索时延不高,LLM 生成效果又好。

但是,它们都选择性忽略了关键的一步,记忆构建

论文《Agent Memory: Characterization and System Implications of Stateful Long-Horizon Workloads》数据显示,类似于 Letta 这类混合型记忆系统,记忆构建的成本和时延占比要远高于记忆检索 + LLM 生成的成本和时延!

所以,对比不同记忆系统时延更适合用端到端时延/请求来算,即每个请求带来的记忆构建时延 + 记忆检索时延 + LLM 生成时延

综合端到端时延和效果来衡量记忆系统的好坏,会得到下面这个图:

目前论文《Are We Ready For An Agent-Native Memory System?》只考虑了记忆构建和记忆检索时延,如果把 LLM 生成时延也加进来,图中 Long Ctx 的位置应该要右移,Prefill 成本更高。

所以,虽然 MemoryOS 效果很好,但时延也很高,也就意味着成本更大。

另外,Cognee 和 Zep 成本是最高的,它们都是基于图索引的记忆系统,涉及 LLM 抽取实体-关系,以及图索引的构建。所以,当你要引入基于图的记忆系统时,需要慎重考虑成本问题

在这个图中,Mem0 无疑是最尴尬的存在,时延/成本很高,但记忆效果很低

最后

回到我们最初的问题,怎样才算是好的 Agent 记忆系统

如果想要更好的记忆效果,那么,混合型、基于图记忆系统是更好的选择,比如 MemOS、MemoryOS、Zep。

如果想要更低的成本,那么,基于向量索引的朴素记忆系统可能是更好的选择。

如果你既要记忆效果好,又要低成本,对不起,做不到。

所以,记忆系统的好坏,尽在在权衡

参考
  1. Are We Ready For An Agent-Native Memory System?, Wei Zhou 等

  2. Agent Memory: Characterization and System Implications of Stateful Long-Horizon Workloads, Yasmine Omri 等

(完)

相关推荐
GPUStack8 小时前
Day 0 实测|在 GPUStack 上部署 Inkling-BF16:8 卡 H20-141G 推理性能测试
ai·大模型·llm·gpu·vllm·gpu集群·sglang·gpustack
云卷云舒___________8 小时前
阿里开源Qwen3.8 2.4T模型预览版、并推出Token Plan订阅、DeepSeek Harness与V4正式版同发 | 7月20日 AI日报
ai·阿里·deepseek·ai日报·harness·qwen38·tokenplan
不爱记笔记8 小时前
2026 WAIC大会亮点解析!超节点、机器人与AI应用全面开花
人工智能·ai·机器人·具身智能·deepseek
猫先生Mr.Mao9 小时前
一文梳理 RT-2 到 π0.7:通用机器人策略的技术演进
ai·机器人·具身智能·vla·π0.7
土星云SaturnCloud9 小时前
MP_SENet轻量语音降噪模型在土星云边缘设备的部署实战
服务器·人工智能·ai·边缘计算·语音识别
电子工匠9 小时前
Understand Anything 在 Qoder 中的完整使用指南
ai·开源软件
猫先生Mr.Mao9 小时前
具身智能之OneTwoVLA详解:如何统一推理与行动
ai·论文解读·具身智能·vla·onetwovla
带刺的坐椅9 小时前
Solon TeamAgent 协作协议:从 SEQUENTIAL 流水线到 HIERARCHICAL 主管团队
java·ai·llm·agent·solon
doiito9 小时前
【RUST AI】把 TTS 搬进浏览器:kokoroi-rs 的 WASM 实践
ai·rust·架构设计