Ch14 Agent原理修订于 二〇二六年七月一日

Agent 记忆系统(深挖)

ReAct 循环(深挖) 展示了 Agent 怎么一步步思考和行动。但每轮循环之间,Agent 需要记住之前发生了什么——搜过什么、结果是什么、用户说过什么。这就是 Agent 的记忆系统。

三层记忆架构

AI 记忆不是一个大池子。学术界普遍采用三层模型 1:

工作记忆(Working Memory):当前任务的上下文。这一轮搜索的结果、上一步的思考、当前对话。容量有限(跟 AI 的上下文窗口一样大),任务结束就清空。

短期记忆(Short-term Memory):当前对话的所有内容。你说了什么、AI 回答了什么、每一步的 Thought-Action-Observation。对话结束就归档。

长期记忆(Long-term Memory):跨对话的信息。你的偏好(“我喜欢简洁的回答”)、你的身份(“我是律师”)、重要事实(“上次讨论的项目叫 Alpha”)。持续存在,不随对话消失。

工作记忆:有限的金子

Agent 的每一步决策都依赖工作记忆。但工作记忆就是 AI 的上下文窗口——塞太多会溢出,塞太少信息不全。

冲突:你希望 Agent 记住尽可能多的上下文(搜过的资料、之前的推理),但上下文窗口价格昂贵且有限。

解决:不是什么都记。工作记忆里只放最相关的信息。怎么挑?这就是 上下文管理 里讲的”写、选、压、隔”。

短期记忆:对话的流水账

最简单的短期记忆实现:把整个对话历史存在一个列表里,每次 Agent 要做决定时,把最近 N 轮对话放进去。

问题:对话超过 20 轮怎么办?全塞进去上下文窗口就炸了。

解决:上下文压缩(深挖)。把老对话压缩成摘要,只保留关键信息。

工具推荐:LangChain 的 ConversationSummaryMemory——自动把老对话压缩成一句话摘要。Mem0(2023 年开源)功能更强,不仅记对话,还能提取关键事实。

长期记忆:跨对话的知识

这是最难的一层。你说过”我是律师”,三天后 Agent 还记得吗?

存储方式:

  • 向量化存储:把每次对话里的关键信息转成向量(一串表示含义的数字),存进向量库。下次对话时检索相关记忆。
  • 知识图谱:用实体-关系存储。比如”用户职业=律师""用户偏好=简洁回答”。
  • 关键事实列表:最简单的实现——一个 {key: value} 的字典。

Mem0 是怎么做的 2:

  1. 每轮对话结束,Mem0 自动提取关键事实
  2. 事实存进向量库
  3. 下次对话开始,Mem0 检索跟当前问题相关的历史事实
  4. 把事实注入 AI 的输入,AI 就知道”这个用户是律师,上次聊的是合同”

记忆管理的三个陷阱

1. 记忆污染。 Agent 记住了错误的信息。“用户说喜欢详细回答”——其实用户说的是”这次详细一点,平时不用”。怎么区分一次性偏好和长期偏好?Mem0 用”事实冲突检测”——如果新事实和旧事实矛盾,以新为准。

2. 记忆泄露。 用户 A 的记忆被注入到用户 B 的对话中。多租户场景必须做记忆隔离。

3. 记忆膨胀。 长期记忆无限增长,检索越来越慢。需要定期清理——超过 90 天没被访问的记忆,归档或删除。

实践:LangChain 记忆示例

LangChain 提供了记忆管理功能。基本思路:每轮对话结束后,自动压缩成摘要,下次对话时自动加载。

(以下代码供有编程基础的读者参考。零基础读者可以跳过,不影响理解。)

相关笔记

来源

注释

  1. Park et al., “Generative Agents: Interactive Simulacra of Human Behavior”, 2023, https://arxiv.org/abs/2304.03442 ↩

  2. Mem0 GitHub, https://github.com/mem0ai/mem0 ↩

关联9

知识图谱

局部图谱 · 点节点跳转