How Memory Management Impacts LLM Agents: An Empirical Study of Experience-Following Behavior

Paper: arXiv:2505.16067 Code: yuplin2333/agent_memory_manage Code reference: main @ 4dc29e36 (2025-05-21)

1. Motivation (研究动机)

LLM agent 的长期能力越来越依赖“可演化的经验记忆”:agent 在执行任务后,把过去的输入 query 与输出 execution 作为 experience 存入 memory bank,之后遇到相似任务时再检索出来作为 demonstrations。这个设计看似只是 RAG / in-context learning 的一个工程模块,但本文强调的关键区别是:agent memory 不是静态外部知识库,而是一个会被 agent 自己的输出持续污染、扩张和裁剪的动态池。因此,memory 管理策略本身会改变未来输入时 agent 看到的上下文分布,也会改变它模仿、推理或复用历史 execution 的倾向。

现有 agent 论文通常把 memory addition / deletion 当作 task-specific trick:有的所有 trajectory 都存,有的用 LLM judge 过滤,有的按检索频率忘记,有的用环境反馈做反思。但这些方法大多只报告某个任务上的收益,缺少跨 agent、跨输入输出形态的行为分析。本文要回答的问题更底层:当 memory bank 随着连续 addition 和 deletion 演化时,LLM agent 的长期执行行为究竟怎样变化?哪些现象是 memory agent 的共性,而不是某个任务或某个 prompt 的偶然结果?

本文把研究重点放在两类最基础的 memory operation:addition 决定新的 query-execution pair 是否进入 memory;deletion 决定旧 experience 何时从 memory 中移除。作者发现,memory 管理不是“记得越多越好”。如果把低质量 execution 加入 memory,后续相似任务会把这些错误当作示例继续模仿,导致性能下降;如果 deletion 只按频率清理,也可能删掉低频但有价值的经验,或留下频繁检索但有害的经验。真正影响长期表现的是 memory 中经验的质量、相关性、未来效用和容量约束之间的平衡

这篇论文的价值在于它把 memory 模块从“辅助检索组件”提升为“会塑造 agent 行为动力学的系统组件”。对实际部署来说,这意味着 memory bank 不能只看 embedding 相似度和存储规模,还要追踪被检索经验对后续执行的真实影响;对研究来说,它提供了一个可测量的行为属性——experience-following——把“为什么某些 memory 策略会自我强化或自我退化”讲清楚。

2. Idea (核心思想)

核心洞察是:带 memory 的 LLM agent 存在一种 experience-following property:当前任务输入与被检索 memory record 的输入越相似,agent 当前输出与该 record 中历史输出也越相似。这个性质本身是双刃剑。若 memory record 是高质量成功 execution,它会让 agent 复用正确经验,形成 self-improvement;若 record 含有错误或与当前上下文不对齐,它会让 agent 复制错误,形成 error propagation 或 misaligned experience replay。

本文的关键创新不是提出一个复杂新算法,而是用四类 agent 的受控实验系统地证明:memory addition 与 deletion 的设计应围绕“经验质量”和“未来效用”展开。addition 需要可靠 evaluator,避免把噪声 trajectory 写入 memory;deletion 不能只按年龄或检索频率,而应利用未来任务反馈,把“被检索后经常导致低效用输出”的 record 删除。这个想法把环境反馈、trajectory evaluator、retrieval history 结合起来,使 memory bank 从被动缓存变成可维护的数据结构。

与常见的 add-all memory 或固定 memory baseline 相比,本文的根本差异在于:它不把 memory size 当作唯一优化目标,也不假设历史 experience 天然有益。作者显示,固定 memory 有时比粗糙自动 evaluator 更强,因为冻结的少量高质量 memory 至少不会持续引入坏样本;严格或足够强的 evaluator 则可以让 memory 规模增长同时保持质量,从而超过固定 memory。也就是说,memory 管理的关键不是“增加记忆”,而是“控制 agent 学到什么样的执行轨迹”。

3. Method (方法)

3.1 统一 memory workflow

Figure 1 解读:这张图概括了本文研究的 agent memory 生命周期。每次任务执行后,agent 会得到当前 query 与 execution,然后 addition policy 判断是否把它存为新 memory record;之后 retrieval 模块在后续 query 到来时从 memory bank 取出相似 record 作为 demonstrations;deletion policy 再根据检索历史、频率或未来效用删除部分记录。图中的重点不是某个特定 agent 架构,而是 memory bank 处在一个闭环中:过去输出影响未来上下文,未来执行结果又反过来更新或清理过去输出。

形式化地,一个 memory record 可以写成 ((q_i, e_i)),其中 (q_i) 是 agent 输入,(e_i) 是 agent 输出或执行轨迹。给定当前 query,retrieval 返回一个或多个相似 record;LLM 在这些 record 的条件下生成当前 execution。memory addition 用 evaluator (\pi(q,e)) 决定是否存储新 execution:若 (\pi(q,e)=1),写入 memory;若 (\pi(q,e)=0),丢弃。memory deletion 用 criterion (\phi(q_i,e_i)) 决定旧 record 是否移除。

3.2 Memory addition:从 add-all 到 evaluator-gated selective addition

作者比较四类 addition 策略。第一类是 fixed-memory baseline:初始 memory 来自训练数据中正确执行的子集,后续不添加新记录,即 (\pi_{\mathrm{fixed}}(q,e)=0)。第二类是 add-all:每个 encountered task 和 execution 都存入 memory,即 (\pi_{\mathrm{all}}(q,e)=1)。第三类是 coarse automatic evaluation:用自动 evaluator 判断 execution 是否值得存储,即 (\pi_{\mathrm{automatic}}(q,e)=\mathrm{Automatic}(q,e))。第四类是 strict human/oracle evaluation:用 ground truth 模拟严格人工判断,即 (\pi_{\mathrm{human}}(q,e)=\mathrm{Human}(q,e))。

coarse evaluator 被设计成三档能力。RegAgent 中 C1/C2/C3 分别使用绝对误差阈值 1.6、1.4、1.2,阈值越小 evaluator 越严格。其他三个真实 agent 中,C1 是 GPT-4o-mini judge,C2 是 GPT-4.1-mini judge,C3 是用 300 条正确 judging data fine-tune 的 GPT-4.1-mini evaluator。这个设计使作者能区分两个因素:memory 规模变大是否有益,以及 evaluator 质量是否足以阻止错误经验进入 memory。

Figure 2 解读:该组合图对应 EHRAgent 与 AgentDriver 在不同 addition 策略下的长期性能曲线。曲线说明 add-all 和部分 coarse addition 会因为错误记录累积而停滞或下降;fixed memory 虽然不会自我提升,但由于不继续引入噪声,表现相对稳定;strict evaluator 与更强的 coarse evaluator 则能随着时间持续筛选高质量 experience,使 memory bank 变得更有用。这里的关键不是单步 accuracy,而是长期曲线是否随着 memory 演化改善。

3.3 Experience-following property:相似输入诱导相似输出

本文定义的 experience-following property 是:若当前 query 与被检索 memory record 的 query 在输入空间中高度相似,那么 agent 当前 execution 与该 record 的 execution 也会高度相似。作者用 input similarity 和 output similarity 的关系来验证这一点。RegAgent 中 input similarity 是输入向量的 cosine similarity,output similarity 使用 RBF kernel;AgentDriver 中 input similarity 遵循原 AgentDriver 的向量距离方法,output similarity 是预测轨迹和参考轨迹之间的 RBF kernel。对于轨迹输出,论文使用类似

[ \text{output_similarity}=\exp(-\gamma\lVert \mathbf{v}_1-\mathbf{v}_2\rVert^2),\quad \gamma=1.0. ]

Figure 3 解读:左图是 RegAgent,右图是 AgentDriver,展示不同 evaluator 下 input similarity 与 output similarity 的累计关系。RegAgent 在 memory 增大、检索样本更贴近当前 query 时,input-output similarity 接近线性同步,论文报告 Pearson (r\approx 1),说明模型更像是在强烈跟随最近的 demonstration,而不是纯粹重新推理。fixed-memory 条件下 similarity 较低,反而可能保留更多内部推理成分,所以在 coarse noisy memory 下固定 memory 有时更稳。

这个性质解释了为什么 selective addition 能形成 self-improvement:当 evaluator 只允许正确 execution 进入 memory,未来相似 query 会检索到正确 demonstration,agent 生成相似输出,于是正确经验被复制。相反,add-all 或弱 evaluator 会把错误 execution 也放入 memory;由于 experience-following,未来相似 query 会复制这些错误,错误又可能被继续写回 memory,形成自我退化。

3.4 Error propagation:错误 trajectory 被 experience-following 放大

error propagation 是 experience-following 的第一个负面后果。若 memory record 的 execution 本身有噪声或错误,agent 在相似 query 上会复制该 execution 的结构;如果当前 execution 也被 addition policy 接受,错误会进一步传播。作者用 error-free variant 检验这一点:保持 retrieval 与任务顺序不变,但把加入 memory 的 agent output 替换为 ground-truth output。若性能显著上升,就说明原来的性能损失来自 agent output 作为 demonstration 时携带的错误,而不是任务本身不可解。

Figure 4 解读:该图比较“使用 agent 自己输出作为 demonstrations”和“error-free 使用 ground truth 作为 demonstrations”的长期性能。coarse 使用 C1 evaluator。结果表明,哪怕检索机制和任务流程不变,memory 中 execution 的真实质量会明显改变后续性能;ground-truth demonstration 能切断错误传播,而 agent-generated demonstration 会让 early mistake 进入 memory 后被后续相似任务反复模仿。

3.5 Memory deletion:用频率、历史效用或二者组合清理 memory

memory deletion 的目标是防止 memory 无限增长,并删除冗余或有害记录。论文比较三类 deletion。

Periodical-based deletion 用固定周期内的检索频率近似 record 的有用性。令 (\operatorname{fr}{t}(q_i,e_i)) 是 record 到时间 (t) 的累计检索次数,(\operatorname{fr}{t’}(q_i,e_i)) 是前一时间点的检索次数,(\alpha) 是周期内目标检索次数。若

[ \phi_{\text{per}}(q_i,e_i,t,t’)=\mathbf{1}\left[\operatorname{fr}{t}(q_i,e_i)-\operatorname{fr}{t’}(q_i,e_i)\le \alpha\right]=1, ]

则删除该 record。该方法能把 memory size 约束到 (M\le \alpha(t-t’)K),其中 (K) 是每次执行检索的 memory 数量,但它只看“是否被检索”,不看“被检索后是否帮助执行”。

History-based deletion 使用未来执行效用。设 (\Phi) 是 utility evaluator,可以与 selective addition 的 evaluator 相同。若一个 record 被检索超过 (n) 次,且所有历史检索对应任务的平均 utility 不超过阈值 (\beta),则删除:

[ \phi_{\text{hist}}(q_i,e_i,t)= \begin{cases} \delta(q_i,e_i,t), & \text{if } \operatorname{fr}_{t}(q_i,e_i)>n,\ 0, & \text{otherwise}, \end{cases} ]

[ \delta(q_i,e_i,t)=\mathbf{1}\left[\frac{1}{\operatorname{fr}{t}(q_i,e_i)}\sum{m=1}^{\operatorname{fr}_{t}(q_i,e_i)}\Phi(q_m,e_m)\le \beta\right]. ]

这里的设计非常实用:未来任务在检索某条 experience 后的表现,天然就是这条 experience 是否有用的免费标签。要求至少检索 (n) 次,是为了降低平均 utility 的估计偏差。

Combined deletion 用逻辑或组合两者:

[ \phi_{\text{comb}}(q_i,e_i,t,t’)=\phi_{\text{per}}(q_i,e_i,t,t’)\lor\phi_{\text{hist}}(q_i,e_i,t). ]

它同时利用频率控制 memory size,并利用历史效用删除有害 record。

Figure 5 解读:该图比较不同 evaluator 下 history-based deletion 的影响。结果说明 deletion 本身不是无条件有益:当 evaluator 可靠时,history-based deletion 能删除未来效用低的 record,提升性能;当 evaluator 粗糙或不稳定时,它可能把错误的 utility 信号用于删除,导致不同 agent 上的效果分化。C3 fine-tuned evaluator 通常更稳定,说明 deletion 的质量同样受 evaluator 质量约束。

3.6 Misaligned experience replay:看似正确但未来有害的经验

misaligned experience replay 是 experience-following 的第二个挑战。某些 record 当初通过了 evaluator 的质量过滤,但它们与后续任务分布或当前 execution context 不对齐;被检索出来后,agent 仍会强烈跟随这些 demonstration,反而降低执行质量。它和 error propagation 的区别是:error propagation 强调 record 本身有错误;misaligned replay 强调 record 对当前 task 的指导价值低,即使它当初可能是“正确”的。

Figure 6 解读:左图是 C1 evaluator 下 history-based deletion 删除与保留 record 的绝对误差 KDE,右图是 strict evaluator 下的对应曲线。被保留 demonstrations 的 error 更低,被删除 demonstrations 的 error 更高,说明 history-based deletion 确实在识别未来效用较差的 records。即使 strict addition 只允许 error (\le 1) 的样本进入 memory,error (>0.5) 的相对嘈杂记录仍更容易导致后续预测退化,从而被删除。

3.7 Released code 与论文方法的对应

Code reference: main @ 4dc29e36 (2025-05-21) — pseudocode and mapping based on this commit

released GitHub 仓库明确说明只包含 AgentDriver 相关实验代码,需要把原始 AgentDriver 仓库中的 agentdriverassetsdataexperimentsscriptsrequirements.txt 移入本项目,再用 agentdriver_patch / scripts_patch / data_patch 覆盖。也就是说,代码能锚定 AgentDriver 的 strict/coarse/no-error-propagation 实现,但 RegAgent、EHRAgents、CIC-IoT 的完整实验代码没有在该仓库中给出。

论文公式与 released code 实现差异:论文覆盖四个 agent 的 addition / deletion 实验;released repo 只发布 AgentDriver patch。论文中的 history utility (\Phi) 在 AgentDriver strict 代码中具体实现为 UniAD 3-second average L2,coarse 代码中则把 LLM judge 的 yes/no 记录成 0.0/1.0 用于后续 deletion。实验超参不是独立 YAML,而是 Python 脚本常量;例如 main_strict.pyN_SAMPLES=2000SUCCESS_L2_THRESHOLD=2.5、初始 memory assert 为 180,默认 DELETION_L2_THRESHOLD=99999.0DELETION_RETREIVAL_N_TIMES=99999 表示关闭 history deletion,注释中的 5.0/3、500/0 等值对应论文中 deletion variant 的手动改参。

import torch
 
 
def uniad_l2(pred_traj: torch.Tensor, gt_traj: torch.Tensor) -> torch.Tensor:
    """AgentDriver released code uses 6 future points and averages L2 at steps 2, 4, 6."""
    assert pred_traj.shape == gt_traj.shape == (6, 2)
    l2s = torch.sqrt(((pred_traj - gt_traj) ** 2).sum(dim=1))
    return (l2s[1] + l2s[3] + l2s[5]) / 3
 
 
def strict_agentdriver_step(memory, token, perception, reasoning, planner, gt_traj,
                            success_l2_threshold=2.5,
                            deletion_l2_threshold=99999.0,
                            deletion_retrieval_n_times=99999,
                            max_memory_size=99999):
    working_memory = perception.run(token)
    retrieved = memory.run(working_memory)
    reasoning_text = reasoning.run(working_memory, retrieved)
    pred_traj = planner.run(working_memory, retrieved, reasoning_text)
 
    l2_error = uniad_l2(pred_traj, gt_traj)
    memory_token = memory.get_retrieved_memory(token)
    memory.record_l2(memory_token, l2_error, timestep=memory.time_step)
 
    if l2_error < success_l2_threshold:
        new_record = convert_working_memory_to_memory(working_memory, pred_traj)
        memory.add_memory(new_record, time=memory.time_step)
 
    if memory.size > max_memory_size:
        worst = memory.find_worst_memory(l2_threshold=-1.0, deletion_retrieval_n_times=-1)
        memory.delete_memory(worst, time=memory.time_step)
    else:
        worst = memory.find_worst_memory(
            l2_threshold=deletion_l2_threshold,
            deletion_retrieval_n_times=deletion_retrieval_n_times,
        )
        if worst is not None:
            memory.delete_memory(worst, time=memory.time_step)
 
    return pred_traj, l2_error
 
def coarse_agentdriver_addition(memory, token, prompts, pred_traj, coarse_llm_judge):
    """main_coarse.py asks an LLM judge for yes/no and stores accepted trajectories."""
    is_success, judge_reason = coarse_llm_judge(
        ego_prompts=prompts.ego,
        perception_prompts=prompts.perception,
        commonsense_mem=prompts.commonsense,
        planning_target=prompts.planning_target,
        pred_traj=pred_traj,
        temperature=0.0,
    )
    retrieved_token = memory.get_retrieved_memory(token)
    if is_success:
        memory.record_l2(retrieved_token, L2=0.0, timestep=memory.time_step)
        memory.add_memory(convert_working_memory_to_memory(prompts.working_memory, pred_traj),
                          time=memory.time_step)
    else:
        memory.record_l2(retrieved_token, L2=1.0, timestep=memory.time_step)
    return is_success, judge_reason
 
 
def error_free_variant(memory, working_memory, ground_truth):
    """main_noerrorprop.py adds ground-truth trajectory to test whether error propagation is from agent outputs."""
    record = convert_working_memory_to_memory(working_memory, ground_truth)
    memory.add_memory(record, time=memory.time_step)
Paper ConceptSource FileKey Class/Function
AgentDriver strict additionmain_strict.pyeval_l2, convert_working_memory_to_memory, experience_memory.add_memory
AgentDriver coarse additionmain_coarse.pycoarse_judge, record_l2, add_memory
Error-free propagation testmain_noerrorprop.pyREFERENCE_RESULT_FILE, adding ground_truth trajectory
Noisy-memory robustness variantsmain_strict_noisymemory.py, main_coarse_noisymemory.pyinject Gaussian noise into initial ego_fut_traj
Evaluation commandscripts_patch/run_evaluation.shcalls agentdriver/evaluation/evaluation.py --metric --success_threshold --result_file
Repository scope caveatREADME.mdcode is “for experiments related to AgentDriver only” and patches original AgentDriver

4. Experimental Setup (实验设置)

Agents and datasets. 作者选择一个可控 synthetic agent 和三个真实 agent,覆盖数值回归、EHR code generation、autonomous driving trajectory prediction、IoT traffic classification 四种输入输出形态。

  • RegAgent:合成回归任务。先生成隐式权重 (w\in\mathbb{R}^6),任务是根据检索到的 6 个相关 demonstrations 预测 (y=w^\top x)。初始 memory 由 100 个输入向量组成,(x) 来自三个高斯分布 (N(\mu,1)),(\mu\in{-0.5,0,0.5}),每个向量 6 维,输出含 bounded noise (\epsilon\in[-1,1])。正式执行阶段收集 4000 个 input-output pairs;若 (|\hat y-y|\le1) 则成功,指标为 success rate。
  • EHRAgents:基于 MIMIC-III 的 EHR code-generation agent。过滤重复和不可回答项后共 2,392 个任务;每个 query 从初始 100 条 records 的 memory bank 中检索 4 条过去经验;text encoder 使用 OpenAI text-embedding-3-large;指标为 ACC。strict evaluator 用 exact match,coarse evaluator 用 LLM-generated termination signal。
  • AgentDriver:基于 nuScenes 的 LLM autonomous driving agent。随机抽取 2,000 个 test cases,初始 memory 包含从 nuScenes training set 随机抽取的 180 条 experiences。原 AgentDriver retrieval 是先 top-3 vector similarity 再由 LLM 选最相关;本文为可复现性简化为 top-1 vector similarity。strict evaluator 使用 UniAD 3-second average L2,L2 error < 2.5 时添加 memory。
  • CIC-IoT Agent:IoT traffic detection agent。原 CIC-IoT 有 34 个 attack classes,作者只保留基于 single-flow features 可区分的 8 类;随机采样 1,000 个 test cases;每次执行检索 3 条经验;初始 memory 是 GPT-4o-mini 从 disjoint training subset 生成的 100 条 synthetic records;指标为 ACC。

Addition strategies. 所有实验从相同初始 memory 出发,比较 fixed、add-all、C1/C2/C3 coarse selective addition、strict selective addition。多数实验 backbone language model 使用 GPT-4o-mini。RegAgent 的 C1/C2/C3 是 error threshold 1.6/1.4/1.2;其他 agent 的 C1/C2/C3 分别是 GPT-4o-mini judge、GPT-4.1-mini judge、用 300 条正确 judging data fine-tune 的 GPT-4.1-mini judge。

Deletion strategies and hyperparameters. RegAgent periodic deletion 每 500 steps,(\alpha=0);history deletion 最小检索次数 5,(\beta=0.5)。EHRAgents periodic period 200,(\alpha=0);history deletion 最小检索次数 5,(\beta=0.3) 用于 GPT-4o-mini / GPT-4.1-mini coarse evaluator,(\beta=0.7) 用于 strict 和 fine-tuned evaluator。

AgentDriver periodic period 500,(\alpha=0);history deletion 中若一条 experience 被检索至少 3 次,且平均 UniAD 3-second L2 超过 5.0 则删除;coarse deletion 使用 predicted success rate,累计 success rate < 0.5 删除。CIC-IoT periodic cycle 500,(\alpha=1);history deletion 中 experience 被检索至少 3 次且平均 score < 0.7 删除。

combined deletion 复用对应 periodical 与 history hyperparameters。

这些数值的来源需要区分:AgentDriver 的 N_SAMPLES=2000、strict addition SUCCESS_L2_THRESHOLD=2.5、初始 memory 180、coarse judge yes/no、error-free variant 写入 ground_truth 等来自 released code;RegAgent、EHRAgents、CIC-IoT 的 setup 与 deletion 阈值来自论文 LaTeX appendix,因为 released GitHub 仓库没有提供这三类 agent 的完整实现。

Evaluation metrics. RegAgent 与 AgentDriver 使用 SR(success rate),EHRAgents 与 CIC-IoT 使用 ACC;所有主表同时报告 final memory size。experience-following 分析使用 input similarity 与 output similarity 的关系:RegAgent input 是 vector cosine,output 是 RBF kernel;EHRAgents input 是 text embedding cosine,output 用 pycode_similar 计算 code plagiarism score;AgentDriver input 用原论文向量距离,output 用轨迹 RBF;CIC-IoT input 是 feature relative change,output 是 embedding similarity。

Challenge scenarios. Task distribution shift 用 EHRAgent 和 AgentDriver 原 test set 构造:先用 text-embedding-3-large 或 AgentDriver 原输入向量得到 query embeddings,再用 GMM 聚成 3 组,最后按 cluster label 重排 query,使三组任务顺序执行,制造明显 distribution shift。Resource constraints 固定 memory capacity,例如 EHRAgent 100 条、AgentDriver 180 条;combined deletion 先做 periodical deletion,若 addition 后仍超过容量,只删除平均 utility 最低的一条 record。

5. Experimental Results (实验结果)

5.1 Addition:strict evaluator 最稳定,add-all 经常最差

Table 1 的核心结果如下,括号内是 final memory size。

  • Fixed:RegAgent SR 67.53 (100),EHRAgents ACC 16.75 (100),AgentDriver SR 40.11 (180),CIC-IoT ACC 71.50 (50)。
  • Add all:RegAgent 55.48 (4100),EHRAgents 13.05 (2411),AgentDriver 32.32 (2125),CIC-IoT 59.90 (1050)。add-all 在四个 agent 上都明显恶化,说明 unfiltered memory growth 会积累坏 records。
  • Coarse C1/C2/C3:C1 = RegAgent 63.18 (3511),EHR 26.19 (1447),AgentDriver 36.92 (1161),CIC 74.00 (1030);C2 = 65.78 (3347),32.21 (1467),40.01 (1119),68.80 (936);C3 = 67.35 (3139),34.66 (1094),47.37 (1285),79.50 (952)。C3 在多数 agent 上是最好的 coarse evaluator,说明小规模高质量 judge fine-tuning 比直接使用 vanilla LLM judge 更稳。
  • Strict:RegAgent 70.95 (2938),EHRAgents 38.50 (1012),AgentDriver 51.00 (1178),CIC-IoT 85.40 (904)。strict 在所有 performance metric 上最佳,同时 memory size 低于 add-all,证明“高质量筛选 + 有限增长”优于“全部记住”。

从这些数字看,memory size 和 performance 并不单调相关。Add-all 的 memory size 最大,却在四个 agent 上最差;fixed memory 的规模小,但因为没有继续注入噪声,在 RegAgent、AgentDriver、CIC-IoT 上甚至超过一些 coarse evaluator;strict 与 C3 能让 memory 增长同时控制噪声,因此形成长期收益。论文据此提出一个实际原则:addition evaluator 的质量比 memory growth rate 更重要。

5.2 Experience-following 支撑 self-improvement,也解释 self-degradation

RegAgent 的结果最能说明机制。随着 selective addition 让 memory 中出现更相近的 demonstrations,input similarity 与 output similarity 接近一一对应,Pearson (r\approx1)。这意味着模型在相似输入上强烈跟随检索样本输出。如果检索样本是正确的,agent 的当前输出也更可能正确;如果检索样本是错的,当前输出会复制错误。AgentDriver 也出现类似趋势,说明这个性质并非只存在于合成数值任务。

这也解释了为什么 fixed-memory baseline 有时表现不差。固定 memory 的 input/output similarity 更低,表示模型仍保留一定内部推理,而不是完全模仿某个新加入的 noisy record。当 coarse evaluator 把错误 trajectory 加进 memory 后,agent 看到的 demonstrations 更相似但质量更低,于是 experience-following 反而造成退化。

5.3 Error propagation:错误输出被写回 memory 后会复利式传播

error-free variant 是最直接的证据。作者把 agent 自己生成的 trajectory 替换为 ground truth trajectory 作为 memory demonstration,其他流程不变。若 error-free 曲线优于原始曲线,就说明问题不是检索或任务难度本身,而是 memory 中记录了错误 execution。Figure 4 的 RegAgent 和 AgentDriver 对照显示,使用 ground truth demonstration 能显著缓解下降,尤其在 coarse evaluator 条件下说明 C1 无法完全过滤错误输出。对实际系统来说,这意味着只要允许 agent 自己的未验证输出进入长期 memory,就必须引入更可靠的反馈或审计机制。

5.4 Deletion:history-based deletion 需要可靠 utility evaluator,combined deletion 更省 memory

Table 2 比较 deletion 策略。Coarse C1 下,No deletion 为 RegAgent 63.18 (3511)、EHR 25.91 (1447)、AgentDriver 36.92 (1161)、CIC 74.00 (1030);Period deletion 变为 60.88 (1012)、26.65 (338)、36.38 (426)、78.10 (355);History deletion 为 62.10 (3205)、33.55 (1004)、34.00 (1019)、73.70 (952);Combined 为 59.32 (951)、31.47 (279)、35.62 (372)、68.80 (352)。这说明粗糙 evaluator 下 deletion 的效果分化:EHR 从 history deletion 中受益明显,但 AgentDriver 和 CIC 可能下降;combined 大幅减少 memory size,但不一定保持最佳性能。

Strict evaluator 下,No deletion 为 RegAgent 70.95 (2938)、EHR 38.67 (1012)、AgentDriver 51.00 (1178)、CIC 85.40 (904);Period deletion 为 67.65 (949)、38.59 (302)、50.94 (467)、80.80 (310);History deletion 为 69.80 (2286)、42.06 (784)、51.81 (846)、89.60 (788);Combined 为 66.58 (890)、42.34 (248)、49.97 (323)、85.50 (188)。这里 history deletion 在三个真实 agent 上都提升或维持性能:EHR 38.67 → 42.06,AgentDriver 51.00 → 51.81,CIC 85.40 → 89.60。Combined 则把 memory size 压到最小,例如 EHR 248、AgentDriver 323、CIC 188,同时仍保持接近或超过 no-deletion 的性能。

Figure 7 解读:该图展示 task distribution shift 下 EHRAgent 和 AgentDriver 的表现。竖线是任务分布切换点,横向虚线是无分布切换时 combined deletion 的性能。结果说明,distribution shift 不会让所有 memory 策略崩溃,但不同 deletion 的稳定性不同;在 EHRAgent 上,history-based deletion 不如 combined deletion,说明即便 periodical deletion 简单,也能帮助去除旧分布下的冗余 record,从而在分布切换时维持更稳定的 memory bank。

Figure 8 解读:该图比较 unlimited memory 与 limited memory 下 strict / coarse selective addition + combined deletion。即使 memory capacity 被固定到初始规模附近,策略仍能优于 fixed-memory variant,说明无限制 memory growth 并非必要。只要 deletion 能保留最相关、最高质量的 records,有限 memory 也可以承载长期自我改进;AgentDriver 不同容量实验还显示,随着容量增加性能逐步收敛到对应 unlimited variant。

5.5 限制与启发

本文是 empirical study,因此结论是行为规律与工程原则,而不是理论保证。四个 agent 覆盖面较广,但 evaluator 和 task pipeline 仍可能影响结论;strict evaluator 在实验中常用 ground truth 模拟,并不等同于真实部署中廉价可得的人类反馈;released code 只包含 AgentDriver patch,不能完全复现 RegAgent、EHRAgents、CIC-IoT 的所有细节。另一个限制是,论文没有训练一个会主动学习 memory policy 的 agent,而是分析手工设定的 addition/deletion rules。

尽管如此,论文给出的实践启发很清晰。第一,长期 memory 不能 add-all;任何生产系统都应把 trajectory 写入 memory 视为有风险的数据入库操作。第二,检索相似度不等于 demonstration 有效性,需要记录“该 memory 被检索后任务是否成功”的历史效用。第三,deletion 不只是节省存储,更是纠正 memory bank 分布的手段。第四,agent 的 self-improvement 依赖 evaluator 可靠性;如果 evaluator 噪声大,memory system 会把 evaluator 的偏差放大成长期行为偏差。