AI Agents记忆系统架构:3大类,6种操作
一、Agents记忆系统 3 大类,6种操作
将记忆表示分为三类:
参数化记忆
33%
上下文结构化记忆
33%
上下文非结构化记忆
33%
记忆是AI系统的基本组成部分,尤其是对于基于LLMs的Agents。
详细介绍六种基本的记忆操作:
巩固
17%
更新
17%
索引
17%
遗忘
17%
检索
17%
压缩
17%
1.记忆的 3 大类
1.1 参数化记忆
参数化记忆是指模型内部参数中隐式存储的知识。
这些知识在预训练或后训练过程中获得,并在推理时通过前馈计算访问。
📌
•
特点:
◦
提供即时、长期且持久的记忆,能够快速检索事实和常识知识。
50%

50%
•
缺乏透明性,难以根据新体验或特定任务上下文选择性地更新。
•
应用场景:适用于需要快速访问固定知识的场景,例如问答系统和常识推理任务。

1.2 上下文非结构化记忆
上下文非结构化记忆是一种显式的、模态通用的记忆系统。
用于存储和检索跨异构输入(如文本、图像、音频、视频)的信息。
📌
•
特点:
•
支持基于感知信号的推理,能够整合多模态上下文。
•
根据时间范围,进一步分为短期记忆(如当前对话会话上下文)和长期记忆(如跨会话对话记录和个人持久知识)。
•
应用场景:适用于需要处理多模态输入和动态上下文的任务,例如多模态对话系统和视觉问答系统。
1.3 上下文结构化记忆
上下文结构化记忆是指以预定义的、可解释的格式或模式。
(如知识图谱、关系表、本体论)组织的显式记忆,这些记忆可以根据请求进行查询。
📌
•
特点:
•
支持符号推理和精确查询,通常与预训练语言模型的关联能力相辅相成。
•
可以是短期的(在推理时构建用于局部推理)或长期的(跨会话存储策划知识)。
•
应用场景:适用于需要精确知识检索和推理的任务,例如知识图谱问答和复杂事件推理任务。
2.记忆 6 种操作
这些操作被分为两大类:记忆管理(Memory Management)和记忆利用(Memory Utilization)。
2.1 记忆管理
记忆管理涉及如何存储、维护和修剪记忆,以支持记忆在与外部环境交互过程中的有效使用。
记忆管理包括以下四种核心操作:
📌
Consolidation(巩固):
•
定义:将短期经验转化为持久记忆,例如将对话历史编码为模型参数、知识图谱或知识库。
•
功能:支持持续学习、个性化、外部记忆库构建和知识图谱构建。
•
应用场景:在多轮对话系统中,将对话历史整合到持久记忆中,以便在未来的对话中使用。
📌
Indexing(索引):
•
定义:构建辅助代码(如实体、属性或基于内容的表示),以便高效检索存储的记忆。
•
功能:支持可扩展的检索,包括符号、神经和混合记忆系统。
•
应用场景:在大规模记忆库中,通过索引快速定位和检索相关信息。
📌
Updating(更新):
•
定义:重新激活现有记忆表示并对其进行临时修改。
•
功能:支持持续适应,同时保持记忆一致性。例如,通过定位和编辑机制修改模型参数,或通过总结、修剪或精炼来更新上下文记忆。
•
应用场景:在对话系统中,根据用户反馈动态更新记忆内容。
📌
Forgetting(遗忘):
•
定义:有选择性地抑制可能过时、无关或有害的记忆内容。
•
功能:通过遗忘技术(如修改模型参数以擦除特定知识)或基于时间的删除和语义过滤来丢弃不再相关的内容。
•
应用场景:在处理敏感信息时,确保隐私和安全,同时减少记忆干扰。
2.2 记忆利用
记忆利用涉及在推理过程中检索和使用存储的记忆,以支持下游任务(如响应生成、视觉定位或意图预测)。
记忆利用包括以下两种操作:
📌
Retrieval(检索):
•
定义:根据输入识别并访问相关记忆内容。
•
功能:支持从多个来源(如多模态输入、跨会话记忆)检索信息。
•
应用场景:在问答系统中,根据问题检索相关的知识库内容;在多轮对话中,检索与当前对话相关的上下文信息。
📌
Compression(压缩):
•
定义:在保持关键信息的同时减少记忆大小,以便在有限的上下文窗口中高效使用。
二、Mem0:AI Agent的持久化记忆体系
两种主要的记忆类型
1.1 短期记忆
AI系统中最基础的记忆形式。
用于存储即时上下文信息——类似于人类记住对话中刚刚提及的内容。
📌
主要包括:
● 对话历史:最近的交互消息及其顺序
1.2 长期记忆
更先进的AI应用。
会部署长期记忆系统,实现跨对话的信息留存。
📌
具体包含:
● 事实性记忆:关于用户特征、偏好及领域知识的存储
● 情景记忆:过往交互记录与经历
● 语义记忆:对概念及其关联关系的理解
📌
Mem0通过以下方式构建长期记忆系统:
Mem0的两个主要接口
📌
● add:用于存储对话内容并转化为记忆
● search:基于查询条件获取相关记忆
2.1 记忆写入流程
写入架构示意图
写入操作通过多阶段处理对话内容:
📌
a. 信息提取
● 大语言模型从对话中提取关键记忆
● 识别重要实体及其关联关系
📌
b. 冲突处理
● 系统比对新旧数据
● 自动检测并解决信息矛盾
📌
c. 记忆存储
● 向量数据库存储记忆本体
● 图数据库维护关系网络
● 每次交互后实时更新记忆库
记忆检索流程
检索架构示意图
检索操作通过智能分层处理实现精准召回:
📌
a. 查询优化
● 大语言模型解析并优化搜索语句
● 系统预置定向筛选条件
📌
b. 向量搜索
● 执行基于语义的向量相似度匹配
● 按关联度对结果排序
● 支持多维筛选(用户/代理/元数据等)
📌
c. 结果合成
● 聚合并优化搜索结果
● 返回带相关性评分的记忆内容
● 包含完整元数据及时间戳
完全兼容OpenAI规范
可以像操作OpenAI客户端一样的方式来操作Mem0客户端,接口完全通用:
代码块
Plain Text
from mem0.proxy.main importMem0
client =Mem0(api_key="m0-xxx")
# First interaction: Storing user preferences
messages =[
{
"role":"user",
"content":"I love indian food but I cannot eat pizza since allergic to cheese."
},
]
user_id ="alice"
chat_completion = client.chat.completions.create(
messages=messages,
model="gpt-4o-mini",
user_id=user_id
)
# Memory saved after this will look like: "Loves Indian food. Allergic to cheese and cannot eat pizza."
如需自定义相关配置(如向量数据库信息),则可以在初始化Mem0客户端的时候加入config参数:
代码块
Plain Text
config = {
"vector_store":{
"provider":"qdrant",
"config":{
"host":"localhost",
"port":6333,
}
},
}
client =Mem0(config=config)
chat_completion = client.chat.completions.create(
messages=[
{
"role":"user",
"content":"What's the capital of France?",
}
],
提示词配置
用户可以根据实际应用自行修改或者配置以下两种提示词。
4.1 关键信息提取Prompt
通过定义该提示,可以精确控制如何从用户消息中提取关键信息。
关键信息提取允许根据特定使用场景或专业领域,定制Mem0的信息处理行为。
📌
建议遵循以下原则:
● 明确指定需要提取的信息类型
以下是官方给出的示例:
代码块
Plain Text
custom_fact_extraction_prompt = """
Please only extract entities containing customer support information, order details, and user information.
Here are some few shot examples:
Input: Hi.
Output: {{"facts" : []}}
Input: The weather is nice today.
Output: {{"facts" : []}}
Input: My order #12345 hasn't arrived yet.
4.2 记忆更新Prompt
通过自定义该提示,可以精确控制记忆的更新机制。
记忆更新是用于决定对记忆执行何种操作的控制指令。
📌
Mem0会将新提取的事实与现有记忆进行比对,并自动决定采取以下操作之一:
以下是官方给出的示例:
代码块
Plain Text
UPDATE_MEMORY_PROMPT = """You are a smart memory manager which controls the memory of a system.
You can perform four operations: (1) add into the memory, (2) update the memory, (3) delete from the memory, and (4) no change.
Based on the above four operations, the memory will change.
Compare newly retrieved facts with the existing memory. For each new fact, decide whether to:
- ADD: Add it to the memory as a new element
- UPDATE: Update an existing memory element
- DELETE: Delete an existing memory element