最后修改时间: 2026年6月27日 11:01

5 Agent 记忆机制与管理#

在第4章内容中我们详细介绍了 Agent 的工具调用与检索能力,但细心的读者可能已经注意到一个问题:在 RAG Agent 这个场景里至始至终都只涉及到了一个 Agent 来理解问题、检索内容和回答问题。但是在实际应用中,我们接触到更多的其实是多个 Agent 协作交互的场景。

例如一个 Agent 专门帮你创建日程,一个 Agent 帮你发送邮件,可能还有一个 Agent 帮你检查排期等等,如先前大火的 OpenClaw 就是一个类似这样的个人助理。

因此,这个时候同时还延伸出了一个非常重要的问题——记忆管理。在本章内容中,将会就这两块内容进行详细介绍。

5.1 Agent 记忆机制概览#

5.1.1 记忆机制#

记忆机制是一个让 Agent 能够记住历史交互信息的系统。具体来说,我们希望它能够做到三件事情:① 记住之前的对话内容;② 从用户的反馈中学习;③ 根据用户的偏好调整自身的行为。虽然这三件事听起来好像很简单也很自然,但对于一个实用的 AI Agent 来说却至关重要。

试想一下,如果每次对话结束以后,Agent 对之前发生的事情都一无所知,无论用户告诉过它什么偏好、纠正过它什么错误,下一次对话都只会从头开始滔滔不绝,那这样的体验用户显然是不可接受的。当然,如果是涉及到处理复杂、多轮交互任务时,更是会变得让人抓狂,而这就是 Agent 记忆机制所要解决的问题。

根据记忆的作用范围不同还可以分为两种类型:短期记忆和长期记忆。

5.1.2 短期记忆#

短期记忆(Short-term Memory),也称为线程作用域记忆(Thread-scoped Memory),它的作用范围仅限定在一次会话(Session)之内,例如我们在使用豆包或者 ChatGPT 时所打开的一个对话窗口。简单来说,它负责记录当前这一轮对话中发生的所有消息(上下文),让 Agent 在同一次对话里知道"之前聊了什么"。

在 LangGraph 中,短期记忆是作为 Agent 状态(State) 的一部分来进行管理,并且会通过一个叫做检查点管理器(Checkpointer )的机制来将当前状态进行持久化。在 Agent 每执行一步时 LangGraph 都会同时从持久化实体中读取最新的状态作为输入,并在执行结束以后更新状态信息。可以看出,这样做的好处是即使对话中途中断,也可以在任意时刻从断点处恢复,使得整个会话的上下文不会丢失。

5.1.3 长期记忆#

长期记忆(Long-term Memory)的出现是为了解决短期记忆不能处理跨会话信息保留的问题。与短期记忆不同,长期记忆存储的是用户专属信息或应用级别的数据,它不归属于某一次具体的对话,而是可以在任何时间、任何会话中被读取和写入。如图5-1所示便是短期记忆与长期记忆之间的对比结果。

图 5-1 短期记忆与长期记忆对比图

从图5-1可以看出,短期记忆实质上就是在当前会话中将之前的所有的上下文信息都输入到LLM中来生成本轮的回答;而长期记忆则是将不会时间、不同会话中的上下文输入到LLM中来生成本轮的回答。

在 LangGraph 中,长期记忆是通过存储机制(Store)来实现,它允许开发者将记忆存储在自定义的命名空间(Namespace)下,而不是绑定在某个特定的会话上,因此天然支持跨会话的数据共享与复用。

5.1.4 ChatGPT 中的长期记忆#

例如,用户在第一次对话中告诉 Agent “我偏好简短的回答”,这条信息通过长期记忆被存储机制保存下来;当用户下次打开一个全新的会话时,Agent 便可以读取这条偏好,并在整个对话过程中保持相应的行为,这就是长期记忆的核心价值。如图5-2所示是 ChatGPT 中的长期记忆管理方式。

图 5-2 ChatGPT 中的长期记忆管理

如图5-2所示便是 ChatGPT 后台保存在当前用户命名空间下的记忆内容,它可以来自先前保存的记忆,也可以来自历史聊天会话中的内容。两者的区别在于记忆永远不会被遗忘,而聊天记录则会随着时间的推移而被忘记,这也就是为什么你在和 ChatGPT 对话的时候,它能时不时的说出你的个人基本信息一样,因为这样内容已经被它持久化保存到长期记忆中了。

一句话总结,短期记忆用于支持单次会话内的多轮对话,而长期记忆则用于跨会话持久化存储用户或应用级别的数据。

引用#

[1] https://docs.langchain.com/oss/python/langgraph/add-memory

阅读 --