文章目录
- 前言
- 零、论文基本信息
- 一、现有方法的问题
- 1. 记忆结构依赖人工预定义
- 2. 基于图结构的记忆方法仍然受限
- 3. 缺乏记忆之间的动态关联与自进化能力
- 二、方法灵感
- 三、基本流程
- 1. 获得新记忆
- 2. 构造记忆笔记
- 3. 生成记忆链接
- 4. 触发记忆演化
- 四、相关工作
- 1. 智能体记忆
- 1.1 完整交互存储
- 1.2 缓存式记忆架构
- 1.3 自控制记忆框架
- 1.4 图结构记忆方法
- 1.5 小结
- 2. RAG
- 2.1 标准 RAG
- 2.2 高级 RAG
- 2.3 Agentic RAG
- 2.4 小结
- 五、具体机制
- 1. 创建记忆笔记
- 1.1 基础字段
- 1.2 大模型生成字段
- 1.3 检索相关字段
- 2. 链接生成
- 3. 记忆进化
- 4. 记忆召回
- 六、实验测试
- 1. 评测指标
- 2. 数据集
- 2.1 LoCoMo
- 2.2 DialSim
- 3. 实验结果
- 七、局限性
- 1. 依赖 LLM 本身的能力
- 2. 目前主要支持文本模态
- 八、个人理解
- 总结
前言
最近Agent超火,然而我的科研课题和 Agent 没有一点关系,于是读读 Agent 相关论文,希望学习一下这一最新的技术,后续打算自己也做一做 Agent 项目。本文主要整理的是A-Mem: Agentic Memory for LLM Agents这篇论文。先暂时写一个初稿,后续慢慢补充。
零、论文基本信息
- 论文名称:A-Mem: Agentic Memory for LLM Agents
- 论文链接:
- arXiv 页面
- PDF 原文
- 发表平台:NeurIPS 2025
- 作者信息:
- Wujiang Xu,Rutgers University
- Zujie Liang,Independent Researcher
- Kai Mei,Rutgers University
- Hang Gao,Rutgers University
- Juntao Tan,Rutgers University
- Yongfeng Zhang,Rutgers University / AIOS Foundation
- 代码仓库:
- WujiangXu/AgenticMemory:论文性能评测代码
- WujiangXu/A-mem:论文实验复现仓库
一、现有方法的问题
现有 Agent 记忆系统大多已经能够实现基础的记忆存储与检索,但在记忆组织和记忆演化方面仍然存在不足。
具体来说,论文指出当前方法主要有以下问题:
1. 记忆结构依赖人工预定义
许多 Agent 记忆系统需要开发者提前定义记忆的存储结构,并在工作流中手动指定记忆写入的位置。这种方式虽然可控,但灵活性较差,难以适应复杂、开放的长期交互场景。
比如在实际开发中,我们可能会预先设计好类似下面的记忆结构:
用户偏好记忆 任务进度记忆 工具调用记忆 历史对话摘要这种设计方式的问题是:系统只能把新记忆放进已有分类中,而不是根据新记忆的内容主动生成新的组织方式。
2. 基于图结构的记忆方法仍然受限
一些方法尝试引入图数据库或结构化关系来组织记忆,例如通过实体、关系和 schema 来管理记忆内容。这类方法相比普通向量检索更有结构性,但仍然依赖预定义的 schema 和关系类型,限制了系统的自适应能力。
换句话说,图结构确实可以让记忆之间产生关系,但如果关系类型仍然是人工提前定义好的,那么系统本身并没有真正学会“如何组织记忆”。
3. 缺乏记忆之间的动态关联与自进化能力
现有记忆系统通常只能把新记忆分类存入已有框架中,难以主动发现记忆之间的新联系,也难以随着新记忆的加入更新旧记忆的语义描述。
因此,当前许多记忆系统更多是“存储系统”(下图a),而不是“会组织、会演化的记忆系统”(下图b)。
简言之,现有方法的问题不在于“不能存”,而在“不会进化”。
二、方法灵感
A-Mem 的灵感来源于 Zettelkasten 笔记法。
Zettelkasten 是一种知识管理方法,中文通常可以理解为“卡片盒笔记法”。它的核心思想不是简单地把笔记按照固定目录归档,而是将每条笔记视为一个独立的知识单元,并通过链接建立笔记之间的关系。随着笔记数量增加,系统会逐渐形成一个相互连接的知识网络。如下图所示。
A-Mem 将这一思想迁移到 Agent 记忆系统中:每条记忆不再只是孤立存储的文本片段,而是可以与其他记忆建立联系,并在新记忆加入时推动旧记忆更新,从而形成一个动态演化的记忆网络。
也就是说,A-Mem 不只是想让 Agent “记住信息”,而是想让 Agent 的记忆系统具备一定的“整理笔记”和“更新认知”的能力。
三、基本流程
A-Mem 的整体流程可以概括为以下四步:
1. 获得新记忆
当 Agent 判断当前交互内容值得保存时,会将其作为一条新的记忆输入系统。
这里的“记忆”可以来自用户对话、任务执行过程、工具调用结果,也可以来自 Agent 在任务中产生的中间经验。
2. 构造记忆笔记
系统将新记忆构造成一条结构化的 memory note。每条记忆笔记不仅包含原始内容,还包括关键词、标签、上下文描述、嵌入向量等字段。
相比普通 RAG 中的 chunk,A-Mem 中的 memory note 更像是一张结构化的知识卡片。
3. 生成记忆链接
系统基于语义相似度和共同特征,从历史记忆中检索相关记忆,并通过大模型分析新旧记忆之间的潜在联系,从而生成记忆链接。
这一步对应 Zettelkasten 笔记法中的“链接”思想:知识不是孤立存在的,而是通过关联形成网络。
4. 触发记忆演化
当新记忆加入后,系统会检查相关旧记忆是否需要更新。如果需要更新,则会修改旧记忆的上下文描述、关键词或标签,使旧记忆随着新信息的加入而不断演化。
因此,A-Mem 的核心并不是简单地“存储记忆”,而是让记忆之间形成动态连接,并让历史记忆能够随着新信息不断更新。
四、相关工作
1. 智能体记忆
论文将已有智能体记忆方法大致分为三类:完整交互存储、缓存式记忆架构和自控制记忆框架。
1.1 完整交互存储
这类方法会尽量保存完整的历史交互记录,例如 MemoryBank、RET-LLM 等。
其基本思路是:
历史交互记录 → 存入记忆库 → 当前问题触发检索 → 召回相关历史 → 辅助模型回答这种方法的优点是信息保存较完整,不容易遗漏历史细节。但问题也很明显:历史记录会不断膨胀,检索噪声也会随之增加,没有充分解决历史记忆之间的组织问题。
1.2 缓存式记忆架构
代表方法是 MemGPT。
MemGPT 借鉴计算机缓存和内存管理思想,将记忆划分为不同层级,例如当前上下文窗口和外部长期记忆。
可以简单理解为:
当前上下文窗口:近期、重要、正在使用的信息 外部长期记忆:暂时不用但需要长期保存的信息MemGPT 会优先把最近、最重要的信息保留在当前上下文中,而把暂时不用的信息放入外部记忆。需要时,再从外部记忆中调入相关内容。
这种方法解决了一部分上下文窗口有限的问题,但整体上仍然更关注“如何管理上下文”,而不是“如何让记忆自身形成动态组织”。
1.3 自控制记忆框架
代表方法是 SCM,设计了Memory Stream + Controller的结构:
其中,Memory Stream 用于持续记录历史信息流,Controller 则负责决定什么时候写入记忆、什么时候读取记忆,以及如何管理记忆。
这种方法相比简单存储更主动,但仍然没有充分解决记忆之间如何自动建立联系、如何随着新信息不断演化的问题。
1.4 图结构记忆方法
除了上述方法,近年的一些系统还尝试引入图结构来组织长期记忆,例如 Mem0。
Mem0 提出了可扩展的长期记忆架构,并进一步使用 graph-based memory representation 来捕捉对话中的复杂关系。
这类方法相比普通向量检索更具结构性,但 A-Mem 认为,如果图结构仍然依赖预定义的 schema 或固定关系类型,那么系统的自适应能力仍然会受到限制。
1.5 小结
现有智能体记忆方法的共同问题是:它们大多关注记忆的存储、读取或上下文管理,但对记忆之间的动态组织和持续演化关注不足。
2. RAG
论文也讨论了RAG相关方法。按照复杂程度,RAG 大致可以分为三类:标准 RAG、高级 RAG 和 Agentic RAG。
2.1 标准 RAG
标准 RAG 主要包括两个步骤:
- 根据用户问题进行语义相似度检索;
- 将召回内容拼接到 prompt 中,让大模型基于检索内容生成回答。
其基本流程可以写成:
用户问题 → 检索相关文档 → 拼接上下文 → LLM 生成回答这种方式实现简单,但检索和生成过程相对固定。
2.2 高级 RAG
高级 RAG 会在召回前和召回后加入更多优化机制,例如:
- query rewriting
- reranking
- chunk filtering
- context compression
- hybrid retrieval
- multi-hop retrieval
这类方法提升了检索质量,但本质上仍然是围绕“如何更好地检索静态知识库”展开。
2.3 Agentic RAG
Agentic RAG 将检索过程交给 LLM 或 Agent 动态控制。Agent 可以决定何时检索、检索什么、是否需要再次检索,以及如何根据中间结果调整搜索策略。
其流程更接近:
用户问题 → Agent 判断是否检索 → 动态生成查询 → 检索 → 判断是否需要补充检索 → 生成回答这种方式更灵活,但知识库中的内容本身通常仍然是静态的。
2.4 小结
RAG 解决的是“如何从外部知识库中找到相关内容”的问题,而 A-Mem 更关注“记忆库本身如何动态组织和自我演化”的问题。
换句话说,RAG 的核心是“检索知识”,A-Mem 的核心是“组织记忆”。
五、具体机制
下图展示了本文方法的具体流程,可以分为创建记忆笔记、链接生成、记忆进化和记忆召回四部分。
1. 创建记忆笔记
当 Agent 决定将一段聊天内容保存为记忆时,A-Mem 会首先创建一条结构化的记忆笔记。
一条记忆笔记主要包含以下字段:
1.1 基础字段
- 原始内容:需要保存的交互内容或经验信息。
- 时间戳:记录记忆产生的时间。
1.2 大模型生成字段
- 关键词:由 LLM 提取,用于概括记忆中的核心信息。
- 分类标签:由 LLM 生成,用于描述记忆所属的主题或类别。
- 上下文描述:由 LLM 生成,用于补充这条记忆的语义背景。
1.3 检索相关字段
- 相似记忆集合:通过向量检索得到与当前记忆语义相近的历史记忆。
- 记忆链接:通过 LLM 分析新旧记忆之间的关系后生成。
相比只保存原始文本,A-Mem 的记忆笔记更像是一张结构化知识卡片。
2. 链接生成
链接生成的目标是发现新记忆与已有记忆之间的潜在关系。
具体流程如下:
- 对新创建的记忆笔记进行向量化;
- 基于向量相似度,从历史记忆中召回 Top-k 个相关记忆;
- 将新记忆和相关历史记忆交给 LLM 分析;
- 由 LLM 判断它们之间是否存在共同特征或潜在联系;
- 如果存在有意义的联系,则生成对应的记忆链接。
这一机制使得A-Mem 的记忆库不是简单的文本集合,而是一个可以动态扩展的记忆网络。
3. 记忆进化
记忆进化是 A-Mem 相比普通记忆系统最重要的区别之一。
当新记忆加入后,系统不仅会创建新记忆与旧记忆之间的链接,还会进一步判断旧记忆是否需要更新。
具体来说,对于每一条相关历史记忆,LLM 会判断是否需要更新其:
- 上下文描述;
- 关键词;
- 标签。
如果需要更新,系统会用更新后的字段替换原有字段。
这意味着历史记忆并不是写入后就固定不变,而是会随着新信息的加入不断被重新理解和重新组织。
举个简单例子:
旧记忆: 用户最近在学习 Agent 开发。 新记忆: 用户正在阅读 A-Mem,并希望把论文思想用于自己的 Agent 项目。 更新后的旧记忆: 用户正在系统学习 Agent 开发,重点关注 Agent 记忆机制,并尝试将 A-Mem 等论文方法应用到个人项目中。这个过程体现的就是 memory evolution:旧记忆会随着新记忆的加入而更新。
4. 记忆召回
在推理阶段,A-Mem 的记忆召回流程如下:
- 将用户请求转换为 embedding;
- 计算请求 embedding 与所有记忆向量之间的相似度;
- 召回 Top-k 条最相关的记忆笔记;
- 将召回的记忆作为上下文提供给 LLM;
- LLM 基于当前请求和相关记忆生成回答。
需要注意的是,A-Mem 的召回仍然依赖向量相似度,但由于记忆笔记中包含关键词、标签、上下文描述和记忆链接,因此召回结果不只是原始历史文本,而是经过动态组织后的结构化记忆。
这也是 A-Mem 相比普通 RAG 的一个优势:它不是直接检索原始文本,而是检索经过组织和演化后的 memory note。
六、实验测试
1. 评测指标
论文使用了多种指标来评估方法效果,包括:
- F1
- BLEU-1
- ROUGE-L
- ROUGE-2
- METEOR
- SBERT Similarity
- 问题回答的平均 token 消耗
这些指标分别从回答准确性、文本相似度、语义相似度和上下文使用效率等角度评估记忆系统的性能。
其中,F1 更关注答案中的关键信息是否命中;BLEU、ROUGE、METEOR 更偏文本重叠;SBERT Similarity 更关注语义相似度;平均 token 消耗则用于衡量记忆系统的上下文使用效率。
2. 数据集
论文主要使用了两个数据集:LoCoMo 和 DialSim。
2.1 LoCoMo
LoCoMo 是一个面向长期对话记忆评测的数据集,用于评估模型在长历史对话中的记忆和问答能力。
LoCoMo 的原论文是 Evaluating Very Long-Term Conversational Memory of LLM Agents,官方代码仓库为 snap-research/locomo。
LoCoMo 主要用于测试模型是否能够在非常长的对话历史中保持长期记忆,并回答与历史事件、人物关系、时间线等相关的问题。
2.2 DialSim
DialSim 是一个用于评估长期多方对话理解能力的对话模拟器。
它的论文是 DialSim: A Real-Time Simulator for Evaluating Long-Term Multi-Party Dialogue Understanding of Conversation Systems,官方仓库为 jiho283/DialSim。
DialSim 中的 agent 会扮演电视剧中的角色,并根据过去的长对话信息回答随机问题。它还构建了 LongDialQA 数据集,用于评估模型对长期、多方对话信息的理解和问答能力。
3. 实验结果
上图展示了论文方法在LoCoMo 数据集上的实验结果。非常值得注意的是 token 消耗结果。
A-Mem 在回答问题时平均只需要约1200 tokens,而一些以往方法,例如 MemGPT,平均需要约16900 tokens。
这一结果说明,A-Mem 并不是简单地把大量历史上下文塞给模型,而是通过结构化记忆笔记、链接生成和记忆演化机制,更高效地召回与当前问题相关的信息。
也就是说,A-Mem 的优势不仅体现在回答效果上,也体现在上下文使用效率上。
我觉得这一点对实际 Agent 开发很重要。因为在真实项目中,token 消耗不仅影响成本,也影响上下文窗口的可用空间。如果每次回答都需要塞入大量历史信息,那么系统很难长期稳定运行。
七、局限性
A-Mem 的局限性主要有两点。
1. 依赖 LLM 本身的能力
从整体流程可以看到,A-Mem 中很多关键步骤都依赖 LLM 完成,例如:
- 关键词生成;
- 标签生成;
- 上下文描述生成;
- 链接判断;
- 记忆更新判断。
因此,如果底层 LLM 的理解、抽取或判断能力不足,记忆系统的效果也会受到影响。
换句话说,A-Mem 的记忆质量并不只取决于存储结构,也取决于 LLM 对记忆内容的理解和组织能力。
这也是很多 Agentic Memory 方法共同面临的问题:系统越依赖模型自主决策,就越容易受到模型能力、提示词设计和生成稳定性的影响。
2. 目前主要支持文本模态
A-Mem 主要处理文本形式的记忆,提取的也是文本相关的信息,例如关键词、标签和上下文描述。
对于图像、音频、视频等多模态信息,A-Mem 本身并没有给出完整解决方案。因此,如果要将其用于多模态 Agent,还需要进一步设计:
- 多模态记忆表示;
- 跨模态检索;
- 多模态记忆链接;
- 多模态记忆更新机制。
例如,如果 Agent 需要记住用户上传过的图片、语音、文档截图等信息,那么仅靠文本 memory note 可能是不够的。
八、个人理解
我认为 A-Mem 的算法本身并不复杂,但它的思想比较精妙。
相较于普通记忆系统,A-Mem 实现了很强的自主性:它不仅保存信息,还会主动寻找记忆之间的联系,并在新信息加入后重新理解旧记忆。
总结
A-Mem 提出了一种面向 LLM Agent 的 agentic memory 系统。它借鉴 Zettelkasten 笔记法,将每条记忆构造成结构化笔记,并通过链接生成和记忆演化机制,让记忆之间形成动态连接。
相比传统记忆系统,A-Mem 的核心优势在于:它不仅能存储和召回历史信息,还能动态组织记忆,并随着新信息加入不断更新旧记忆。
因此,A-Mem 可以理解为从“被动记忆存储”走向“主动记忆组织”的一次尝试。对于想做 Agent 项目的人来说,这篇论文的价值不只是具体算法,而是提供了一种更像真实长期记忆系统的设计思路。