介绍了Agent组件里的记忆功能如何实现
大半年前,介绍了基于LLM的Agent知识,文章《大模型智能体 LLM Agent》中提到:
Agent是大模型与场景间价值传递桥梁, 重要性不言而喻。
从功能上看,Agent有多个组件构成,规划、记忆和工具使用等
Agent
= LLM
+ Planning + Feedback + Tool use
今天聊聊其中的一个组件:Memory,记忆模块
(1)什么是记忆?
记忆定义为用于获取、存储、保留和后续检索信息的过程,人类大脑中主要有三种类型的记忆。
-
感官记忆
(Sensory memory)
-
记忆最早阶段,提供原始刺激结束后保留感官信息(视觉,听觉等)印象的能力,通常只持续几秒钟。
-
感官记忆的子类别包括图标记忆(视觉)、回声记忆(听觉)和触觉记忆(触觉)。
-
短时记忆
(STM)或工作记忆(Working Memory) -
存储了当下能意识到的所有信息,以及执行复杂的认知任务(如学习和推理)所需的信息,大概可以存储7件事,持续20-30秒。
-
长期记忆
(LTM) -
顾名思义,LTM可以将信息存储相当长的时间,范围从几天到几十年不等,具有基本上无限的存储容量。LTM有两种亚型:
-
1)显式/陈述性记忆,即对事实和事件的记忆,指那些可以有意识地回忆起来的记忆,包括情景记忆(事件和经验)和语义记忆(事实和概念)。
-
2)隐式/程序性记忆,这种类型的记忆是无意识的,包括自动执行的技能和例程,比如骑自行车或在键盘上打字。
-
-
作为原始输入(包括文本、图像或其他形式)的学习嵌入表征的
感官记忆
; -
短期记忆
就是上下文学习(in-context learning),非常短且影响范围有限,受到Transformer的上下文窗口长度的限制。 -
长期记忆
作为智能体在查询时可用的外部向量存储,可通过快速检索访问。 -
人类记忆发展:从感觉记忆开始,它记录感知输入;然后是短期记忆,暂时保持信息;最后是长期记忆,在更长的时间内巩固信息。
-
短期记忆类似受限于transformers上下文窗口的输入信息。
-
长期记忆则类似于外部向量存储,Agent可以根据需要快速查询检索。
-
①内部任务信息(Inside-trial Information): 当前任务执行信息
-
单个任务或交互过程中收集的数据。仅与当前正在进行的任务有关。
-
一个对话人物, Agent 要记住上下文信息,以便生成连贯的回应
-
②跨任务信息( Cross-trial Information ): 历史任务重的长期积累学习
-
跨越了多个任务或交互过程,它包括了Agent在不同任务中积累的经验、学到的教训以及可能的模式识别
-
旅行计划中, Agent 从用户预订过的机票酒店,用户反馈 这类跨任务信息优化改进执行策略
-
③外部知识(External Knowledge)
-
Agent 与环境交互之外的信息。
-
可能是通过API调用、数据库查询或访问在线资源(如维基百科)等方式获得的
-
参考:Agent memory大揭秘:记忆从哪儿来?
-
如果要快速回忆最近的对话,文本形式可能更合适;
-
而如果要存储大量知识,或者需要一个稳定可靠的知识库,参数形式可能更有优势。
-
Agent memory大揭秘:5种记忆形态,轻松拿捏
-
好处: 易于理解和实现,而且读写速度都很快。
-
但是,如果记忆太长,就会占用很多空间,影响处理速度。
-
存储完整的交互信息: ReAct
-
最近的交互信息
-
检索到的交互信息和外部知识。
-
好处: 不受文本长度限制,而且存储效率更高。
-
但是,写入时可能需要更多的计算,而且解释起来也不如文本形式直观。
-
微调可以帮助模型快速学习特定领域的知识
-
而知识编辑则可以精确地更新或删除某些记忆,避免影响其他无关的知识。
-
有些系统只模拟人类的短期记忆,通过上下文学习实现,记忆信息直接写在prompt中。
-
而有些系统则采用了hybird memory(混合记忆架构),明确模拟了人类的短期和长期记忆。短期记忆暂时缓冲最近的感知,而长期记忆则随着时间的推移巩固重要信息。
-
记忆格式上,可以自然语言或嵌入向量形式存储。
-
操作方面,Agent通过记忆阅读、记忆写入和记忆反思三个关键操作与外部环境进行交互。
-
记忆阅读: 提取有意义的信息, 以增强Agent的行动;
-
记忆写入: 将感知到的环境信息存储在记忆中;
-
记忆反思: 模拟了人类审视和评估自己的认知、情感和行为过程的能力。
-
①记忆写入: LLM短期记忆, 接收到新信息时(聊天),以特殊编码方式存入"大脑"
-
MemGPT
: 自我指导是否写入记忆,智能体根据上下文决定是否更新 -
MemoGPT
: 聊天时做总结, 提取对话片段的主题, 关键词形式保存,便于查找, topic,summary,dialogues -
②记忆管理: LLM长期记忆, 整理短期记忆信息;信息归类, 找出最重要的部分,忘掉次要信息,保持大脑的清晰、高效
-
MemoryBank
: 智能体从对话内容中提炼每日大事记, 同时不断评估,生成个性特征 -
Voyager
: 智能体根据环境反馈优化记忆 -
Generative Agents
: 智能体自我反思,获取更高层次的信息. 从事件信息中生成抽象想法 -
GITM
: 记忆模块中总结多个计划的关键行动, 建立各种情况下的共同参考计划, 提取最重要的行动步骤 -
③记忆读取: 使用LLM记忆解决问题
-
ChatDB
: SQL操作完成记忆阅读 -
MPC
: 从记忆池里检索相关记忆, 使用思维链示例方式,忽略次要信息 -
ExpeL
: 用Faiss向量库作为记忆池, 找出与当前任务最相似的k个成功示例.
对应语言模型概念:
可见,记忆模块像 Agent大脑,帮助积累经验,自我进化,让行为更加一致、合理和有效。
LLM Memory设计灵感来自人类记忆过程的认知科学研究。
Agent 记忆结构设计借鉴了人类记忆特点。
(2)LLM记忆从何而来?
记忆来源: 智能体记忆内容的出处。
三种类型记忆来源:
各个 记忆实现案例 分布对比
其中,ExpeL的工作流程图包含以上三种方式
(3)LLM记忆如何保存?
记忆如何保存? 文本形式、参数形式为主
文本形式的记忆和参数形式的记忆同样也是各有千秋,它们适合不同的应用场景。
各种记忆形式案例总结
(a) 文本形式
分析
文本形式记忆可进一步细分为几种类型:
MemGPT 分别体现出了短期和召回记忆;
Qwen-Agent中,通过 chatml 特有多轮格式<im_start>
<im_end>
进行分割历史的会话,最后一轮才加上ReAct的prompt。
(b) 参数形式
这种方式更高级。不直接存储文字,而是把记忆转换成模型参数,就像是把知识压缩成精华。
参数形式的记忆则涉及更复杂的技术,比如: fine-tuning 和 editing。
经典 Character-LLM: A Trainable Agent for Role-Playing,用微调方式
(c)图谱
另外,也有更高级的形式:图谱
比如 微软推出的 GraphRAG,使用LLM从语料中挖掘实体、关系,组成知识图谱,供下游使用。
详见:https://microsoft.github.io/graphrag/
形态上越来越像人类。
不少人将知识图谱技术利用起来,比如 Neo4j,效果示例:
使用 Cypher语言查询节点,结果融入LLM
(4)LLM记忆如何工作?
实际应用中
记忆操作像 LLM大脑,三个部分组成:记忆写入、记忆管理和记忆读取。
参考:Agent memory大揭秘:轻松搞定记忆写入、管理、读取