在讨论创建 AI 代理的独特优势时,主要涉及两点:调用工具完成任务的能力和随时间改进的能力。记忆是创建自我改进代理的基础,这些代理可以为我们的用户创造更好的体验。
在本课中,我们将探讨 AI 代理的记忆是什么,以及我们如何管理和利用它来增强我们的应用程序。
本课内容包括:
• 理解 AI 代理记忆:记忆是什么以及它为何对代理至关重要。
• 实现和存储记忆:为 AI 代理添加记忆功能的实用方法,重点是短期记忆和长期记忆。
• 让 AI 代理实现自我改进:记忆如何使代理从过去的交互中学习并随时间提升。
本课包括两个综合笔记本教程:
• 13-agent-memory.ipynb:使用 Mem0 和 Azure AI Search 配合 Microsoft Agent Framework 实现记忆
• 13-agent-memory-cognee.ipynb:使用 Cognee 实现结构化记忆,自动构建由嵌入支持的知识图,进行图谱可视化和智能检索
完成本课后,您将能够:
• 区分各种类型的 AI 代理记忆,包括工作记忆、短期记忆和长期记忆,以及如角色记忆和情景记忆等专门形式。
• 实现和管理 AI 代理的短期和长期记忆,利用 Microsoft Agent Framework,结合 Mem0、Cognee、白板记忆以及整合 Azure AI Search 等工具。
• 理解自我改进 AI 代理背后的原理,以及健壮的记忆管理系统如何促进持续学习和适应。
从本质上讲,AI 代理的记忆指的是允许其保留和回忆信息的机制。这些信息可能是关于对话的具体细节、用户偏好、过去行为,甚至学习到的模式。
没有记忆,AI 应用通常是无状态的,即每次交互都从头开始。这会导致重复且令人沮丧的用户体验,代理“忘记”了之前的上下文或偏好。
代理的智能与其回忆和利用过去信息的能力密切相关。记忆使代理能够:
• 反思:从过去的行为和结果中学习。
• 互动:在持续的对话中保持上下文。
• 主动和反应:基于历史数据预测需求或做出适当响应。
• 自治:通过利用存储的知识更独立地运行。
实现记忆的目标是使代理更可靠和有能力。
可以将其看作代理在单个进行中的任务或思考过程中使用的草稿纸。它保存计算下一步所需的即时信息。
对于 AI 代理,工作记忆通常捕获会话中最相关的信息,即使完整聊天记录很长或被截断。它专注于提取关键元素,如需求、提议、决策和行动。
工作记忆示例
在旅游预订代理中,工作记忆可能捕获用户当前的请求,例如“我想预订去巴黎的旅行”。这一具体需求保存在代理的即时上下文中,以指导当前的交互。
此类记忆保留信息直到单次对话或会话结束。它是当前聊天的上下文,让代理能够回溯对话中的先前回合。
在 Microsoft Agent Framework Python SDK 示例中,这对应于 AgentSession,由 agent.create_session() 创建。该会话是框架内置的短期记忆:它在同一会话重用期间保持对话上下文可用,但会话结束或应用重启时不保存该上下文。需要跨会话保存的事实和偏好应使用长期记忆,通常通过数据库、向量索引或其他持久存储实现。
短期记忆示例
如果用户问“去巴黎的机票多少钱?”然后又问“那里的住宿怎么样?”,短期记忆确保代理知道“那里”指的是“巴黎”,保持同一对话的上下文。
这是跨多个对话或会话持续存储的信息。它允许代理记住用户偏好、历史交互或长期的通用知识。这对个性化非常重要。
长期记忆示例
长期记忆可能存储“Ben 喜欢滑雪和户外活动,喜欢在山景前喝咖啡,并因过去受伤而想避免高级滑雪道”的信息。这些来自之前交互的知识会影响未来的旅行规划建议,使其高度个性化。
这种专门的记忆帮助代理形成一致的“个性”或“角色”。它允许代理记住自身或其预期角色的细节,使交互更流畅和专注。
角色记忆示例
如果旅游代理被设计成“滑雪专家计划师”,角色记忆可能强化这一身份,影响其回答,保持专家的语气和知识水平。
此记忆保存代理在完成复杂任务时采取的步骤序列,包括成功和失败。就像记住特定的“情景”或过去经验,以便从中学习。
情景记忆示例
如果代理尝试预订某次特定航班失败(因无票),情景记忆会记录这一失败,帮助代理在后续尝试时尝试其他航班,或者更有针对性地向用户说明问题。
涉及从对话中提取并记住特定实体(如人名、地点或物品)和事件。允许代理构建对讨论关键元素的结构化理解。
实体记忆示例
从一段关于过去旅行的对话中,代理可能提取“巴黎”、“埃菲尔铁塔”以及“Le Chat Noir 餐厅晚餐”等实体。在以后的交互中,代理可以回忆“Le Chat Noir”,并提供再次预订的建议。
虽然 RAG 是更广泛的技术,“结构化 RAG”被突显为一种强大的记忆技术。它从各种来源(对话、邮件、图像)提取密集的结构化信息,并用于提升回答的精准度、召回率和速度。区别于仅依赖语义相似度的经典 RAG,结构化 RAG 利用信息固有的结构。
结构化 RAG 示例
不仅仅进行关键词匹配,结构化 RAG 可以从邮件中解析航班详情(目的地、日期、时间、航空公司)并以结构化方式存储。这样可以精准查询如“我周二预订了去巴黎的哪趟航班?”。
为 AI 代理实现记忆涉及一个系统化的记忆管理流程,包括生成、存储、检索、整合、更新,甚至“遗忘”(或删除)信息。检索是特别关键的一环。
一种存储和管理代理记忆的方式是使用像 Mem0 这样的专业工具。Mem0 作为持久记忆层,使代理能回忆相关交互、存储用户偏好与事实上下文,并从成功和失败中学习。这里的理念是将无状态代理转变为有状态代理。
它通过两阶段记忆管道:提取和更新实现。首先,将添加到代理线程的消息发送给 Mem0 服务,利用大型语言模型(LLM)总结对话历史并提取新记忆。随后,基于 LLM 的更新阶段决定是否添加、修改或删除这些记忆,存储在混合数据存储中,可能包括向量数据库、图数据库和键值数据库。该系统还支持多种记忆类型,并可结合图记忆管理实体间关系。
另一个强大方案是使用Cognee,一个开源的 AI 代理语义记忆,将结构化和非结构化数据转换为由嵌入支持的可查询知识图。Cognee 提供双存储架构,结合向量相似度搜索与图关系,帮助代理不仅理解信息相似性,还理解概念间如何关联。
它擅长混合检索,融合向量相似度、图结构和 LLM 推理——从原始片段查找到图感知式问答。系统维护一个可持续演进的“活记忆”,以单一连接图形式保持可查询,支持短期会话上下文和长期持久记忆。
Cognee 的笔记本教程(13-agent-memory-cognee.ipynb)展示了构建这一统一记忆层的过程,涵盖多样数据源的引入、知识图可视化以及根据特定代理需求调整的搜索策略查询。
除了专用记忆工具如 mem0 ,你还可以利用强大的搜索服务,比如Azure AI Search 作为存储和检索记忆的后端,特别适合结构化 RAG。
这允许你用自己的数据支持代理回答,确保更相关且准确的答案。Azure AI Search 可用于存储用户特定的旅行记忆、产品目录或其他领域知识。
Azure AI Search 支持诸如结构化 RAG,擅长从大型数据集(如对话记录、电子邮件甚至图片)提取和检索密集、结构化信息。相较于传统文本分块和嵌入方法,它提供了“超越人类的精准度与召回率”。
自我改进代理的常见模式是引入一个“知识代理”。这个独立代理观察用户与主代理之间的对话。其职责是:
识别有价值的信息:判断会话中的哪些内容值得保存为通用知识或特定用户偏好。
提取和总结:从对话中提炼出本质的学习或偏好。
存储到知识库:将提取的信息持久保存,通常存入向量数据库,以便后续检索。
增强未来查询:当用户发起新查询时,知识代理检索相关存储信息,将其附加到用户的提示中,为主代理提供关键上下文(类似 RAG)。
• 延迟管理:为避免延长用户交互时间,可以初步使用更廉价且快速的模型快速判断信息是否有价值,只有在必要时才调用更复杂的提取/检索流程。
• 知识库维护:对于不断增长的知识库,较少使用的信息可以转入“冷存储”以降低成本。
欢迎加入 Microsoft Foundry Discord,与其他学习者交流,参加答疑时间,获得 AI 代理相关的问题解答。
免责声明: 本文件由 AI 翻译服务 Co-op Translator 翻译完成。尽管我们力求准确,但请注意,自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。