摘要

本文深入剖析了笔者团队开发的「AGIC City」知识问答项目中的核心——三层记忆系统。视频内容首先对比了业界最受认可的两种记忆方案(MEM0框架与字节VK框架),然后详细介绍了项目自身的三层记忆架构(短期记忆、长期记忆、用户偏好),包括记忆的存储、检索、去重、合并、过期等机制,并给出了完整的流程图。最后总结了Agent记忆系统的发展趋势:从存聊天记录到存事实,再到成为运行时的一部分。

目录

核心观点

  1. 未来Agent的核心竞争力在于记忆系统,而非模型本身。谁能用更少的token注入更准的上下文,保证长期一致性,谁就更强。
  2. 三层记忆架构(短期、长期、偏好)是兼顾实时性、精准性和用户个性化的有效方案。
  3. MEM0与VK是两种截然不同的思想流派:MEM0是外挂的「事实数据库」,适合中间件集成;VK是内嵌的「上下文引擎」,更适合复杂的Agent运行时状态管理。
  4. 最佳实践是融合二者优点:借鉴MEM0的「基于事实的存储」思想,采用VK的「统一上下文编排」思想。
  5. 去重、合并、重要性衰减是长期记忆保持高质量和避免冗余的关键机制。

技术关键词

  • 三层记忆架构
  • 短期记忆(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.addmemory.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 架构总览

记忆系统架构

用户输入

智能路由

加载三层记忆

短期记忆 STM

长期记忆 LTM

用户偏好

滑动窗口 维持最近多轮对话摘要

向量库 混合检索 精准性与语义

去重合并重要性衰减机制

用户个性化设置与偏好

2.2 短期记忆

  • 实现方式:滑动窗口,维持最近的多轮对话摘要。
  • 作用:保证对话的流畅性和上下文连贯性。
  • 淘汰策略:当窗口大小超过最大Token数(如max_tokens*2)时,按先入先出原则淘汰旧消息。

2.3 长期记忆

  • 存储方式:存入两个向量库,采用混合检索,保证精准性和语义。
  • 管理机制
    • 去重:双轴去重,包括哈希去重和向量化去重。向量化去重:若本条记忆与长期记忆表中检索到的某条记忆相似度大于0.92,则放弃存入。
    • 合并:当召回相似记忆后,若相似度大于0.85,则进入合并流程,通过提示词进行合并。
    • 重要性衰减:长期记忆具有重要性评分,会随时间衰减。
    • 过期淘汰:根据重要性衰减和过期策略,淘汰不再重要的记忆。
  • 降级策略:当向量搜索效果不佳时,使用TF-IDF进行降级检索,确保召回率。

2.4 用户偏好

  • 提取方式:每轮对话后,通过LLM异步提取用户偏好,并批量存入。
  • 兜底策略:同步会有一套规则引擎作为兜底,确保偏好提取的鲁棒性。

3. 核心流程:记忆的读取与写入

3.1 读取阶段

用户输入

智能路由

加载短期记忆 滑动窗口

加载长期记忆 向量搜索+TF-IDF降级

加载用户偏好

构建上下文消息列表

System Prompt + 偏好 + 长期记忆 + 短期记忆 + 当前消息

LLM生成回答

详细流程

  1. 用户输入一条消息。
  2. 智能路由判断是否需要工具调用。
  3. 若无需工具,直接加载三层记忆:
    • 短期记忆:滑动窗口,维持最近对话。
    • 长期记忆:将用户query向量化,在长期记忆目录中检索,根据余弦相似度召回相关记忆(支持TF-IDF降级)。
    • 用户偏好:从历史偏好表中恢复。
  4. 构建系统提示词 + 偏好 + 长期记忆 + 短期记忆 + 当前消息,发送给LLM。
  5. LLM生成回答后,异步提取偏好并存储长期记忆。

3.2 写入阶段

每轮对话的写入阶段

  1. 将回答内容、用户信息等存储到长期记忆。
  2. 对学习内容进行向量化。
  3. 进行去重检测(相似度 > 0.92 则放弃存入)。
  4. 若通过去重,则存入长期记忆。
  5. 异步提取用户偏好,批量存入。
  6. 同步规则引擎兜底。

3.3 去重与合并机制

触发条件:每产生5条新记忆时,触发一次去重与合并。

流程

  1. 重要性衰减:先对现有记忆的重要性进行衰减。
  2. 去重:双轴去重,哈希去重 + 向量化去重。
  3. 合并:召回相似记忆,若相似度 > 0.85,则通过提示词合并。
  4. 过期淘汰:根据重要性评分和过期策略,淘汰不再重要的记忆。

4. Agent记忆系统的发展趋势

代际 特点
第一代 存聊天记录
第二代 向量化搜索
第三代 MEM0 存事实,基于记忆的事实提取
第四代 VK 记忆不再是数据库,而是Agent运行时的一部分

未来方向:借鉴MEM0的「基于事实的存储」思想,采用VK的「统一上下文编排」思想,将二者优点融合。记忆不再是数据库,而是Context Native——Agent的核心竞争力不是模型,而是上下文调度能力。谁能用更少的token注入更准的上下文,保证长期一致性,谁就更强。

思维导图

Agent记忆系统

两种主流方案

MEM0

核心思想 存事实而非聊天记录

架构 Pipeline流水线

优点 开源 工程化强 通用

缺点 外挂记忆 上下文不统一 不擅长运行时状态

VK

核心思想 Memory是Context Infrastructure

架构 统一上下文引擎

优点 适合复杂Agent 状态管理

缺点 耦合重 改造成本高 生态弱

项目三层记忆架构

短期记忆

实现 滑动窗口

作用 维持最近对话

淘汰 先入先出

长期记忆

存储 向量库 混合检索

管理 去重 合并 重要性衰减 过期

降级 TF-IDF

用户偏好

提取 LLM异步提取 + 规则兜底

存储 批量存入

核心流程

读取阶段

加载三层记忆

构建上下文

LLM生成回答

写入阶段

向量化 去重 存储

异步提取偏好

发展趋势

第一代 存聊天记录

第二代 向量化搜索

第三代 MEM0 存事实

第四代 VK 运行时的一部分

未来 融合二者优点 上下文调度能力

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐