主题
Agent 记忆
本章目标与前置知识(补充讲解)
先完成上下文工程。本章学习区分当前工作状态、单次会话历史与跨会话存储,并实现可查看、隔离、删除的偏好记忆。
用户今天说“回答简洁一点”,明天重新打开助手还希望保留这个偏好。把昨天整个会话无限塞回上下文既昂贵也容易暴露多余信息。 记忆(Memory) 是应用选择保存、更新和检索的信息;模型只有在信息进入本次上下文后才可能使用它,数据库中“存着”不代表模型自动知道。
README 与主 Notebook 的差异
上游 README 将 13-agent-memory.ipynb 描述成 Mem0 + Azure AI Search 实现;实际文件用 Python 字典 preference_store 和保存/读取偏好工具演示,不是这两个服务的集成,也不跨进程持久化。Cognee 是另一份独立示例。下文保留原课程的技术介绍,但以实际代码判断实现范围。
原课程精读:AI Agent 的记忆
在讨论创建 AI Agent 的独特优势时,主要讨论两点:调用工具完成任务的能力和随着时间推移的改进能力。记忆是创建能够自我改进、为用户创造更好体验的 Agent 的基础。
在本课中,我们将探讨 AI Agent 的记忆是什么,以及如何管理和使用它来提升应用的效果。
简介
本课内容包括:
• 理解 AI Agent 记忆 :记忆是什么以及为什么对 Agent 来说至关重要。
• 记忆的实现与存储 :为 AI Agent 增加记忆功能的实用方法,重点关注短期和长期记忆。
• 使 AI Agent 实现自我改进 :记忆如何使 Agent 从过去的交互中学习并随着时间提升。
可用的实现方案
本课包含两个全面的笔记本教程:
• 13-agent-memory.ipynb :实际使用 Python 内存字典与 Microsoft Agent Framework 演示偏好记忆(原 README 对 Mem0 / Azure AI Search 的描述与代码不符)
• 13-agent-memory-cognee.ipynb :使用 Cognee 实现结构化记忆,自动构建由嵌入支持的知识图谱,进行图谱可视化和智能检索
学习目标
完成本课后,你将掌握如何:
• 区分各种 AI Agent 记忆类型 ,包括工作记忆、短期记忆、长期记忆,以及角色记忆和情节记忆等特殊形式。
• 使用 Microsoft Agent Framework 实现和管理短期及长期记忆 ,利用 Mem0、Cognee、白板记忆等工具,并结合 Azure AI Search。
• 理解自我改进 AI Agent 的原理 ,以及健全的记忆管理系统如何促进持续学习和适应。
理解 AI Agent 记忆
本质上, AI Agent 的记忆指的是允许其保留和回忆信息的机制 。这些信息可以是对话的具体细节、用户偏好、过往行为,甚至是学习到的模式。
没有记忆,AI 应用通常是无状态的,这意味着每次交互都从头开始。这样会导致重复且令人沮丧的用户体验,Agent 会“忘记”之前的上下文或偏好。
为什么记忆很重要?
Agent 的智能与其回忆和利用过去信息的能力密切相关。记忆使得 Agent 能够:
• 反思 :从过去的行为和结果中学习。
• 互动 :维持持续对话的上下文。
• 主动和反应 :基于历史数据预判需求或做出适当回应。
• 自主 :通过调用存储的知识更独立地操作。
实现记忆的目标是让 Agent 更加 可靠且有能力 。
记忆类型
工作记忆
可以把它看作 Agent 在单次进行的任务或思考过程中使用的一张草稿纸。它保存执行下一步所需的即时信息。
对 AI Agent 而言,工作记忆通常捕获对话中最相关的信息,即使完整的聊天记录很长或被截断。它专注于提取关键要素,如需求、提议、决策和行动。
工作记忆示例
在旅游预订 Agent 中,工作记忆可能保存用户当前的请求,比如“我想预订去巴黎的行程”。这个具体需求保存在 Agent 的即时上下文中,以指导当前交互。
短期记忆
这种记忆保存会话或会话期间的信息。它是当前聊天的上下文,允许 Agent 引用对话中的先前轮次。
在Microsoft Agent Framework Python SDK 示例中,这对应于使用 agent.create_session() 创建的 AgentSession。会话是框架内建的短期记忆:当会话被重复使用时,它保持对话上下文,但当会话结束或应用重启时,该上下文不会被保存。需要永久保留的事实和偏好应存储于长期记忆,通常通过数据库、向量索引或其他持久存储。
短期记忆示例
如果用户问“去巴黎的航班多少钱?”,接着又问“那住宿怎么办?”,短期记忆确保 Agent 知道“那里”指的是同一对话中的“巴黎”。
长期记忆
这是跨多个会话或会话持续保存的信息。它允许 Agent 记住用户偏好、历史互动或一般知识,时间执行片段(Span)很长。这对于个性化非常重要。
长期记忆示例
长期记忆可能保存“Ben 喜欢滑雪和户外活动,喜欢山景咖啡,并因过去受伤想避免高级滑雪道”等信息。这些从之前交互中学到的信息会影响未来的旅游规划建议,使其高度个性化。
角色记忆
这种专门的记忆帮助 Agent 发展一致的“个性”或“角色”。它允许 Agent 记住关于自己或其角色的细节,使交互更加流畅和有针对性。
角色记忆示例 如果旅游 Agent 被设计为“滑雪专家”,角色记忆可能强化这个身份,影响其回答采用专家的语气和知识。
工作流程/情节记忆
该记忆保存 Agent 在复杂任务中采取的步骤序列,包括成功和失败。它类似于记住特定的“情节”或过往经验以便学习。
情节记忆示例
如果 Agent 尝试预订某航班但因无票失败,情节记忆可以记录此失败,使 Agent 在下次尝试时能够尝试替代航班或更明智地告知用户问题。
实体记忆
这涉及从对话中提取并记忆具体实体(如人物、地点或事物)和事件。它允许 Agent 构建讨论重点元素的结构化理解。
实体记忆示例
在谈论过去旅行的对话中,Agent 可能提取“巴黎”、“埃菲尔铁塔”和“在 Le Chat Noir 餐厅用餐”作为实体。未来交互时,Agent 能够回忆起“Le Chat Noir”并主动提出预订。
结构化 RAG(检索增强生成)
虽然 RAG 是一个更广泛的技术,但“结构化 RAG”被突出为强大的记忆技术。它从各种来源(对话、电子邮件、图像)中提取密集的结构化信息,并用其提升回答的精准度、召回率和速度。与仅依赖语义相似性的传统 RAG 不同,结构化 RAG 依赖信息的固有结构。
结构化 RAG 示例
结构化 RAG 不仅是简单匹配关键词,还能从邮件解析出航班详情(目的地、日期、时间、航空公司)并结构化存储。这样可以精准查询“我星期二预订了哪趟去巴黎的航班?”。
记忆的实现与存储
为 AI Agent 实现记忆涉及系统化的 记忆管理 过程,包括生成、存储、检索、整合、更新甚至“遗忘”(或删除)信息。检索尤为关键。
专用记忆工具
Mem0
管理 Agent 记忆的一种方法是使用专用工具如 Mem0。Mem0 作为持久记忆层,使 Agent 能够回忆相关交互、保存用户偏好和事实上下文,并通过反复学习成功和失败逐步提升。其核心思想是让无状态 Agent 变为有状态 Agent。
它通过 两阶段记忆流水线:提取和更新 工作。首先,将添加到 Agent 线程的消息发送到 Mem0 服务,该服务利用大语言模型(LLM)总结对话历史并提取新记忆。然后,基于 LLM 的更新阶段决定是否添加、修改或删除记忆,将它们存储于包含向量、图形和键值数据库的混合数据存储系统。该系统还支持多种记忆类型,并能融合图记忆管理实体间的关系。
Cognee
另一种强大方案是使用 Cognee ,这是一个开源的 AI Agent 语义记忆,将结构化和非结构化数据转换为带嵌入支持的可查询知识图谱。Cognee 提供 双存储架构 ,结合向量相似性搜索和图关系,使 Agent 不仅理解信息的相似性,还理解概念间的关联。
它擅长基于向量相似性、图结构和 LLM 推理的 混合检索 ——从原始片段查找到图谱感知的问答。系统维护一步步演化的 活跃记忆 ,作为一个连接的图谱保持可查询状态,支持短期会话上下文和长期持久记忆。
Cognee 笔记本教程(13-agent-memory-cognee.ipynb)展示了构建此统一记忆层的过程,包含吸收多样数据源、知识图谱可视化以及为特定 Agent 需求定制的多种查询策略实用示例。
用 RAG 存储记忆
除了专用记忆工具如 Mem0 外,你可以利用强大的搜索服务如 Azure AI Search 作为存储和检索记忆的后端 ,特别适用于结构化 RAG。
这允许你用自己的数据为 Agent 回答提供基础,确保答案更相关且准确。Azure AI Search 可用于存储用户特定的旅行记忆、产品目录或其他领域知识。
Azure AI Search 支持包括 结构化 RAG 在内的功能,擅长从大量数据集(如对话历史、电子邮件甚至图像)中提取和检索密集的结构化信息。实际精确率与召回率需要在具体数据和任务集上测量,不能保证优于其他检索方式。
使 AI Agent 自我改进
自我改进 Agent 的常见模式是引入一个 “知识 Agent” 。这个独立 Agent 观察用户与主 Agent 的主要对话,它的作用是:
识别有价值信息 :确定对话中是否存在可作为通用知识或具体用户偏好的值得保存内容。
提取和总结 :萃取对话中的关键学习或偏好。
存入知识库 :将提取信息持久化,通常存于向量数据库,以便后续检索。
增强未来查询 :当用户发起新查询时,知识 Agent 检索相关存储信息并附加到用户提示中,为主 Agent 提供关键上下文(类似 RAG)。
记忆的优化
• 延迟管理 :为避免拖慢用户交互,先使用更便宜快速的模型快速判断信息是否有存储或检索价值,仅在必要时调用更复杂的提取/检索流程。
• 知识库维护 :对于不断增长的知识库,较少使用的信息可迁移至“冷存储”以控制成本。
记忆的类型、生命周期与工程选择(补充讲解)
原课程区分工作记忆、短期会话、长期记忆、人格/偏好、过程或情节记忆、实体记忆以及结构化 RAG。这些是用途分类,不要求你为每类部署一个数据库。
| 信息 | 合适表示 | 为什么 |
|---|---|---|
| 本次订单状态 | 结构化状态对象 | 可做字段校验和事务更新 |
| 最近几轮聊天 | 有长度上限的会话消息 | 保留指代与对话连续性 |
| “偏好简洁回答” | 用户范围内的键值记录 | 易修改、易删除 |
| 一次失败任务的教训 | 带结果和来源的事件记录 | 可以检索,但不能当作所有场景的定律 |
| 公司政策 | 有版本和权限的文档索引 | 有效期与访问范围比相似度更重要 |
| 人、项目之间关系 | 图或关系数据库 | 支持关系查询与实体消歧 |
一个稳妥生命周期是:识别可保存信息 → 确认范围与来源 → 与已有记录比较 → 新增/更新/删除 → 按权限检索 → 只选入相关内容。Mem0 的提取与更新流程、Cognee 的知识图谱、Azure AI Search 的索引都是可选实现;“结构化”并不能保证更高精度,必须用自己的任务集评估。
主 Notebook 的关键代码
save_preference 和 get_preferences 读写 preference_store。复用 create_session() 得到的会话对象可维持短期历史;新会话不自动继承全部聊天。字典在内核重启后消失。样例里固定用户 sarah 是命名空间教学值,不能用作生产身份认证。
另外,Notebook 定义了 search_hotels,但创建 Agent 时工具列表只注册保存和读取偏好;指令却要求搜索酒店。如果要实验酒店搜索,应显式将 search_hotels 加入 tools 并核对签名。 定义了函数并不等于模型可以调用它。 原文及下载保留原样,这项修正是本项目的代码核对结论。
在已配置 Foundry 的 Jupyter 内按顺序运行主 Notebook,观察保存偏好→同会话复用→新会话加载偏好的差别。云端运行未在本站验证;Cognee 额外服务与依赖按其独立说明准备,不要认为主示例已替你启动它。
实操:跨进程记忆、隔离与删除(扩展实践)
Python 3.12+,项目根目录,无额外依赖:
bash
python3 examples/assistant/app.py '退款政策是什么?' --stage 4 --user alice --remember '简洁回答'
python3 examples/assistant/app.py '退款政策是什么?' --stage 4 --user alice
python3 examples/assistant/app.py '退款政策是什么?' --stage 4 --user bob
python3 examples/assistant/app.py --stage 4 --user alice --forget预期 Alice 第二次运行仍显示已保存偏好,Bob 无该偏好;最后一条删除 Alice 对应的本地记忆 和任务 。storage.py 对用户标签做哈希以形成文件名,在 .assistant-data/ 中保存 JSON;哈希文件名不加密内容。原子替换防止半写文件,但没有数据库锁,不能支持并发服务。
这个存储是真实读写;“模型理解简洁偏好”的部分由规则模拟。--user 只用于本地演示,真实 Web 服务必须从认证会话读取用户身份,不能相信请求自行声明的用户名。
排错、限制与练习
| 现象 | 原因 | 修复 |
|---|---|---|
| 重启后偏好丢了 | 只存在内存字典 | 选择持久化存储并加载 |
| 用户 B 看见 A 的偏好 | 查询未强制用户范围 | 身份绑定、存储分区、检索过滤一起做 |
| 模型坚持过期事实 | 没有版本、有效期或纠正入口 | 保存来源与更新时间,支持覆盖和删除 |
| 记忆文件损坏后悄悄归零 | 读取异常被当成空数据 | 明确报错,保留原文件供恢复 |
练习: 用户说“以后别记我的旅行偏好”。仅从下一次提示里移除是否足够?
参考答案与实现方向
不够。持久化记录、派生摘要、向量索引和缓存都可能还在。应找到同一用户相关记忆并按策略删除/失效,随后验证新会话不再检索到它。项目的 --forget 实现单个本地命名空间删除;它没有远端索引,因而不代表已经解决分布式删除。
下一章进入Microsoft Agent Framework,把会话、工具和工作流组织成清晰的应用结构。
原课程代码与补充材料
以下是本章实际源文件对应的阅读页。Notebook 已分解为说明、代码及原文件输出;云端示例未进行联网端到端验证。正文中的片段用于解释,运行时使用完整 Notebook 和准备篇的固定依赖。
本章来源
基于 英文原文 与 简体中文翻译 整理,原作者为 Microsoft 与开源贡献者,采用 MIT 许可证。本页标明“补充讲解”与“扩展实践”的内容为本项目新增。
来源提交:25b7985f3b2d · 获取日期:2026-09-14。参见版本校订记录。