当前位置: 首页 > news >正文

AdaMem:清华/微信/中科大提出 Agent 记忆系统新 SOTA

一句话总结

AdaMem 把对话记忆从扁平的向量化检索,升级为"四层结构分类存储 + 动态路由检索",在长周期对话推理和用户画像任务上都达到了 SOTA 效果


  • 论文标题:AdaMem: Adaptive User-Centric Memory for Long-Horizon Dialogue Agents
  • 论文地址:https://arxiv.org/pdf/2603.16496
  • 作者背景:清华大学、微信、中国科学技术大学

一、动机

当前 LLM Agent 越来越依赖外挂记忆来应对长周期交互,但现有记忆系统面临三个核心痛点。

过度依赖语义相似度:常见的检索逻辑是"拿 query 向量和历史记录比对,返回最像的"。但在实际对话中,用户相关的关键信息往往不是字面上最像的那段——比如"她为什么后来改了口味"这种问题,关键证据可能散落在多次对话中,语义检索很难一网打尽

记忆碎片化:很多系统把对话历史切成 chunk 存储,导致时间顺序、因果链条、人物关系全都断裂。需要连贯推理时,只能拼凑出一堆互不关联的碎片

固定粒度的两难:切得太粗,检索回来夹杂大量无关内容;切得太细,看不出事件的完整发展脉络。现有系统很难在两者之间找到好的平衡点

所以,一个好的记忆系统应当满足这些基本原则:

结构化存储:碎片化和固定粒度问题的共同根源,是把对话切成等长文本块然后扁平堆放。更好的做法是在写入时就对信息进行加工:提取事件、事实、属性等语义类型,按不同抽象层级组织成体系化的数据结构,而非一股脑塞进向量库

层级流转:人脑不会把所有经历以同样的形式永久保存:近期对话保持原貌以备即时调用,反复出现的模式逐渐提炼为稳定认知。一个工程化的记忆系统也应设计从"短期原文"到"长期结构化记录"再到"抽象画像"的沉淀路径,让信息在合适的时机自然地转化和压缩。

检索策略自适应:既然记忆已经分层组织,检索就不必再"一招鲜"。简单的事实查询只需翻轻量语义索引,涉及时间线或因果链的问题才动用结构化关系遍历

AdaMem 便是沿着这一逻辑的一次具体实践

很多记忆系统像是把聊天记录剪成一堆纸条,问问题时去翻最像的几张;AdaMem 则是把这些纸条分别放进"桌面便签、事件日记、人物档案、关系线索板"里,提问时先判断"这题在问谁、要不要查关系、要不要追时间线",再决定去翻哪个抽屉


二、结构化存储:四层记忆的设计

如果要 “用结构化取代扁平”,那么具体应该分成几层、每层存什么?AdaMem 的选择是,为每个对话参与者各维护四种记忆,对应从"原始对话"到"高度抽象"的递进层级:

记忆类型类比存储内容抽象层级
Working Memory桌面便签最近对话原文最低:保留原始表达
Episodic Memory事件日记事件、事实、属性、主题摘要中等:结构化提取
Persona Memory人物档案用户偏好和稳定特征较高:跨对话聚合
Graph Memory关系线索板消息-主题-事实-事件关系网络正交维度:关联索引

前三层构成一条抽象度递增的纵向链:原文 → 结构化事实 → 画像摘要。Graph Memory 则是横向的连接层,把散落在不同对话中的证据沿人物线、主题线、时间线串联起来


三、记忆的写入与流转

3.1 规范化写入

有了分层结构后,首先要解决的问题是"新来的对话怎么进入这套体系"。如果每种记忆各自独立解析原文,同一句话在不同模块里很容易被理解成不同的意思。AdaMem 的做法是设置一个统一入口:每段新对话先由 Memory Agent 生成一个规范化记录 z_t,包含摘要、主题、态度、原因、事实片段、人物属性、时间戳和说话者身份。后续所有模块的写入都基于这同一份 z_t,而非各自重新理解原文

很多系统"记不住"的根源不是存储不够,而是"写得乱":同一句话在不同模块里产生了不一致的理解

3.2 工作记忆的沉淀

规范化记录首先进入 Working Memory——一个容量为 20 的 FIFO 队列。队列满了之后,最老的 5 条消息被弹出,送给三个路由器分别处理事件、事实和属性。每个路由器对每条信息只做一个决定:ADD(新增条目)、UPDATE(修订已有条目)还是IGNORE(忽略冗余)。原始消息不丢弃,保留作为后续可追溯的证据来源

3.3 细粒度记忆的聚合

随着对话持续进行,Episodic Memory 中积累了大量细粒度条目(某次跑步、某次点餐、某个周末计划)。这些碎片单独来看价值有限,但聚在一起就能形成更高层的用户画像。AdaMem 用两步上卷来完成这一提炼:

  1. 用向量相似度把细粒度键连成一个稀疏近邻图,取连通块作为合并组(避免手动调相似度阈值)
  2. 用 LLM 把同组内容改写成更高层的主题摘要或画像描述

比如"最近开始跑步"“少吃甜食”"喜欢周末户外活动"这些分散在不同对话里的句子,最终会被聚合成"近阶段关注健康生活方式"这样一条 Persona Memory

3.4 图记忆的构建

纵向的三层沉淀解决了"信息该存在哪里"的问题,但还有一个维度没有覆盖:跨片段的关联。用户在第 3 次对话里提到的偏好变化,可能和第 15 次对话里的行为直接相关,但它们分属不同的 Episodic Memory 条目,纵向结构看不出这种联系。

Graph Memory 正是为此设计的。它不是让模型从头做知识图谱抽取,而是基于前述规范化记录按固定规则构建。节点有五种类型(消息、主题、事实、属性、事件),边有五种类型:

  • mentions:消息 → 主题
  • supports:消息 → 事实/属性,事实 → 事件
  • same_topic:同一说话人近期谈论同一主题
  • temporal_next:时间相邻的消息
  • speaker_related:同一说话人的相邻消息

至此,AdaMem 的存储体系已经完整:纵向三层递进(原文 → 结构化 → 画像),横向一层关联(图记忆)。接下来的问题是:面对一个具体的问题,该怎么利用这套结构?


四、自适应检索:让问题决定检索路径

有了分层结构化存储,AdaMem 便有条件实现差异化的检索路径,这也是 “Adaptive” 的含义所在

4.1 先判断:在问谁

多人对话中,同一个问题可能指向 user、assistant 或两者。AdaMem 先做一个四分类:确定 query 的目标参与者。如果指代不明确,不硬猜,而是分别在双方记忆包中小范围检索后合并排序,让不确定性在检索阶段被显式处理而非隐藏到生成阶段

4.2 再规划:该走哪条检索路线

确定了"问谁"之后,下一步是"怎么搜"。系统先用规则关键词做初步判断:

  • when/before/after→ 时间线问题 → 启用图扩展
  • why/because/connect→ 因果关系问题 → 启用图扩展
  • favorite/personality/trait→ 属性问题 → 画像优先
  • who/what/where→ 单跳事实问题 → 语义检索即可

只有当规则置信度较低时,才让一个 LLM 介入做识别。这种"规则先行、模型兜底"的策略,保证简单问题不会被过度检索,复杂问题又能获得结构化的证据支持

4.3 基础检索与证据补回

基础检索同时从三个来源拿候选:画像摘要、情节事实、主题反查的原始消息。除了召回的 top-K 信息之外,还补充了两种额外内容:

  1. 事实上下文:高分事实命中 → 补充召回对应的原始对话消息
  2. 关键词回退:补那些向量检索不占优但字面上很关键的消息

先看摘要索引确定方向,必要时翻回原始聊天记录,确保不只拿到抽象结论,还能找到具体证据

4.4 图检索与多信号融合

当路线规划认为需要结构化证据时,系统在图上选语义种子节点做受限多跳扩展,每种边有固定权重(如supports=0.90temporal_next=0.70),并带 hop decay 衰减系数 0.85

最终融合分数由四项组成:

score(m∣q)=0.7⋅sbase+0.1⋅sgraph+0.1⋅srecency+0.1⋅sfact\text{score}(m|q) = 0.7 \cdot s_{\text{base}} + 0.1 \cdot s_{\text{graph}} + 0.1 \cdot s_{\text{recency}} + 0.1 \cdot s_{\text{fact}}score(mq)=0.7sbase+0.1sgraph+0.1srecency+0.1sfact

语义检索占绝对主导(70%),图、时间、事实信号只是辅助。这种克制的设计有意避免图检索喧宾夺主——结构化的价值不在于替代语义检索,而在于补全它覆盖不到的关联证据


五、多 Agent 协作的记忆管理

存储和检索的设计解决了"记什么"和"怎么找",但还有一个工程问题:如果让一个 Agent 同时负责记忆维护、证据搜索和答案生成,不同职责之间容易相互干扰。AdaMem 将这三件事拆给三个专职角色:

角色职责类比
Memory Agent理解新消息、维护四层记忆档案管理员
Research Agent规划搜索策略 → 检索 → 整合 → 反思,迭代至证据充分研究助理
Working Agent基于整合好的证据写出最终回答发言人

值得注意的是,Research Agent 决定的是"还缺什么信息"(what),而前面 4.2 节的路线规划决定的是"这次检索该怎么执行"(how)。前者像研究助理决定还要查什么资料,后者像图书管理员决定该翻目录卡还是档案柜。后续消融实验证明了这一职责划分的有用性


六、实验结果

6.1 LoCoMo:整体最强,时间推理提升最大

在长上下文多 session 对话基准 LoCoMo 上测试,AdaMem 用 GPT-4.1-mini 做骨干时达到44.65 F1 / 37.92 BLEU-1,相比最强基线提升4.4%。最亮眼的是时间类问题,提升高达23.4%

不过在 Open Domain 类别上效果稍差。作者认为这类题更适合针对特定结构假设的方法,AdaMem 追求的是更均衡的整体表现

6.2 PERSONAMEM:记人更准,泛化更强

PERSONAMEM 更关注用户建模和个性化记忆。AdaMem 平均准确率63.25%,高于 A-Mem(59.75%)和 Mem0(48.55%)。"泛化到新场景"一项达到73.68%,相对提升27.3%

6.3 消融实验:图记忆贡献最大,三部分互补

去掉图记忆时的降幅最大,说明跨时间、跨片段的关系补回是最关键的增益来源;信息融合和多 Agent 记忆管理也是带来稳定增益的关键组件

6.4 效率-性能权衡

AdaMem 平均输入 token 约 2248,端到端延迟 4.722 秒;Mem0 更省(1340 tokens / 3.739 秒),但 F1 只有 38.16。AdaMem 不是"又快又省"的路线,而是"用合理的额外成本换来显著的长推理质量"

6.5 跨模型迁移

换到开源骨干 Qwen3-4B-Instruct 也能达到 36.78 F1,Qwen3-30B-A3B-Instruct 则到 43.02 F1,说明记忆架构本身是可迁移的,不依赖特定闭源模型的"智商红利"

http://www.cnnetsun.cn/news/1440422.html

相关文章:

  • 力扣hot100第82题:杨辉三角
  • C++4(类与对象下篇)
  • 实战演练:如何绕过文件上传限制获取ACTF2020新生赛Flag(附.phtml木马制作教程)
  • Qwen2.5-7B微调指南:10分钟LoRA训练,让AI模型“认主”
  • Firefly RK3399刷Ubuntu18.04避坑指南:从驱动安装到系统升级全流程
  • 告别复杂配置!ANIMATEDIFF PRO保姆级部署教程,RTX 4090开箱即用
  • Windows 下安装codex
  • 基于多因子流动性模型的“黄金闪崩”解析:利率预期强化与资金再平衡驱动的金价8%下跌机制
  • 包装适配器的使用
  • 从这8道Swift题逆袭大厂:2025最新类型系统考点精讲(含泛型实战)
  • RP2040硬件PWM驱动库:纳秒级精度与多通道确定性控制
  • AI写论文?先别急着下结论——一份靠谱的AIGC检测报告该长什么样?
  • Claude Code 封号潮下,如何用 RTK 让你的 Token 省 80%?
  • 浏览器自动化与AI结合:基于谷歌浏览器插件调用Nanbeige 4.1-3B
  • 手把手教你修改miniwiggler配置信息,解决UDE连接问题(附FT_PROG工具下载)
  • 手把手教你用fscan+MSF搞定CTFshow内网靶场(附PHAR攻击技巧)
  • ESP32 Arduino平台MQTT v5.0客户端封装库详解
  • Houdini VEX实战:5个新手必学的几何体操作技巧(附代码示例)
  • Metpy实战:从数据到洞察——湿位涡剖面分析与暴雨预报
  • 智标领航AI写标书限时福利:冲刺榜单,永久字数轻松拿!
  • Pixel Dimension Fissioner惊艳效果:技术文档→极客漫画脚本的跨维度改写实录
  • 江苏南京消控证培训靠谱机构推荐
  • MinIO vs 阿里云OSS:SpringBoot项目中如何选择最适合的文件存储方案?
  • 宝塔面板+FTP+cpolar内网穿透:无公网IP也能远程管理文件的完整指南
  • Zynq MPSoC双R5裸机程序与Linux协同运行实战指南
  • GTE-Pro视频内容分析:基于CLIP的多模态检索
  • Keil开发MSPM0G3507遇到L6002U错误?手把手教你修复driverlib.a路径问题
  • Pixel Dimension Fissioner效果展示:儿童绘本文案风格一致性裂变
  • Power Designer 数据建模实战:从概念到物理模型的完整指南
  • SAP PP模块实战:生产计划与物料计划事务码速查手册(附Excel导出技巧)