💡 一句话总结:长程任务里 Agent 失败的根因常常不是模型笨,而是记忆里塞满了无关信息、关键线索被噪声淹没。MCMPO 给出的答案是——别让记忆变成被动数据库,让它成为可以被学习的决策动作。
一、问题:长程任务里的「记忆通货膨胀」
近一年长程 Agent 任务(OSWorld、WebArena、BrowseComp-2026)的提升大多来自三个方向:更长的上下文窗口、外挂向量记忆、更强的搜索/工具调用。但当任务跨过 50 步以后,再加这些都开始收益递减。
MCMPO 这篇论文做了一个简单的诊断实验,结论很反直觉:
| 失败案例归因 | 占比 |
|---|---|
| 模型推理错误 | 22% |
| 工具调用错误 | 14% |
| 记忆里有关键信息但被噪声稀释 | 41% |
| 记忆里根本没存关键信息 | 17% |
| 其他 | 6% |
也就是 41% 的失败案例信息其实记下来了,但找不到或被忽略。论文把这种现象命名为「记忆通货膨胀」——记忆越多,每条的边际价值越低。
二、MCMPO 的核心建模
2.1 把记忆操作纳入策略空间
传统 Agent 在每一步的动作空间是 A = {tool_call, reply, ...}。MCMPO 把它扩展为:
A = A_task ∪ A_memory
A_memory = {WRITE(key, content),
UPDATE(key, content),
RECALL(query),
FORGET(key),
NOOP}
模型在每一步可以选择执行任务动作,也可以选择执行记忆动作(甚至两者并行)。每个动作都对应一个 token 或短 token 序列,由策略网络生成。
2.2 奖励信号设计
最关键也是最容易踩坑的地方。MCMPO 的奖励分三层:
R_total = R_task + λ_m * R_memory_quality + λ_e * R_efficiency
R_task = 任务完成度 (0/1 或连续值)
R_memory_quality = 后续步骤实际 RECALL 命中的记忆条目数 / 总写入条目数
R_efficiency = -|memory| / |memory_budget| (惩罚膨胀)
R_memory_quality 是这篇论文最巧妙的设计——一条 WRITE 的奖励在写入时不结算,等任务跑完看这条记忆是否被未来某步 RECALL 命中再回填。命中率高的写入策略才能持续被强化。
2.3 PPO 训练里的两路 KL 约束
直接用 PPO 训会遇到一个隐蔽的坑:记忆 token(WRITE/RECALL 等)和普通生成 token 的概率分布差异巨大——前者集中在少数几个 special token,后者分散在数万 vocab。统一的 KL 散度约束会被普通 token 主导。
MCMPO 的工程方案是两路独立的 KL 约束:
kl_task = KL(π_new(a|s) || π_old(a|s)) for a in A_task
kl_memory = KL(π_new(a|s) || π_old(a|s)) for a in A_memory
loss = -advantage * ratio + β_t * kl_task + β_m * kl_memory
β_m 在论文实验里设到 β_t 的 5 倍才能稳定,原因是记忆动作的探索空间太小、容易过早收敛。
三、实验结果
3.1 主结果
在三个长程基准上对比:
| 模型/方法 | OSWorld-Long | WebArena-100 | BrowseComp-Long |
|---|---|---|---|
| 7B base + 固定写入 | 31.2 | 28.7 | 22.4 |
| 7B base + ReAct reflection | 33.5 | 31.1 | 24.8 |
| 7B + Memex-RL | 37.8 | 34.2 | 27.9 |
| 7B + MCMPO | 42.6 | 39.1 | 31.7 |
| 7B + MCMPO + Memex-RL | 45.1 | 41.8 | 33.5 |
MCMPO 单独相对固定写入提升约 18-23%,叠加 Memex-RL 还能再涨 6%,验证了正交性。
3.2 副效应:记忆压缩 60%
更值得注意的是记忆条目数对比:
| 方法 | 平均记忆条目 | 命中率 |
|---|---|---|
| 固定写入(每步必写) | 100 | 12% |
| ReAct reflection | 78 | 19% |
| MCMPO | 40 | 47% |
MCMPO 学会了「大多数步骤其实没必要写」——只有遇到包含未来可能用得上的实体、约束、决策依据的步骤才会写入。命中率从 12% 提到 47%,本质就是回忆时的信噪比提高了。
3.3 元认知能力的泛化
论文做了一个有意思的迁移实验:在 OSWorld 上训练的 MCMPO 策略,直接放到没见过的科研助手任务上跑,记忆 WRITE 频率自动调整(从 OSWorld 平均每 2 步一次降到每 5 步一次),任务成功率不退化反而比从零训略好。说明学到的不是「在 X 任务上写记忆」这种过拟合,而是「什么样的信息值得记」这种可迁移的元能力。
四、和近期记忆工作的关系
| 论文 | 切入点 | 与 MCMPO 关系 |
|---|---|---|
| Memex-RL | 经验回放检索 | 提供 RECALL 的底层基础设施 |
| MemoRAI | 自适应图记忆 | 提供 WRITE 后的存储拓扑 |
| EverMemos | 自组织记忆 OS | 系统层抽象 |
| MCMPO | 记忆动作策略 | 决定何时读写 |
四者在记忆栈的不同层次,没有取代关系。理想的 Agent 记忆架构很可能是:
策略层(MCMPO) ← 决定何时记/忘
拓扑层(MemoRAI) ← 怎么存
检索层(Memex-RL) ← 怎么找
系统层(EverMemos) ← OS 抽象
五、工程复现路径
想自己跑一遍可以按这个顺序:
- 环境:先在 ALFWorld 或自定义的多步推理任务上验证 baseline 固定写入策略,确保 reward signal 工作正常
- 动作扩展:把
WRITE/RECALL/FORGET加入 tokenizer 作为 special token,输出时 mask 普通 vocab - 回填奖励:实现 episode 结束后的记忆质量回填,建议用 episode buffer 缓存所有 WRITE,结束时扫描 RECALL 统计命中
- 两路 KL:在 PPO loss 里把记忆动作 token 单独算 KL,
β_m从 5×β_t开始 - 课程:先从短任务(10 步)训起,逐步扩展到 100 步,避免一开始就遇到稀疏奖励
最大的复现风险是任务长度不够。如果你的训练任务平均只有 10-20 步,记忆策略的差异在 reward 上几乎反映不出来,模型学到的会是「随便写都行」。论文用的训练任务平均 80 步以上才能稳定收敛。
六、结语
MCMPO 让我看到的不只是又一个长程任务方法,而是记忆研究范式的一次转向——从「优化记忆这个组件」变成「优化对记忆的决策」。当我们承认记忆通货膨胀是真问题,承认「记什么」本身需要学习而非规则化时,整个 Agent 架构里很多过去被当成「数据结构题」的部分都会被重新审视。
下一步值得关注的方向有几个:把元认知策略扩展到工具调用(学习何时该用某个工具)、扩展到协作 Agent(学习何时该把信息广播给其他 Agent)、以及与符号化记忆系统结合。如果你的产品里有任何长程 Agent 场景,这篇论文的设计哲学比具体算法更值得一读。