GAM:用分层图记忆解决 Agent 的“快记”和“稳记”冲突
GAM:用分层图记忆解决 Agent 的“快记”和“稳记”冲突
一句话定位:GAM 是一个面向长期对话 Agent 的分层图记忆框架,通过局部事件图、全局主题图和语义边界触发的合并机制,把实时上下文感知和长期知识保持解耦。
论文:GAM: Hierarchical Graph-based Agentic Memory for LLM Agents
ACL Anthology:ACL 2026 Long Papers
发布时间:2026-04
适合读者:长期对话 Agent、个人助手、Agent memory、图记忆、RAG 系统和多角色对话系统建设者。
1. 背景:长期记忆真正难的是稳定性和可塑性的矛盾
Agent memory 看起来像一个很直接的问题:把历史存起来,未来需要时再检索出来。
但真实长期交互比这个复杂得多。一个 Agent 需要在持续对话中快速记住新信息,比如用户刚刚改了偏好、任务状态发生了变化、某个角色说了一句关键台词。与此同时,它又不能让每一个临时片段都污染长期记忆。
这就是论文反复强调的矛盾:rapid context perception 和 stable knowledge retention。
前者要求系统开放、灵活、快速写入。后者要求系统克制、稳定、避免噪声改写旧知识。
很多记忆系统在这个矛盾上会偏向一边。
一类是统一流式记忆系统。它们把观察、对话、摘要或事实不断追加到一条连续 memory stream 里。好处是响应新信息很快,坏处是长期存储会持续暴露在噪声下。论文把这类风险称为 Memory Contamination,并进一步拆成两个现象。
Memory Loss 是旧知识逐渐被边缘化。图里已有的节点可能因为新节点不断追加而连接变弱,最后在检索时被遗忘。
Semantic Drift 是主题漂移。不同话题、不同人物、不同时间段的事实被错误合并,导致 Agent 的长期记忆开始混淆。
另一类是离散结构化记忆,比如静态知识图谱、固定 schema 或强约束结构。它们更稳定,适合关系推理,但不擅长处理自然对话里连续变化的叙事。真实对话不会主动告诉你“现在进入新状态”,话题边界经常模糊,人物关系和任务状态也会以很松散的方式推进。
GAM 的出发点就是:不要强行在一套结构里同时解决快速写入和长期保持。更好的办法是把二者拆开。
2. 核心思路:先缓冲,再合并
GAM 的全称是 Hierarchical Graph-based Agentic Memory。
它的关键不是“使用图”本身,而是使用一个分层图结构来隔离不同生命周期的记忆。
论文借鉴了睡眠依赖记忆巩固的直觉:人不会把每个瞬间都立刻写进稳定长期记忆,而是先经历短期编码,再在某些边界上进行巩固。GAM 把这个过程工程化成两个状态。
第一个状态是 Episodic Buffering State。Agent 正在对话时,所有新信息先进入局部的 Event Progression Graph。这个图是短期缓冲,专门负责捕捉当前叙事的顺序、局部因果和细节。
第二个状态是 Semantic Consolidation State。当系统检测到语义边界,说明当前局部话题形成了一个相对完整的单元,才把这段事件图合并进全局 Topic Associative Network。
这一步很关键。GAM 不是按固定窗口、固定 turn 数、固定时间间隔做合并,而是让语义边界触发合并。也就是说,写入长期记忆的最小单位不是“每 512 tokens 一段”,而是“一个语义上完整的叙事片段”。
这能减少两个问题。
第一,临时噪声不会过早进入全局图。还没讲完的话题、跑偏的句子、对话里的试探性信息,会先留在局部缓冲里。
第二,长期图不会被任意切片打断。固定窗口很容易把因果关系切开,导致之后检索时只找到半段证据。
3. 分层图记忆:Topic Associative Network 和 Event Progression Graph
GAM 的记忆结构可以理解成一个组合图:
H_t = {G_topic, G_event, S_arch, E_cross}
其中最重要的是两张图。
G_event 是局部事件进展图,也就是 Event Progression Graph。
它服务于实时对话。节点是当前对话里的原子事件,比如用户话语、系统回复、工具结果、局部观察。边表示事件之间的时间顺序和局部因果关系。
这张图追求的是低延迟写入。新话语进来时,系统只需要追加事件节点,并连上最近上下文。它不需要每次都重算全局关系,也不需要马上判断这个事实是否应该成为长期知识。
G_topic 是全局主题关联网络,也就是 Topic Associative Network。
它服务于长期保持。节点不是单句对话,而是从历史交互中巩固出来的高层语义主题。边表示主题之间的关系,比如 support、contradict、coreference、causal、semantic 或 unrelated。
这张图追求的是稳定和可推理。它不会被每轮对话直接修改,只在语义边界出现、局部事件图被整理完成后才更新。
两者之间还有一个归档层。
当局部事件图被合并后,GAM 不会只保留摘要。它会把这张事件图归档到 S_arch,再用跨层链接 E_cross 把全局主题节点连回原始事件图。
这个设计非常实用,因为长期记忆经常同时需要两种能力。
高层主题用于缩小范围和做关系推理;原始事件用于回答具体问题,避免摘要阶段丢掉名字、时间、语气、条件和例外。
4. 写入流程:语义边界触发的状态切换
GAM 的写入可以分成三步。
第一步,实时缓冲。
每个新 utterance 都被构造成事件节点,追加进当前 Event Progression Graph。这里的更新是局部的,主要维护顺序边和局部上下文边。
第二步,检测语义边界。
论文形式化地用一个二值变量 b_t 表示是否触发合并:当局部事件图和全局主题图之间的语义差异超过阈值时,b_t = 1。
实际实现里,GAM 没有每一轮都调用 LLM 判断边界,而是在稀疏维护事件上触发判断,比如 session 结束、自然暂停或缓冲区超过 2048 tokens。这样可以避免边界检测成为每轮对话的瓶颈。
第三步,语义合并。
一旦边界成立,GAM 会把当前事件图变成一个新的主题节点 v_new。这个节点采用双粒度表示:
c_sum 是摘要,用于高层主题检索和关系判断。
c_raw 是原始文本拼接,用于保留细节证据。
随后,GAM 会把 v_new 合并到 Topic Associative Network 里。为了避免对全图每个节点都做 LLM 关系判断,它采用 coarse-to-fine 策略:先用向量检索找 top-5 候选主题,再让 LLM 判断这些候选和新节点之间的关系类型与置信度。只有置信度超过阈值的关系才会成为全局图边。
这个设计在成本上很克制。LLM 关系判断只发生在合并阶段,而且只面对小候选集,不会因为历史越来越长而线性扫全图。
5. 检索流程:从主题锚点下钻到原始证据
GAM 的检索也体现了分层思想。
平面向量检索常见问题是:query 和某条记忆语义相似,不代表这条记忆就是推理所需证据。长期对话问题经常需要跨时间、跨角色、跨主题组合证据。只做 top-k embedding 很容易拿到相似但不关键的片段。
GAM 用三段式检索解决这个问题。
第一段是 Semantic Anchoring and Expansion。
系统先在全局 Topic Associative Network 里根据 query 找到最相关的主题节点。然后沿主题图扩展一阶邻居,把直接相似和图结构相关的主题都纳入锚点集合。
这样做的好处是,检索不会停留在字面相似上。某个问题可能没有直接命中某个主题,但它的一阶相关主题可能包含关键背景。
第二段是 Structural Drill-Down。
系统通过跨层链接,从主题锚点下钻到对应的归档 Event Progression Graph,取出具体事件节点作为候选证据。
这一步把“主题级定位”转成“证据级取回”。它避免了一个常见问题:长期记忆里只有摘要,看起来相关,但回答时缺少具体细节。
第三段是 Multi-Factor Re-ranking。
GAM 先用 cross-encoder 计算候选事件和 query 的语义相关性,再用三个显式因素调制分数。
时间因素用于时间敏感问题。比如“之前”“那天之后”“第二次见面”这类问题,需要优先考虑带有时间线索的记忆。
置信度因素用于优先选择通过自一致性检查或高质量编码的记忆。
角色因素用于多角色对话。LongDialQA 这类剧本数据里,说话人频繁切换,如果不区分角色,很容易把 A 说的话当成 B 的信息。
论文默认设置是 β_time = 1.4、β_role = 1.4、β_conf = 1.2。敏感性分析显示,GAM 对这些权重不是特别脆弱,说明收益主要来自结构设计,而不是调参撞出来的。
6. 实验:GAM 在长期对话和多角色场景里更稳
论文在两个 benchmark 上评估 GAM:LoCoMo 和 LongDialQA。
LoCoMo 是长期开放域对话记忆评测,覆盖 multi-hop、temporal、open-domain 和 single-hop 问题。它适合看系统能否跨长对话找回证据、重建时间关系并完成多跳推理。
LongDialQA 来自多角色电视剧脚本,比如《生活大爆炸》《老友记》和《办公室》。它更强调多角色、多剧情线和说话人切换带来的干扰。
对比方法包括 ReadAgent、MemoryBank、MemGPT、A-Mem、MemoryOS、Mem0,以及附录里的 AriGraph。
结果比较清晰。
在 LoCoMo 上,以 Qwen2.5-7B 为 backbone 时,GAM 的平均 F1 是 40.00,Mem0 是 35.38,MemoryOS 是 28.86,A-Mem 是 24.20。GAM 在 Temporal 和 Single-Hop 上尤其强,说明局部事件图和语义边界合并确实保留了时间顺序与具体证据。
在 GPT-4o-mini 上,GAM 的平均 F1 是 43.14,也高于 Mem0 的 40.37。论文也诚实指出了一个例外:GPT-4o-mini 下 Mem0 的 Temporal F1 高于 GAM。这说明当 backbone 本身很强、且原始 trace 检索足够好时,直接保留原始时序线索也可能更有优势。
在 LongDialQA 上,GAM 的优势更符合直觉。多角色对话最怕把不同人物的记忆混在一起,而 GAM 的角色因素和图结构正好适合这种场景。
以 Qwen2.5-7B 为例,GAM 平均 F1 是 12.55,Mem0 是 10.27,MemoryOS 是 6.76。论文认为这说明结构化外部记忆可以弥补小模型上下文和内部记忆能力的不足。
效率结果也值得注意。
在 LoCoMo 上,GAM 每个 query 平均使用 1370 tokens,Mem0 是 1534 tokens,A-Mem 是 4221 tokens,MemoryOS 是 3400 tokens。延迟上 Mem0 更快,约 0.51 秒;GAM 是 0.80 秒。但 GAM 用接近的速度换来了更高 F1,整体权衡比较好。
7. 消融实验:最关键的是事件图和状态切换
论文做了四个消融版本:
w/o TAN:去掉全局 Topic Associative Network。
w/o EPG:去掉局部 Event Progression Graph。
w/o SSM:去掉 Semantic-Event-Triggered State Switching Mechanism。
w/o MFR:去掉 Multi-Factor Retrieval。
完整 GAM 在 LoCoMo 上的平均 F1 是 40.00。
去掉 EPG 后掉到 25.06,是最大退化。这说明实时叙事结构不是可选组件。长期对话问题里,很多证据依赖顺序、局部因果和未被摘要捕捉的小细节。如果没有事件图,系统很难保持这些信息。
去掉 SSM 后掉到 32.58。这说明“什么时候合并”也很关键。即使有图,如果每次写入或按任意窗口写入,仍然容易污染长期图或切碎语义单元。
去掉 TAN 后是 35.07,去掉 MFR 后是 35.94。这说明全局主题组织和多因素重排同样重要,但它们更像是在事件结构和状态切换之上的增强。
这组结果给工程实践的启发很直接:做长期记忆时,不要只问“用什么检索器”,还要问“原始交互如何被组织”和“什么时候进入长期存储”。
8. 和固定窗口相比,语义边界更像真实对话
GAM 还专门比较了不同的主题切分策略。
固定窗口会按 256 或 512 tokens 切分。固定 turn 会每 3 轮或 5 轮切分。session-based 会按会话边界切分。
这些方法都简单,但都不真正理解语义完成度。
固定窗口可能把一个因果链切成两半。固定 turn 可能在话题刚展开时强行截断。session 粒度又可能太粗,一个 session 里可能包含多个子话题。
GAM 的语义边界触发机制在 LoCoMo 上拿到 40.00 平均 F1,高于固定窗口和 session-based 方法。论文还做了边界噪声实验,即使 topic segmentation noise 到 0.4,GAM 仍然保持 38.60 F1,高于固定窗口 34.23 和 session-based 36.59。
这说明 GAM 并不要求语义边界检测完美。只要整体结构能把主题和事件连接起来,图检索仍然能跨越一些切分误差。
9. 这篇论文对 Agent memory 的启发
GAM 最值得借鉴的地方,是把 Agent memory 看成一个有生命周期的数据系统。
很多工程实现会把 memory 写入做得很直接:每轮对话结束后抽事实、写向量库、更新用户 profile、合并摘要。这样短期看很方便,长期看很容易形成“记忆垃圾场”。
GAM 提醒我们,长期记忆至少要区分三种东西。
第一,正在发生的上下文。这部分应该快速、局部、低成本地写入,不要急着全局化。
第二,已经完成的语义单元。这部分才适合被摘要、链接、归档,并进入长期图结构。
第三,可追溯的原始证据。摘要和主题能提升检索效率,但不能替代原始证据。真正回答问题时,系统经常需要回到细节。
如果把这个思想转成工程设计,可以得到一个比较朴素的方案:
实时层保存最近事件图或 trace。
合并层按语义边界生成 memory object,里面同时放摘要、原文、时间、角色、置信度和来源。
长期层维护主题、实体或任务图,用边表达支持、矛盾、因果、共指和语义相关。
检索层先定位主题,再下钻证据,最后用时间、角色、置信度等任务相关信号重排。
这套思想不一定要完全照搬 GAM 的实现,但它提供了一个非常清晰的 memory lifecycle 模板。
10. 局限:文本记忆、边界检测和隐私控制
GAM 目前主要是文本记忆框架。论文在附录里用 MovieChat-1K 的 dense video captions 做了代理多模态实验,结果不错,但这仍然不是原生多模态记忆。
如果未来要处理真实个人助手场景,记忆节点可能需要同时包含文本、图片、音频、屏幕状态、工具轨迹和环境状态。那时语义边界也不能只靠文本话题变化判断。
第二个限制是边界检测依赖 LLM。论文通过稀疏触发降低成本,但实际部署仍需要考虑延迟、误判和一致性。尤其是在高频实时交互里,什么时候触发 consolidation 会直接影响系统体验。
第三个问题是隐私。长期记忆系统天然会保存敏感信息。GAM 的好处是语义合并阶段提供了一个天然拦截点:在局部事件图写进长期主题图之前,可以加入隐私过滤、用户确认、保留策略和删除规则。但论文也明确说,这不是完整的隐私解决方案。
11. 一句话总结
GAM 的核心贡献是把 Agent 记忆从“持续追加的一条流”改造成“先局部缓冲、再语义合并、最后图引导检索”的生命周期系统。
它让 Agent 在当前对话中保持灵活,同时让长期记忆免受临时噪声污染。对正在设计长期 Agent memory 的工程团队来说,GAM 最值得借鉴的不是某个具体超参数,而是这个架构原则:不要让每一条新信息直接改写长期记忆,先判断它是否已经成为一个语义完整、值得巩固的记忆单元。
更多推荐



所有评论(0)