Harness the Memory: A Holistic Evaluation of Memory Substrates in Memory Agents

论文阅读:Harness the Memory——不同 Agent Memory 到底应该怎么选?

论文标题:Harness the Memory: A Holistic Evaluation of Memory Substrates in Memory Agents
作者:Wei-Chieh Huang, Weizhi Zhang, Yuchen Wu, Yankai Chen, Eric Hanchen Jiang, Wooseong Yang, Yiwei Yang, Henry Peng Zou, Hanrong Zhang, Ying Nian Wu, Haolun Wu, Kai-Wei Chang, Philip S. Yu, Xue Liu, Aylin Caliskan
发表位置:arXiv 预印本,当前版本未标注会议或期刊接收信息
arXiv 编号:2608.15008
原文链接:https://arxiv.org/abs/2608.15008
PDF:https://arxiv.org/pdf/2608.15008
主题:LLM Agent Memory、长期记忆、Memory Substrate、Memory Evaluation、Agent Harness
核心问题:面对向量库、知识图谱、层次树、技能记忆、LoRA、Full Context、KV Cache 等不同记忆形式,究竟哪一种更适合哪种 Agent 场景?


1. 这篇论文到底想解决什么问题?

过去几年关于 Agent Memory 的工作越来越多。

不同工作会采用完全不同的记忆形式,例如:

  • 把历史直接做 embedding,存进向量数据库;
  • 用 BM25 检索历史文本;
  • 把历史整理成 note;
  • 构建知识图谱;
  • 做层次化摘要树;
  • 从历史轨迹中提炼 strategy 或 skill;
  • 直接通过 LoRA 把记忆写进模型参数;
  • 什么都不压缩,直接把全部历史塞进 Context;
  • 或者围绕 KV Cache 保存和恢复历史 episode。

这些方法经常都会在各自论文的 benchmark 上证明自己有效。

问题是:

它们通常并不是在同一个实验条件下比较的。

一个方法可能用 GPT-4,另一个用开源模型;一个在 LoCoMo 上测,另一个在 ALFWorld 上测;有的只报告准确率,有的额外考虑 latency;有的 write 阶段调用大量 LLM,有的完全不调用。

因此,看完大量 Memory 论文之后,仍然很难回答一个很实际的问题:

如果现在真的要设计一个通用 Agent Memory,我到底应该选择什么记忆结构?

论文把这个底层的记忆表示与存储机制称为:

Memory Substrate,记忆基底。

这里的 substrate 不只是“数据库类型”。

它表示:

Agent 的历史信息最终以什么形式被保存、组织,并在之后重新提供给模型。

例如:

历史对话
   ↓
Dense Vector

和:

历史对话
   ↓
实体 / 关系抽取
   ↓
Knowledge Graph

以及:

任务轨迹
   ↓
总结经验
   ↓
Reusable Strategy

实际上对应三种非常不同的 memory substrate。

这篇论文的目标并不是提出第十二种新记忆,而是:

把已有的主要 Memory Substrate 放进同一个 Harness 中,在尽可能一致的条件下进行系统比较。


2. 为什么现有 Agent Memory Evaluation 不够?

作者首先调查了 52 个 2023~2026 年的 Memory-Augmented LLM 系统

结果发现目前的评估存在三个明显问题。

2.1 Benchmark 高度集中

大约 62% 的 system-benchmark 组合集中在:

  • LoCoMo
  • LongMemEval

这两个以长对话记忆为核心的 benchmark 上。

Agent 真正需要连续执行动作的任务,例如:

  • 环境交互;
  • 多步规划;
  • Code Agent;

相对缺乏系统评估。

也就是说,目前大量 Memory 方法本质上主要回答的是:

“怎样从很长的历史中找到正确事实?”

但 Agent Memory 还存在另一个问题:

“过去的经验应该怎样帮助 Agent 做下一步动作?”

这两个问题并不完全相同。


2.2 大多数论文只关心准确率

作者统计发现:

几乎所有系统都会报告 accuracy,但只有约 21% 的系统报告至少一种 efficiency metric。

而对于真实 Memory 系统来说,下面这些因素同样重要:

写一条 Memory 要多久?
需要调用几次 LLM?
Read 一次 Memory 要多久?
需要读取多少 Token?
Memory 会膨胀到多大?
维护 Knowledge Graph 需要多少成本?
随着历史越来越长,Latency 怎么变化?

一个方法可能准确率高 2%,但一次检索需要几十甚至几百秒。

这种方法是否值得使用,就不能只看准确率。


2.3 Backbone 和 Benchmark 覆盖范围都很窄

调查中的大量工作只使用一个模型,并且约 81% 的系统只使用 GPT 系列模型作为 Backbone

这样很难判断:

结果好
 ↓
究竟是 Memory 设计好?
还是 Backbone 本身强?

同时,大约一半系统只在一个 benchmark 上测试。

因此作者认为,现在真正缺少的是:

Controlled Evaluation:固定 Harness 中的其他条件,只改变 Memory Substrate。


3. Harness:把 Memory 当成唯一主要变量

论文构建了一个统一的 evaluation harness。

其中所有 Memory 都尽可能使用相同的:

  • Interaction History;
  • Backbone;
  • Prompt;
  • Auxiliary LLM;
  • Benchmark;
  • Metrics。

然后只改变:

Memory Substrate。

整个实验规模可以概括为:

项目 设置
Memory 方法 11 种
Substrate Family 7 类
Backbone 3 个
Benchmark 4 套
Metrics 26 个
任务类型 User-Centric + Agent-Centric

image

【Figure 2(Unified Evaluation Harness 总览图)。重点观察左侧 11 种 Memory 如何被划分为 External / Internal Memory,以及右侧统一的 Write、Read、Manage、Model、Benchmark 与 Evaluation 设置。】

这张图实际上非常重要,因为它展示了整篇论文真正比较的对象:

                      Memory
                         │
            ┌────────────┴────────────┐
            │                         │
     External Memory           Internal Memory
            │                         │
     ┌──────┼──────┐           ┌─────┴─────┐
     │      │      │           │           │
   Vector  Graph  Skill      Weight    Activation
     ...

下面具体来看这 11 种方法。


4. 七类 Memory Substrate

4.1 External Memory 与 Internal Memory

论文首先把 Memory 分成两个大类。

External Memory

Memory 保存在模型外部的数据结构中。

例如:

Vector DB
BM25
Text Record
Knowledge Graph
Tree
Strategy
Skill

使用时通常存在显式过程:

Write
  ↓
External Store
  ↓
Read / Retrieve
  ↓
Context
  ↓
LLM

Internal Memory

Memory 被编码进模型内部。

论文测试两种形式:

Model Weight

以及:

Activation / Context / KV Cache

这类 Memory 不一定需要传统意义上的“从数据库检索”。


5. Flat Index:最简单的检索式 Memory

5.1 M1:Dense Vector

这是最典型的 Vector RAG。

Write 时:

Utterance
   ↓
text-embedding-3-small
   ↓
1536-D Embedding
   ↓
Flat Index

Read 时:

Query
  ↓
Embedding
  ↓
Cosine Similarity
  ↓
Top-k Utterances

整个 Write / Read 过程都不需要额外调用 LLM。

而且没有复杂的 Memory Management:

新 Memory 只会不断 append。

因此 M1 是一种非常简单、便宜的基线。


5.2 M2:Sparse Vector

M2 使用 BM25。

Write:

Utterance
   ↓
Tokenization
   ↓
BM25 Inverted Index

Read:

Query
   ↓
BM25 Score
   ↓
Top-k

同样:

  • 不需要 Auxiliary LLM;
  • 不做 Memory 重写;
  • Memory 单调增长。

它是论文中非常重要的低成本 baseline。

后面会看到:

复杂 Memory 并不总能赢过这样简单的 BM25。


6. Text Record:先做 Gist,再找原文

6.1 M3:Gist Index

M3 对应 ReadAgent 的思想。

它不是直接给每段原文做向量检索,而是先生成一个短摘要:

Page
 ↓
Auxiliary LLM
 ↓
One-sentence Gist
 ↓
Gist Index

例如一整页内容可能被压缩成:

User relocated Tokyo -> SF; ML engineer

Read 时分成两步:

所有 Gist
   ↓
LLM 判断哪些 Page 相关
   ↓
展开对应 Page
   ↓
取回原始文本
   ↓
Final LLM

也就是说:

Gist 本身主要承担索引作用,真正回答问题时仍然可以回到完整原文。

它避免简单 chunk retrieval 完全依赖 embedding similarity,但代价是:

Read 阶段需要 LLM 阅读越来越多的 gist。

因此随着 Memory 越来越长,Read 成本也会明显增长。


7. Structural Memory:给 Memory 加关系

论文测试两种 Structural Memory。


7.1 M4:Evolving Notes

M4 实现的是 A-Mem 风格的 Memory。

每次写入新信息时,LLM 会生成结构化 Note:

Incoming Message
      ↓
Auxiliary LLM
      ↓
Structured Note
 ├── description
 ├── keywords
 └── tags

然后把这个 Note 和已有 Notes 做 embedding similarity,建立语义链接。

Memory 因此不再只是:

Note 1
Note 2
Note 3

而是:

Note 1 ─── Note 4
   │
   └──── Note 8

Read 时首先通过 embedding 找到 Top-k Notes,然后沿 Note 之间的链接继续扩展。

更加重要的是,它还有一个 Evolution Mechanism

如果新信息显著改变已有信息:

旧 Note
   +
新信息
   ↓
Evolution Detector
   ↓
重写相关 Neighbor Notes

这样可以维持 Memory 的一致性。


8. M5:Dual-Level Graph

M5 对应 LightRAG 风格的 Dual-Level Graph。

它同时维护两种结构:

Knowledge Graph
+
Chunk Vector Index

Write 时:

Input
  ↓
LLM
  ↓
Entity + Relation Extraction
  ↓
Knowledge Graph

例如:

(User)
   │
 lives_in
   ↓
(San Francisco)

同时保存 chunk-level vector。

Read 时则执行 Hybrid Retrieval:

Query
 ├── Knowledge Graph Traversal
 └── Dense Vector Search
             ↓
     Reciprocal Rank Fusion
             ↓
        Retrieved Memory

因此它同时利用:

  • 实体关系;
  • 原始文本的语义相似度。

这也是为什么后面的长对话 factual QA 中,M5 表现非常强。

但这种结构同样意味着:

Entity Extraction、Relation Extraction、Graph Construction 与 Graph Update 都会产生显著成本。

论文后面会看到,M5 经常可以获得很好的准确率,但 latency 也可能是简单方法的几十倍。


9. Hierarchical Memory:M6 Hierarchical Tree

M6 对应 RAPTOR 风格的 Hierarchical Tree。

底层是原始 Memory:

Raw Memory

然后把相似内容聚类并总结:

Raw Entries
    ↓
 Cluster
    ↓
Summary

继续向上重复:

                    High-Level Summary
                         /     \
                    Summary   Summary
                    /   \      /   \
                 Raw   Raw   Raw   Raw

低层保存细节,高层保存抽象信息。

论文采用 collapsed-tree retrieval:

将不同层级的节点放进同一个 Dense Index 中,然后统一进行 Top-k 检索。

因此一次检索可能拿到:

  • 原始 Memory;
  • 局部摘要;
  • 更高层摘要。

值得注意的是,论文的实现采用 Lazy Construction:

Write
 ↓
只进行 Embedding + Append

第一次 Read
 ↓
真正构建 Tree

因此第一次 Read 会承担一次较大的 Tree Build 成本。


10. Refinement Memory:不保存全部经历,而是提炼经验

这一类 Memory 与前面的方法有一个很大的区别。

前面的思路基本都是:

保存经历,然后想办法把经历找回来。

Refinement Memory 更接近:

经历发生之后,先把经历提炼成以后可以复用的东西。

论文测试 M7 和 M8。


11. M7:Distilled Strategies

M7 实现 ReasoningBank 风格的 Strategy Memory。

它主要适用于包含完整 trajectory 的 Agent 任务。

一个任务完成之后:

Trajectory
   ↓
Judge
   ↓
Success / Failure Analysis
   ↓
Distill
   ↓
Reusable Strategy

最终 Memory 中保存的不是整条轨迹,而可能是:

If relocation-related task:
1. identify source
2. identify destination
3. identify time
4. verify updated location

也就是说:

把具体 experience 转换成更加抽象、可复用的 reasoning strategy。

这些 Strategy 再进行 Dense Embedding。

Read 时:

Current Task
   ↓
Dense Retrieval
   ↓
Top-1 Strategy

而 Management 阶段会:

  • 判断轨迹;
  • 合并重复 Strategy;
  • 删除被替代的 Strategy。

因此 M7 是一个很典型的:

Read 少一点
Write 时想得更多

的设计。


12. M8:Skill Bundles

M8 实现 MemSkill 的核心思想。

它并不是把所有经历一条一条保存,而是:

Experiences
    ↓
Clustering
    ↓
Skill Bundles

然后不断:

Summarize
Merge
Prune

从而让 Memory 逐渐变成一组 Skills。

不过论文这里有一个重要实现差异。

原始 MemSkill 使用一个经过 PPO 训练的 controller,在 Read 时选择 Skill。

为了避免:

只有 M8 使用额外 RL Training,导致不同方法的训练成本无法公平比较,

作者把这个 Controller 改成:

Zero-shot LLM Controller。

并且把所有已经 refinement 的 Skill Bundles 放进 Prompt。

所以论文里的 M8:

保留了 MemSkill 的 online skill evolution pipeline,但并不是完全复现原论文的 PPO Controller。

这一点也是论文自己在 Limitations 中明确指出的。


13. Internal Memory:直接把 Memory 放进模型内部

接下来是内部记忆。


14. M9:Adapter Tuning

M9 不再保存可以显式查询的 Memory Record。

它首先从新信息中生成 QA Pair。

例如:

Input:
User moved to San Francisco.

        ↓

Q: Where does the user live?
A: San Francisco.

然后利用这些 QA Pair 训练 LoRA Adapter。

论文使用:

LoRA rank = 8

并采用 answer-only loss。

于是 Memory 最终被写进:

Model + LoRA Adapter

Read 时:

Query
  ↓
Base Model + Adapter
  ↓
Answer

不再存在显式:

Retrieve Top-k Memory

这个阶段。

这带来一个很明显的问题:

Memory 不再容易 inspect。

对于 Test-Time Learning 这类要求明确访问新知识的任务,这种方式的表现并不好。


15. M10:Full Context

M10 是最直接的方案:

什么 Memory System 都不做,把全部历史留下来。

Write:

New Message
     ↓
Append
     ↓
History Buffer

Read:

Full History
+
Current Query
   ↓
LLM

唯一的 Management 是:

超过 Context Window
        ↓
删除最旧内容

它是论文用来衡量:

“完全不压缩历史到底能做到什么程度”

的参考点。

不过在 ALFWorld 和 BigCodeBench-Hard 中,累积历史会超过实验模型的 Context Window。

因此 M10 没有参与两个 Agent-Centric Benchmark 的主比较

这本身其实也体现了 Full Context 的扩展性限制。


16. M11:Episode-Clustered Re-prefill

M11 基于 EpiCache 思路。

过去的 turn 首先被分成不同 Episode:

Turns
  ↓
Episode Clustering
  ↓
Episode 1
Episode 2
Episode 3
...

每个 Episode 只保留约 25% Token Budget

Read 时:

Current Query
   ↓
Match Episode Centroid
   ↓
Best Episode
   ↓
Re-prefill
   ↓
Generation

原始 EpiCache 会直接对 KV Cache 做定制化操作。

但是 Qwen3 使用 Hybrid Attention,原论文公开的 custom kernel 无法直接支持。

因此这里的 M11 做了修改:

不直接修改 KV Cache,而是选择整个 utterance,然后重新 prefill 到 Context 中。

因此论文认为它保留了:

Episodic Selection
+
Budget-Constrained Memory

这一核心思想,但 Read-Time 实现与原始 EpiCache 不完全一致。


17. 11 种方法放在一起看

ID Family 方法 Memory 保存什么 Read 方式 需要额外 LLM
M1 Flat Dense Vector 原始文本 + Embedding Dense Top-k
M2 Flat Sparse Vector 原始文本 + BM25 Index Sparse Top-k
M3 Text Gist Index Gist + 原文 LLM 选 Page 后展开
M4 Structural Evolving Notes Structured Notes + Links ANN + Link Expansion
M5 Structural Dual-Level Graph KG + Vector Chunks Graph + Vector Hybrid
M6 Hierarchical Hierarchical Tree 多层摘要树 Collapsed-tree Top-k
M7 Refinement Distilled Strategies 可复用 Strategy Dense Top-1
M8 Refinement Skill Bundles Refined Skills Skill Context
M9 Weight Adapter Tuning LoRA 参数 直接生成
M10 Activation Full Context 完整历史 全量 Context
M11 Activation Episode Re-prefill 压缩后的 Episode Episode Matching + Re-prefill

18. 实验设计

18.1 三个 Backbone

论文测试:

Qwen3-8B
Qwen3-32B-AWQ
Gemma-4-26B-A4B-IT

推理使用:

4 × H200 GPU

对于需要 Auxiliary LLM 的 Memory,统一使用:

GPT-4o-mini

LLM-as-a-Judge 同样使用 GPT-4o-mini。

这样尽可能减少不同 Memory 方法因为辅助模型不同而带来的影响。


19. 两种完全不同的 Memory Regime

论文最关键的一项实验设计,是把 Benchmark 分成:

User-Centric
Agent-Centric

两种 regime。


19.1 User-Centric Memory

包括:

  • LoCoMo;
  • MemoryAgentBench。

这类任务的核心是:

从过去的大量历史中找回相关信息。

例如:

几十轮之前用户说:
"I moved to San Francisco."

现在问:
"Where does the user live?"

答案就在历史 Memory 里。

此时 Memory 的首要目标通常是:

Recall。


19.2 MemoryAgentBench 的四项能力

MAB 又进一步划分成四种能力:

Capability 含义
Accurate Retrieval 从超长历史中找到目标信息
Long-Range Understanding 随 Context 变长仍然保持信号
Test-Time Learning 使用运行过程中刚学到的新模式
Conflict Resolution 面对新旧冲突信息时找到最新事实

其中 Accurate Retrieval 使用 LongMemEval-S 子集。

Conflict Resolution 还被论文用于后面的 Scalability Test。


20. Agent-Centric Memory

Agent-Centric 使用:

  • ALFWorld;
  • BigCodeBench-Hard。

20.1 ALFWorld

ALFWorld 是 embodied planning 任务。

Agent 不只是回答问题,而是:

Observation
    ↓
Choose Action
    ↓
New Observation
    ↓
Choose Action
    ↓
...

共测试 134 个 valid-unseen task。

此时 Memory 可能提供过去任务的经验。

但问题在于:

Agent 下一步行动往往主要取决于当前 Observation 和当前可执行 Action,而不是过去 Memory 中某段文字。

因此 Memory 太多可能反而成为干扰。


20.2 BigCodeBench-Hard

BigCodeBench-Hard 包含 148 个 Code Task。

历史 Memory Bank 中包含其他任务的:

SUCCESSFUL Solution
FAILED Solution

当前任务可以检索与之相关的代码。

这里过去代码往往可以直接成为:

当前问题的 reusable scaffolding。

所以虽然它同样属于 Agent-Centric Benchmark,但 Memory 的作用与 ALFWorld 并不完全相同。

这也是后面非常关键的一点:

“Agent-Centric”并不代表“检索一定有害”。

真正重要的是:

Retrieved Memory 会不会和当前任务最关键的信息争夺模型注意力。


21. 26 个 Metric:不只看 Accuracy

论文共记录 26 个指标。

大体分成两类:

Performance

包括:

Exact Match
Token F1
BLEU-1
LLM Judge
Compression Ratio
Recall@k
Task Success
Goal-Condition Success
Steps to Goal
Pass@1
Substring Exact Match

Efficiency

包括:

Memory Size
Inference Time
Write Latency
Retrieval Latency
Write Tokens
Write Calls
Retrieved Tokens
Read Tokens
Read Calls
Management Tokens
Management Calls
Total Tokens
Total Calls
Total Wall-clock
Per-query Latency

论文主表尤其关注:

Performance
+
Per-query Latency

因为一个真实 Memory System 不能脱离成本讨论。


22. User-Centric 结果:没有任何一种 Memory 全面获胜

实验的第一个重要结果就是:

No single substrate wins every capability.

不同任务中最佳方法不断发生变化。


22.1 LoCoMo 与 LongMemEval-S:M5 Dual-Level Graph 最强

在三个 Backbone 上:

M5 都在 LoCoMo 和 LME-S 的 LLM-Judge Score 上表现最好。

例如 LoCoMo:

Backbone M5 P4
Qwen3-8B 0.648
Qwen3-32B-AWQ 0.683
Gemma-4-26B 0.719

这说明长对话 factual retrieval 很适合:

Entity-Level Graph
+
Chunk-Level Vector Search

这种组合。

因为问题可能需要:

  • 找某个人;
  • 找某个实体;
  • 跨多段历史连接关系;
  • 同时重新获得原始文本。

Structural Graph 在这里有明显优势。


22.2 但是 M5 非常贵

性能强不等于综合最优。

M2 BM25 通常非常便宜。

而 M5 的 per-query latency 可能比简单 Flat Retrieval 高 10~100 倍

所以论文强调:

Structural Memory 的额外复杂度只有在它真的对应任务瓶颈时才值得。

如果一个普通 Dense / Sparse Retrieval 已经够用,那么 Knowledge Graph 带来的成本可能没有必要。


23. 不同 Memory Capability 对结构的要求不同

在 MemoryAgentBench 中,情况进一步分化。

Long-Range Understanding

Loss 较少、能够保留更多原始信息的方法表现较好。

例如:

  • Qwen3-8B 上 M10 Full Context 最好;
  • Qwen3-32B 上 M3 Gist Index 表现很好。

Test-Time Learning

M3 与 M8 表现突出。

而 M9 Adapter Tuning 表现较差。

作者解释:

刚刚学习到的信息被编码进权重以后,不容易被显式 inspection 和 selective query。


Conflict Resolution

M5 在三个模型中的两个上取得最佳结果。

这是因为 Conflict Resolution 要求:

旧事实
+
新事实
 ↓
判断哪个是当前有效版本

显式的:

  • Entity;
  • Relation;
  • Update Semantics;

对于这种任务更加有帮助。

所以 User-Centric 实验已经说明:

即使都叫“长期记忆”,Accurate Retrieval、Long-Range Understanding、Test-Time Learning、Conflict Resolution 对 Memory 的要求也并不一样。


24. Agent-Centric:结果开始发生反转

接下来是这篇论文最重要的发现之一。

同样一种 retrieval:

在有些任务里帮助 Agent,在另一些任务里反而会伤害 Agent。


25. ALFWorld:真正重要的是去掉噪声

在 ALFWorld 上,表现最突出的 Memory 往往具有一个共同特征:

在把历史送给 Agent 之前,先过滤或抽象掉大量无关内容。

例如 Qwen3-8B:

No Memory TSR = 5.7%
M11 TSR       = 11.9%

M11 大约将 Task Success 翻倍。

原因是 M11 不把整条历史轨迹重新塞进去,而是:

很多过去 Turn
      ↓
Episode Clustering
      ↓
选择匹配 Episode
      ↓
只 Re-prefill 相关部分

25.1 Qwen3-32B 上 M7 达到 32.1%

在 Qwen3-32B-AWQ 上:

No Memory = 22.4%
M7        = 32.1%

M7 成为 ALFWorld 表中的最佳方法。

M7 做的是:

Raw Trajectory
      ↓
Judge
      ↓
Distill
      ↓
Compact Strategy

它没有试图让 Agent 重新阅读完整经历,而是给 Agent:

一条经过提炼、可以直接指导当前行动的经验。

因此 M7 和 M11 虽然技术实现完全不同,但共享一个操作:

Denoising。

M7:

Trajectory
 ↓
Reasoning Template

M11:

Many Turns
 ↓
Matched Episode

本质上都在减少无关 Token。


26. 为什么 Raw Retrieval 在 ALFWorld 中可能有害?

因为 Agent 当前真正需要看的东西是:

Current Observation
Current State
Admissible Actions
Next-action Cue

假设 Prompt 是:

[System]

[Retrieved Memory]
过去任务轨迹……
过去任务轨迹……
过去任务轨迹……

[Current Observation]
You are in the kitchen...

[Admissible Actions]
open fridge
go to table
take cup

[Next Action?]

如果 Retrieved Memory 越来越长:

模型会把越来越多 Attention 分配给过去经历。

于是当前:

Observation
+
Action List

得到的注意力下降。

这对需要精准做“下一步动作”的 Agent 是致命的。


27. BigCodeBench-Hard:情况又反过来了

如果“Retrieval 越多会干扰 Agent”是一条普遍规律,那么 BigCodeBench 应该也下降。

但实验并不是这样。

BigCodeBench 上:

Retrieval 普遍是有帮助的。

例如:

Current Task:
实现某段程序

Retrieved Memory:
过去类似问题的一段成功代码

这里 Retrieved Memory 并不会与 Current Task 冲突。

相反:

它扩展了 Current Prompt。

一段类似问题的正确代码本身就是 reusable scaffolding。

因此:

  • Qwen3-8B:M5 Pass@1 = 15.5%,最高;
  • Gemma-4:M5 Pass@1 = 20.9%,最高;
  • Qwen3-32B:非常便宜的 M2 BM25 达到 19.6%,反而超过更昂贵的 M5 16.2%。

所以真正的结论不是:

Agent Task -> 少 Retrieval

而是:

Retrieved Memory 中是否包含解决当前任务的 Load-Bearing Information?

28. Performance-Latency:不同 Regime 的 Pareto Front 完全不同

作者进一步把:

Performance
vs.
Latency

画成 Pareto Frontier。

结果发现:

QA

Pareto Frontier 主要包含:

M5 Structural Graph
M6 Hierarchical Tree

Agentic

Pareto Frontier 则主要包含:

M2 Flat Retrieval      -> BigCodeBench
M7 Refinement Strategy -> ALFWorld

两边甚至没有共同的 substrate。

这意味着:

不存在一个简单的“最佳 Memory Family”。

甚至 Family 本身也不足以做 routing。

例如 Refinement Family:

M7

在 ALFWorld 上最好,

但同属 Refinement 的:

M8

在某些任务上却表现一般。

所以最终真正需要做的不是:

if Agent:
    use Refinement

而更可能是:

Current Regime
Current Query
History Length
Latency Budget
Attention Requirement
       ↓
选择具体 Substrate

29. Retrieval Top-k 消融:两个任务出现完全相反的趋势

为了确认问题到底是不是 Retrieval Breadth,论文直接改变 top-k。

LoCoMo:

k = 1, 2, 5, 10, 20

ALFWorld:

k = 1, 2, 3, 4, 5

结果非常清楚。


29.1 LoCoMo:k 越大,整体越好

在 LoCoMo 中:

随着 k 增大,P4 基本呈单调上升趋势。

原因很直观:

Retrieve More
      ↓
更可能把 Gold Evidence 找回来
      ↓
LLM 找到正确事实

即使额外找回来几段不相关内容:

对 factual QA 来说,模型通常可以忽略。

因为答案就在 Retrieved Memory 中。


29.2 ALFWorld:k 越大,反而越差

ALFWorld 上趋势反转。

例如 M7:

k = 1 : TSR = 32.1%
k = 5 : TSR ≈ 25%

Flat Retriever M1、M2 随 k 增大甚至会掉到 No-Memory Baseline 以下。

而且不仅 Task Success 下降:

Steps-to-goal 还会上升。

也就是说 Agent 并不是单纯“答错一次”。

而是:

开始在环境里乱走。


30. Attention Probe:为什么 Top-k 会产生相反效果?

作者进一步直接观察 Attention。

他们把 Prompt 分成四个区域:

System
Retrieved
Context
Cue

其中:

Retrieved

Memory System 找回来的历史。

Context

任务本身的重要上下文。

例如:

  • 对话 transcript;
  • Agent trajectory;
  • 当前 Observation;
  • Admissible Actions。

Cue

真正要求模型输出的提示。

例如:

Question

或者:

What is the next action?

31. Retrieval 增大以后,Attention 会发生什么?

作者发现两个任务中存在相同的底层现象:

随着 k 增大,Attention 从 Context 流向 Retrieved Memory。

例如 LoCoMo:

Retrieved Attention:
0.05 -> 0.66

Context Attention:
0.34 -> 0.10

也就是说模型越来越关注 Memory Retrieval Block。

这一现象本身在两个任务上是一致的。

真正不同的是:

答案到底在哪里。


31.1 LoCoMo:答案就在 Retrieved Memory

LoCoMo 中:

Question:
Where did Alice move?

Retrieved:
Alice moved to San Francisco.

答案就在 Memory。

因此:

Attention
Context -> Retrieved

实际上正是我们希望发生的事情。

所以 Recall 和最终准确率提高。


31.2 ALFWorld:答案在当前 Context

但 ALFWorld 中:

Retrieved:
过去类似任务怎么做

Current Observation:
现在 Agent 在哪里

Admissible Actions:
现在到底能执行什么

正确的下一步动作主要由:

Current Observation
+
Admissible Actions

决定。

此时同样发生:

Attention
Context -> Retrieved

结果就变成:

Agent 被过去经验吸走了注意力。

论文还观察到,随着 k=1 -> k=5,Cue 所获得的 Attention 也下降了大约 4%。

对于只有一个合法下一步动作的任务来说,这种变化已经足以导致行动错误。


32. 所以 Top-k 根本不是一个固定超参数

很多传统 RAG 系统会想:

top_k = 5

然后所有任务统一使用。

这篇论文认为这种做法对于 Agent Memory 并不合理。

因为:

Retrieval Breadth 应该由当前 Operating Regime 决定。

一个简单的判断方式是:

答案主要存在于过去 Memory?
          │
          ├── Yes -> 可以扩大 Retrieval
          │
          └── No
               ↓
当前 Context 是否承担关键决策?
               ↓
          更应该限制 Retrieval

因此:

top-k 本身也应该成为 Memory Routing 的一部分。


33. Scalability:历史从 6K 增长到 262K 后会发生什么?

前面的结果还没有考虑一个真实长期 Agent 必然遇到的问题:

Memory 会越来越大。

作者使用 MAB Conflict Resolution,把 Context Length 从:

6K
 ↓
32K
 ↓
262K

不断扩大。

此时不同 Memory 的扩展性差异开始非常明显。


34. Refinement Memory 的扩展性更好

例如 M8:

P4:
0.32 -> 0.51

与此同时,Latency 大约:

1s -> 10s

虽然增加,但仍然处于相对可控的范围。

原因是 M8 最终 Read 的不是全部历史,而是:

固定规模附近的 Skill Representation。

历史越多:

Raw History
     ↓
Write-side Refinement
     ↓
Compact Skills

大量成本被提前消化在 Write / Management 阶段。

Read 并不需要重新扫描全部 262K 历史。


35. Structural Memory:质量可以提升,但成本迅速膨胀

M5:

P4:
0.28 -> 0.48

质量同样随着历史增长而提升。

长历史给 Knowledge Graph 提供了更多:

  • Entity;
  • Relation;
  • Update;

因此更容易判断某个事实到底哪个版本最新。

问题在于:

Graph Rebuild 和 Entity Extraction 的成本也随着输入规模增加。

到 262K Context 后,M4、M5 的 latency 显著上升。

于是 M5 在中等 Context 上的质量优势,可能逐渐被运行成本侵蚀。


36. Full Context:质量能继续增长,但 Read Cost 线性增长

M10 的情况也非常典型。

Conflict Resolution P4:

0.27 -> 0.47

原因很简单。

历史越完整:

模型越容易直接在 Context 中比较新旧事实。

但是每一次 Read 都必须:

重新读取越来越长的历史

所以 Read Cost 基本随着输入长度增长。

这意味着:

Full Context 在短期可能非常简单有效,但并不一定适合作为永久长期记忆。


37. Weight Memory:对 Recency-Sensitive Memory 并不理想

M9 Adapter Tuning 在 Conflict Resolution 上基本保持:

0.18 ~ 0.22

没有随着历史增长获得类似收益。

作者认为原因在于:

Adapter 缺少明确的 selective temporal update mechanism。

也就是说,如果历史是:

2025:
Alice lives in Tokyo.

2026:
Alice lives in Seattle.

External Memory 可以显式维护:

current_location = Seattle

或者利用 timestamp / graph update 判断旧事实失效。

但把两条信息都训练进 Weight 后:

很难显式控制模型到底应该保留哪个版本。

因此 Parameter Memory 在 Recency-Sensitive Conflict Resolution 上存在明显困难。


38. 第三个 Routing Axis:History Depth

前面已经得到两个 Routing 因素:

1. Task Regime
2. Retrieval Breadth

Scalability 实验又增加一个:

3. History Depth

同一个 Memory:

History = 6K

时可能很好,

到了:

History = 262K

时却可能变得非常昂贵。

所以 Memory Router 不能只问:

“用户现在问的是什么?”

还要问:

“这个 Agent 到现在已经积累了多少历史?”


39. 论文给出的设计原则:Trade Read Breadth for Write Depth

结合所有实验,论文提出一个非常核心的设计规则:

trade read breadth for write depth

可以理解成:

不要一味依靠 Read 阶段检索越来越多的历史,而应该考虑在 Write / Management 阶段花更多计算,把历史整理成更容易被利用的表示。

例如传统方式:

Write:
直接保存

Read:
Retrieve 20 条历史

另一种方式:

Write:
Trajectory
 ↓
Judge
 ↓
Distill
 ↓
Strategy

Read:
只 Retrieve 1 条 Strategy

后者把计算从 Read 转移到了 Write。


39.1 但这不代表“Memory 越少越好”

这里很容易产生误解。

论文同时明确发现:

LoCoMo 这样的 Factual QA 中,Retrieval 越宽通常越好。

所以:

trade read breadth for write depth

并不是说:

任何任务都应该少检索

而是说:

对于需要长期运行、并且当前 Context 承担关键决策的 Agent,不应该把不断扩大 Retrieval 当成唯一解决方案。

在:

Long-context Factual QA

中可以使用更加宽的 Retrieval。

而在:

Sequential Decision Making

中更适合:

更少、更精准的 Read
+
更强的 Write-side Distillation

因此真正的核心仍然是:

Regime-Aware Memory。


40. Universal Memory 不应该是一种 Memory

这也是整篇论文最后的落脚点。

作者认为:

不存在一个单独的 Memory Substrate,可以同时满足所有场景。

因为不同任务要求的是完全不同的操作。

例如:

场景 需要的 Memory 能力
长对话事实查询 高 Recall
Entity / Relation QA Structural Retrieval
多步行动 Compact Procedural Cue
Code Generation Related Example Retrieval
Conflict Resolution Explicit Update / Recency
超长生命周期 Agent Scalable Compression / Refinement

因此所谓:

Universal Agent Memory

更可能不是:

找到一个最强 Memory Database

而是:

                    Memory Router
                         │
       ┌─────────────────┼─────────────────┐
       │                 │                 │
   Structural         Refinement          Flat
   Fact Memory       Strategy Memory    Raw Memory
       │                 │                 │
       └─────────────────┼─────────────────┘
                         ↓
                       Agent

甚至可以进一步组成:

Multi-Substrate Memory System

或者:

Multi-Agent Memory System

不同 Memory 扮演不同角色:

Structural / Text
-> 保存事实

Refinement
-> 提炼抽象经验

Flat / Activation
-> 保留原始经历

再由 Harness 根据当前 regime 决定:

当前 Query 应该去哪个 Memory 中读,以及应该读多少。


41. 论文并没有提出一个完整的 Memory Router

需要注意:

这篇论文证明了 Routing 的必要性,但并没有进一步实现一个完整、自适应的 Universal Memory Router。

它提供的是:

Controlled Evaluation
        ↓
找出不同 Substrate 的适用条件
        ↓
得到 Routing Signal

也就是说,它工作的重点更像是:

为未来 Multi-Substrate Memory Router 提供经验依据。

而不是直接提出一个已经解决所有问题的 Router。


42. 为什么没有把 Mem0、MemGPT、Zep 直接放进主表?

论文其实考虑过三个非常知名的 production-grade Memory:

  • MemGPT;
  • Mem0;
  • Zep。

但是最终没有把它们放进主要 controlled comparison。

原因是:

它们的 Auxiliary LLM Cost 太高。

一次完整 LoCoMo Run 中:

System Auxiliary LLM Calls Execution Time
MemGPT 2739 16.3 h
Mem0 8984 11.8 h
Zep 7624 23.1 h

相比之下,像 BM25:

Auxiliary LLM Call = 0

整体只需要大约十分钟量级。

如果直接把完整生产系统放进去:

实验的 Token、Latency、Wall-clock 几乎会完全被这些复杂 Pipeline 主导。

作者因此选择让主实验更集中在:

Memory Substrate 本身的结构差异。

同时论文认为这些系统的核心机制已经部分由主实验中的 lighter implementation 覆盖:

Mem0  -> M3 Text Distillation
Zep   -> M5 Graph
MemGPT -> M3 Record Store

不过这里只能理解成:

机制层面的近似覆盖,

而不能理解成论文完整评估了 Mem0、Zep、MemGPT 的生产系统。


43. 论文明确指出的局限性

论文在 Appendix G 中主要指出两类限制。


43.1 没有把完整 Production Memory System 放进主要比较

MemGPT、Mem0、Zep 因成本原因被排除。

因此主实验比较的是:

代表不同 substrate design 的 controlled implementation。

而不是:

所有现实 Memory 产品的完整系统能力排名。


43.2 M8 和 M11 与原论文存在实现差异

M8

MemSkill 原始 PPO Controller 被替换为 Zero-shot LLM Controller。

原因是为了避免只有 M8 需要额外 RL Training。

M11

原始 EpiCache 的 KV Cache in-place editing 被替换成 utterance-level re-prefill。

原因是公开 Kernel 不支持 Qwen3 Hybrid Attention。

因此在解释结果时,需要把它们理解成:

对核心 substrate 思想的受控实现,

而不是完全复刻原系统。


44. 论文最终得到的三个主要结论

整篇论文的实验最终可以收敛成三个结论。


44.1 不同任务需要不同 Memory Substrate

Dialogue QA
≠
Embodied Planning
≠
Code Generation

Structural Graph 在 Dialogue QA 很强,

但在 Agentic Task 中可能被更简单的方法 Pareto-dominate。

Refinement Memory 在 ALFWorld 很强,

却不是 QA 的统一赢家。

所以不存在:

Best Memory Substrate

只有:

Best Memory Substrate
under a particular operating regime

44.2 Retrieval 越多并不一定越好

对 Factual QA:

More Retrieval
-> More Recall
-> Better QA

对 Sequential Decision:

More Retrieval
-> Attention shifts to Memory
-> Current Observation receives less attention
-> Worse Action

因此:

Retrieval Breadth 必须动态调整。


44.3 Scalability 也是 Memory Routing 的核心因素

一个方法在:

6K History

表现很好,

并不能保证它在:

262K History

仍然适合。

特别是:

Graph Rebuild
Full Context Read

都可能随着历史增长产生明显成本。

相比之下:

Strategy
Skill

这类把大量工作放到 Write / Refininement 阶段的方法,更容易维持长期 Read Efficiency。


45. 总结

这篇论文不是再设计一种新的 Agent Memory,而是重新提出一个更基础的问题:

我们为什么默认一个 Agent 从头到尾都应该使用同一种 Memory?

论文通过:

11 Memory Methods
7 Substrate Families
3 Backbone Models
4 Benchmark Suites
26 Metrics

进行统一实验后发现:

                     不存在统一最优 Memory
                              │
          ┌───────────────────┼───────────────────┐
          │                   │                   │
       Task Regime       Retrieval Breadth    History Depth
          │                   │                   │
          └───────────────────┼───────────────────┘
                              ↓
                       Substrate Routing

对于长对话 factual QA:

更广的 Retrieval 往往可以提升 Recall,Structural Graph 尤其有效。

对于 ALFWorld 一类连续决策任务:

Memory 的核心价值不再是“记得更多”,而是“把过去经历压缩成不会干扰当前决策的高价值信息”。

对于 Code Agent:

一段相关历史代码又可以成为直接可复用的 scaffolding,因此 Retrieval 重新变得有利。

而随着 Agent 生命周期越来越长:

Memory 的读写成本和扩展性本身也必须进入 Routing 决策。

因此论文最终主张:

未来的 Universal Agent Memory 更可能是一个由多种 Memory Substrate 组成、根据任务状态动态 Routing 的系统,而不是找到一种足够复杂、足以替代其他所有 Memory 的单一结构。


参考

  1. Wei-Chieh Huang et al. Harness the Memory: A Holistic Evaluation of Memory Substrates in Memory Agents. arXiv:2608.15008, 2026.
    https://arxiv.org/abs/2608.15008

  2. Paper PDF:
    https://arxiv.org/pdf/2608.15008

posted @ 2026-08-23 16:29  YourF4u1t  阅读(4)  评论(0)    收藏  举报