A-MEM: Agentic Memory for LLM Agents
核心思想
LLM 智能体的记忆系统普遍面临两个问题:
- 记忆操作预定义:开发者提前设计好存储/检索规则 → 无法适应多样化场景
- 记忆之间缺乏关联:每条记忆独立存储 → 无法进行跨会话的多跳推理
A-MEM 借鉴 Zettelkasten(卡片盒笔记法)的核心思想——原子化、互联、持续进化 → 让 LLM 自主组织记忆网络。
三个核心机制:
- 原子笔记生成:每条记忆自动生成关键词、标签、语义描述
- 动态链接:新记忆到来时,自动发现并建立与已有记忆的语义联系
- 记忆进化:新信息触发相关历史记忆的上下文更新
结果:时序推理 F1 从 25.5% → 45.9%,token 用量减少 85-93%。
背景知识
什么是 Zettelkasten
| 原则 | 卡片盒方法 | A-MEM 对应 |
|---|---|---|
| 原子性 | 每张卡片只记录一个想法 | 每条记忆包含 7 个结构化字段 |
| 互联 | 卡片之间手动建立链接 | LLM 自动发现语义关联 |
| 持续进化 | 新卡片触发旧卡片更新 | 记忆进化机制 |
现有记忆系统对比
| 系统 | 记忆结构 | 关联机制 | 自适应 |
|---|---|---|---|
| MemoryBank | 扁平存储 | 无 | 遗忘曲线衰减 |
| MemGPT | 双层虚拟上下文 | 无 | 分页管理 |
| ReadAgent | 分页+摘要 | 无 | 三步检索 |
| A-MEM | 结构化笔记 | 动态链接网络 | LLM 自主进化 |
方法详解
1. 记忆笔记结构
每条记忆 $m_i$ 包含 7 个组件:
| 字段 | 含义 | 生成方式 |
|---|---|---|
| $c_i$ | 原始交互内容 | 直接存储 |
| $t_i$ | 时间戳 | 系统记录 |
| $K_i$ | 关键词 | LLM 生成 |
| $G_i$ | 分类标签 | LLM 生成 |
| $X_i$ | 语义上下文描述 | LLM 生成 |
| $e_i$ | 稠密向量嵌入 | 编码器计算 |
| $L_i$ | 关联记忆集合 | 动态链接 |
语义组件生成:
\[K_i, G_i, X_i \leftarrow \text{LLM}(c_i \| t_i \| P_{s1})\]嵌入计算:
\[e_i = f_{\text{enc}}[\text{concat}(c_i, K_i, G_i, X_i)]\]2. 动态链接机制
Step 1:相似度检索
对新记忆 $m_n$,计算与所有已有记忆的余弦相似度:
\[s_{n,j} = \frac{e_n \cdot e_j}{|e_n| |e_j|}\]取 top-k 最相关记忆:
\[M_{\text{near}}^n = \{m_j | \text{rank}(s_{n,j}) \leq k, m_j \in M\}\]Step 2:LLM 驱动的关联分析
LLM 分析候选记忆,判断是否存在有意义的关联:
\[L_i \leftarrow \text{LLM}(m_n \| M_{\text{near}}^n \| P_{s2})\]3. 记忆进化
新记忆整合时,触发相关历史记忆的更新:
\[m_j^* \leftarrow \text{LLM}(m_n \| M_{\text{near}}^n \setminus m_j \| m_j \| P_{s3})\]进化后的 $m_j^*$ 替代原始 $m_j$ → 语义描述和属性随新经验动态适应。
4. 检索算法
给定查询 $q$:
- 计算查询嵌入:$e_q = f_{\text{enc}}(q)$
-
计算相似度:$s_{q,i} = \frac{e_q \cdot e_i}{ e_q e_i }$ -
检索 top-k:$M_{\text{retrieved}} = {m_i \text{rank}(s_{q,i}) \leq k, m_i \in M}$
实验结果
主要结果(LoCoMo 数据集,GPT-4o-mini)
| 类别 | 指标 | LoCoMo 基线 | MemGPT | A-MEM |
|---|---|---|---|---|
| 多跳推理 | F1 | 25.02% | 26.65% | 27.02% |
| 多跳推理 | BLEU-1 | 19.75% | 17.72% | 20.09% |
| 时序推理 | F1 | 18.41% | 25.52% | 45.85% |
| 时序推理 | BLEU-1 | 14.77% | 19.44% | 36.67% |
| 开放域 | F1 | 12.04% | 9.15% | 12.14% |
| 单跳 | F1 | 40.36% | 41.04% | 44.65% |
| 对抗性 | F1 | 69.23% | 43.29% | 50.03% |
时序推理提升最显著:F1 从 25.52% → 45.85%(+80%)→ 记忆进化机制的核心价值。
Token 效率
| 系统 | 每次操作 token |
|---|---|
| LoCoMo/MemGPT | ~16,900 |
| A-MEM | ~1,200-2,500 |
减少 85-93% 的 token 用量。
DialSim 性能
- A-MEM F1: 3.45(vs LoCoMo 2.55, MemGPT 1.18)
- 比 MemGPT 提升 192%
检索效率(百万级扩展)
| 记忆条数 | A-MEM (μs) | ReadAgent (μs) |
|---|---|---|
| 1,000 | 0.31 | 43.62 |
| 10,000 | 0.38 | 484.45 |
| 100,000 | 1.40 | 6,682 |
| 1,000,000 | 3.70 | 120,070 |
百万级记忆检索仅需 3.7 微秒,比 ReadAgent 快 32,000×。
消融实验
| 配置 | 多跳 F1 | 时序 F1 | 开放域 F1 |
|---|---|---|---|
| 无链接 + 无进化 | 9.65% | 24.55% | 7.77% |
| 有链接 + 无进化 | 21.35% | 31.24% | 10.13% |
| 有链接 + 有进化(完整) | 27.02% | 45.85% | 12.14% |
链接建立基础关联,进化提供本质性的精化。
跨模型泛化
在 6 个基座模型上测试(GPT-4o-mini, GPT-4o, Qwen2.5-1.5B/3B, Llama3.2-1B/3B),A-MEM 在非 GPT 模型和多跳推理上一致优于基线。
个人思考
- Zettelkasten 到 AI 记忆的类比非常自然:卡片盒方法的核心是”知识是网络而非列表”→ A-MEM 将这个思想形式化为可计算的图结构。
- 时序推理 +80% 是最亮眼的结果:时序问题需要跨会话关联不同时间点的信息 → 正是动态链接机制的用武之地。
- 85-93% token 节省使得长期记忆在成本敏感场景下可行:每次操作 <$0.0003 → 可以支持生产级部署。
- 记忆进化是区别于其他系统的核心创新:不是简单地添加新记忆,而是让新信息改变旧记忆的理解 → 类似人类的”重新审视旧知识”。
- 对抗性问题上 A-MEM 不如无记忆基线(50.03% vs 69.23%)→ 动态链接可能引入虚假关联,在对抗场景下反而有害 → 需要更好的噪声过滤。