三层记忆系统:Agent项目的核心架构设计
摘要
本文深入剖析了笔者团队开发的「AGIC City」知识问答项目中的核心——三层记忆系统。视频内容首先对比了业界最受认可的两种记忆方案(MEM0框架与字节VK框架),然后详细介绍了项目自身的三层记忆架构(短期记忆、长期记忆、用户偏好),包括记忆的存储、检索、去重、合并、过期等机制,并给出了完整的流程图。最后总结了Agent记忆系统的发展趋势:从存聊天记录到存事实,再到成为运行时的一部分。
目录
核心观点
- 未来Agent的核心竞争力在于记忆系统,而非模型本身。谁能用更少的token注入更准的上下文,保证长期一致性,谁就更强。
- 三层记忆架构(短期、长期、偏好)是兼顾实时性、精准性和用户个性化的有效方案。
- MEM0与VK是两种截然不同的思想流派:MEM0是外挂的「事实数据库」,适合中间件集成;VK是内嵌的「上下文引擎」,更适合复杂的Agent运行时状态管理。
- 最佳实践是融合二者优点:借鉴MEM0的「基于事实的存储」思想,采用VK的「统一上下文编排」思想。
- 去重、合并、重要性衰减是长期记忆保持高质量和避免冗余的关键机制。
技术关键词
- 三层记忆架构
- 短期记忆(STM)
- 长期记忆(LTM)
- 用户偏好
- MEM0框架
- 字节VK框架
- 向量库
- 混合检索
- 去重机制
- 记忆合并
- 重要性衰减
- Agent运行时
- 上下文编排
- 异步写入
1. 两种主流记忆方案对比
在Agent记忆领域,业界最受认可的两个方案分别是 MEM0框架 和 字节VK框架。两者目标一致——让Agent长期记住东西,但思想和实现路径截然不同。
1.1 MEM0框架
核心思想:不要存聊天记录,而是存「事实」。传统方案将所有聊天记录存入prompt,导致token爆炸和噪声巨大。MEM0从对话中「蒸馏」出关键事实,例如用户说“我喜欢Go,在东京做Agent开发”,MEM0不会存整段对话,而是提取为三条事实:用户喜欢Go、用户在东京、用户正在开发Agent。
架构特点:
- 本质:不是向量数据库,而是记忆的Pipeline(流水线),从Conversation到Memory Extraction。
- 关键特性:
- Add-Only Memory:不覆盖旧记忆,新旧并存。
- 联合召回:不仅向量搜索,还结合关键字、事实进行联合召回。
- 异步写入:记忆写入不阻塞用户响应,后台异步完成。
- 优点:工程结构好,不绑定运行时,可通过
memory.add和memory.search轻松集成,适合作为中间件。 - 缺点:
- 外挂记忆,需要调用Memory Service,导致上下文不统一。
- 只擅长长期事实的存储,不擅长Agent运行时状态(如任务进度、工具执行状态、Workflow Checkpoint)。
1.2 字节VK框架
核心思想:Memory是Context Infrastructure,而非外挂系统。VK是一个统一上下文引擎,记忆存在于上下文编排之中,而不是需要时再去检索。
架构特点:
- 本质:Agent运行时的一部分,记忆是Prompt构建的组成部分,而非外挂向量库。
- 优点:
- 更适合Agent,因为Agent需要状态、任务流程规划、Checkpoint,而不仅仅是用户事实。
- 更容易实现复杂工作流,如Planner、Executor、Review等。
- 缺点:
- 耦合重,像一个完整的运行时而非SDK,改造成本高。
- 不够通用,MEM0接啥都行,VK更偏向字节运行时的选择。
- 开源生态弱。
1.3 核心对比总结
| 维度 | MEM0 | VK |
|---|---|---|
| 思想流派 | 中间件思想 | 操作系统运行时思想 |
| 核心定位 | 独立记忆层 | Agent运行时内置记忆 |
| 记忆存储 | 外挂向量库 | 上下文编排的一部分 |
| 优势 | 开源、工程化强、通用 | 统一上下文、适合复杂工作流 |
| 劣势 | 上下文不统一、不擅长运行时状态 | 耦合重、改造成本高、不够通用 |
| 适用场景 | 需要快速集成记忆的聊天机器人 | 需要状态管理的复杂Agent系统 |
2. 项目三层记忆架构详解
笔者团队的项目「AGIC City」采用三层记忆架构:短期记忆、长期记忆、用户偏好。
2.1 架构总览
2.2 短期记忆
- 实现方式:滑动窗口,维持最近的多轮对话摘要。
- 作用:保证对话的流畅性和上下文连贯性。
- 淘汰策略:当窗口大小超过最大Token数(如max_tokens*2)时,按先入先出原则淘汰旧消息。
2.3 长期记忆
- 存储方式:存入两个向量库,采用混合检索,保证精准性和语义。
- 管理机制:
- 去重:双轴去重,包括哈希去重和向量化去重。向量化去重:若本条记忆与长期记忆表中检索到的某条记忆相似度大于0.92,则放弃存入。
- 合并:当召回相似记忆后,若相似度大于0.85,则进入合并流程,通过提示词进行合并。
- 重要性衰减:长期记忆具有重要性评分,会随时间衰减。
- 过期淘汰:根据重要性衰减和过期策略,淘汰不再重要的记忆。
- 降级策略:当向量搜索效果不佳时,使用TF-IDF进行降级检索,确保召回率。
2.4 用户偏好
- 提取方式:每轮对话后,通过LLM异步提取用户偏好,并批量存入。
- 兜底策略:同步会有一套规则引擎作为兜底,确保偏好提取的鲁棒性。
3. 核心流程:记忆的读取与写入
3.1 读取阶段
详细流程:
- 用户输入一条消息。
- 智能路由判断是否需要工具调用。
- 若无需工具,直接加载三层记忆:
- 短期记忆:滑动窗口,维持最近对话。
- 长期记忆:将用户query向量化,在长期记忆目录中检索,根据余弦相似度召回相关记忆(支持TF-IDF降级)。
- 用户偏好:从历史偏好表中恢复。
- 构建系统提示词 + 偏好 + 长期记忆 + 短期记忆 + 当前消息,发送给LLM。
- LLM生成回答后,异步提取偏好并存储长期记忆。
3.2 写入阶段
每轮对话的写入阶段:
- 将回答内容、用户信息等存储到长期记忆。
- 对学习内容进行向量化。
- 进行去重检测(相似度 > 0.92 则放弃存入)。
- 若通过去重,则存入长期记忆。
- 异步提取用户偏好,批量存入。
- 同步规则引擎兜底。
3.3 去重与合并机制
触发条件:每产生5条新记忆时,触发一次去重与合并。
流程:
- 重要性衰减:先对现有记忆的重要性进行衰减。
- 去重:双轴去重,哈希去重 + 向量化去重。
- 合并:召回相似记忆,若相似度 > 0.85,则通过提示词合并。
- 过期淘汰:根据重要性评分和过期策略,淘汰不再重要的记忆。
4. Agent记忆系统的发展趋势
| 代际 | 特点 |
|---|---|
| 第一代 | 存聊天记录 |
| 第二代 | 向量化搜索 |
| 第三代 MEM0 | 存事实,基于记忆的事实提取 |
| 第四代 VK | 记忆不再是数据库,而是Agent运行时的一部分 |
未来方向:借鉴MEM0的「基于事实的存储」思想,采用VK的「统一上下文编排」思想,将二者优点融合。记忆不再是数据库,而是Context Native——Agent的核心竞争力不是模型,而是上下文调度能力。谁能用更少的token注入更准的上下文,保证长期一致性,谁就更强。
思维导图
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)