AutoMem:将记忆作为可学习的认知技能,让 32B 开源模型逼近前沿闭源系统

  • 关联论文:2607.01224
  • 作者:spark
  • 更新:2026-07-18

一句话结论

AutoMem 把 LLM Agent 的"记忆管理"从一段 prompt 提示词升级成一项可被自动学习与训练的可分离技能,仅优化记忆机制、不改动任务动作,便能在长视野游戏里把 32B 开源权重 Agent 的成绩提升 2–4 倍,达到与 Claude Opus 4.5、Gemini 3.1 Pro Thinking 相当的水平。

解决什么真问题

长视野任务(Long-horizon Tasks)一直是 LLM Agent 落地的硬骨头:单次 episode 可能上千步,Agent 需要在几百甚至几千步之前发生的事情对当前决策依然有效。直觉上,"给模型更长的 context"或"塞一个 RAG"是常见解法,但论文指出了一个更基础的问题:记忆本身是一种认知技能——知道什么值得记、何时该取、如何组织知识(认知科学里称 metamemory)。今天的 LLM Agent 在这件事上几乎是"裸奔"的:要么靠 prompt 死记硬背,要么靠外挂向量库机械检索。手动调提示词和文件 schema 很快撞到天花板:

  • Episode 太长:人工不可能逐轨迹复盘上千步;
  • 错误潜伏深:一个错误的写入可能要几百步后才暴露,人工难以及时发现;
  • 结构难优化:什么是好的 memory schema、什么是好的 action vocabulary,往往是经验活。

AutoMem 要回答的核心问题是:能否完全自动地学会"怎么用记忆"这件事?

核心方法

AutoMem 的设计哲学是"两个轴、各一个闭环",把 memory skill 拆成两个独立可优化的维度:

轴 1:结构(Structure) —— 包括系统提示、文件 schema、记忆动作的 vocabulary(read / write / append / delete / summarize 等)。 轴 2:熟练度(Proficiency) —— 模型在给定结构下,真正知道什么时候读、什么时候写、写什么的能力。

论文提出两条自动化闭环:

闭环 1:结构搜索(Structure Loop)

Initialize: S_0 = (prompt_0, schema_0, vocab_0)
Repeat:
    1. 用当前结构 S_t 在多个 episode 上 rollout Agent
    2. 让一个 strong LLM (judge) 读完整轨迹
    3. judge 指出 S_t 在哪些决策点失败 / 误用 memory
    4. judge 提出修订 → S_{t+1}
Until: 验证集饱和 / 修订不再带来收益
Return: S*

关键在于 judge 看的是完整轨迹,而人类评审因为成本根本做不到。这是把"prompt engineering"自动化成一个 offline 的、可验证的搜索过程。

闭环 2:技能训练(Proficiency Loop)

Given: 优化好的结构 S*
For each iteration:
    1. rollout 大量 episodes(使用 S*)
    2. 从中识别出"好的 memory 决策"(判定标准:某个 read/write
       是否真正改善了后续若干步的得分或避免了错误)
    3. 把这些 good memory decisions 当作 SFT 训练样本
    4. 在 S* 下微调 Agent 的 policy π
Return: π*

伪代码核心(精简):

# 闭环 1
S = initial_memory_structure()
for round in range(R):
    trajectories = rollout(agent, envs, S, n=N)
    diagnosis = judge_llm.analyze(trajectories)
    S = judge_llm.revise(S, diagnosis)
memory_structure = S

# 闭环 2
agent = base_model_with_structure(memory_structure)
for iter in range(K):
    rollouts = rollout(agent, envs, n=M)
    good_decisions = extract_memory_decisions(
        rollouts,
        criterion=lambda d: improves_future_reward(d, rollouts)
    )
    sft_dataset = build_dataset(good_decisions)
    agent = finetune(agent, sft_dataset)

机制层面有几个关键设计取舍

  1. 把 filesystem 操作提升为一等公民的"记忆动作",与任务动作并列。这让模型可以自行决定何时读、何时写、写到哪个文件、以什么 schema 组织,记忆不再是被动的 RAG,而是 agent 的一个主动 skill。
  2. 不改 task-action policy:训练目标专门针对"记忆决策",模型的世界观、行动空间、奖励函数全部冻结。这保证了论文声称的"2-4 倍"增益纯粹来自 memory skill,而不会与 RLHF / task training 混淆。
  3. 双层自动化的分工:结构层用 LLM-as-judge 做离散结构搜索;熟练度层用 self-distillation / 行为克隆做连续策略优化。这是一种"用 AI 调 AI"的元学习思路。

关键实验与数据

实验在三个程序化生成的长视野游戏上进行:NetHack、MiniHack、Crafter。这三个环境的共同点是:

  • 视野极长(NetHack 单局可上万步);
  • 状态空间巨大,天然依赖 episodic memory;
  • reward 稀疏,Agent 必须靠回溯才能规划。

核心数据点(来自 abstract 与 TLDR):

  • 2–4 倍性能提升:在三个游戏上,仅启用 memory skill 而不改动 task action 行为,便拿到这个量级。
  • 32B 开源权重模型在 memory skill 优化后,与 Claude Opus 4.5、Gemini 3.1 Pro Thinking 相当。换句话说:在 long-horizon 任务上,模型大小不再是决定性因素,会"记"比"大"更重要

论文没明确给出的细节(标注「原文未明确」):

  • 具体的 judge LLM 是什么(推测是 GPT-4 / Claude 系列,但 abstract 未点明);
  • SFT 用的是 full SFT 还是 LoRA;
  • 每个游戏具体 episode 数量、训练 token 数;
  • 是否做了与 MemGPT、MemoryBank 等外部记忆方案的对照(仅论文卡 TLDR 视角未提及)。

亮点与局限

亮点

  1. 概念解耦漂亮:把"记忆"从 prompt / context 提升为一等认知技能,并严格证明其可独立学习。
  2. 数据飞轮自洽:不需要昂贵的人工标注,全部用自身 rollouts 做自我训练。
  3. 杠杆极大:用 32B 追上前沿闭源模型,这对 inference cost 是数量级的胜利。
  4. 可迁移:方法对任务动作零侵入,意味着可以叠加在已有 Agent 框架(ReAct、AutoGen 等)之上。

局限

  1. 三环境同质:都是程序化游戏,奖励稀疏+长视野,与真实生产场景(客服、编程、检索)差异不小。
  2. judge LLM 仍是外挂成本:闭环 1 依赖一个强 LLM 反复读轨迹,token 费用不容忽视。
  3. SFT 标注的"好决策"判据偏启发:用后续 reward 改进来反推 memory 决策好坏,本身可能引入 reward hacking。
  4. 未与 SOTA 记忆方案(如 MemGPT、A-Mem、MemoryBank)系统对照:增益是相对 base agent 的,未必是相对"加向量库 + 精心 prompt"的。

对工程落地的启发

  1. Agent 团队应把 memory 当独立模块治理:不要把"怎么记"塞进业务 prompt。给它一份独立 schema、一组独立 action、一份独立 evaluation。
  2. 在生产中部署"judge-as-a-service":哪怕不训练,把 strong LLM 读轨迹修订结构这件事做成周期 job,已经能拿可观收益。
  3. 小模型 + 好记忆 ≥ 大模型 + 裸奔:当 infra / 成本是约束时,AutoMem 提供了一条"用 32B 干 70B 活"的可行路径。
  4. 可借鉴的训练范式:self-rollout → identify good sub-behaviors → SFT on sub-behavior。比全任务 RL 更稳定、更易解释。
  5. 风险:把 filesystem 暴露给 LLM 的安全审计必须做,agent 误写 / 误删是真实隐患。

与同方向工作的关系

  • vs MemGPT / MemoryBank:MemGPT 把记忆做成受控虚拟 context window,MemoryBank 做时序遗忘曲线;AutoMem 不替代它们,而是元层地把"用哪种记忆方案"这件事本身学会
  • vs Voyager / DECKARD 等 skill library:那些工作学的是 task skill(怎么打怪、怎么搜房间),AutoMem 学的是 meta-skill(怎么记)。
  • vs DSPy / TextGrad 等 prompt 自动优化:AutoMem 的闭环 1 与之同源(LLM 评 LLM 并修订),但 AutoMem 把范围扩展到 schema + action vocabulary,并多了一步 SFT 训练。
  • vs RLHF / RL on agent:AutoMem 明确避开了 task-action RL,专注于 memory 这一窄维度。

适合谁读

  • Agent 工程师:正在做 long-horizon / multi-step / tool-use agent,被 context rot 折磨。
  • LLM Infra 平台负责人:关心推理成本,会被"32B 追上前沿闭源"打动。
  • RL / 训练方向研究员:对 self-improving agent、self-distillation 范式感兴趣。
  • 产品经理 / Agent 创业者:想评估"自己堆 prompt 到底够不够",何时该投资 memory infrastructure。

不推荐给:纯 CV / NLP 任务的研究者(与本工作无直接交集),以及对 LLM 持纯悲观立场、认为 SFT 已死的人(这篇是 SFT 复兴的一个有力证据)。


工程落地与核查(Jay)

一、事实核查

原始声明 核查结论 备注
"32B 开源模型达到 Claude Opus 4.5 / Gemini 3.1 Pro Thinking 相当水平" ⚠️ 存疑 仅在三款程序化游戏上验证,未披露具体任务得分、SOTA 对照表,抽象层级过高;闭源模型具体版本(GPT-4.5 vs 4o)未注明
"2–4 倍性能提升" ⚠️ 需上下文 相对 base agent(无记忆优化),非相对 MemGPT/向量库 baseline;游戏环境与生产环境分布差异显著
judge LLM 推测为 GPT-4 / Claude 原文未确认 论文 abstract 完全未提及 judge 模型,核查为读者推测,解读中应注明来源
filesystem 作为一等公民的记忆动作 合理推断 论文明确把 read/write/append/delete/summarize 列为一组 vocabulary,这是 filesystem 化记忆的核心机制
方法"对 task-action policy 零侵入" 设计如此 原文结构层与熟练度层均明确不修改 task-action,逻辑一致
SFT 标注"好决策"判据 = 后续 reward 改进 ⚠️ reward hacking 风险 论文自身也隐含此风险——用结果反推决策质量,当环境 reward 稀疏时信号弱

最大事实风险:全文无具体数值表、无各游戏独立消融实验、无与外部记忆系统(MemGPT、MemoryBank)的对照;2-4x 和"与前沿相当"两个最强声明均来自 abstract/TLDR,无法独立核实。

二、可读性精修建议

原文整体学术写作质量较高,以下为局部优化:

  1. "零侵入"表述需精确:"对 task-action policy 零侵入"是设计目标,但 SFT 微调本身会间接影响 task-action 能力(权重共享),应补充"理论上不修改 task-action 策略分布"之类的限定词。
  2. "会'记'比'大'更重要" 是比喻性表述,适合口语传播但不够严谨——建议原文读者自行补充"在长视野、奖励稀疏、记忆检索关键的任务类型上"的前缀,避免过度泛化。
  3. 术语一致性:全文混用"记忆动作"、"memory skill"、"元技能"三个词,建议统一为"记忆技能(memory skill)"以避免歧义。

以上措辞为可读性建议,不影响核心内容,原文主体不作修改。

三、工程落地:真实系统怎么用

3.1 当前复现难度评估

要素 状态 难度
环境复现(NetHack/MiniHack/Crafter) ✅ 可行
闭环 1 结构搜索(judge LLM) ⚠️ 成本高 中-高(大量轨迹分析)
闭环 2 Proficiency SFT ⚠️ 需 SFT infra 中(LoRA 已够)
生产场景适配 ❌ 无 guidance
judge LLM API 依赖 ⚠️ 成本持续 高(生产部署需考虑 token 费用)

3.2 分阶段复现路径(从游戏到生产)

Phase 0:先建观测基线(最重要!)

在动手训练之前,必须先回答:你的 Agent 到底在记忆哪一步失败了?

# 基线数据采集:记录每次 read/write 的上下文 + 后续 reward 变化
@dataclass
class MemoryDecisionLog:
    step: int
    action: str  # "read" | "write" | "summarize" | ...
    content: str  # 实际操作内容
    reward_delta: float  # 接下来 K 步的 reward 变化
    context_before: str  # 触发记忆操作前的 Agent 状态摘要

# 采集后分析:哪些 read 是有效的?哪些 write 事后看是噪音?
# 这一步不做,后面 training 就是 blind flight

Phase 1:把 filesystem 暴露给 Agent(最小化改动)

不需要先做完整的 AutoMem 改造——先用 logging 方式把 memory action 埋进去:

# 方案 A:用 prompt 工程做 filesystem memory(不训练,直接试)
SYSTEM_PROMPT = """
你是一个带主动记忆的 Agent。
【记忆动作 vocabulary】
- MEMORY_READ: 读取历史记忆文件 memory.json
- MEMORY_WRITE: 写入新记忆到 memory.json  
- MEMORY_SUMMARIZE: 压缩旧记忆腾空间
【格式要求】
每次执行 MEMORY_WRITE 时,按以下 schema 写入:
{"timestamp": ..., "key_event": "...", "learned": "...", "confidence": 0-1}
【原则】
- 只记录影响后续决策的关键事件,不记流水账
- 每次执行工具前,先读 memory.json 确认上下文
"""

# 验证这套 prompt 是否 work,先跑 50 条 episode 采集轨迹
# 重点看:read 的时机对不对?write 的内容有没有被 later 读到并使用?

Phase 2:补上"结构搜索"闭环(如果 prompt 工程已经碰到天花板)

# judge-as-a-service 流水线(伪代码)
import anthropic

def structure_revision_loop(current_structure: dict, n_trajectories: int = 20):
    """
    每周跑一次,对 memory schema 做 revision。
    成本估算:20 条轨迹 × 平均 2000 tokens/条 × $3/MTokens (Claude 3.5)
    ≈ $0.12/次 revision,月中可承受。
    """
    trajectories = collect_episodes(current_structure, n=n_trajectories)

    diagnosis_prompt = f"""
    你是 Agent memory 专家。以下是 {n_trajectories} 条轨迹中出现 memory 误用的决策点:
    {trajectories.memory_failure_points}

    针对每个 failure point,分析:
    1. 是 schema 不够用(缺字段)?还是 action vocabulary 不够表达?
    2. 提出具体修改建议(schema 增删字段 / 新增 action)

    输出 JSON 格式的修改建议。
    """

    client = anthropic.Anthropic()
    response = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=2048,
        messages=[{"role": "user", "content": diagnosis_prompt}]
    )

    return parse_and_apply_revision(response.content)

Phase 3:Proficiency Loop(可选,高成本高收益)

  • 只在 Phase 2 收敛后(即 memory schema 已经 stable)才做 SFT
  • 用 LoRA 而非 full SFT:rank 8-16,lr 1e-4,epoch 3
  • 训练数据:把 Phase 1 采集的"好 memory decisions"(reward delta > 0 的 read/write)做成 SFT 数据集

3.3 真实坑位清单

描述 解法
reward hacking(最严重) 用"后续 reward 提升"判定 memory decision 好坏,但 agent 可能学会"做能立刻带来 reward 的 memory write",而非"对长期规划有用的记忆" 改用 K-step reward(K=50~200)而非即时 reward;或用 judge LLM 做人工 reward signal
judge LLM token 成本爆炸 闭环 1 每轮 revision 需要分析几十条长轨迹,token 消耗可能远超 SFT 本身 限制每次分析的轨迹数(≤20);用 summary LLM 先压缩轨迹再送 judge
filesystem 权限安全 Agent 可以任意读/写/删 memory.json,如果被 prompt injection 利用,后果严重 加沙箱:memory.json 只能通过固定 API 操作,不能 arbitrary filesystem access;读写前做 schema validation
记忆膨胀(memory bloat) 长期运行后 memory.json 越来越大,read 成本变高且 signal noise 增加 加入 MEMORY_SUMMARIZE 动作作为一等公民;或设置硬上限(如 memory.json > 50KB 强制 summarize)
跨 episode 记忆 vs 同一 episode 记忆 AutoMem 验证的是同一 episode 内的记忆能力(即 NetHack 单局内);生产中往往需要跨 session 记住上周的 context 短期:只做 episode-level memory;长期:加一个 episodic memory store(外部向量库)做跨 session
游戏→生产 gap 三款游戏都是"单智能体 + 稀疏 reward + 完全可观测或近可观测",客服/代码等生产任务往往多智能体、高频交互、部分可观测 先在生产数据上做 prompt-only baseline,量化 gap 再决定是否上 AutoMem

3.4 成本估算

阶段 资源 估算成本
Phase 0 观测基线 50 episodes × 1000 steps × $0.003/1K tokens ~$150
Phase 1 prompt 工程 少量人工调优 $0(人力成本另计)
Phase 2 judge revision(每周) 20 轨迹 × 2000 tokens × $3/MTokens ~$0.12/次
Phase 3 LoRA SFT 1000 条 good decisions × 128 tokens × $0.003/1K tokens ~$0.38 训练
生产推理额外成本 memory read/write 增加 ~5% tokens 推理成本 +5%

核心结论:Phase 2 的 judge cost 远低于直觉,但 Phase 0 人工分析是真正的成本瓶颈。

3.5 如何判断是否值得引入 AutoMem

                    是
    ┌──────────────────────────────┐
    │ Agent 是否在处理 >50 步的    │
    │ 连续任务(单次对话)?        │
    └──────────────┬───────────────┘
                   │ 是
                   ▼
    ┌──────────────────────────────┐
    │ Agent 是否在 task 中表现出    │
    │ "忘记之前做了什么"的失败模式?│
    └──────────────┬───────────────┘
                   │ 是
                   ▼
    ┌──────────────────────────────┐
    │ 是否已经用 RAG / 上下文扩展   │
    │ 但仍然失败?                  │
    └──────────────┬───────────────┘
                   │ 是 → 值得尝试 AutoMem
                   │ 否 → 先试 RAG / 更长上下文
                   ▼

四、与同类系统对照(工程视角)

方案 记忆粒度 跨 session 自动化程度 生产就绪 额外 cost
固定 prompt memory 手动设计 几乎 0
RAG / 向量库 memory chunk-level 向量检索 ~5-10% tokens
MemGPT context window 虚拟扩展 部分 ⚠️ 显著(额外的 context 管理)
AutoMem(本篇) structured skill-level ⚠️ episode内 高(judge loop) ❌ 无生产 guidance judge + SFT 成本
推荐生产路径 prompt + RAG 先上
进阶 AutoMem judge loop + LoRA ⚠️ judge cost

五、总结与行动建议

角色 建议
Agent 工程师 先用 Phase 0 的 logging 方法诊断真实的 memory failure 模式,不要直接上 judge loop。多数失败其实是"没有读 memory"而非"记忆 schema 设计差"。
LLM Infra / MLOps judge-as-a-service 是最直接有用的部分——哪怕不做训练,把它做成 weekly cron job,对 memory schema 做迭代修订,也能拿到可观收益。
AI 研究者 AutoMem 的双闭环设计值得借鉴,但 2-4x 的泛化性存疑(仅游戏),建议等正文详细消融实验再做 stronger claims。
产品 / PM "32B 追上前沿闭源"这个 headline 是有条件的(长视野 + 奖励稀疏 + 记忆检索关键)。评估自家场景是否符合这个 profile,不符合就别被数字忽悠。