文章目录


前言

前面阅读 Agent 记忆论文时,我们更多关注的是两个问题:

应该保存什么?
应该如何组织已经保存的记忆?

例如:

  • Mem0 关注事实记忆的新增、修改、删除和忽略;
  • A-MEM 关注记忆之间如何建立动态关联;
  • G-Memory 使用图结构组织任务经验和推理规则;
  • Voyager 将成功轨迹抽象成可以复用的技能;
  • MemoryBank 通过遗忘机制控制记忆的生命周期。

这些方法都在改进记忆本身,但在实际 Agent 系统中,还有一个容易被忽视的问题:

即使记忆库中已经保存了正确经验,Agent 也不一定会在正确的时间,以正确的方式使用它。

许多记忆系统采用固定的访问流程:

每一步都检索;
固定召回 Top-K 条记忆;
固定使用一种查询语句;
固定执行一跳或多跳搜索;
按照固定周期整理记忆。

这种方式实现简单,但没有考虑 Agent 当前所处的状态。

例如,在任务刚开始运行、记忆库几乎为空时,大量检索不仅没有帮助,还会增加上下文长度;当 Agent 已经陷入重复动作时,再次返回同一批相似记忆也很难解决问题;如果当前任务与过去的成功任务高度相似,直接复用一份成功计划,可能比重新检索原始轨迹更加有效。

因此,Agent 的记忆管理不仅要回答:

记忆库中有什么?

还需要回答:

现在是否需要访问记忆?
应该执行哪一种记忆操作?
应该召回多少内容?
当前检索无效时,是否需要更换查询方式?
什么时候应该复用计划、压缩记忆或遗忘内容?

本文提出的 MemCon(Memory as a Controlled Process),正是从这个角度重新理解 Agent 记忆。

MemCon 不再把记忆访问视为一个固定的检索管线,而是将其建模为一个可以在线学习的控制过程。系统根据当前任务进度、Agent 是否卡住、记忆库大小以及是否存在可复用计划,动态选择检索、计划注入、重新检索、整理、遗忘或者不使用记忆。

它的核心贡献不是重新设计一个记忆数据库,而是在已有记忆后端之上增加一个轻量级控制层:

记忆后端负责“保存什么”;
MemCon 负责“什么时候、以什么方式使用”。

零、论文基本信息


一、背景与问题

1. 固定记忆访问策略的问题

当前多数 Agent 记忆系统可以抽象为下面的流程:

当前任务状态
    ↓
构造查询
    ↓
从记忆库检索固定数量的内容
    ↓
将检索结果放入上下文
    ↓
LLM 生成下一步动作

其中,检索数量、查询方式、搜索深度和整理周期通常由开发者提前配置。

例如:

top_k = 3
graph_hop = 2
insight_k = 5
每一步执行一次检索
每 10 个任务整理一次记忆

问题在于,最合适的记忆行为与任务状态密切相关。

场景一:记忆库仍然很小

Agent 刚开始运行时,记忆库中只有少量经验。此时频繁检索很可能返回不相关内容。

这种检索不仅无法帮助决策,还会:

  • 增加输入 Token;
  • 稀释当前任务信息;
  • 让模型错误套用不相关经验。

场景二:出现重复任务

如果当前任务与以前成功完成的任务属于同一类型,Agent 可能不需要阅读多条原始轨迹,而是应该直接复用一份经过抽象的成功计划。

例如,过去完成过:

拿起苹果
→ 前往水槽
→ 清洗苹果
→ 将苹果放入冰箱

当新任务变成“清洗番茄并放入冰箱”时,更有价值的记忆可能是:

找到目标物体
→ 拿起目标物体
→ 前往水槽
→ 执行清洗
→ 前往冰箱
→ 放入目标物体

这是一份对象无关的计划模板,而不是某条原始轨迹。

场景三:Agent 已经卡住

假设 Agent 连续两次执行同一个动作,并且没有取得进展。

如果系统仍使用相同查询召回相同的 Top-K 记忆,那么重新检索没有实际意义。此时更合理的做法是改变查询意图,例如:

不要继续提供当前方案;
查找解决该任务的替代方法;
重点召回过去从相似失败中恢复的经验。

场景四:记忆持续增长

随着任务数量增加,记忆库会不断积累:

  • 重复轨迹;
  • 已经过时的规则;
  • 相互冲突的经验;
  • 低价值的失败记录。

如果系统只存储和检索,却不执行整理与遗忘,那么记忆规模越大,召回质量未必越高。

因此,论文认为固定记忆管线的核心问题是:

不存在一种适用于所有任务阶段、所有记忆规模和所有 Agent 状态的固定检索策略。


2. MemCon 的基本定位

面对上述问题,MemCon 没有重新设计一种记忆表示,而是引入一个记忆控制器。

整体关系可以表示为:

任务状态 + Agent 执行状态 + 记忆状态
                    ↓
              MemCon 控制器
                    ↓
选择记忆操作及其参数
                    ↓
            调用已有记忆后端
                    ↓
        将结果交给行动 Agent

MemCon 主要决定三类问题:

When:
什么时候访问记忆?

What:
执行检索、计划注入、重新检索、整理、遗忘,
还是暂时不访问记忆?

How much:
召回多少轨迹、多少规则,搜索多少跳?

这使得记忆从被动数据库变成了 Agent 控制循环中的一个可学习组件。


二、相关工作

1. 强化学习与记忆控制

强化学习擅长解决序列决策问题:智能体观察状态、选择动作,并根据环境奖励逐步优化策略。

因此,一些研究尝试使用强化学习学习:

  • 工具选择策略;
  • 通信策略;
  • 任务规划策略;
  • 记忆写入和召回策略。

但是,完整的深度强化学习通常需要大量训练样本、GPU 资源以及稳定的奖励信号。对于一个在部署过程中不断接收新任务的 Agent 来说,这种训练成本可能过高。

MemCon 选择了一条更轻量的路线:

不训练神经网络策略;
不增加额外的策略 LLM;
使用离散状态和表格化 Q 值;
通过 UCB 在部署过程中在线学习。

严格来说,论文虽然使用 Memory MDP 描述问题,但实现上更接近带有回合级反馈的上下文多臂老虎机。


2. 多 Agent 系统

AutoGen、CAMEL、MetaGPT、ChatDev、AgentVerse 等系统通过角色分工,让不同 Agent 分别承担规划、执行、检查和总结任务。

但无论系统中有一个 Agent 还是多个 Agent,跨任务经验通常仍由外部记忆模块负责保存。很多多 Agent 框架只是把固定的记忆模块接入执行流程,并没有学习如何动态访问记忆。

MemCon 与具体的 Agent 编排方式相对独立。

论文将它接入三种不同架构:

  • Lobster:轻量级单 Agent 执行器;
  • LangGraph:图结构工作流;
  • Microsoft Agent-Framework:流水线式多 Agent 框架。

因此,多 Agent 并不是 MemCon 的核心创新。这里真正重要的是:

无论上层 Agent 如何组织,都可以在记忆模块和 Agent 之间增加同一个控制层。


3. Agent 记忆系统

现有 Agent 记忆方法大致可以分为几条路线。

基于向量检索的记忆

这类方法保存历史轨迹或摘要,并根据当前查询的向量相似度进行召回。

代表方法包括:

  • MetaGPT;
  • MemoryBank;
  • Generative Agents。

优点是实现简单、适用于非结构化文本;局限是通常使用固定 Top-K,而且语义相似并不一定代表当前决策真正需要这条记忆。

基于技能和过程的记忆

这类方法将成功经验抽象为可以复用的程序、工作流或者技能。

代表方法包括:

  • Voyager;
  • Agent Workflow Memory;
  • MemSkill;
  • LatentMem。

这类方法更适合重复任务,但仍需要解决一个问题:什么时候应该调用技能,而不是继续检索普通轨迹?

基于反思和规则的记忆

Reflexion、ExpeL、OAgents 等方法从成功或失败轨迹中提炼自然语言规则,帮助 Agent 避免重复错误。

这类方法提高了经验密度,但如果每一步都注入大量规则,也可能导致上下文膨胀和规则冲突。

图结构记忆

G-Memory 等方法将任务、轨迹和规则组织为图,通过多跳搜索建立跨经验关联。

图结构提高了记忆的组织能力,但搜索跳数、召回规模和整理周期通常仍然是固定配置。

LLM 作为记忆控制器

MemGPT 让 LLM 自己决定何时翻页、查询和召回记忆,使访问过程具有适应性。

这种方式的优势是决策灵活,缺点是每次记忆操作可能需要额外的 LLM 推理,带来成本和延迟。

MemCon 位于两者之间:

方法路线 记忆控制方式 主要特点
固定检索管线 人工设置 Top-K、查询和整理周期 成本低,但缺少状态适应性
LLM 记忆控制器 由另一个 LLM 判断如何访问记忆 灵活,但推理成本较高
MemCon 轻量级在线策略控制 能够学习,同时不增加额外 LLM 调用

三、方法总览

为了理解 MemCon,可以先看论文 Figure 1。

方法总览

图源:论文 Figure 1。
左侧是不同任务、Agent 框架和语言模型;中间是 Memory MDP 的状态提取、动作选择、后端调用和结果注入;右侧是基于任务结果进行的在线策略更新。

MemCon 的完整执行流程可以概括为:

Agent 接收当前任务
        ↓
提取任务状态与记忆状态
        ↓
离散化为 Memory MDP 状态
        ↓
通过 UCB 策略选择记忆动作
        ↓
调用底层记忆后端
        ↓
将检索结果或计划注入 Agent 上下文
        ↓
Agent 继续执行任务
        ↓
任务结束后获得成功、失败和效率奖励
        ↓
反向更新本回合使用过的记忆动作
        ↓
将 Q 表持久化,供后续任务使用

从工程结构上看,MemCon 包含三个核心部分:

  1. Memory MDP:定义状态、动作和奖励;
  2. 在线策略学习:学习不同状态下应该采用哪种记忆操作;
  3. 后端无关的包装器:将策略决定转化为对实际记忆系统的调用。

除此之外,论文还加入了两个增强操作:

  • 通用计划注入;
  • 复合目标分解。

四、核心模块详解

1. Memory MDP:把记忆访问变成决策问题

1.1 设计动机

传统记忆系统通常直接规定:

每一步执行 retrieve(query, top_k=3)

MemCon 则认为,记忆访问本身也应该被视为一次动作选择。

因此,论文将记忆控制过程建模为:

M m e m = ( S , A , T , R , γ ) \mathcal{M}_{mem}=(\mathcal{S},\mathcal{A},\mathcal{T},\mathcal{R},\gamma) Mmem=(S,A,T,R,γ)

其中:

  • S \mathcal{S} S 表示记忆控制器观察到的状态;
  • A \mathcal{A} A 表示可以执行的记忆操作;
  • T \mathcal{T} T 表示执行动作后系统状态的变化;
  • R \mathcal{R} R 表示任务结束后获得的奖励;
  • γ \gamma γ 表示对早期记忆决策进行信用衰减的折扣因子。

需要注意的是,MemCon 并不直接控制 Agent 在环境中的动作。它控制的是:

行动 Agent 在做下一步决策之前,
应该怎样使用记忆。

2. 状态:同时观察任务与记忆

2.1 设计动机

同一个检索动作在不同状态下,价值可能完全不同。

例如:

  • 任务早期可能只需要浅层检索;
  • Agent 卡住时可能需要替代方案;
  • 已经存在成功计划时可以直接注入计划;
  • 记忆库过大时可能需要整理或遗忘。

因此,MemCon 的状态由任务状态和记忆状态共同组成:

s = ( s t a s k , s m e m ) s=(s_{task},s_{mem}) s=(stask,smem)

任务状态为:

s t a s k = ( g o a l   t y p e , s t e p   p h a s e , i s   s t u c k , o b j e c t s   h e l d , l o c a t i o n s ) s_{task}=(goal\ type,step\ phase,is\ stuck,objects\ held,locations) stask=(goal type,step phase,is stuck,objects held,locations)

其中:

  • goal type:当前任务的目标类型;
  • step phase:当前处于任务早期、中期还是晚期;
  • is stuck:Agent 是否陷入重复动作;
  • objects held:当前持有的对象数量;
  • locations:已经访问过的位置数量。

记忆状态为:

s m e m = ( m e m   s i z e , p l a n   a v a i l a b l e , l e a r n i n g   p h a s e ) s_{mem}=(mem\ size,plan\ available,learning\ phase) smem=(mem size,plan available,learning phase)

其中:

  • mem size:当前记忆库规模;
  • plan available:当前任务类型是否已经存在成功计划;
  • learning phase:控制器处于冷启动阶段还是稳定学习阶段。

2.2 状态离散化

为了使用表格化策略,MemCon 不直接保存完整自然语言状态,而是将状态压缩为可哈希的离散键:

ϕ ( s ) = ⟨ g o a l   t y p e , s t e p   p h a s e , i s   s t u c k , m i n ( h o l d , 2 ) , m i n ( ⌊ v i s i t e d / 3 ⌋ , 4 ) , m i n ( ⌊ m e m   s i z e / 10 ⌋ , 5 ) , p l a n   a v a i l a b l e , l e a r n i n g   p h a s e ⟩ \phi(s)=\langle goal\ type,step\ phase,is\ stuck,min(hold,2),min(\lfloor visited/3\rfloor,4),min(\lfloor mem\ size/10\rfloor,5),plan\ available,learning\ phase\rangle ϕ(s)=goal type,step phase,is stuck,min(hold,2),min(⌊visited/3,4),min(⌊mem size/10,5),plan available,learning phase

具体来说:

  • 任务步数小于 8:early;
  • 任务步数为 8~17:mid;
  • 任务步数大于等于 18:late;
  • 前 15 个任务:cold;
  • 第 16 个任务开始:warm;
  • 连续两次执行相同物理动作:is_stuck=True
  • 记忆数量按照每 10 条划分区间,最多保留到第 5 档。

这种粗粒度离散化将状态空间控制在每个基准几百个状态左右,使策略可以在几十个任务内开始收敛。

2.3 举例说明

假设一个家务 Agent 正在执行:

清洗两个杯子,并将它们放到橱柜中。

当前状态为:

目标类型:clean_and_place
任务阶段:mid
是否卡住:True
持有物体:1
访问位置:6
记忆数量:24
是否存在成功计划:True
学习阶段:warm

对应的离散状态可能是:

(clean_and_place, mid, True, 1, 2, 2, True, warm)

MemCon 不需要理解整段自然语言轨迹,只需要使用这组紧凑状态查询 Q 表。


3. 动作:控制记忆如何进入决策过程

每个记忆动作由操作类型和参数组成:

a = ( o p , θ ) a=(op,\theta) a=(op,θ)

其中:

o p ∈ { R e t r i e v e , P l a n I n j e c t , R e R e t r i e v e , C o n s o l i d a t e , F o r g e t , N o O p } op\in\{Retrieve,PlanInject,ReRetrieve,Consolidate,Forget,NoOp\} op{Retrieve,PlanInject,ReRetrieve,Consolidate,Forget,NoOp}

参数为:

θ = ( t o p _ k , i n s i g h t _ k , h o p ) \theta=(top\_k,insight\_k,hop) θ=(top_k,insight_k,hop)

3.1 Retrieve:普通检索

从底层记忆后端检索历史经验。

论文设置了多种检索深度:

检索类型 Top-K 规则数量 图搜索跳数
浅层检索 1 3 1
中等检索 2 5 1
深层检索 3 8 2
规则优先检索 1 2 0

控制器可以根据状态选择不同检索规模,而不是始终使用同一个 Top-K。

3.2 PlanInject:计划注入

如果系统已经保存了当前目标类型的成功计划,控制器可以直接将计划模板注入上下文。

输入:

当前目标类型;
历史成功任务;
对象无关的计划模板。

处理:

找到同类任务的成功轨迹;
将具体对象编号替换为通用占位符;
将计划放到记忆检索结果之前。

输出:

一份可以直接指导当前任务的行动计划。

例如,历史计划为:

前往 shelf 3
→ 拿起 cellphone 1
→ 前往 desk 1
→ 放下 cellphone 1

系统可以将其抽象为:

前往 [source]
→ 拿起 [object]
→ 前往 [target]
→ 放下 [object]

当新任务具有相同目标类型时,不再从头搜索原始轨迹,而是优先复用计划结构。

3.3 ReRetrieve:使用替代查询重新检索

当 Agent 出现重复动作时,MemCon 可以改变检索查询。

例如,第一次查询为:

如何找到任务目标物体?

如果检索结果没有帮助,重新检索时可以加入替代方案要求:

查找解决当前任务的替代方法;
不要重复已经失败的路径;
优先返回过去从相似失败中恢复的经验。

这与简单地再次调用相同检索器不同。它改变了检索意图,用于帮助 Agent 跳出局部循环。

3.4 Consolidate:整理记忆

当底层后端支持维护接口时,MemCon 可以触发:

  • 合并重复规则;
  • 压缩相似经验;
  • 整理图结构;
  • 更新记忆索引。

3.5 Forget:遗忘记忆

当记忆持续增长或噪声过多时,控制器可以调用后端的清理能力,删除低价值或重复内容。

需要注意的是,MemCon 本身并没有规定所有后端必须使用同一种遗忘算法。它只负责决定何时触发遗忘,具体删除策略由后端实现。

3.6 NoOp:不访问记忆

NoOp 表示当前步骤跳过记忆访问。

这个动作看似简单,却非常重要。它使控制器能够学习:

并非每一步决策都需要记忆。

当任务很简单、记忆为空或当前上下文已经足够时,跳过检索可以同时减少 Token 消耗和无关信息干扰。


4. 奖励:同时考虑成功与效率

4.1 设计动机

如果奖励只考虑任务是否成功,控制器可能通过不断扩大检索规模提高成功概率,却带来更高的 Token 成本。

因此,MemCon 的奖励同时包含:

  • 成功奖励;
  • 执行效率奖励;
  • 失败惩罚。

论文定义:

r ( τ i ) = r s u c c I [ s u c c e s s ] + λ max ⁡ ( 0 , 1 − T i / T m a x ) − r f a i l I [ f a i l u r e ] r(\tau_i)=r_{succ}\mathbb{I}[success]+\lambda\max(0,1-T_i/T_{max})-r_{fail}\mathbb{I}[failure] r(τi)=rsuccI[success]+λmax(0,1Ti/Tmax)rfailI[failure]

其中:

  • r s u c c r_{succ} rsucc:任务成功奖励,实验中为 1.0;
  • r f a i l r_{fail} rfail:任务失败惩罚,实验中为 0.5;
  • λ \lambda λ:效率奖励权重,实验中为 0.3;
  • T i T_i Ti:当前任务使用的步骤数;
  • T m a x T_{max} Tmax:最大步骤数,交互任务中为 30;
  • I [ ⋅ ] \mathbb{I}[\cdot] I[]:指示函数,条件成立时为 1。

假设 Agent 在 5 步内成功完成任务,则:

r ( τ i ) = 1.0 + 0.3 × ( 1 − 5 / 30 ) = 1.25 r(\tau_i)=1.0+0.3\times(1-5/30)=1.25 r(τi)=1.0+0.3×(15/30)=1.25

如果 Agent 成功但用了 25 步,虽然仍然获得成功奖励,但效率奖励会明显降低。

这会鼓励控制器学习:

不仅要找到能成功的记忆策略,
还要避免无效检索和过长上下文。

5. 在线策略学习

5.1 为什么不使用另一个 LLM?

一种直接方案是让额外的 LLM 阅读当前状态,并判断应该执行哪种记忆操作。

但这会带来:

  • 额外模型调用;
  • 更高推理延迟;
  • 更高 Token 成本;
  • 控制决策本身的不稳定性。

MemCon 使用表格化 Q 值完成动作选择。一次控制决策只是查询和更新一张表,不需要再次调用 LLM。


5.2 使用 UCB 平衡探索与利用

在每个记忆决策点,MemCon 使用 UCB 选择动作:

a t = arg ⁡ max ⁡ a ∈ A [ Q ( ϕ ( s t ) , a ) + c ln ⁡ N ( ϕ ( s t ) ) N a ( ϕ ( s t ) ) ] a_t=\arg\max_{a\in\mathcal{A}}\left[Q(\phi(s_t),a)+c\sqrt{\frac{\ln N(\phi(s_t))}{N_a(\phi(s_t))}}\right] at=argaAmax[Q(ϕ(st),a)+cNa(ϕ(st))lnN(ϕ(st)) ]

其中:

  • Q ( ϕ ( s t ) , a ) Q(\phi(s_t),a) Q(ϕ(st),a):在当前状态下选择动作 a a a 的历史价值;
  • N ( ϕ ( s t ) ) N(\phi(s_t)) N(ϕ(st)):当前状态被访问的总次数;
  • N a ( ϕ ( s t ) ) N_a(\phi(s_t)) Na(ϕ(st)):当前状态下动作 a a a 被选择的次数;
  • c c c:探索系数。

第一部分代表利用:

优先选择历史上表现较好的动作。

第二部分代表探索:

给尝试次数较少的动作更高奖励。

当某个动作从未被选择时,它会获得非常大的探索奖励,从而保证控制器不会永远只执行初始化时看起来最好的动作。


5.3 使用先验值缓解冷启动

在没有任何任务反馈时,Q 表还没有学到有效策略。

因此,论文为不同操作设置了可以解释的初始值:

动作 初始 Q 值 含义
Retrieve 0.5 普通检索通常有一定帮助
PlanInject 0.3 有成功计划时值得尝试
ReRetrieve 0.1 主要在卡住时有用
Consolidate 0.0 保持中性
Forget -0.1 遗忘存在一定风险
NoOp -0.2 冷启动阶段不鼓励完全忽略记忆

这些先验不是最终规则,只是帮助系统在最初几个任务中获得更合理的探索顺序。随着真实奖励不断到来,Q 值会被逐步覆盖。


5.4 反向折扣的信用分配

任务奖励只在整个任务结束后获得,但一次任务中可能执行过多个记忆操作。

例如:

第 1 步:浅层检索;
第 6 步:深层检索;
第 10 步:Agent 卡住;
第 11 步:更换查询重新检索;
第 14 步:任务成功。

最后成功并不代表前面所有记忆动作同样有效。因此,MemCon 使用反向折扣,让靠近任务结果的决策获得更强信用:

Q ( ϕ j , a j ) ← Q ( ϕ j , a j ) + α [ γ ∣ e p ∣ − j − 1 r i − Q ( ϕ j , a j ) ] Q(\phi_j,a_j)\leftarrow Q(\phi_j,a_j)+\alpha\left[\gamma^{|ep|-j-1}r_i-Q(\phi_j,a_j)\right] Q(ϕj,aj)Q(ϕj,aj)+α[γepj1riQ(ϕj,aj)]

其中:

  • α \alpha α:学习率;
  • γ \gamma γ:回合内折扣因子;
  • ∣ e p ∣ |ep| ep:本回合记忆决策总数;
  • j j j:当前被更新动作在回合中的位置;
  • r i r_i ri:任务最终奖励。

越靠近任务结束的动作,其折扣次数越少。

在上面的例子中,帮助 Agent 脱困的 ReRetrieve 会获得比最开始浅层检索更强的成功信用。

这是一种轻量级近似。它无法完全恢复复杂的因果关系,但比“所有动作获得完全相同奖励”更加合理。


6. 后端无关的记忆包装器

6.1 设计动机

论文不希望 MemCon 只能与某一种记忆库配合使用,因此把底层记忆系统抽象成两个基础接口:

retrieve(query, parameters)
store(trajectory, success)

可选接口为:

maintain(operation)

MemCon 的包装器位于 Agent 和记忆后端之间:

Agent 请求记忆
      ↓
MemCon 截获请求
      ↓
提取当前状态
      ↓
策略选择操作和参数
      ↓
调用后端 retrieve 或 maintain
      ↓
可选地加入通用计划
      ↓
返回给 Agent

任务完成后:

记录成功或失败
      ↓
计算奖励
      ↓
更新本回合 Q 值
      ↓
保存新的成功计划
      ↓
调用后端 store

由于控制器不直接修改后端内部数据结构,因此理论上可以接入:

  • 向量数据库;
  • 技能库;
  • 轨迹摘要记忆;
  • 图结构记忆;
  • 潜在 Token 记忆。

不过,实验中的 MemCon 统一使用 G-Memory 作为内部后端。因此,“可以兼容任意后端”主要来自接口设计,尚未通过所有类型后端的组合实验充分验证。


7. 两个增强操作

除了学习型控制器,论文还加入了两个面向长任务的增强机制。

7.1 通用计划注入

当任务成功后,系统提取动作序列,并通过规则替换具体对象编号:

shelf 3 → [shelf]
cellphone 1 → [cellphone]
desk 2 → [desk]

随后按照目标类型将计划保存到一个轻量级 JSON 索引。

未来遇到同类型任务时,PlanInject 可以直接调用这份计划。

7.2 复合目标分解

对于需要对多个对象重复执行同一过程的任务,例如:

把两部手机都放到桌子上。

系统会注入一条确定性提示:

先完成对象 1 的全部步骤,
再对对象 2 重复同样的过程。

如果记忆中存在单对象任务的成功模板,系统还会同时召回该模板。

需要注意的是,目标分解不是由 Memory MDP 学习出来的动作,而是一条确定性启发式规则。真正由策略学习控制的是 PlanInject 等记忆操作。


五、实验设置

1. 数据集

论文使用了六个基准,覆盖交互任务和问答工具任务。

交互式决策任务

数据集 数量 任务特点
ALFWorld 134 家庭环境中的拿取、清洗、加热、冷却和放置任务
PDDL Planning 100 Blocksworld、Barman、Gripper、Tyreworld 等经典规划问题
ScienceWorld 100 烧水、融冰和根据属性寻找物体等科学实验任务

问答与工具使用任务

数据集 数量 任务特点
TriviaQA 200 开放域短答案问答
WebWalkerQA 200 需要网站导航和信息抽取的多跳问题
GAIA 165 综合工具调用、网页搜索和文档阅读

2. Agent 框架

实验使用了三种不同的 Agent 执行框架:

  • Lobster;
  • LangGraph;
  • Microsoft Agent-Framework。

所有框架使用相同的任务加载器、工具和评价协议,以尽量保证比较集中在记忆系统本身。


3. 模型

论文使用了三种语言模型:

  • GPT-4.1-mini;
  • Claude Sonnet-4;
  • DeepSeek-V3.2。

这三个模型覆盖了较轻量的闭源模型、能力更强的闭源模型以及开源模型。


4. 对比方法

除了不使用记忆的 Empty,论文比较了九种记忆系统:

方法 主要机制
MetaGPT 基于向量相似度检索原始轨迹
Voyager 对轨迹进行摘要后检索
Generative 使用 LLM 对候选记忆重新排序
ChatDev 按执行阶段周期性总结
MemoryBank 加入时间衰减和遗忘
OAgents 从成功和失败中提炼规则
ExperienceBank 对经验进行生成式相关性排序
LatentMem 将经验蒸馏为潜在 Token
G-Memory 图结构轨迹、规则和多跳检索

论文报告的 MemCon 使用 G-Memory 作为内部记忆后端。

因此,MemCon 与 G-Memory 的对比尤其重要:

G-Memory:
固定策略访问图记忆。

MemCon:
使用同类后端,
但由在线策略决定怎样访问记忆。

这样能够更直接地观察记忆控制器本身的价值。


5. 评价指标

论文主要报告:

  • 任务成功率或回答准确率,统一记为 S/A;
  • 每个任务的平均输入 Token 数量;
  • 不同超参数和组件的消融结果。

需要注意的是,每个配置只运行了一次真实在线任务流,没有进行多随机种子平均。


六、实验结果与分析

1. GPT-4.1-mini 主实验

论文 Table 1 给出了 GPT-4.1-mini 下的完整结果。为了突出控制器带来的变化,下面只保留 Empty、内部后端 G-Memory 和 MemCon 的平均结果。

Agent 框架 Empty G-Memory MemCon
Lobster 35.4 38.7 42.6
LangGraph 34.3 40.8 43.4
Agent-FW 33.5 39.5 43.6

三个框架中,MemCon 的平均成绩都高于不使用记忆和固定访问方式的 G-Memory。

一些具体结果包括:

  • Lobster + ALFWorld:MemCon 达到 67.9%,G-Memory 为 59.7%;
  • LangGraph + PDDL:MemCon 达到 40.0%,G-Memory 为 28.3%;
  • Agent-FW + GAIA:MemCon 达到 23.0%,G-Memory为 20.0%。

这说明控制记忆访问方式的收益并不只出现在某一种 Agent 编排框架中。

但也不能简单理解为 MemCon 在每个单独数据集上都绝对领先。GPT-4.1-mini 的 18 个“框架 × 数据集”组合中,MemCon 在 9 个组合中取得最高成绩,其他组合中通常处于第一或第二梯队。


2. 不同模型下的结果

使用 Claude Sonnet-4 时,MemCon 在 18 个组合中的 15 个取得最高结果。

例如,在 Agent-FW 下:

方法 ALFWorld PDDL ScienceWorld 平均值
Empty 12.7 21.0 17.0 28.8
MemCon 60.6 70.7 67.1 54.8

在 DeepSeek-V3.2 下,MemCon 在全部 9 个交互式任务组合中取得最高成绩,并在全部 18 个组合中的 15 个取得最高成绩。

论文据此认为,当基础模型已经具备较强的计划执行能力时,系统瓶颈会逐渐从“模型能否执行计划”转移到:

系统能否在正确时间,
把正确经验提供给模型。

我的理解是,这一结论需要谨慎看待,但它揭示了一个很重要的工程现象:

模型越强,错误可能越少来自基本推理能力,越多来自上下文中缺少正确经验或者出现了无关记忆。


3. Token 成本

为了判断 MemCon 的提升是否只是因为召回了更多内容,论文在 Figure 3 中同时比较了任务表现和 Token 成本。

MemCon Token 成本与任务表现

图源:论文 Figure 3。
横轴表示成功率或回答准确率,纵轴表示平均 Token 成本。MemCon 在三个示例设置中都位于相对靠右且靠下的位置,即在提高任务表现的同时降低输入成本。

以 GPT-4.1-mini 为例:

设置 G-Memory Token MemCon Token 变化
Lobster + ALFWorld 45K 39K 约降低 13%
LangGraph + ALFWorld 42K 41K 约降低 2%
Agent-FW + ALFWorld 43K 37K 约降低 14%

在 Lobster + ALFWorld 中,MemCon 不仅将成功率从 59.7% 提高到 67.9%,还将平均输入 Token 从 45K 降至 39K。

这说明 MemCon 的提升并不是简单地“召回更多记忆”,而是学习到了更有选择性的访问方式,例如:

  • 记忆较少时跳过无意义检索;
  • 简单任务使用浅层检索;
  • 已有成功模板时直接注入计划;
  • Agent 卡住时才使用更深或替代查询;
  • 避免每一步都重复注入同一批内容。

不过,从论文 Table 5 也可以看到,MemCon 并非在所有 QA 数据集上都使用最少 Token。例如部分 GAIA 和 WebWalkerQA 设置中,它的 Token 数量高于某些简单基线。

因此,更准确的结论是:

MemCon 在整体上改善了准确率与成本之间的权衡,而不是在每一个单独任务上都实现最低 Token 消耗。


4. 组件消融实验

论文 Table 2 对 MemCon 的核心组件进行了逐步叠加。

组件配置 ALFWorld GAIA
静态 G-Memory 后端 59.7 21.2
+ 学习型 UCB 控制器 64.9 22.4
+ 通用计划注入 66.4 22.4
+ 目标分解 67.2 22.4
完整 MemCon 67.9 22.4

最重要的结果是:

静态后端 → 加入 UCB 控制器:
ALFWorld 提升 5.2 个百分点。

继续加入计划注入和目标分解:
带来额外但更小的提升。

这说明 MemCon 的主要收益确实来自学习型记忆控制,而不是额外增加的启发式规则。

GAIA 中只有控制器带来了 1.2 个百分点的提升,计划注入和目标分解没有继续提高准确率。原因是 GAIA 不包含大量论文所针对的多对象复合操作任务,这两个增强机制没有足够的触发机会。

这项结果也说明:

计划注入和目标分解并不是普遍有效的通用组件,它们的价值与任务结构有关。


5. 超参数敏感性

论文 Figure 4 和 Figure 5 分别测试了:

  • 学习率 α \alpha α
  • UCB 探索系数 c c c
  • 折扣因子 γ \gamma γ
  • 失败惩罚;
  • 效率奖励权重 λ \lambda λ
  • 不同动作集合。

在 GPT-4.1-mini + Lobster 的实验中,默认参数为:

参数 默认值
学习率 α \alpha α 0.15
折扣因子 γ \gamma γ 0.9
UCB 系数 c c c 1.4
失败惩罚 r f a i l r_{fail} rfail 0.5
效率权重 λ \lambda λ 0.3

论文报告,GAIA 在扫描范围内的表现与峰值相差不超过约 2.5 个百分点,说明策略对单个参数具有一定容错性。

效率权重也不能过高或过低:

  • λ = 0 \lambda=0 λ=0:控制器不关心执行效率;
  • λ \lambda λ 过大:控制器可能为了减少步骤而牺牲必要检索;
  • 默认 λ = 0.3 \lambda=0.3 λ=0.3:在实验中取得较好平衡。

七、局限性与未来方向

论文没有单独设置局限性章节,下面主要结合方法和实验进行分析。

1. 表格化状态的扩展能力有限

MemCon 能够快速学习的重要原因,是将状态压缩为几百个离散键。

但在更复杂的 Agent 系统中,状态可能包含:

  • 多个并行子任务;
  • 更复杂的工具依赖;
  • 多 Agent 的通信状态;
  • 不确定的任务进度;
  • 更细粒度的记忆质量信号。

如果直接增加这些字段,状态组合数量可能快速增长,导致表格化 Q 学习出现状态稀疏问题。

未来可以考虑:

  • 使用特征共享的线性上下文老虎机;
  • 使用小型策略网络;
  • 使用状态嵌入进行相似状态泛化;
  • 在保持低成本的前提下引入分层策略。

2. 奖励主要来自任务结束后的二元反馈

MemCon 主要根据成功或失败更新记忆动作。

这种奖励容易获取,但信用分配比较粗糙。

例如,任务最终失败可能是因为:

  • 检索了错误记忆;
  • 行动 Agent 没有遵循正确记忆;
  • 工具执行失败;
  • 环境返回异常;
  • 任务本身超过模型能力。

如果将失败全部归因于记忆策略,可能错误降低某个实际有效动作的 Q 值。

未来可以增加中间信号,例如:

  • 检索内容是否被模型引用;
  • 检索后是否产生了新动作;
  • Agent 是否退出重复循环;
  • 子目标是否完成;
  • 记忆是否与最终成功步骤存在直接关联。

3. 后端无关性还需要更多组合实验

MemCon 在接口设计上能够包装不同记忆后端,但论文的主要结果统一使用 G-Memory 作为内部后端。

因此,还需要进一步验证:

MemCon + 纯向量记忆;
MemCon + Mem0 式事实记忆;
MemCon + 技能库;
MemCon + 摘要记忆;
MemCon + 多模态记忆。

只有在多种存储机制上都能稳定提升,才能更充分证明控制策略真正具有后端无关性。


4. 部分增强机制依赖任务结构

通用计划注入使用正则规则替换对象名称,目标分解则主要面向“对多个对象重复相同操作”的任务。

在开放世界任务中,成功计划未必只是替换对象就能复用。例如:

  • 不同工具具有不同前置条件;
  • 环境规则发生变化;
  • 同类任务存在不同约束;
  • 计划中的动作顺序需要动态调整。

未来可以研究带有参数、前置条件和失败恢复分支的结构化技能,而不仅是文本动作模板。


5. 实验缺少多随机种子统计

论文每个配置只执行一次在线任务流,没有报告多次运行的均值和方差。

由于 UCB 的探索顺序、早期任务分布和初始成功经验都可能影响后续策略,单次任务流不足以完全说明稳定性。

未来实验可以进一步报告:

  • 多个任务顺序;
  • 多个随机种子;
  • 不同冷启动先验;
  • 策略收敛速度;
  • 学习过程中性能随任务数量的变化。

八、我的理解和启发

1. 记忆不只是数据系统,也是控制系统

过去设计 Agent 记忆时,很容易把重点放在数据库层面:

使用什么向量数据库?
Embedding 模型怎么选择?
Top-K 设置为多少?
记忆应该保存成文本还是图?

MemCon 提醒我们,记忆系统实际上包含两层:

数据层:
存储轨迹、事实、规则、技能和关系。

控制层:
判断什么时候读、读什么、读多少,
以及什么时候更新、整理和遗忘。

即使数据层保存了高质量记忆,如果控制层始终采用固定策略,Agent 仍然可能:

  • 在不需要时召回大量内容;
  • 在真正卡住时只获得相同结果;
  • 错过已经存在的成功计划;
  • 让低价值记忆持续污染上下文。

因此,我对这篇论文最核心的理解是:

Agent 记忆优化的下一步,不只是设计更好的记忆表示,而是学习记忆如何参与决策。


2. 不一定需要用 LLM 管理所有记忆决策

现在很多 Agent 架构倾向于增加一个 Memory Agent,让它通过 LLM 判断:

  • 是否保存记忆;
  • 是否召回记忆;
  • 应该召回什么;
  • 是否修改或删除记忆。

这种方式足够灵活,但如果每一步都需要额外模型调用,长时任务的成本会非常高。

MemCon 给出了一个值得借鉴的折中方案:

复杂语义工作交给 LLM:
提取计划、生成规则、理解任务。

高频控制工作交给轻量策略:
是否检索、检索多少、是否重新检索。

也就是说,并不是 Agent 系统中的每一个决策都必须由 LLM 完成。

当动作空间较小、状态可以离散化、奖励可以观测时,传统在线学习算法可能更稳定、更便宜。


3. 可以如何应用到自己的 Agent 项目

如果要在一个代码 Agent 或工具 Agent 中借鉴 MemCon,我会先实现一个简化版本。

第一步:定义轻量状态

任务类型;
当前执行阶段;
连续失败次数;
是否重复调用同一个工具;
记忆库规模;
是否存在相同错误的成功修复;
最近一次检索是否被使用。

第二步:定义有限动作

不检索;
检索 1 条相似案例;
检索 3 条相关规则;
召回成功修复计划;
使用错误信息重新检索;
压缩重复记忆;
删除低价值记忆。

第三步:记录结果

任务是否成功;
是否减少了工具调用;
是否退出错误循环;
召回内容是否被最终方案采用;
本次任务消耗了多少 Token。

第四步:在线更新策略

开始时甚至不一定需要完整强化学习,可以先使用:

  • 规则与统计计数;
  • 多臂老虎机;
  • UCB;
  • Thompson Sampling。

等到任务状态和动作空间足够复杂,再考虑训练小型策略网络。


4. 与其他记忆方法的联系

方法 主要解决的问题
Mem0 事实记忆如何新增、修改和删除
A-MEM 记忆如何动态建立关联
MemoryBank 记忆如何随时间衰减
Voyager 如何从成功轨迹中形成技能
G-Memory 如何用图组织轨迹和规则
MemCon 如何动态决定何时、以何种方式使用记忆

这些方法并不是相互替代的。

一个更完整的 Agent 记忆架构可能是:

Mem0 式生命周期管理
        ↓
A-MEM / G-Memory 式结构化组织
        ↓
Voyager 式计划与技能抽象
        ↓
MemCon 式访问控制
        ↓
行动 Agent

从这个角度看,MemCon 更像记忆系统的策略层,而不是另一种彼此竞争的记忆数据库。


九、总结

本文提出了 MemCon,将 Agent 记忆管理从固定检索管线改造成一个可在线学习的控制过程。

它的核心思路可以概括为:

观察任务状态和记忆状态;
将记忆操作建模为动作;
使用 UCB 在线选择记忆动作;
根据任务成功、失败和效率更新策略;
通过包装器接入已有记忆后端。

MemCon 可以选择:

  • 普通检索;
  • 注入成功计划;
  • 使用替代查询重新检索;
  • 整理记忆;
  • 遗忘记忆;
  • 跳过记忆访问。

实验覆盖六个基准、三个 Agent 框架和三个语言模型。结果表明,MemCon 通常能够提高任务成功率,并改善准确率与 Token 成本之间的权衡。消融实验进一步说明,主要收益来自学习型 UCB 控制器,而不是额外的计划注入和目标分解规则。

这篇论文带来的核心启发是:

长期记忆的价值不仅取决于保存了多少信息,也取决于系统能否在正确的状态下选择正确的记忆操作。

对于实际 Agent 开发来说,记忆库只是基础设施。真正决定记忆是否有效的,是记忆如何进入 Agent 的控制循环。


参考资料

更多推荐