# AI Agent 的记忆
[![Agent Memory](../../../translated_images/zh-CN/lesson-13-thumbnail.959e3bc52d210c64.webp)](https://youtu.be/QrYbHesIxpw?si=qNYW6PL3fb3lTPMk)

在讨论创建 AI Agent 的独特优势时，主要讨论两点：调用工具完成任务的能力和随着时间推移的改进能力。记忆是创建能够自我改进、为用户创造更好体验的 Agent 的基础。

在本课中，我们将探讨 AI Agent 的记忆是什么，以及如何管理和使用它来提升应用的效果。

## 简介

本课内容包括：

• **理解 AI Agent 记忆**：记忆是什么以及为什么对 Agent 来说至关重要。

• <strong>记忆的实现与存储</strong>：为 AI Agent 增加记忆功能的实用方法，重点关注短期和长期记忆。

• **使 AI Agent 实现自我改进**：记忆如何使 Agent 从过去的交互中学习并随着时间提升。

## 可用的实现方案

本课包含两个全面的笔记本教程：

• **[13-agent-memory.ipynb](./13-agent-memory.ipynb)**：使用 Mem0 和 Azure AI Search 结合 Microsoft Agent Framework 实现记忆

• **[13-agent-memory-cognee.ipynb](./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 能够：

• <strong>反思</strong>：从过去的行为和结果中学习。

• <strong>互动</strong>：维持持续对话的上下文。

• <strong>主动和反应</strong>：基于历史数据预判需求或做出适当回应。

• <strong>自主</strong>：通过调用存储的知识更独立地操作。

实现记忆的目标是让 Agent 更加<strong>可靠且有能力</strong>。

### 记忆类型

#### 工作记忆

可以把它看作代理在单次进行的任务或思考过程中使用的一张草稿纸。它保存执行下一步所需的即时信息。

对 AI Agent 而言，工作记忆通常捕获对话中最相关的信息，即使完整的聊天记录很长或被截断。它专注于提取关键要素，如需求、提议、决策和行动。

<strong>工作记忆示例</strong>

在旅游预订代理中，工作记忆可能保存用户当前的请求，比如“我想预订去巴黎的行程”。这个具体需求保存在代理的即时上下文中，以指导当前交互。

#### 短期记忆

这种记忆保存会话或会话期间的信息。它是当前聊天的上下文，允许代理引用对话中的先前轮次。

在[Microsoft Agent Framework](https://github.com/microsoft/agent-framework) Python SDK 示例中，这对应于使用 `agent.create_session()` 创建的 `AgentSession`。会话是框架内建的短期记忆：当会话被重复使用时，它保持对话上下文，但当会话结束或应用重启时，该上下文不会被保存。需要永久保留的事实和偏好应存储于长期记忆，通常通过数据库、向量索引或其他持久存储。

<strong>短期记忆示例</strong>

如果用户问“去巴黎的航班多少钱？”，接着又问“那住宿怎么办？”，短期记忆确保代理知道“那里”指的是同一对话中的“巴黎”。

#### 长期记忆

这是跨多个会话或会话持续保存的信息。它允许 Agent 记住用户偏好、历史互动或一般知识，时间跨度很长。这对于个性化非常重要。

<strong>长期记忆示例</strong>

长期记忆可能保存“Ben 喜欢滑雪和户外活动，喜欢山景咖啡，并因过去受伤想避免高级滑雪道”等信息。这些从之前交互中学到的信息会影响未来的旅游规划建议，使其高度个性化。

#### 角色记忆

这种专门的记忆帮助 Agent 发展一致的“个性”或“角色”。它允许 Agent 记住关于自己或其角色的细节，使交互更加流畅和有针对性。

<strong>角色记忆示例</strong>
如果旅游代理被设计为“滑雪专家”，角色记忆可能强化这个身份，影响其回答采用专家的语气和知识。

#### 工作流程/情节记忆

该记忆保存代理在复杂任务中采取的步骤序列，包括成功和失败。它类似于记住特定的“情节”或过往经验以便学习。

<strong>情节记忆示例</strong>

如果代理尝试预订某航班但因无票失败，情节记忆可以记录此失败，使代理在下次尝试时能够尝试替代航班或更明智地告知用户问题。

#### 实体记忆

这涉及从对话中提取并记忆具体实体（如人物、地点或事物）和事件。它允许代理构建讨论重点元素的结构化理解。

<strong>实体记忆示例</strong>

在谈论过去旅行的对话中，代理可能提取“巴黎”、“埃菲尔铁塔”和“在 Le Chat Noir 餐厅用餐”作为实体。未来交互时，代理能够回忆起“Le Chat Noir”并主动提出预订。

#### 结构化 RAG（检索增强生成）

虽然 RAG 是一个更广泛的技术，但“结构化 RAG”被突出为强大的记忆技术。它从各种来源（对话、电子邮件、图像）中提取密集的结构化信息，并用其提升回答的精准度、召回率和速度。与仅依赖语义相似性的传统 RAG 不同，结构化 RAG 依赖信息的固有结构。

**结构化 RAG 示例**

结构化 RAG 不仅是简单匹配关键词，还能从邮件解析出航班详情（目的地、日期、时间、航空公司）并结构化存储。这样可以精准查询“我星期二预订了哪趟去巴黎的航班？”。

## 记忆的实现与存储

为 AI Agent 实现记忆涉及系统化的<strong>记忆管理</strong>过程，包括生成、存储、检索、整合、更新甚至“遗忘”（或删除）信息。检索尤为关键。

### 专用记忆工具

#### Mem0

管理代理记忆的一种方法是使用专用工具如 Mem0。Mem0 作为持久记忆层，使代理能够回忆相关交互、保存用户偏好和事实上下文，并通过反复学习成功和失败逐步提升。其核心思想是让无状态代理变为有状态代理。

它通过<strong>两阶段记忆流水线：提取和更新</strong>工作。首先，将添加到代理线程的消息发送到 Mem0 服务，该服务利用大型语言模型（LLM）总结对话历史并提取新记忆。然后，基于 LLM 的更新阶段决定是否添加、修改或删除记忆，将它们存储于包含向量、图形和键值数据库的混合数据存储系统。该系统还支持多种记忆类型，并能融合图记忆管理实体间的关系。

#### Cognee

另一种强大方案是使用 **Cognee**，这是一个开源的 AI Agent 语义记忆，将结构化和非结构化数据转换为带嵌入支持的可查询知识图谱。Cognee 提供<strong>双存储架构</strong>，结合向量相似性搜索和图关系，使代理不仅理解信息的相似性，还理解概念间的关联。

它擅长基于向量相似性、图结构和 LLM 推理的<strong>混合检索</strong>——从原始片段查找到图谱感知的问答。系统维护一步步演化的<strong>活跃记忆</strong>，作为一个连接的图谱保持可查询状态，支持短期会话上下文和长期持久记忆。

Cognee 笔记本教程（[13-agent-memory-cognee.ipynb](./13-agent-memory-cognee.ipynb)）展示了构建此统一记忆层的过程，包含吸收多样数据源、知识图谱可视化以及为特定 Agent 需求定制的多种查询策略实用示例。

### 用 RAG 存储记忆

除了专用记忆工具如 Mem0 外，您可以利用强大的搜索服务如 **Azure AI Search 作为存储和检索记忆的后端**，特别适用于结构化 RAG。

这允许您用自己的数据为 Agent 回答提供基础，确保答案更相关且准确。Azure AI Search 可用于存储用户特定的旅行记忆、产品目录或其他领域知识。

Azure AI Search 支持包括<strong>结构化 RAG</strong>在内的功能，擅长从大量数据集（如对话历史、电子邮件甚至图像）中提取和检索密集的结构化信息。与传统的文本分块和嵌入方法相比，它提供“超越人类的精确度和召回率”。

## 使 AI Agent 自我改进

自我改进 Agent 的常见模式是引入一个<strong>“知识代理”</strong>。这个独立代理观察用户与主代理的主要对话，它的作用是：

1. <strong>识别有价值信息</strong>：确定对话中是否存在可作为通用知识或具体用户偏好的值得保存内容。

2. <strong>提取和总结</strong>：萃取对话中的关键学习或偏好。

3. <strong>存入知识库</strong>：将提取信息持久化，通常存于向量数据库，以便后续检索。

4. <strong>增强未来查询</strong>：当用户发起新查询时，知识代理检索相关存储信息并附加到用户提示中，为主代理提供关键上下文（类似 RAG）。

### 记忆的优化

• <strong>延迟管理</strong>：为避免拖慢用户交互，先使用更便宜快速的模型快速判断信息是否有存储或检索价值，仅在必要时调用更复杂的提取/检索流程。

• <strong>知识库维护</strong>：对于不断增长的知识库，较少使用的信息可迁移至“冷存储”以控制成本。

## 对 Agent 记忆还有疑问？

加入 [Microsoft Foundry Discord](https://discord.com/invite/ATgtXmAS5D) 与其他学习者交流，参加答疑时段，获取您的 AI Agent 问题答案。
## 上一课

[AI Agent 的上下文工程](../12-context-engineering/README.md)

## 下一课

[探索 Microsoft Agent Framework](../14-microsoft-agent-framework/README.md)

---

<!-- CO-OP TRANSLATOR DISCLAIMER START -->
**免责声明**：
本文件由 AI 翻译服务 [Co-op Translator](https://github.com/Azure/co-op-translator) 翻译完成。尽管我们力求准确，但请注意，自动翻译可能包含错误或不准确之处。原始语言版文件应视为权威来源。对于重要信息，建议使用专业人工翻译。我们对因使用本翻译而产生的任何误解或误释不承担责任。
<!-- CO-OP TRANSLATOR DISCLAIMER END -->