关注最新技术的发展和应用落地,聚焦性能优化与架构设计,欢迎关注!
在人工智能领域,大语言模型(LLM)的显著突破使AI Agent成为可能,然而,"记忆"仍然是这些智能体的关键短板。与人类不同,现代LLM本质上是无状态的,它们只能记住有限的上下文窗口内的信息,无法在跨会话、长对话或复杂任务中保持连贯性。
一、记忆系统的核心价值与问题解决
记忆系统是AI Agent的"大脑",它使Agent从"一问一答的聊天机器人"转变为"有连续性、有持久性、能陪你长期干活的真正助手"。记忆系统使 AI Agent 能够像人类一样,在单次对话中保持上下文连贯性(短期记忆),同时能够跨会话记住用户偏好、历史交互和领域知识(长期记忆)。记忆系统可以解决以下关键问题:
1.上下文长度限制
大模型就像只能同时记住一张A4纸内容的聪明人,其固定上下文窗口限制了其处理长文本的能力。例如,当用户要求写一篇5000字的报告时,Agent可能会在写作过程中忘记最初要求的"面向领导、正式风格"。记忆系统通过智能压缩和检索机制,确保核心要求始终被保留。
2.信息衰减
在长对话中,早期的重要信息容易被后续内容挤出记忆窗口。记忆系统通过标记重要信息并实施智能检索策略,确保关键内容在对话过程中不会被遗忘。研究表明,人类在长对话中也会经历类似的信息衰减,这正是记忆系统需要解决的核心问题。
3.任务连续性
多步骤的长任务需要Agent记住当前进度、已完成事项和下一步行动。没有记忆系统,Agent每完成一个步骤后都需要重新开始,导致效率低下。记忆系统通过维护任务状态和进度信息,使Agent能够无缝地从一个步骤过渡到下一个。
4.个性化
优秀的Agent应该越用越懂你,能够记住用户的偏好、习惯和沟通风格。例如,知道用户喜欢简洁的文案、习惯使用Excel处理数据,或对某些话题特别敏感。记忆系统通过记录和分析用户行为模式,使Agent能够提供更加个性化的服务体验。
5.经验积累
AI Agent需要从过往的成功和失败中学习,避免重复同样的错误。记忆系统通过存储和检索历史交互经验,使Agent能够不断优化其行为模式,提高任务完成的质量和效率。
二、记忆系统的分层架构
对于 AI Agent 而言,记忆至关重要,因为它使它们能够记住之前的互动、从反馈中学习,并适应用户的偏好。
1.常用记忆分层
短期记忆存储会话中产生的各类消息,包括用户输入、模型回复、工具调用及其结果等。这些消息直接参与模型推理,实时更新,并受模型的 maxToken 限制。当消息累积导致上下文窗口超出限制时,需要通过上下文工程策略(压缩、卸载、摘要等)进行处理,这也是上下文工程主要处理的部分。
核心特点:
存储会话中的所有交互消息(用户输入、模型回复、工具调用等) 直接参与模型推理,作为 LLM 的输入上下文 实时更新,每次交互都会新增消息 受模型 maxToken 限制,需要上下文工程策略进行优化
功能:记录Agent与用户交互的具体事件和任务执行过程 特点:带时间戳和元数据的具体事件记录,容量较大,但受时间衰减影响 技术实现:向量数据库(如Pinecone、Qdrant)结合时间戳索引,支持语义相似性检索 应用场景:客服系统中记录用户投诉历史、教育系统中保存学习过程中的错误和纠正
(3)长期语义记忆
功能:存储Agent需要的通用事实、领域知识和概念定义
特点:不带个人场景的通用知识,容量几乎无限,支持关系推理
技术实现:知识图谱(如Neo4j、AWS Neptun)或结构化数据库,支持实体关系查询
应用场景:医疗Agent记住药物相互作用知识、法律Agent了解法规条款
记忆系统的核心价值通过其五大核心操作实现:写入(Write)、索引(Index)、检索(Recall)、更新(Update)和遗忘/归档(Forgetting/Archiving)。
(1)写入(Write)流程
写入是记忆系统的基础操作,负责将新产生的记忆(对话、知识、规则)存入系统。具体流程包括:
原始信息获取:从用户输入、工具调用结果或环境反馈中捕获原始数据
信息提取:通过LLM或专用模型从原始数据中提取关键信息(如Mem0的双LLM架构:信息提取LLM生成Cypher语句,决策LLM生成上下文)
记忆类型判断:确定提取信息应存储在记忆系统的哪一层(工作记忆、情景记忆等)
存储操作:将信息以适当格式存储到对应层的数据库中
关键挑战:如何从大量原始信息中高效提取有价值的记忆,同时避免存储冗余或错误信息。
(2)索引(Index)机制
索引是记忆系统的核心组件,它决定了如何高效地存储和检索记忆。不同记忆层采用不同的索引机制:
工作记忆层:
索引类型:基于时间的FIFO队列
特点:简单高效,但缺乏智能检索能力
技术实现:Redis Streams或内存队列,支持快速插入和删除
情景记忆层:
索引类型:向量数据库索引
特点:支持语义相似性检索,但受上下文窗口限制
语义记忆层:
索引类型:图数据库索引
特点:支持复杂的关系推理和模式匹配
(3)检索(Recall)流程
检索是记忆系统的核心操作,负责根据当前查询召回最相关记忆。记忆检索的本质是多维度加权打分排序:
其中:
语义相似度,通常通过向量数据库的余弦相似度计算
结构关联相似度,用于衡量记忆与当前查询的实体关系匹配度
时间相似度,确保近期记忆优先被检索
主流框架实现差异:
Mem0:采用语义向量检索为主,适合简单的用户偏好存储和短期上下文记忆
Zep:基于时间感知的图谱检索,擅长处理时序问题和复杂关系查询
Letta:基于分页的检索机制,模拟操作系统的虚拟内存分页策略
(4)更新(Update)与冲突解决
记忆系统需要能够更新已有记忆的内容、属性和权重,并解决可能的冲突:
记忆更新:根据新信息调整现有记忆的内容和权重
冲突检测:当新旧信息存在矛盾时,识别冲突并应用解决策略
解决策略:基于时间戳优先级、用户反馈置信度或LLM判断进行决策
冲突解决的关键技术:
动态权重模型:根据访问频率和时效性动态调整记忆权重
版本控制:为记忆内容维护版本历史,支持回滚和对比
LLM仲裁:当冲突无法通过规则解决时,使用LLM进行判断
(5)遗忘(Forgetting)与归档机制
遗忘不是简单的删除,而是根据记忆的价值和时效性进行智能管理:
TTL(Time-To-Live):为记忆设置自动过期时间
冷热分层:将频繁访问的记忆保留在高速存储(热层),低频记忆归档到低速存储(冷层)
重要性衰减:根据记忆的使用频率和时间衰减计算重要性分数
技术实现:
Redis热层:存储最近20轮对话,设置自动淘汰
PostgreSQL冷层:存储长期记忆,使用扩展支持向量检索
对象存储归档:将过期记忆归档到MinIO或AWS S3,降低存储成本
Record(写入):从短期记忆的会话消息中提取有效信息,通过LLM进行语义理解和抽取,存储到长期记忆中 Retrieve(检索):根据当前用户查询,从长期记忆中检索相关信息,注入到短期记忆中作为上下文,辅助模型推理
实践中的实现方式:
在 Agent 开发实践中,长期记忆通常是一个独立的第三方组件,因为其内部有相对比较复杂的流程(信息提取、向量化、存储、检索等)。常见的长期记忆组件包括 Mem0、Zep、Memos、ReMe 等,这些组件提供了完整的 Record 和 Retrieve 能力,Agent 框架通过 API 集成这些组件。
夜雨聆风