AdaMem:四级自适应记忆架构,彻底解决大模型长对话“失忆“难题
📌 TL;DR — 三句话读懂 AdaMem
现有 LLM 记忆系统存在三个致命缺陷:①语义检索遗漏关键证据、②相关记忆碎片化存储、③固定粒度无法适应不同问题。AdaMem 提出四层分级记忆(Working → Episodic → Persona → Graph),在检索时先解析用户实体、再动态路由,最后三路 Agent 协作生成答案,在 LoCoMo、PERSONAMEM 两大基准上刷新 SOTA。毕设选题绝佳参考:可改造为三级记忆方案作为论文创新点。
一、为什么你的 RAG / Agent 会"不知道哪个项目方案"?
用过长上下文对话 Agent 的朋友一定遇到过这种场景:你和 AI 聊了几十轮,前期说了"A 项目用 React"、"B 项目用 Vue",后来问"那个项目怎么部署?"——AI 一脸茫然,或者把两个项目张冠李戴。
这不是 LLM 变笨了,而是记忆系统设计有根本性缺陷。AdaMem 这篇论文把问题归结为三大痛点:
🔍痛点一:语义检索失灵
向量检索只看语义相似度。"他上周完成了吗?"里的"他"根本没语义,检索器不知道该去找谁的记录。
🧩痛点二:记忆碎片化
同一个项目/人物的信息被切成独立的 chunk 散落各处,时间顺序和因果关系全部丢失,无法拼出完整图景。
📐痛点三:粒度固化
"今天说了什么?"要细粒度记录;"这个用户喜欢什么风格?"要粗粒度画像。固定粒度两头都回答不好。
⚠️ 对应到实际开发
这就是为什么基于 Mem0、MemoryBank 等方案的 Agent 在项目管理、学习助手、个人知识库场景中常常"记性不好"——它们本质上都是扁平向量库 + 语义检索,没有层级、没有实体感知、没有动态路由。
二、AdaMem 的四层记忆架构
AdaMem 的核心创新是把对话历史组织成四种互补的记忆类型,从瞬时工作记忆到长期图谱知识,层层递进:
⚡Working工作记忆
瞬时/短期工作记忆(Working Memory)
存储最近几轮对话的实体事件,结构化为「主体 → 谓词 → 客体 + 时间戳」的三元组。例如:"用户 → 提到 → React 方案(今天 14:32)"
触发条件:每条新消息自动写入;达到阈值后经 Consolidation 压缩进入 Episodic 层。
📖Episodic情节记忆
中期情节记忆(Episodic Memory)
按话题(Topic)分组的结构化摘要,保留时序和因果关系。同一项目的多次讨论会聚合成一个 Topic 节点,支持"合并相似话题"操作。
这里是解决"不知道哪个项目"问题的关键层——以项目/事件为单位聚合,而非以消息为单位碎片化存储。
👤Persona画像记忆
长期用户画像(Persona Memory)
跨会话积累的稳定用户特征:偏好、习惯、技术栈、沟通风格等。每隔一段时间从 Episodic 层自动刷新,去除过时信息。
示例:「用户偏好 TypeScript,擅长后端,倾向文档化开发流程」
🕸️Graph图谱记忆
关系图谱(Graph Memory)
以知识图谱的形式存储实体间的显式关系(人 ↔ 项目 ↔ 技术 ↔ 时间)。在需要多跳推理时才激活,避免过度消耗 token。
例如:"用户 A → 负责 → 项目 B → 使用 → React → 部署于 → Vercel"——一次图游走即可还原全链路。
💡 与人类记忆的对应关系
这个设计直接类比人类认知科学:Working ≈ 工作记忆(7±2 条),Episodic ≈ 情节记忆(某天某事),Persona ≈ 语义记忆(长期知识),Graph ≈ 隐式关联网络。AdaMem 的创新在于把这四层动态地连接起来,而非静态并列。
三、检索时如何"自适应路由"?
有了四层记忆,下一个关键问题是:来了一个问题,去哪几层找、怎么找? AdaMem 设计了 Question-Conditioned Retrieval(问题条件检索)流程:
1Target Resolution
解析指代对象
"他/它/那个项目"→具体实体
→
2Route Planning
决定检索哪些层
问题类型→路由策略
→
3Baseline Retrieval
目标感知语义检索
锁定实体后再向量搜
→
4Graph Expansion
按需展开图谱
仅复杂关系查询激活
→
5Evidence Fusion
多源证据合并
去重+重排序
3.1 第一步:解析指代(Target Participant Resolution)
这是论文最重要的创新之一。面对"他最近有没有完成那个任务?",系统先用 LLM + 上下文解析出"他"指的是哪个具体用户/实体,再把这个实体 ID 注入后续所有检索步骤。
这直接解决了代词指代导致的检索失效问题,传统向量检索在这里完全束手无策。
3.2 第二步:动态路由(Route Planning)
根据问题类型,系统决定需要激活哪些记忆层:
- 临时性问题("刚才说了什么?")→ 只查 Working Memory,快速返回
- 项目/事件类问题("A 项目的进度如何?")→ 查 Episodic Memory,按 Topic 精准定位
- 用户特征类问题("他喜欢什么技术栈?")→ 查 Persona Memory
- 复杂关系类问题("这个项目和上个季度那个有什么联系?")→ 激活 Graph Memory 做多跳推理
✅ 关键设计哲学:按需激活,避免过度检索
Graph Memory 的多跳游走很耗 token,AdaMem 只有在路由判断确实需要关系推理时才激活它。对于简单的事实性问题,直接从 Working/Episodic 层拿到答案,保持低延迟。实验显示平均 latency 增加可接受(见第五节效率分析)。
四、三路 Multi-Agent 协作
检索到证据后,AdaMem 用三个角色专一的 Agent 完成最终答复:
🗄️ Memory Agent
负责记忆的写入、整合与维护。接收新消息后,判断写入哪一层、是否触发 Consolidation、是否更新 Persona/Graph。相当于"记忆管理员"。
🔬 Research Agent
执行检索路由逻辑,从四层记忆中召回相关证据,进行去重、重排序和多源融合,最终输出结构化的证据列表供回答使用。
✍️ Working Agent
基于证据列表和当前问题生成最终回复。具备"反思"能力——若发现证据不足,可向 Research Agent 发出补充检索请求。
五、实验结果——SOTA 了吗?
论文在两个权威 benchmark 上评测:LoCoMo(长对话多跳推理)和 PERSONAMEM(用户建模与个性化)。
📊 LoCoMo(长对话推理)
Single-hop QASOTA ↑ 显著
Multi-hop QASOTA ↑ 显著
Event SummarySOTA ↑
vs MemoryBank+大幅提升
📊 PERSONAMEM(用户建模)
User Trait QASOTA ↑
Preference Pred.SOTA ↑ 显著
Persona Consist.SOTA ↑
vs Mem0全面超越
消融实验证明四个组件各有不可或缺的贡献:移除 Graph Memory 对多跳推理影响最大;移除 Persona Memory 对跨会话个性化影响最大;Target Resolution 模块对含代词问题的 F1 影响超过 15 个点。
| 方法 | 代词指代处理 | 记忆层次化 | 动态路由 | 关系图谱 | 多 Agent |
|---|---|---|---|---|---|
| 纯 RAG(向量检索) | ✗ | ✗ | ✗ | ✗ | ✗ |
| Mem0 | △ | ✗ | ✗ | ✗ | ✗ |
| MemoryBank | ✗ | △ | ✗ | ✗ | ✗ |
| A-MEM | △ | △ | △ | ✗ | ✗ |
| AdaMem(本文) | ✓ | ✓ | ✓ | ✓ | ✓ |
六、毕设借鉴:改造成三级记忆方案
🎓 论文创新点参考——三级记忆优化方案
AdaMem 四层架构可精简为适合毕业论文的三级记忆方案,既保留核心创新,又降低工程复杂度:
①
第一级:短期上下文缓存(对应 Working Memory)
存储最近 N 轮对话,结构化为实体三元组,解决"当前会话内的代词指代"问题。可用 Redis 实现。创新点描述:基于结构化三元组的上下文实体追踪机制。
②
第二级:项目/事件摘要层(对应 Episodic Memory)
按实体/项目聚合多轮对话,LLM 自动生成结构化摘要并打标签。解决"跨轮次的项目信息碎片化"问题。创新点:面向实体聚合的层次化记忆压缩算法。
③
第三级:用户画像知识库(对应 Persona + 简化 Graph)
跨会话的稳定用户特征存储 + 实体关系表,结合动态路由检索。创新点:自适应检索路由策略与多层记忆融合机制。
💡 论文贡献描述建议:提出了一种面向个人知识助手的三级自适应记忆架构,通过实体感知的动态路由机制解决了传统 RAG 系统在长期对话场景下的指代失效和记忆碎片化问题,在 [你的数据集] 上相比基线方法提升 XX%。
七、工程实现参考
下面是一个简化版的 AdaMem 核心流程伪代码,帮助理解工程实现思路:
Python
# AdaMem 简化实现框架
class AdaMemSystem:
def __init__(self):
self.working_mem = WorkingMemory(window=20) # 近N轮三元组
self.episodic_mem = EpisodicMemory() # 话题聚合摘要
self.persona_mem = PersonaMemory() # 用户画像
self.graph_mem = GraphMemory() # 关系图谱
def write(self, message: str, user_id: str):
# Memory Agent: 解析 + 写入
triples = self.extract_triples(message)
self.working_mem.add(triples, user_id)
if self.working_mem.should_consolidate():
episodes = self.consolidate_to_episodic()
self.persona_mem.refresh(episodes)
self.graph_mem.sync(episodes)
def retrieve(self, query: str, user_id: str) -> list:
# Research Agent: 解析指代 → 路由 → 检索 → 融合
target = self.resolve_target(query, user_id) # 代词解析
route = self.plan_route(query, target) # 动态路由
evidence = []
if 'working' in route:
evidence += self.working_mem.search(query, target)
if 'episodic' in route:
evidence += self.episodic_mem.search(query, target)
if 'persona' in route:
evidence += self.persona_mem.get(target)
if 'graph' in route:
evidence += self.graph_mem.expand(target, hops=2)
return self.fuse_evidence(evidence)
def answer(self, query: str, user_id: str) -> str:
# Working Agent: 生成 + 必要时反思补充检索
evidence = self.retrieve(query, user_id)
response = self.generate(query, evidence)
if self.needs_more_evidence(response):
evidence += self.retrieve(query + " more details", user_id)
response = self.generate(query, evidence)
return response
八、局限性与未来方向
论文也诚实地指出了 AdaMem 的失败案例:
- 远距离跨会话推理:当关键信息埋藏在很久之前的对话、且与当前问题语义差异大时,Graph Memory 也无法覆盖。
- 写入延迟:Consolidation 操作需要调用 LLM,在高频写入场景下存在性能瓶颈。
- 多用户隔离:当前实现假设单用户场景,多用户共享对话(如群组)的记忆归因还未解决。
未来方向:强化学习驱动的记忆写入策略(决定"什么值得记")、端到端的记忆-生成联合优化、以及更轻量的 Graph 构建算法。
📌 总结与资源
- AdaMem = 四层记忆(Working / Episodic / Persona / Graph)+ Target Resolution + 动态路由 + 三路 Multi-Agent
- 核心创新:实体感知 + 按需路由,而非一刀切的向量检索
- 毕设借鉴:简化为三级,保留"实体追踪 + 层次压缩 + 自适应路由"三个创新点足够支撑一篇论文
- 论文地址:arxiv.org/abs/2603.16496(代码将在录用后开源)
参考文献:Shannan Yan, Jingchen Ni, Leqi Zheng et al. "AdaMem: Adaptive User-Centric Memory for Long-Horizon Dialogue Agents." arXiv:2603.16496, 2026.
相关工作:AMA (arXiv:2601.20352) | Mem0 | MemoryBank | A-MEM
本文仅用于学术交流,如有侵权请联系删除。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)