跳转到内容

Evo-Memory — 给"会自己长记性"的 agent 出一份统一考卷

待复核

Evo-Memory 是 2025 年 11 月一篇论文,做了两件事:第一,把 10+ 种”自进化 memory 模块”统一到一个框架;第二,提出一份流式任务 benchmark,专门测 agent 部署期间的”测试时学习”(test-time learning)能力。

日常类比:传统 LLM benchmark 像考一次性的笔试——题目独立,做完就清空。但真实场景的 agent 是连续上岗的员工,今天接的工单影响明天的判断。Evo-Memory 把考题排成一长串:每答完一题,agent 必须把经验写进 memory,下一题可能用得上。这才接近真实部署。

论文还顺手提了 ReMem——一个”act-think-memory”小循环 pipeline 作为强基线。

不接受”memory 应该会进化”,下面这些事就拼不到一起:

  • 为什么 agent 在长会话/长任务流上越跑越钝
  • 为什么 RAG 系统加了 memory 模块但没人能比较哪个更好
  • 为什么各家”memory 模块”互相不兼容、对比无从谈起
  • 为什么静态 QA benchmark 测不出 agent 的”学习”能力

Evo-Memory 三块拼图:

  1. 统一接口:论文把 memory-augmented agent 收成可对比的壳(检索 / 更新 / 上下文拼装)。工程落地时常再收成 search / write / update 三个调用点,方便把 Amem、Mem0、LangMem、workflow memory 等装进同一评测环。类比:把 USB-A、Type-C、Lightning 都接到一个 hub 上。

  2. 流式数据集:把约 10 个数据集(多轮目标导向 + 单轮推理/QA)改写成”task stream”——一个一个串起来,agent 必须按序处理。类比:把高考的所有学科混成一张连续答题卡,做完一题不能回头。

  3. ExpRAG + ReMem:作者给两个强相关基线。ExpRAG 检索过去经验来辅助新任务;ReMem 是 action–think–memory refine 三段循环——动手、反思、修 memory。类比:ExpRAG 是”看历史档案”,ReMem 是”先想再做再总结”。

案例 1:把两种 memory 装进同一评测壳

Section titled “案例 1:把两种 memory 装进同一评测壳”

目标:同一条 task stream、同一个 backbone,只换 memory 适配器。

class MemoryAdapter:
def search(self, query, k=4):
# 1) 编码 query 2) 在已有 memory 里取 top-k
return retriever.top_k(query, self.store, k)
def write(self, item):
# 把本轮 (task, action, result) 写成一条可检索经验
self.store.append(item)
def update(self, item_id, patch):
# refine:改旧记忆,而不是永远 append
self.store[item_id] = {**self.store[item_id], **patch}
bench.run(model=backbone, memory=AmemAdapter())
bench.run(model=backbone, memory=Mem0Adapter())
# 同样数据流、同样模型,第一次能横向对比

逐部分解释

  • search:对应论文里的检索步,决定”这题先看哪些旧经验”
  • write:任务结束后落一条新经验,供后续题复用
  • update:ReMem 一类方法的关键——修正/剪枝旧记忆,而不是只堆日志
  • bench.run(...):固定 stream 与模型,只换 adapter,分数才可比

案例 2:流式答题才看得出”会不会长记性”

Section titled “案例 2:流式答题才看得出”会不会长记性””

静态 QA 上,轻量 cache(如 Amem)和结构化 memory(如 Mem0)可能看起来差不多。换到 Evo-Memory 的顺序流之后,差异常出现在后半段任务:会 refine / 复用经验的方法(ExpRAG、ReMem)更容易把前期踩坑变成后期加成。读论文结果时,不要只看总平均,还要看多轮环境(AlfWorld、BabyAI 等)和单轮推理集是否同向提升。

案例 3:ReMem 的 action-think-memory 循环

Section titled “案例 3:ReMem 的 action-think-memory 循环”
for task in stream:
think = llm("think about " + task + recent_memory)
action = llm("act based on " + think)
result = env.run(action)
memory.refine(task, think, action, result) # 关键的 refine 步

refine 不是简单 append,而是触发更新已有 memory(如修正之前错的判断)。这一步是 ReMem 相对”只检索不整理”方法的关键分水岭。

案例 4:任务相似度决定 memory 赚不赚钱

Section titled “案例 4:任务相似度决定 memory 赚不赚钱”

论文用任务嵌入的簇内相似度分析增益:相似度高的数据集(如结构重复的 PDDL / AlfWorld)上,ReMem 类方法提升更大;更散的集合(如某些数学/研究生推理集)上,可迁移经验少,memory 加成变薄。作者报告过增益与任务相似度呈正相关(不同 backbone 上 Pearson r 大约在 0.5–0.7 量级)。含义很直接:别用单一相关度的考卷给所有 memory 方法打总分

  1. 流式 vs 静态指标搞混:累计准确率会掩盖学习曲线——必须看分段曲线,看后期是否真的提升。

  2. memory 大小没控制:A 模块 memory 长成 100MB,B 模块 1MB——比较不公平。Evo-Memory 用统一检索预算(如 top-k)和截断约束来压平。

  3. LLM 服务不稳定干扰评估:流式长跑遇 rate limit / 模型版本漂移影响巨大。评测要固定模型 snapshot 与提示模板。

  4. task 相似度是双刃剑:簇内相似度高时 memory 收益大,但也更容易”靠类似题取巧”;相似度低时 memory 几乎帮不上忙。看结果时要连着任务相似度一起读。

适用

  • 设计 / 选型 memory 模块时做横向对比
  • 评估自家 agent 的”长期学习”能力
  • 写 paper 需要标准化 benchmark 来 challenge baseline

不适用

  • 单轮任务系统(用静态 benchmark 就够了)
  • 模型权重微调路线(Evo-Memory 假设权重冻结)
  • 需要真实多用户 / 多 session 场景(benchmark 是单 agent 流)
  • 2023 年:MemGPT、A-MEM 等 memory 模块涌现,各家自报数据,无统一对比
  • 2024 年:LongMemEval(Wu et al.)开始测 long-context memory,但仍是问答式
  • 2025 年初:自进化 agent 综述(self-evolving-agents-survey)指出 memory 评估是空白
  • 2025 年 11 月:Evo-Memory 把流式任务 + 统一接口 + 公开榜单做出来
  1. benchmark 决定方向:没有合适 benchmark 的研究方向像没尺子的木匠
  2. 流式才是真实场景:静态 QA 测不出”学习”能力
  3. 统一接口是个体力活但回报巨大:让 10 种方法可比,价值远大于发明第 11 种
  4. ReMem 这种”refine 而不是 append”是 memory 设计的关键分水岭
  5. 相关度分档让对比更可信:单一难度容易过拟合方法