MemEvolve:当 Agent 不只积累记忆,还开始进化自己的记忆系统

一句话定位:MemEvolve 把 Agent Memory 从“固定架构里的经验积累”推进到“记忆架构本身也能被搜索、诊断和进化”的层次。

论文 / 代码arXiv / GitHub: bingreeky/MemEvolve
会议状态:仓库标注已被 ICML 2026 接收
关键词:Agent Memory、Self-Evolving Agent、Meta-Evolution、EvolveLab、Encode-Store-Retrieve-Manage
适合读者:关注自进化 Agent、长期经验复用、Agent 架构搜索、工具调用 Agent、Deep Research Agent 的研究者和工程实践者。


1. 大多数 Agent Memory 只是在固定盒子里装更多东西

今天的 Agent Memory 系统,大多遵循一个固定流程。

Agent 做完一次任务,系统把任务轨迹、成功经验、失败原因、用户偏好、工具调用方式写进记忆。下次遇到类似任务时,再从记忆里检索相关内容,作为提示注入给 Agent。

这个方向本身没问题。它确实能让 Agent 不用每次都从零开始。

但这里有一个很大的隐含前提:记忆系统的架构是人类提前设计好的。

例如,一个系统可能固定采用这样的流程:

  • 把轨迹总结成自然语言经验;
  • 存进向量库;
  • 查询时按 embedding 相似度取 top-k;
  • 把召回文本拼进 prompt;
  • 定期用 LLM 合并重复记忆。

另一个系统可能采用知识图、工具库、技能库、错误案例库,或者把这些混在一起。无论哪种方式,一旦架构确定,Agent 后续通常只能增加记忆内容,很少能改变“应该怎样记忆”。

MemEvolve 关注的正是这个问题:如果 Agent 想真正自我改进,它不应该只改进 memory content,也应该能改进 memory architecture。

换句话说,Agent 不只要学会记笔记,还要学会改变自己的记笔记方法。


2. MemEvolve 的核心问题

MemEvolve 问的是一个更高层的问题:

能不能让 Agent 根据任务表现,自动进化自己的记忆系统?

这和普通 memory update 不一样。

普通 memory update 改的是内容。例如“这次任务中,某个网站搜索框需要先点开”“这个 API 的参数名是 user_id”“这个项目测试命令是 npm test”。

MemEvolve 想改的是机制。例如:

  • 这类任务应该存完整轨迹,还是只存失败节点?
  • 经验应该保存成事实、步骤、工具调用模板,还是层级摘要?
  • 查询时应该只按语义检索,还是先判断任务意图再取不同记忆?
  • 旧记忆应该按时间衰减,还是按成功率重新加权?
  • 工具使用经验是否应该被蒸馏成可复用 skill?

这些问题不是“记住了什么”,而是“系统应该如何记忆”。这就是 MemEvolve 的 meta-evolution。


3. 四模块设计:把记忆系统拆成可进化组件

为了让记忆架构可进化,MemEvolve 需要先定义什么是“一个记忆系统”。

它把 memory architecture 拆成四个核心模块:

Encode:经历如何变成记忆

Encode 决定原始任务轨迹如何被加工。

同样一次任务经历,可以有很多编码方式:

  • 保存完整轨迹;
  • 提取关键事实;
  • 总结失败原因;
  • 抽象成可复用步骤;
  • 生成工具调用模板;
  • 把任务拆成子目标和状态转移;
  • 提取“什么时候该用某个工具”的触发条件。

Encode 的质量决定了记忆系统能不能把一次经历变成未来有用的经验。

Store:记忆如何组织

Store 决定记忆被放进什么结构。

可以是简单文本列表,可以是向量库,可以是分层知识库,可以是图,也可以是多个 memory bank:事实一类、技能一类、工具经验一类、错误案例一类。

不同任务对 Store 的要求不同。长对话问答可能更需要事实和时间线;Web Agent 可能更需要页面操作流程;Deep Research Agent 可能更需要搜索路径、引用证据和中间结论。

Retrieve:新任务如何找记忆

Retrieve 决定任务开始时如何召回历史经验。

最简单的方式是 embedding top-k,但这不一定够。很多 Agent 任务需要先判断任务类型,再选择不同检索路径。

例如:

  • 用户问事实,优先检索 factual memory;
  • Agent 要执行网页任务,优先检索 workflow memory;
  • 任务失败后重试,优先检索 failure memory;
  • 需要调用工具,优先检索 tool-use memory。

Retrieve 是记忆系统真正参与决策的入口。

Manage:记忆如何维护

Manage 决定记忆如何更新、合并、删除和降权。

长期 Agent 最怕 memory base 越长越脏。重复经验、过期经验、错误经验、低价值经验如果不处理,系统会越来越慢,也越来越不可靠。

Manage 要解决的问题包括:

  • 新旧记忆是否重复;
  • 某条记忆是否已经过期;
  • 失败经验是否应该保留;
  • 多条记忆冲突时信谁;
  • 哪些经验应该被提升为通用 skill;
  • 哪些记忆应该被删除或降权。

这四个模块组合起来,就是一个可执行的 memory architecture。

MemEvolve 的关键一步,是把这个架构当成可以被修改、评估和选择的对象。


4. 双循环:内容进化和架构进化同时发生

MemEvolve 的方法可以理解成双循环。

第一层是内循环:Agent 在当前记忆架构下做任务。

在这一层里,系统流程和传统 memory agent 很像。Agent 使用固定的 Encode、Store、Retrieve、Manage 模块完成一批任务。任务过程中产生经验,经验进入 memory base,后续任务再从 memory base 中检索和复用。

也就是说,内循环负责让 memory content 变多、变好。

第二层是外循环:系统评估当前记忆架构是否适合这类任务。

外循环会看任务表现,诊断瓶颈,再生成新的候选 memory architecture。候选架构会在同一批或相关任务上竞争,表现更好的被选为下一轮基础。

这就形成了两种进化:

  • 记忆内容的进化:Agent 积累越来越多经验。
  • 记忆架构的进化:系统逐渐改变积累和使用经验的方式。

这也是 MemEvolve 和普通 memory system 的根本区别。普通系统最多让 Agent 在一个固定盒子里积累内容;MemEvolve 让盒子本身也参与进化。


5. 把记忆架构看成 genotype

MemEvolve 里一个很重要的抽象是:memory architecture 可以被看成一种 genotype,也就是可变的结构编码。

如果用更工程化的话说,一个记忆系统不是一个模糊概念,而是一组可替换模块:

Memory Architecture Ω = (Encode, Store, Retrieve, Manage)

其中每个模块都可以有不同实现。

Encode 可以是“保存完整轨迹”,也可以是“抽取 task insight”,还可以是“生成工具使用规则”。

Store 可以是“单一向量库”,也可以是“事实库 + 技能库 + 失败案例库”,还可以是“图结构 + 文本库”。

Retrieve 可以是“embedding top-k”,也可以是“按任务类型路由到不同 memory bank”,还可以是“先用 LLM 判断需要事实、流程还是工具经验”。

Manage 可以是“只追加不清理”,也可以是“定期合并重复记忆”,还可以是“按成功率给经验加权、按时间衰减、淘汰低价值记忆”。

MemEvolve 的进化不是随便让 LLM 改 prompt,而是在这个模块化空间里修改模块实现或模块组合。这样做的好处是每次变化都有边界:可以只改 Encode,不动 Store;也可以只换 Retrieve 策略,不重写整个 Agent。

这也是 EvolveLab 的意义。它把多种已有 self-improving memory 系统放进统一接口里,让这些系统可以被比较、复用、组合和进化。


6. 内循环具体做什么

内循环可以理解为“固定记忆架构下的任务学习”。

假设当前第 k 轮有一个候选记忆系统 Ω_j^(k)。这个系统内部已经规定好了 Encode、Store、Retrieve、Manage 怎么实现。Agent 用它去跑一批任务。

每个任务大概经历这样的流程:

  1. Agent 接收任务目标和环境观察。
  2. Retrieve 模块从 memory base 里取回相关经验。
  3. Agent 根据当前观察和取回经验做决策。
  4. 任务过程中产生轨迹,包括观察、动作、工具调用、错误、成功结果。
  5. Encode 模块把轨迹转成新的经验条目。
  6. Store 模块把经验写进 memory base。
  7. Manage 模块合并、清理或重排记忆。
  8. 系统记录这次任务表现,比如成功率、token 成本、API 成本、执行延迟。

这个阶段会得到两类东西。

第一类是新的 memory content,也就是任务经验本身。它可能是事实、流程、工具调用模式、失败原因、搜索策略等。

第二类是 performance feedback,也就是这个记忆架构在任务上的表现。比如任务成功了没有,花了多少 token,调用了多少工具,耗时多长,失败时卡在哪一步。

内循环本质上回答的是:在当前记忆架构下,Agent 能不能靠积累经验变好?


7. 外循环具体做什么

外循环才是 MemEvolve 的核心。

外循环拿到内循环的任务日志和表现指标后,不只问“这次任务为什么失败”,还会问“当前记忆架构哪里不适合这类任务”。

它会把每个候选系统的表现整理成一个反馈向量。公开解读里常见的形式是:

F_j^(k) = (Perf_j^(k), -Cost_j^(k), -Delay_j^(k))

这里 Perf 表示任务表现,比如成功率或 pass@1;Cost 表示 API / token 成本;Delay 表示执行延迟。因为系统既想效果好,也想成本低、延迟低,所以通常会用 Pareto ranking 或 non-dominated sorting 来比较候选。

这点很关键。MemEvolve 不是只选分数最高的系统。如果一个记忆架构只提升一点效果,却让 token 成本和延迟暴涨,它未必是好选择。Pareto selection 的意义是同时考虑任务成功、成本和速度。

外循环可以拆成三件事。

第一,Architectural Selection。系统根据表现、成本和延迟选择一批 top parent architectures。

第二,Diagnosis。系统回放任务轨迹和错误案例,判断瓶颈属于哪个模块。比如:

  • Encode 问题:经验抽得太粗,没保留关键失败原因。
  • Store 问题:所有经验混在一个库里,事实、流程、工具模板没有分层。
  • Retrieve 问题:召回内容相似但不实用,真正相关的流程经验没取到。
  • Manage 问题:旧经验过期,重复记忆太多,错误经验没有被降权。

第三,Design。系统根据诊断结果修改 Encode、Store、Retrieve、Manage 的实现,生成下一代候选架构。

外循环本质上回答的是:当前记忆架构哪里限制了 Agent 学习?下一轮应该怎样改这个架构?


8. 进化过程具体怎么跑

从公开材料看,MemEvolve 的外循环大致包含几个步骤。

第一步,使用当前 base system 跑一批任务,收集任务日志和表现指标。

这一步的目的不是单纯刷分,而是获得诊断材料。系统需要知道当前 memory architecture 在哪里失败:是编码没抓住关键经验,还是存储结构太粗糙,还是检索取错内容,还是管理模块让记忆库变脏。

第二步,生成多个候选系统。

候选系统不是随便改 prompt,而是围绕 Encode、Store、Retrieve、Manage 这些模块做结构调整。比如加强工具经验抽取、增加层级摘要、改变检索路由、给失败案例单独建库、让旧记忆按成功率重新排序。

第三步,让候选系统和原系统比赛。

系统会把新候选和原始 base 放在同一任务集上比较。这样可以避免只凭直觉决定哪个架构更好。

第四步,进入 finals 或选择阶段。

表现最好的系统会在更多任务或新任务上继续验证,最终 winner 成为下一轮的 base system。然后下一轮继续从它出发,重复诊断、生成、竞争和选择。

这个过程有点像架构搜索,也有点像演化算法。不同的是,它搜索的不是神经网络结构,而是 Agent 的 memory system design。


9. README 里的自动进化流程

官方 README 给了一个自动多轮进化命令,大致长这样:

python evolve_cli.py auto-evolve gaia \
    --num-rounds 3 \
    --provider agent_kb \
    --num-systems 3 \
    --task-batch-x 40 \
    --top-t 2 \
    --extra-sample-y 20 \
    --creativity 0.5

这个命令里的参数能很好地解释 MemEvolve 的具体步骤。

--num-rounds 3 表示跑 3 轮进化。每一轮都会从当前 base system 出发,生成候选、比赛、选择 winner。

--provider agent_kb 表示初始 baseline memory system。也就是说,第一轮不是凭空开始,而是从某个已有记忆系统出发。

--num-systems 3 表示每轮生成 3 个候选系统。如果加上原来的 base system,tournament 阶段就是 N+1 个系统一起比较。

--task-batch-x 40 表示初始评估用 40 个任务。这批任务用于收集 base logs,也用于 tournament 阶段比较候选。

--top-t 2 表示 tournament 后选前 2 个系统进入 finals。

--extra-sample-y 20 表示 finals 会额外加入 20 个任务,避免候选只是在前一批任务上碰巧表现好。

--creativity 0.5 控制候选生成时的创新程度。这个值太低,候选可能只是小修小补;太高,则可能生成不稳定或跑不通的架构。

官方 README 也把每轮流程写得很明确:

  1. Collect base logs:用当前 base system 跑 x 个任务,收集日志。
  2. Generate candidates:生成 N 个候选系统,每个候选都经历分析、生成、创建和验证。
  3. Tournament:把 N 个新系统和 1 个 base system 放在同一批任务上评估。
  4. Finals:选 top t 系统,在额外任务和抽样任务上继续比较。
  5. Selection:winner 成为下一轮 base system。

这个设计避免了两个问题。

第一,避免只靠 LLM 主观判断哪个架构更好。候选必须跑任务。

第二,避免在单一任务批次上过拟合。finals 里会加入额外任务重新验证。


10. 候选架构具体可能怎么变

为了更直观,可以想象一个 Web Agent 初始使用很普通的向量记忆:

Encode:把任务轨迹总结成一段自然语言。
Store:所有总结放进同一个向量库。
Retrieve:按当前任务描述做 top-k 相似检索。
Manage:定期删除太旧的记录。

跑任务后,系统发现几个问题:成功案例里真正有用的是页面操作流程,但 Encode 只保存了泛泛总结;失败案例和成功案例混在一起;Retrieve 经常召回看似相似但不可操作的记录。

MemEvolve 可能生成一个候选架构:

Encode:把轨迹拆成 goal、state、action、observation、result,并抽取可复用 workflow。
Store:分成 workflow memory、failure memory、tool-use memory 三个库。
Retrieve:先判断任务类型,再检索对应 memory bank。
Manage:重复 workflow 合并,失败案例只保留根因和避免策略。

另一个候选可能更保守:

Encode:仍然保存摘要,但额外抽取关键工具调用参数。
Store:保持单一向量库,但给工具经验加 metadata。
Retrieve:向量召回后用 LLM rerank,优先选择有成功结果的经验。
Manage:按成功率给记忆加权。

这两个候选都不是简单“多存点历史”,而是在改变记忆系统如何处理经验。Tournament 会用任务表现、成本、延迟来决定哪个更适合当前任务族。


11. Diagnose-and-Design 是怎么工作的

MemEvolve 的外循环可以概括为 diagnose-and-design。

Diagnose 不是只看最终分数,而是尽量定位失败属于哪个记忆环节。

如果 Agent 没有写入关键经验,问题在 Encode。比如它完成了一次复杂搜索,但只记了“成功找到答案”,没有记搜索策略和关键查询词。

如果 Agent 写入了很多经验,但下次找不到,问题在 Store 或 Retrieve。比如事实、流程、工具经验都混在一个库里,embedding 检索只找到文字相似的记录,却没有找到可复用流程。

如果 Agent 找到了经验但用错了,问题可能在 Retrieve 的排序、prompt 注入方式,或者 Manage 没有处理冲突记忆。

如果 memory base 越来越大,召回越来越乱,问题在 Manage。系统可能需要合并重复经验、删除低质量经验、按任务成功率重排经验。

Design 阶段会针对诊断结果生成修改方案。它不是泛泛地说“提高检索质量”,而是具体改模块:

  • 改 Encode:增加失败根因抽取、工具参数抽取、子目标分解。
  • 改 Store:增加分层 memory bank,区分事实、流程、工具、失败。
  • 改 Retrieve:增加任务分类、metadata filter、LLM reranker、hybrid retrieval。
  • 改 Manage:增加合并、去重、遗忘、成功率加权和冲突处理。

这样每次进化都有明确靶点。


12. EvolveLab:为什么统一接口重要

MemEvolve 另一个重要贡献是 EvolveLab。

Agent Memory 领域有一个现实问题:大家的方法很多,但接口、任务、评估方式不统一。一个系统可能叫 memory,另一个叫 skill library,第三个叫 experience replay,第四个叫 tool-use cache。它们解决的问题相似,却很难公平比较和组合。

EvolveLab 试图把已有代表性 memory systems 统一到同一个模块化设计空间里,也就是 Encode、Store、Retrieve、Manage。

这件事看起来像工程整理,但对研究很重要。

第一,它让不同记忆系统可以在同一协议下比较。否则每篇论文都在自己的框架里跑,结论很难横向对齐。

第二,它让 memory module 可以组合。一个系统的编码方式,也许可以配另一个系统的检索方式;一个系统的管理策略,也许可以迁移到另一个 Agent 框架。

第三,它为 meta-evolution 提供搜索空间。如果没有统一接口,系统很难自动生成和验证新架构。

所以 EvolveLab 的意义不只是“开源代码”,而是把 Agent Memory 从一堆孤立技巧,整理成可以系统搜索的模块空间。


13. 实验结果怎么看

MemEvolve 的公开摘要里强调,它在多个 agentic benchmark 上能提升不同 Agent 框架表现,例如 SmolAgent、Flash-Searcher 等,并报告最高约 17% 的改进。同时,进化出来的记忆架构可以跨任务、跨框架、跨 LLM backbone 迁移。

这个结果如果成立,意义很大。

因为 MemEvolve 最容易被质疑的一点是:进化出来的 memory architecture 会不会只是过拟合某个任务集?如果它只能在一个 benchmark 上有效,那它更像自动调参;如果能迁移到不同任务和模型,那说明它确实发现了一些更通用的记忆设计原则。

从论文叙事看,这些原则可能包括:

  • 更强的 agentic involvement:让 Agent 更主动地参与经验抽取和使用。
  • 更层级化的组织:不是平铺所有记忆,而是区分事实、流程、工具、失败。
  • 更多抽象层次:既保存具体经验,也沉淀可复用模式。
  • 更任务感知的检索:不同任务类型走不同 memory route。

这些结论和近年的 Agent Memory 趋势是一致的:有用的记忆不只是“相似文本”,而是能指导行动的经验结构。


14. 和 ProcMEM、PlugMem、SimpleMem 的关系

MemEvolve 和 ProcMEM 有相似之处。ProcMEM 关注从 episodic narratives 中学 procedural memory,也就是把过去经历变成可复用 skill。MemEvolve 则更上层,它可以把“是否需要 procedural memory、如何抽 skill、如何检索 skill”也纳入可进化架构。

MemEvolve 和 PlugMem 也有关联。PlugMem 把记忆组织成事实、处方和证据链,强调任务无关的插件式记忆模块。MemEvolve 会问:这种组织方式是否适合当前任务族?是否应该增加别的模块?是否应该改变检索策略?

MemEvolve 和 SimpleMem 的区别更明显。SimpleMem 关心长期记忆的信息密度,重点是压缩、合并、检索成本。MemEvolve 关心记忆系统设计本身是否可进化。一个偏工程效率,一个偏 meta-level architecture。

如果用一句话区分:

  • SimpleMem:怎么把长期历史压成高密度记忆。
  • PlugMem:怎么把经历抽成事实、skill 和证据链。
  • ProcMEM:怎么从经历中学会可复用流程。
  • MemEvolve:怎么让上述记忆机制本身根据任务表现继续进化。

15. 含金量与现实价值

MemEvolve 的含金量主要来自两个方面。

第一是 venue。公开仓库标注它已被 ICML 2026 接收,这比单纯 arXiv 预印本或 workshop 背书更强。

第二是问题层级。它不是又提出一个 memory retrieval trick,而是把 memory architecture 作为优化对象。这类工作如果做扎实,可能会影响后续 self-improving agent 的评估和系统设计方式。

但它的现实落地难度也高。

普通团队做 Agent Memory,可以先做一套抽取、检索、更新机制,很快能上线。MemEvolve 需要维护候选架构、跑任务评估、比较不同系统、控制成本,还要防止进化过程过拟合。这更像研究平台或高投入 Agent 系统的能力,不是一个轻量插件。

所以它短期更适合研究和高阶系统设计参考,长期才可能沉淀成通用 memory auto-tuning 工具。


16. 工程上可以怎么借鉴

即使不完整复现 MemEvolve,也可以借鉴它的几个思想。

第一,把 memory system 拆模块。不要只说“我们有记忆”,而要明确 Encode、Store、Retrieve、Manage 分别怎么做。这样系统才容易诊断。

第二,记录 memory failure。Agent 失败时,不只看答案错了,还要看是哪个记忆环节出了问题:没写入、写错了、没检索到、检索到了但没用上、旧记忆污染了新任务。

第三,为不同任务设计不同 memory route。事实问答、网页操作、代码修改、研究检索、工具调用,可能不应该共用同一种记忆策略。

第四,定期评估记忆架构,而不是只清理记忆内容。很多系统记忆效果不好,不是因为记得不够多,而是编码和检索方式从一开始就不适合任务。

第五,把成功经验和失败经验分开管理。失败经验如果处理得好,可以避免重复踩坑;处理不好,就会把错误路径也当成经验召回。


17. 局限与风险

MemEvolve 最大的局限是成本。

架构进化不是一次模型调用能完成的。它需要跑任务、收集日志、生成候选、验证候选、比较结果。任务越复杂,评估越贵。对于很多产品团队来说,这个成本可能超过记忆系统本身带来的收益。

第二个局限是可解释性。

进化出来的架构可能有效,但为什么有效、是否稳定、是否会在边界任务上失败,都需要额外分析。尤其当候选系统由 LLM 生成或修改时,更需要验证它是否引入隐藏 bug。

第三个局限是 benchmark 过拟合。

任何自动优化系统都有这个风险。如果外循环一直围绕固定 benchmark 调架构,它可能学到的是 benchmark 偏好,而不是通用 memory 原则。

第四个局限是安全性。

记忆系统一旦能自我改造,就需要更强的约束。比如不能随意改变隐私策略,不能绕过用户删除记忆的要求,不能为了任务得分保留不该保留的信息。


18. 一句话判断

MemEvolve 的核心价值是把 Agent Memory 的讨论往上推了一层:真正强的长期 Agent,不只是会积累经验,还应该能根据任务反馈改进自己积累、组织和调用经验的方式。

如果说过去的记忆系统是在问“Agent 应该记住什么”,那么 MemEvolve 问的是“Agent 应该怎样学会记忆”。

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐