AI Agent 应用场景的持续拓展,智能体面临的任务复杂度与对话历史长度与日俱增。然而,大语言模型(LLM)的上下文窗口限制、不断攀升的 Token 成本,以及如何让 AI 精准 "记住" 用户偏好与历史交互等问题,已成为制约实用型 AI Agent 落地的核心瓶颈。记忆系统(Memory System)作为针对性解决方案,成为构建高智能 AI Agent 的关键技术支撑。
一、记忆系统基础概念解析
(一)记忆的定义与核心分类
对 AI Agent 而言,记忆是其实现历史交互回溯、反馈学习与用户偏好适配的核心能力,主要分为两个层面:
-
会话级记忆(短期记忆):特指用户与 AI Agent 在单次会话中的多轮交互数据,包括用户查询、Agent 响应、工具调用及执行结果等,直接服务于当前会话的实时交互。
-
跨会话记忆(长期记忆):从多次会话中抽取提炼的通用信息,涵盖用户偏好、核心事实、领域经验等,能够跨会话辅助 Agent 进行个性化推理。
需要注意的是,短期记忆与长期记忆并非单纯以时间维度划分,核心区别在于是否能够跨 Session 复用。两者存在双向交互关系:长期记忆从短期记忆中提取有效信息不断迭代更新,同时又会反作用于短期记忆,为模型提供个性化推理支持。
(二)主流 Agent 框架的记忆定义对比
尽管各主流框架对记忆的命名存在差异,但均遵循 "会话级 + 跨会话级" 的二元划分逻辑,具体对比如下:
| 框架 | 会话级记忆 | 跨会话记忆 | 核心备注 |
|---|---|---|---|
| Google ADK | Session | Memory(Long-Term Knowledge) | 长期记忆作为可搜索的独立知识库 |
| LangChain | Short-term memory | Long-term memory | 长期记忆属于高阶辅助组件,非核心基础模块 |
| AgentScope | Memory | LongTermMemory | API 层面分为两个独立组件,功能边界清晰 |
二、Agent 框架集成记忆系统的通用架构
不同 Agent 框架在记忆系统的具体实现上存在细节差异,但均遵循统一的核心架构模式,理解这一模式有助于高效设计与落地记忆系统。
(一)通用集成流程
Agent 框架集成记忆系统的核心流程可概括为四步:
-
推理前加载:根据当前用户查询,从长期记忆中检索相关关联信息;
-
上下文注入:将检索到的长期记忆信息融入当前短期记忆,为模型推理提供上下文支撑;
-
记忆更新:推理完成后,将短期记忆中的有效信息提炼并写入长期记忆;
-
信息处理:长期记忆模块通过 LLM 结合向量化模型,完成信息的提取、存储与检索优化。
这一流程形成了 "短期记忆 - 长期记忆" 的闭环交互:短期记忆实时承接会话数据,长期记忆沉淀通用知识,两者协同保障 Agent 的交互连贯性与个性化能力。
(二)短期记忆(Session)核心特性
短期记忆的核心作用是存储当前会话的全量交互数据,其关键特性包括:
-
存储内容:涵盖用户输入、模型回复、工具调用请求及执行结果等会话相关数据;
-
参与方式:直接作为 LLM 的输入上下文,参与实时推理过程;
-
更新机制:每一轮交互都会新增或更新数据,保持实时性;
核心限制:受 LLM 的 maxToken 约束,超出限制时需通过上下文工程策略处理。
(三)长期记忆(跨会话)核心特性与实现
长期记忆与短期记忆形成双向互动机制,同时具备独立的技术实现逻辑:
1. 与短期记忆的双向交互
-
Record(写入):从短期记忆的会话数据中提取 "用户偏好、核心事实、任务经验" 等有效信息,通过 LLM 进行语义理解与抽取后,存储至长期记忆;
-
Retrieve(检索):基于当前用户查询的语义特征,从长期记忆中检索相关信息,注入短期记忆以辅助模型实现个性化推理。
2. 实践实现方式
长期记忆在实际开发中通常以独立第三方组件形式存在,因其涉及信息提取、向量化、存储、检索等复杂流程。主流长期记忆组件包括 Mem0、Zep、Memos、ReMe 等,这些组件均提供完整的 Record 与 Retrieve 能力,Agent 框架可通过 API 快速集成。
3. 信息组织维度
长期记忆的信息组织主要分为两大维度,满足不同场景需求:
-
用户维度(个人记忆):以用户为核心构建实时更新的个人知识库,可支撑用户画像分析、个性化推荐等场景,在处理具体任务时按需加载至短期记忆;
-
业务领域维度:沉淀领域经验与工具使用经验,既可以纳入领域知识库,也可通过强化学习微调的方式融入模型,提升 Agent 在特定领域的专业能力。
三、短期记忆的上下文工程策略
短期记忆直接参与 Agent 与 LLM 的交互过程,随着对话长度增加,必然面临 Token 超限与成本激增的问题。上下文工程策略的核心目标是通过智能化处理,在保障信息完整性的前提下,有效控制上下文规模。
(一)核心挑战与目标
-
核心挑战:长对话场景下,短期记忆数据量易超出模型上下文窗口限制,导致信息丢失或 Token 成本过高;
-
核心目标:智能控制上下文大小,在减少 Token 消耗的同时,保持关键信息完整,确保 Agent 高效理解与响应。
(二)三大核心处理策略
上下文工程针对短期记忆的处理策略主要包括缩减、卸载与隔离三类,各类策略的适用场景与实现逻辑如下:
1. 缩减(Reduction):有损压缩,提炼核心
通过摘要、过滤等方式减少信息体量,保留核心要点,去除冗余细节,属于 "有损压缩" 策略。具体实现包括两种方式:
- 预览保留:对大块文本内容,仅保留前 N 个字符或关键片段作为预览,移除原始完整内容;
- 总结摘要:利用 LLM 对整段内容进行概括总结,提取核心信息,丢弃次要细节。该策略的核心优势是能快速降低 Token 消耗,但需在信息压缩率与完整性之间寻找平衡。
2. 卸载(Offloading):无损存储,按需检索
将短期记忆中的完整内容转移至外部存储(如文件系统、数据库等),仅在上下文中保留引用指针(如文件路径、UUID 等),需要时通过指针检索恢复完整信息。
- 适用场景:网页搜索结果、超长工具输出、临时计划等占用大量 Token 的内容;
- 核心优势:上下文保持简洁,Token 消耗低,且信息无丢失,支持按需恢复使用。
3. 隔离(Isolation):模块化拆分,降低负载
通过多智能体架构,将复杂任务拆分至多个子智能体,实现上下文隔离,避免不同任务的信息交叉污染,同时降低单个 Agent 的上下文负载。
- 适用场景:任务指令清晰简短、仅关注最终输出结果的场景(如代码库中搜索特定片段);
- 核心优势:单个 Agent 的上下文规模小,计算开销低,执行效率高。
(三)策略选择三大原则
选择上下文处理策略时,需基于以下三个核心维度综合判断:
-
时间远近:优先保留近期消息,确保当前对话的即时响应性与相关性,历史消息可优先采用缩减或卸载策略;
-
数据类型:根据消息类型(用户输入、工具结果、系统指令等)区分优先级,重要类型(如用户核心需求、系统关键指令)优先完整保留;
-
信息可恢复性:需要完整追溯的信息优先采用卸载策略(可恢复),对完整性要求低的信息可采用缩减策略(有损压缩)。
(四)主流框架的实现方式对比
各框架均内置了上下文处理策略,支持通过参数化配置实现个性化适配:
1. Google ADK
通过 events_compaction_config 独立配置上下文处理策略,与 Session 数据存储解耦:
python
from google.adk.apps.app import App, EventsCompactionConfig
app = App(
name='my-agent',
root_agent=root_agent,
events_compaction_config=EventsCompactionConfig(
compaction_interval=3, # 每3次新调用触发一次压缩
overlap_size=1 # 保留前一个窗口的最后一次调用信息
),
)
2. LangChain
通过中间件(SummarizationMiddleware)设置上下文处理参数,独立于短期记忆存储:
python
from langchain.agents import create_agent
from langchain.agents.middleware import SummarizationMiddleware
agent = create_agent(
model="gpt-4o",
tools=[...],
middleware=[
SummarizationMiddleware(
model="gpt-4o-mini",
max_tokens_before_summary=4000, # 累计4000 Token时触发摘要
messages_to_keep=20, # 摘要后保留最后20条消息
),
],
)
3. AgentScope
通过 AutoContextMemory 实现智能化上下文处理,直接集成 Memory 接口,无需额外配置:
python
AutoContextMemory memory = new AutoContextMemory(
AutoContextConfig.builder()
.msgThreshold(100)
.maxToken(128 * 1024)
.tokenRatio(0.75)
.build(),
model
);
ReActAgent agent = ReActAgent.builder()
.name("Assistant")
.model(model)
.memory(memory)
.build();
四、长期记忆技术架构及框架集成
长期记忆需满足跨会话持久化存储、高效检索与动态更新的需求,其技术架构涵盖多个核心组件与关键流程,同时需明确与相关技术的边界差异。
(一)核心技术组件
长期记忆系统围绕 Record(记录)与 Retrieve(检索)两大核心流程,包含以下关键组件:
-
LLM 大模型:负责短期记忆中有效信息的语义理解、抽取、决策与生成;
-
Embedder 向量化模型:将文本信息转换为语义向量,为相似性计算提供支持;
-
VectorStore 向量数据库:持久化存储记忆向量及相关元数据,支持高效语义检索;
-
GraphStore 图数据库:存储实体 - 关系知识图谱,辅助复杂关系推理;
-
Reranker(重排序器):对初步检索结果按语义相关性重新排序,提升检索精度;
-
SQLite:记录所有记忆操作的审计日志,支持版本回溯与问题排查。
(二)Record & Retrieve 核心流程
1. Record(记录)流程
LLM 事实提取 → 信息向量化 → 向量存储 →(复杂关系存储至图数据库)→ SQLite 操作日志记录
该流程的核心是从短期记忆中筛选有价值的信息,通过标准化处理后实现长期存储,确保信息的可复用性。
2. Retrieve(检索)流程
User query 向量化 → 向量数据库语义检索 → 图数据库关系补充 →(Reranker 重排序/LLM 优化)→ 结果返回
检索流程的核心是快速定位与当前查询高度相关的长期记忆信息,为短期记忆提供精准补充。
(三)长期记忆与 RAG 的核心差异
长期记忆系统(如 Mem0)与 RAG(检索增强生成)在技术架构上存在相似点,但在功能定位与应用场景上差异显著:
| 对比维度 | RAG | 长期记忆 |
|---|---|---|
| 主要目的 | 弥补 LLM 训练数据的时效性、专业性不足,提供外部知识支撑 | 记录特定用户的历史交互信息,实现个性化、跨会话连续服务 |
| 服务对象 | 全体用户或通用任务 | 特定用户或会话主体(高度个性化) |
| 知识来源 | 结构化 / 非结构化文档(PDF、网页、数据库等) | 用户与 Agent 的对话历史、行为日志等交互数据 |
技术相似点
-
均采用向量化存储:通过 Embedding 模型将文本转换为向量,存入向量数据库;
-
依赖相似性检索:用户查询时,通过向量化对比检索相关信息;
-
上下文注入机制:将检索结果融入模型交互上下文,辅助 LLM 生成回答。
(四)核心挑战与解决方案方向
长期记忆系统在实际应用中面临三大核心挑战,需针对性设计解决方案:
1. 准确性挑战
- 核心层面:包括记忆管理的有效性(巩固、更新、遗忘机制)与检索结果的相关性;
- 解决方向:优化用户画像建模算法,提升信息提取精度;改进向量化检索与重排序技术,增强检索相关性。
2. 安全与隐私挑战
-
核心风险:长期记忆存储大量用户隐私信息,易面临数据泄露、恶意注入等安全威胁;
-
解决方向:建立数据加密与严格的访问控制机制;防范恶意数据注入攻击;构建透明的数据管理体系,保障用户对自身数据的掌控权。
3. 多模态记忆支持挑战
-
当前问题:文本、视觉、语音等多模态信息仍处于孤立处理状态,缺乏统一的记忆空间;
-
解决方向:研发跨模态关联与检索技术;构建统一的多模态记忆表示方法;优化存储与检索性能,实现毫秒级响应。
(五)主流框架集成实践
以 AgentScope 为例,常见的长期记忆组件集成方式如下:
1. 集成 Mem0(开源主流方案)
Mem0 是开源长期记忆框架的事实标准,集成示例:
python
// 初始化 Mem0 长期记忆
Mem0LongTermMemory mem0Memory = new Mem0LongTermMemory(
Mem0Config.builder()
.apiKey("your-mem0-api-key")
.build()
);
// 创建 Agent 并集成记忆系统
ReActAgent agent = ReActAgent.builder()
.name("Assistant")
.model(model)
.memory(memory) // 短期记忆
.longTermMemory(mem0Memory) // 长期记忆
.build();
2. 集成 ReMe(AgentScope 官方方案)
ReMe 与 AgentScope 深度集成,支持用户级记忆隔离,集成示例:
python
// 初始化 ReMe 长期记忆
ReMeLongTermMemory remeMemory = ReMeLongTermMemory.builder()
.userId("user123") // 用户ID,实现记忆隔离
.apiBaseUrl("http://localhost:8002") // ReMe 服务地址
.build();
// 创建 Agent 并集成记忆系统
ReActAgent agent = ReActAgent.builder()
.name("Assistant")
.model(model)
.memory(memory) // 短期记忆
.longTermMemory(remeMemory) // 长期记忆
.longTermMemoryMode(LongTermMemoryMode.BOTH) // 双向交互模式
.build();
五、主流开源产品对比
| 产品 | 开源时间 | 支持记忆类型 | LLM 核心作用 | 向量数据库支持 | 图数据库支持 |
|---|---|---|---|---|---|
| Mem0 | 2023 年 7 月 | 用户画像 + 领域记忆 | 记忆创建 / 更新 / 检索 | 支持 pgvector、Neo4j、Memgraph、Qdrant 等 | 支持 |
| Zep | 2023 年初 | 用户画像 + 领域记忆 | 记忆提取 + 实体识别 | 支持 | |
| 时序知识图谱架构 | |||||
| MemOS | 2025 年 7 月 | 用户画像 + 领域记忆 | 记忆提取 + 推理 | 可选支持(非必需) | 支持 NebulaGraph、Neo4j |
| Memobase | 2025 年 1 月 | 用户画像记忆 + 领域记忆 | 画像理解 + 更新 | 不依赖 | 不依赖 |
| AgentScope ReMe | 2025 年 6 月 | 用户画像 + 领域记忆 | 记忆管理 + 优化 | 支持 Chroma、Qdrant 等 | 未明确提及 |