Agent如何帮助大模型“增强记忆”?
去年关于LLM驱动Agent的那篇经典博客(没错,就是Lilian写的那篇),把Agent的结构拆成了规划、行动、工具和记忆这四个模块。这个框架精准概括了ReAct式Agent的工作流程:提问→思考→行动→调用工具→观察结果→再思考……直到得出最终答案。
在这四个组件中,记忆扮演的角色非常关键。它负责记住两类核心信息:事实和偏好。事实比如工具调用的结果、问题的答案;偏好比如语言风格、图表绘制习惯、特定任务下该选哪个工具。有了这些记忆,Agent的回答准确率、稳定性和速度都会显著提升。那么,记忆具体分为哪些类型?又是如何存储和提取的?能用在什么地方?这篇文章就来系统地梳理一下。
1. Agent什么东西可以存入记忆中?
Agent和普通的Chat或RAG知识型应用不同,它涉及规划、决策、工具调用等一系列复杂操作。因此,能存入记忆的内容,也需要重新思考。
1.1 对话交互历史
这是记忆最基础的形式,也是多轮对话的立身之本。用户输入的Query和模型返回的自然语言输出,共同构成了交互历史。没有它,Agent就是个“金鱼脑”,聊完一句就忘。
1.2 工作流(规划)与工具调用结果
自然语言规划和工具调用在工作流层面有显著区别,这也导致它们在记忆存储方式上的不同。
在ReAct架构的Agent里,规划或思考过程以自然语言形式呈现。那些具备长期规划能力的Agent,会在行动开始前将任务拆解成一系列子任务,这些子任务序列就可以作为本次任务的工作流存入记忆。
而在以Function Calling为核心的Agent中,模型接收用户Query和结构化的函数列表,输出的是函数调用的JSON文件,随后在外部执行并返回结果。函数调用的JSON和执行结果,都可以被记忆存储。未来遇到相似条件时,直接召回这些结果,就能省去重复执行函数的时间和计算资源。
1.3 Reflection的反馈
Reflection是对Agent每步操作和子任务的反馈。把这些反馈存入记忆,就像给Agent准备了一本“错题集”。未来遇到类似任务时,它可以直接调取过往的反思改进建议,提升准确率。从长远来看,将Reflection融入记忆,能极大提升Agent的推理能力,在专业场景下,效果往往比单纯提升模型底层的推理性能更高效。
不过目前面临一个现实问题:自动化的Reflection流程很难给出高质量的改进建议,反而容易让模型“钻牛角尖”,陷入错误循环。短期内,这个环节恐怕还需要人工介入,以类似强化学习的方式,逐步优化Agent在特定场景下的表现。
2. 记忆的提炼方式
2.1 直接的buffer存储
最简单粗暴的方式,就是直接把用户聊天的历史记录和工具调用的结果存起来,不做任何总结。这种方法的优势是稳定、不丢失信息,而且不用调大模型去总结,节省了推理时间和算力成本。
但缺点也很明显:存储的内容“稀疏”,里面充斥着大量无用信息和冗余文字。把这些杂乱无章的内容直接塞给模型,容易造成干扰——对话轮数少还好,一旦多了,Agent就会陷入巨大的“精神内耗”。因此,buffer类存储只适合对话轮数很短的场景。
2.2 多种不同的提炼与召回方式
当然,记忆也可以像知识库管理那样,先提炼再存储。LangChain之前总结过几种经典方法:
Refine 精炼法:
把长文本分成小块,先对第一块生成总结,然后把总结内容和第二块合并,依此类推,最终生成整篇文章的总结。
优点:相比map_reduce方法,丢失的信息更少。
缺点:需要多次调用大模型,而且对文本顺序有要求——每个片段的总结都依赖前一个片段的结果,无法并行执行,整个任务变成了串行流程。
map_reduce:
先把长文档分成小块,分别调用大模型生成总结,最后将所有分块的总结合并,生成全文总结。
优点:可以处理非常长的文本。
缺点:单次任务需要多次调用大模型;在合并过程中可能有信息丢失,相比stuff方法缺少完整的上下文信息。
map_rank:
对每一块内容进行操作,返回结果的同时也返回该块总结的正确性得分,最终返回得分最高的那一个。
优点:能处理长文本。
缺点:无法进行总结合并,生成基于全文的结论。它更适用于在文档中检索、根据某个文本块来回答问题。
但需要注意的是,以上方法都是针对纯文本内容。Agent的实际情况要复杂得多——工具调用的JSON、结构化的返回结果,这些内容由于其结构化特性,可以直接通过规则算法提取关键元素,并以结构化的方式存储,反而更简单高效。
3. 长短期记忆
Lilian那篇博客里还提到了一个有趣的类比:将Agent的记忆与人类大脑的记忆系统对应起来,包括感知记忆、短期记忆和长期记忆。

3.1 感知记忆
感觉记忆类似人类在刺激结束后保留感官信息的印象,通常只持续几秒钟。映射到Agent里,可以理解为模型输入的向量化表达以及注意力机制。
3.2 短期记忆与提示模板
短期记忆本质上是大模型涌现能力中上下文学习(ICL)的一种具体表现,也是Agent利用提示工程来提升表现的重要手段。上下文学习是短期记忆的核心,它让Agent能在当前对话中记住并利用相关信息。
短期记忆包含内容非常丰富:指令、计划、事实、偏好、历史交互记录等。
指令与计划的记忆
事实与偏好的记忆
历史交互记录的记忆
在实践中,Berkeley的开源项目MemGPT充分利用了约8k长度的token上下文窗口,实现了多类记忆内容的输入。

在提示词管理中,它包含三个部分:系统指令(System Instruction)、工作上下文(Working Context)和FIFO队列。其中,工作上下文和FIFO队列在概念上属于短期记忆。工作上下文存储了关于用户和Agent角色的关键事实与偏好;FIFO队列则滚动存储消息历史,包括历史对话、系统消息(如内存警告)和模型函数调用的输入输出。

3.3 长期记忆与持续学习
MemGPT还包括了召回存储和档案存储,这两种是通过外部数据库来实现的,用于记忆更海量的历史消息和事实知识。这,就是长期记忆的经典存储方式。
长期记忆通常存储重要的事实或偏好,这些信息在其他会话和任务中也能派上用场。相比短期记忆,它不受模型上下文长度限制,能在更长时间跨度内保持信息的完整性和准确性。
信息持久性与上下文独立性
存储大容量信息
动态更新与管理
4. 会话内与会话间记忆
短期和长期记忆是基于存储方式定义的。在实际使用时,用户通常会开启新Session(会话)来区分不同话题,这不仅是对交互主题的分类,也让每个会话的记忆相互隔离。从会话角度,记忆可以分为两种:会话内记忆和会话间记忆。

4.1 会话内记忆(多轮对话)
这是单次会话窗口内,用户和应用之间的交互历史,也就是多轮对话中的记忆。它只能被当前会话的智能体访问,不影响其他会话。这类似于短期记忆,但实现上除了基于提示词,还可以通过外部数据库进行扩展和强化。
4.2 会话间记忆(持久记忆)
对于重要的概念和事实,会话之间可以共享这些记忆内容,作为持久性记忆。
今年2月13日,OpenAI发布了一篇博客,介绍了ChatGPT新加入的记忆功能。用户可以让ChatGPT记住某些事,也可以询问它记住了什么,或者通过对话让它遗忘。
博客中提到了4种会引发记忆读写的场景:
1. 用户解释过更喜欢在会议记录底部总结标题、要点和行动项目。ChatGPT记住了这一点,并以这种方式回顾会议。
2. 用户告诉ChatGPT自己拥有一家社区咖啡店。在为新店开张的社交帖子集思广益时,ChatGPT知道从哪里开始。
3. 用户提到自己有一个刚学步的小孩,喜欢水母。当请ChatGPT制作生日贺卡时,它会建议画一只戴着派对帽的水母。
4. 作为一名有25名学生的幼儿园老师,用户更喜欢50分钟的课程和后续活动。ChatGPT在帮助制定课程计划时会记住这一点。
有趣的是,1、3、4属于用户偏好相关的记忆,2是关于事实的记忆,但它们都通过这类记忆影响了后续的计划和行动。尤其第3个场景,在一个看似不相关的事件里(生日贺卡),ChatGPT依然调用了儿童喜欢水母这个信息,效果相当不错。
虽然ChatGPT更偏向聊天类应用,但这种跨会话记忆的概念完全可以迁移到Agent类应用中,优化规划和反馈机制。在客户服务领域,Agent记住客户的历史问题和偏好,提供更定制化的服务——这种通过数据回流不断优化的方式,会让Agent的表现越来越贴合实际需求。
5. Agent记忆的妙用
5.1 指代消解
在多轮对话中,短期记忆能帮助模型解决指代不清的问题。当用户用“它”、“他”这类代词时,Agent通过回忆上下文信息,准确定位代词的指代对象。这不仅提高了对话的连贯性和流畅性,还减少了误解和重复沟通,在涉及复杂信息的讨论中尤其重要。
5.2 答案缓存
记忆能显著减少重复调用API的次数,直接降低费用。当Agent记住查询结果并在需要时直接引用,就不必每次都重新调用昂贵的API。比如在客户服务中,用户反复问相同的问题,Agent可以直接从缓存中提取答案,既节省时间又提升响应速度。
5.3 偏好学习
记忆能记住用户的行为和需求偏好,减少对任务的重复解释。Agent根据历史交互,逐渐了解用户的习惯,然后在未来提供更精准的服务。电商平台记住购物记录推荐商品,教育平台根据学习轨迹定制方案——通过偏好学习,Agent不仅提升用户体验,还提高了任务完成效率。
5.4 数据回流
Agent的驱动模型可以基于历史交互数据进行微调,使其更适应专有场景。通过不断记录和分析用户交互数据,Agent能识别常见问题和模式,针对特定领域进行优化。这种数据回流与Reflection结合,将大大提升Agent未来的表现。在医疗咨询中,智能体通过分析大量患者的提问和反馈,优化回答质量;在客户服务中,Agent根据历史投诉和建议调整策略——数据回流不仅帮助模型持续改进,也帮助企业更准确地了解用户需求。
6. 总结
记忆模块的应用虽然还处于探索阶段,但和其他组件的简单读写过程相比,它能让Agent不断存储关键的事实、偏好和改进建议,从而获得更好的表现、准确率和稳定性。记忆也是Agent学习和经验积累的基础——有了记忆,Agent不仅变得更聪明,更具备了“智慧”,能像一位经验丰富的前辈一样,解决那些“年轻”Agent难以应对的难题。未来在通往AGI的道路上,记忆模块的各类妙用,值得深入探索。