3.1 讲了 L2 最内的两层: 提示与程序, 架构与工作流. 外面还有三层: 带显式调用接口的技能, 没有调用接口, 在之后某次检索时被静默注入上下文的记忆, 以及构造上下文, 调用工具, 观察轨迹, 提交改动的 harness 循环.
1. 三层的区别
1.1. 三层各保留什么
3.1 讲的提示和架构, 改的是组件说什么和组件怎么组织. 结构稳定之后, 下一个问题是这些结构产生的能力里, 哪些要保留下来, 在之后的独立任务上再调用.
| 层 | 保留的是什么 | 怎么影响之后的行为 | 本地检查 | 典型失败 |
|---|---|---|---|---|
| 技能 | 命名的, 可检索的能力单元: 策略, 规则, 代码, 工具 | 通过显式接口被调用, 带一个声明的有效范围 | 留出探针, 被调用条目的回归预算 | 静默回归: 新条目修好目标任务, 弄坏原来对的行为 |
| 记忆 | 交互历史, 经验摘要, 用户画像等 | 被检索后静默注入上下文, 没有调用动作 | 用保留的原始轨迹做长时回放 | 累积噪声, 过期条目, 相互矛盾 |
| Harness | 构造上下文, 调工具, 观察, 归因, 提交的循环本身 | 决定前面所有层怎么被调用和提交 | 执行整个循环并记录回滚路径 | 循环可以反复查询的验收门不再是留出证据 |
1.2. 排序与层级
技能排在记忆前面, 是因为技能有调用接口和有效范围, 能做局部检查; 记忆去掉了调用接口, 也就去掉了这个局部检查. Harness 排最终, 是因为它执行和观察其他所有层, 把它变成可写, 就把提示, 架构, 技能, 记忆都放进了一个可编辑的循环.
三层都在 L2, 前提和 3.1 一样: 保留下来的是 里的非参数结构. 记忆的整理器如果是训练过并保留的参数, 那部分是 L1; harness 里如果有教师重新打标签再训练模型的环节, 那部分也是 L1.
三层的边界由行为接口决定, 不由文件名决定. 一段 Markdown 若只能被检索后拼进上下文, 它是记忆; 若带参数、前置条件和返回契约, 由控制器显式调用, 它承担技能角色; 若它规定检索、调用、验证和提交的顺序, 就成为 harness 的一部分. 同一段内容经过接口升级会跨层移动, 认证要求也随之改变.
可以把三层写成嵌套映射. 技能集合 把输入和状态变成局部动作, 记忆 改变技能与模型看到的上下文, harness 决定何时读取 、选择哪个 以及如何处理结果:
修改外层会改变内层的实际分布. 一个技能本身没有变化, 路由器更新后被调用到新的任务上, 行为仍会退化; 一条记忆没有改写, 注入位置变化后影响会变强. 因此外层升级的回归集必须覆盖内层资产, 不能把每层测试完全隔离.
这也解释了为什么越外层越难做局部归因. 技能有明确调用事件, 可以比较调用前后; 记忆可能通过措辞轻微改变多个决定; harness 能改变整条轨迹, 包括哪些证据会被观察. 观察边界扩大后, 「组件没变」不再等于「组件作用没变」. 版本清单既要记录内容哈希, 也要记录路由、注入和控制关系.
三层还有不同的失败半径. 坏技能通常只伤害调用它的任务, 坏记忆会影响所有召回到它的任务, 坏 harness 可能让每条任务都绕过验证. 准入强度应随失败半径提高: 技能可先在窄作用域金丝雀, 记忆要检查邻接任务与长期干扰, harness 则需要全链路影子运行和真实回滚演练.
失败半径还决定观察周期. 技能调用后通常能立刻验收, 记忆的干扰可能隔几次任务才出现, harness 的状态迁移问题则可能只在版本升级或并发恢复时暴露. 局部单测、长期回放与故障注入分别覆盖这三种时间尺度, 不能互相替代.
1.3. 技能
从轨迹到技能:这一层的基本动作是把成功和失败的轨迹蒸馏成命名的, 可检索的条目. 条目和原始轨迹的区别在于: 它要在独立任务上被调用, 并且带着一个隐含的有效范围, 比如一类输入或一类任务.
Voyager (Wang 等, 2023, NVIDIA 与 Caltech 等) 是这一路的早期代表. 在 Minecraft 里, GPT-4 自动出课程, Agent 为每个任务写 JavaScript 动作程序, 根据环境反馈, 执行报错和自检反复修改. 只有自检确认任务完成, 程序才写进技能库, 用描述的嵌入向量做索引, 之后按相似度检索, 组合. 160 次提示迭代里发现 63 种物品, 是对比方法的 3.3 倍. 科技树解锁所需的迭代次数, 木制工具 6±2, 石制 11±2, 铁制 21±7, 三次运行都成功; 钻石工具 102 次, 三次里成功一次. ReAct 和 Reflexion 三次都没解锁任何一级. 换到新世界零样本做新任务, Voyager 带着技能库四个任务都成功, 对比方法全部失败. 把 GPT-4 换成 GPT-3.5 写代码, 发现的物品数少到 1/5.7.
Voyager 的技能库只增不删. 在 Minecraft 里这没出问题, 原因之一是任务空间有清晰的成功信号, 自检的可靠性高.
SkillWeaver (Zheng 等, 2025, 俄亥俄州立) 把同样的思路用在网页上. Agent 在网站上自己提出要练的技能, 执行后由一个 LLM 奖励模型判成败, 成功的轨迹被合成为 Playwright 的 Python API, 再经自动生成的测试用例调试后加入 API 库. WebArena 上 GPT-4o 从 22.6 到 29.8, GPT-4o-mini 从 9.2 到 14.1; 真实网站 Online-Mind2Web 上从 40.2 到 56.2. 强模型合成的 API 给弱模型用, WebArena 上最多相对提升 54.3%.
自己写的技能有没有用:SkillsBench (Li 等, 2026, BenchFlow) 直接测这个问题. 86 个任务, 11 个领域, 每个任务在三种条件下各跑一遍: 不给技能, 给人工整理的技能, 让模型先自己写技能再做题, 用确定性验证器判对错. 7 种 Agent 与模型的配置, 共 7308 条轨迹.
- 人工整理的技能平均提高 16.2 个百分点, 不同领域差别很大: 软件工程 +4.5, 医疗 +51.9. 84 个任务里有 16 个变差.
- 自己写的技能平均 −1.3 个百分点. 只有 Opus 4.6 有小幅提升 (+1.4), Codex 加 GPT-5.2 掉了 5.6.
- 只含 2–3 个模块的聚焦技能好于大而全的文档; 小模型带技能能追平不带技能的大模型.
这组结果给技能层定了基调: 让 Agent 往技能库里写东西本身没有价值, 价值取决于写进去之前有没有经过验证. 后面的系统都在回答「用什么门」.
技能作为可验证的程序:把技能写成程序, 工具或形式化的契约, 调用接口就收窄了, 升级前的本地证据也更强: 候选可以编译, 可以模型检验, 可以被验证器拒掉. 综述举了两类做法: 把反例轨迹转成对技能契约的文本修改 (VASO), 在没有真实测试用例的情况下让代理验证器和技能包一起演化 (CoEvoSkills). 这类系统基座权重不动, 也没有改自己的改进器, 演化的是技能或规格产物, 综述把它们归在 L2.
Alita (Qiu 等, 2025, 普林斯顿等) 走得更远: 只预置一个网页 Agent 和少量通用模块, 遇到任务时从开源代码现场生成, 修正 MCP 工具, 生成的工具留给以后的任务和别的 Agent 用. GAIA 验证集上, Claude-Sonnet-4 加 GPT-4o 的配置 pass@1 75.15%, pass@3 87.27%; OpenAI Deep Research 是 67.36%. 论文里没有看到显式的准入或删除门.
形式检查和执行检查证明的, 仍然只是覆盖到的执行上的语法和行为. 要证明技能能迁移, 还得做留出的端到端评测.
治理技能库与共享技能:技能库变大以后, 问题不再是单个技能对不对, 而是整个库会不会越来越差. 综述把这叫做静默回归: 新加的技能改善了它针对的样本, 同时悄悄弄坏了原来对的行为. 准入门和回滚就是为了抓这个.
GRASP (Moll 等, 2026, 慕尼黑工大) 的门写得最明确. 技能库有容量上限, 带版本, 可回滚. 每批任务跑完, 把失败按具体机制分组, 由写手模型提出 个修改, 每个只增, 改或删一个技能. 每个修改 都在一组留出的平衡探针上重跑, 探针由原先失败和原先成功的样本组成. 记 为修改后原先失败的探针里被修好的数量, 为原先成功的探针里被弄坏的数量; 是用当前技能库重新跑一遍得到的同样两个数, 用来扣除重跑本身的波动. 接受条件是:
第一项要求修好的减去弄坏的, 比基准多; 第二项要求弄坏的不比基准多. 两项同时满足才收. 结果:
| 设置 | 起点 | GRASP | 最强基线 |
|---|---|---|---|
| MedAgentBench, gpt-oss-120b | 40.6% | 88.8% | 67.8% (Evo-MedAgent) |
| MedAgentBench 分布外, gpt-oss-120b | 56.3% | 31.3% | |
| MedAgentBench-v2, gpt-oss-120b | 61.1% | 76.9% | 67.8% (ExpeL) |
| MedAgentBench-v2 分布外, gpt-oss-120b | 86.0% | 87.1% (SkillX) |
其他四个基座模型提升 17.2 到 40.3 个点. 在 v2 的分布外设置上 GRASP 不如最强基线, 作者明确不对这一项声称更好. 非医疗环境里, ALFWorld +28.4, WebShop +20.6, DBBench +5.0, OS Interaction +0.9, 最终一项在种子噪声范围内. 同一篇论文还报告, 去掉验证环节, 只让写手模型写技能, 效果和不用技能一样.
SkillsVote (Liu, Yang 等, 2026, MemTensor 等) 处理的是百万级的开源技能库. 执行前用 Agent 搜索给任务推荐技能; 执行后把轨迹拆成和技能挂钩的子任务, 把成败归因到四类: 技能引导, Agent 自己探索, 环境, 结果信号. 只有归因为成功且可复用的发现, 才能改写已有技能或新建技能; 失败和不确定的归因一律跳过. 用 Codex 跑 Terminal-Bench 2.0, GPT-5.2 从 51.1 到 53.7, GPT-5.5 从 79.8 到 80.7. 对照很有用: 同一张表里, 人工整理的技能在 GPT-5.5 上 78.1, 低于不用技能的 79.8; ReasoningBank 77.7, 也更低. 模型越强, 外加技能的空间越小, 门不严时更容易帮倒忙.
SkillBrew (Hu, Chu 等, 2026, 港城大等) 在整库层面做多目标整理: 效用是硬约束, 多样性和覆盖度是正则项. 对每个技能做留一反事实回放, 判断保留, 改写还是删除; 在支持集上提出修改, 在留出的查询集上做 Pareto 选择. Qwen2.5-7B 上 ALFWorld 平均 59.0, Voyager 47.0, ExpeL 46.3. GPT-4o 上 ALFWorld 从 46.4 到 88.1. 只允许添加, 不允许改写和删除时, ALFWorld 成功率只有 47.0%.
三个系统的共同点: 准入看留出样本上的净效果, 不看写入时的自评; 删除是正式的操作, 和添加同等对待.
技能变成跨 Agent, 跨模型, 跨用户的共享资产时, 多了一条兼容性要求: 接口和语义版本要在不同模型, 工具和用户之间保持有效, 迁移的成功率要和单个 Agent 内的复用分开测. 准入的代价也更高: 一个坏条目在共享库里会传播到创建它的 Agent 之外. 综述提到的组织层面的防护, 包括审计分离, 契约协议和组织记忆, 都是为了这一点.
技能选择, 组合与作用域:技能条目可以写成五元组
是用于检索的描述, 与 是输入输出契约, 是前置条件和权限, 是经过验证的适用证据. 只有描述而没有后四项的条目更像一段建议; Agent 可以读它, 却无法判断何时调用、调用后怎样验收. 技能库的能力来自条目本身与选择策略的组合, 同一个好技能被错配到不适用任务上仍会降低结果.
设任务上下文为 , 候选技能集合为 , 选择器给出 . 调用技能 后的净效用为
是任务收益, 是调用成本, 是权限或失败风险. 选择问题是最大化 . 语义相似检索只近似了「描述像不像」, 没有估计收益、成本和风险. MemRL 的效用重排、GRASP 的回归探针与 SkillsVote 的轨迹归因, 分别补了这个目标的不同部分.
选择器看到的反馈具有选择偏差. 被召回的技能有结果, 没被召回的技能没有反事实结果. 若某个早期技能偶然成功, 选择器会更常调用它, 数据里它也会继续占优; 其他技能得不到试用机会. 这与上下文 bandit 相同. 适度探索可以估计冷门技能, 但高风险任务不适合随机试错. 可把任务按风险分层: 低风险沙箱允许探索, 中风险任务只在验证器可覆盖时探索, 外部副作用任务使用已经通过对应权限探针的技能.
离线评估选择器时, 仅用历史日志重放会遇到支持集问题. 若旧策略在上下文 下从未选择技能 , 日志不能直接估计新策略选择 的结果. 有记录的行为概率 时, 可以用逆倾向加权估计新策略 的效用:
当 很小时权重爆炸, 方差很大. 截断权重或双重稳健估计能缓和, 不能凭空创造未覆盖动作的证据. 因而技能系统若打算长期自我学习, 从一开始就要记录候选集合、实际选择与选择概率; 只保存成功轨迹会失去评估新路由策略所需的信息.
技能的作用域可以理解为一个集合 , 表示已经有证据支持调用的任务区域. 新条目刚加入时 很窄, 只能覆盖与验证探针相邻的任务. 每次在新任务族上通过独立验证, 才扩大作用域. 仅凭自然语言描述声称「适用于所有网页任务」不会扩大证据范围. 反过来, 某一类任务稳定失败时应缩小作用域, 而非立刻删除整个技能. 这让更新从二元的保留/删除变成作用域的收缩与扩张.
作用域还要区分能力前提与环境前提. 一个代码修复技能可能要求模型能稳定编辑多文件, 这是能力前提; 要求仓库有可执行测试、依赖版本兼容, 是环境前提. 换底座模型或工具版本后, 旧证据只覆盖旧前提. 技能条目携带验证时的模型、工具、权限和数据版本, 运行时发现前提不满足便降级为候选建议, 不能继续当已认证程序调用.
技能组合引入交互效应. 顺序组合 要求 满足 , 并行组合要求副作用不冲突, 条件组合要求路由谓词有可测边界. 即使单个技能都通过测试, 组合也未必安全. 设单技能作用为算子 , 一般有
说明顺序属于组合语义. 一个先格式化后校验的流程可能通过, 先校验再格式化则拒绝同一输入. 技能库需要保存经过验证的组合模体, 或在组合时重新做接口和副作用检查.
重复技能会制造选择不稳定. 两个描述相似的条目可能实际上覆盖不同边界, 盲目去重会删掉差异; 两个措辞不同的条目可能行为等价, 全部保留又稀释检索概率. 去重应比较三层: 描述用于初筛, 契约判断接口是否相容, 行为探针判断在代表性输入上的输出与副作用是否等价. 行为接近但证据来源不同的条目可以合并实现、保留独立证据, 不必把审计链一起删掉.
冲突技能不能靠检索分数裁决. 若一个条目要求遇到缺失证据时停止, 另一个要求继续尝试替代来源, 两者可能分别适用于高风险事实回答和低风险探索. 解决办法是把条件写入作用域并规定优先级. 无法区分条件时, 系统应暴露冲突并进入复核, 而非让向量距离的小数差决定行为. 对权限和安全规则, 优先级属于不可由普通技能覆盖的外层策略.
技能贡献不能只按被调用后的成功计数. 容易任务更常成功, 会让处理容易任务的技能看起来最有价值. 可以比较同一任务在有无技能时的配对差值
再按部署任务分布聚合. SkillBrew 的留一回放接近这个思想. 完整重跑每个技能成本很高, 可先用调用日志筛出可能有贡献的条目, 对高影响和高风险条目做精确消融; 长期未触发的技能不能直接判为无用, 还要确认对应任务是否仍会出现.
容量上限既是成本约束, 也是统计正则. 库越大, 检索器越容易从许多相似条目中选到偶然匹配, 每个条目获得的验证样本也越少. 设技能数为 , 每个任务只检查前 个候选, 增加 会提高覆盖的可能性, 也提高误召回与多重比较偏差. 最优容量由任务多样性、检索分辨率和每条技能可获得的证据量共同决定. Ratchet 的上限 把这个问题变成显式约束, 但淘汰依据仍必须校准; 容量满了时机械删最旧条目, 可能恰好删掉低频灾难场景的保护技能.
技能版本之间需要可替换关系. 补丁版本保持接口和作用域, 只修正实现; 次版本可以扩大作用域或增加可选输出; 主版本改变契约, 调用方必须重新验证. 自动改写若改变了输入字段、权限或失败状态, 即使自然语言描述相近也属于破坏性升级. 共享库中旧调用方不会同时更新, 因此要保留兼容层或并行版本, 直到依赖图上的消费者全部迁移.
迁移检验至少有三种. 同模型跨任务检验条目是否超出原始轨迹; 同任务跨模型检验技能是否依赖某个底座的特殊表达习惯; 同模型同任务跨环境检验工具与接口是否绑定特定实现. 三者失败的含义不同. 跨任务失败说明规则过拟合, 跨模型失败说明调用协议缺乏可移植性, 跨环境失败说明实现与外部依赖耦合. 把三种结果压成一个平均分, 无法指导是改描述、改程序还是缩小作用域.
一个成熟技能库因此不是提示片段仓库. 它包含候选发现、契约检查、选择策略、行为验证、作用域维护、组合测试、版本迁移与回滚. Agent 能生成一条看似有用的规则, 只完成了最前面的候选发现. SkillsBench 里自写技能平均无增益, 恰好说明后面的治理环节才决定条目会不会转化为持续能力.
2. 记忆
2.1. 写入什么
技能有显式的调用接口, 记忆没有. 一条记忆不需要被有意调用, 就能影响之后的某个决定. 这让记忆成为 L2 里影响范围最广, 最难看见的一层.
Reflexion (Shinn 等, 2023, 东北大学) 在失败后写一段语言反思, 放进情景记忆, 下一次尝试同一任务时带上. HumanEval 上 pass@1 91.0, GPT-4 是 80.1; MBPP 上 77.1, 低于 GPT-4 的 80.1. Reflexion 的记忆主要用于同一任务内的重试, 只保留最近几条. 按 1.2 的持久性条件, 同一任务内的重试是 L0; 反思被保留下来, 用到之后的独立任务上, 才是 L2.
ExpeL (Zhao 等, 2023, 清华) 跨任务. 先在训练任务上用 Reflexion 收集成功和失败轨迹, 再从成败对比中提炼一份洞见列表, 列表用增加, 赞成, 反对, 编辑四种操作维护, 票数降到零的条目被删除. 推理时把洞见和检索到的相似成功轨迹一起放进上下文. HotpotQA 从 ReAct 的 28.0 到 39.0, ALFWorld 从 40.0 到 59.0; 迁移到 FEVER, 从 63 到 70. ExpeL 有删除, 但删除依据是写入模型自己的投票, 不是留出样本上的效果.
ACE (Zhang 等, 2025, 斯坦福等) 把上下文当成一份不断演化的操作手册. 生成器执行任务, 反思器提炼经验, 整理器按条目做增量更新, 并做语义去重和剪枝. 它针对的问题是上下文坍缩: 反复整篇重写上下文, 细节会逐渐丢失. AppWorld 上, DeepSeek-V3.1 的 ReAct 平均 42.4, 加 ACE 离线学习 59.4, 和排行榜第一的 IBM CUGA (60.3) 相当; 不用真实标签也有 57.2. 金融任务上有一个反例: 在线, 无标签的设置下, FiNER 一项从 70.7 降到 67.3. 没有可靠反馈时, 增量更新也会把错误写进去.
ReasoningBank (Ouyang 等, 2025, Google Cloud AI Research 等) 用 LLM 判官判定每条轨迹的成败, 从成功和失败中各自提炼可泛化的推理策略, 推理时检索使用. 它的扩展 MaTTS 给每个任务多跑几条轨迹, 用轨迹之间的对比提炼更好的记忆. WebArena 上, Gemini-2.5-flash 从无记忆的 40.5 到 48.8, 加 MaTTS 51.8, 平均步数从 9.7 降到 7.9. SWE-Bench-Verified 上, Gemini-2.5-flash 从 34.2 到 38.8.
MemRL (Zhang 等, 2026, 上海交大等) 把每条经验存成「意图, 经验, 效用」三元组. 检索分两步: 先按语义召回, 再按学到的期望效用值重排; 效用值用环境反馈做蒙特卡洛更新. 名字里有强化学习, 但模型权重不更新, 学的是存储里每条经验的效用, 所以仍是 L2. 五个设置的平均, 无记忆 0.631, MemRL 0.772, 另一个记忆方法 MemP 0.736.
2.2. 怎么组织, 怎么注入
MemGPT (Packer 等, 2023, 伯克利) 借用操作系统的分层内存: 上下文窗口是主存, 外部的召回存储和归档存储是外存, 模型通过函数调用自己决定换入换出. 在多会话对话的深层记忆检索任务上, GPT-4 Turbo 从 35.3% 到 93.4%.
A-Mem (Xu 等, 2025, 罗格斯) 按卡片盒方法组织记忆: 每条新记忆生成一张带描述, 关键词, 标签的笔记, 和已有笔记建立链接, 还会反过来更新旧笔记的描述. LoCoMo 上 GPT-4o-mini 的 F1, 时间类问题 45.85, MemGPT 25.52; 多跳问题 27.02, MemGPT 26.65. 正文说多跳任务上「至少两倍」, 和表对不上, 翻倍的其实是时间类一列. 每次记忆操作约 1200 个 token, 对比方法约 16900.
Dynamic Cheatsheet (Suzgun 等, 2025, 斯坦福) 让模型在推理阶段自己维护一份小抄, 记下解题策略和代码片段, 每答一题整理一次, 不需要标签. GPT-4o 在 24 点游戏上从 10.0 到 99.0, Claude 3.5 Sonnet 在 AIME 2024 上从 23.3 到 50.0. 但 GPT-4o 在 MMLU-Pro 工程类上从 53.2 降到 44.0 (累积版) 或 51.2 (检索综合版). 小抄的内容由模型自己筛, 没有外部验证门, 有的任务上它记下的东西帮倒忙.
结构决定了哪些内容还能被检索到, 以及之后的回归能不能定位. 综述的提醒是: 每一步压缩和整合, 都可能丢掉审计之后某次失败所需的来源信息.
经验经由检索或运行时钩子注入时, 记忆层的风险最具体: 它影响行为, 却没有局部的有效性检查. 综述举的 WebCoach 把跨会话的导航日志浓缩成建议, 通过运行时钩子注入, 不需要重训, 对模型无关; OS-Copilot 的 FRIDAY 在冻结的模型上, 把成功完成后的工具和技能累积成自我改进的程序性记忆. 这类存储持续地, 静默地影响工具使用和规划, 它们的效果要在长时间跨度上测, 只看写入它们的那个会话不够.
2.3. 删除, 以及一个反例
存储只增不删, 迟早会积累过期和相互矛盾的条目. 综述把删除和降级看作学习规则的一部分, 不只是容量管理.
CTIM-Rover (Lindenbauer 等, 2025, 慕尼黑工大与 LMU) 是这一节的反例. 它在 AutoCodeRover 上照搬 ExpeL, 从过去的成功轨迹里蒸馏出通用级和仓库级两层跨任务记忆, 外加示例轨迹, 全部直接放进初始上下文, 不做过滤. SWE-bench Verified 的 45 题子集上:
| 配置 | 成功率 |
|---|---|
| AutoCodeRover (无记忆) | 42 |
| CTIM-Rover (全部) | 40 |
| 只用示例轨迹 | 40 |
| 只用通用级记忆 | 36 |
| 只用跨任务记忆 | 31 |
| 只用仓库级记忆 | 31 |
没有任何配置超过无记忆基线. 作者的分析把退化归于保留下来的干扰条目产生的噪声. 这是直接的证据: 跨任务持久, 不加过滤的存储会积累噪声, 不一定积累能力.
综述由此给出这一层的结论: 持续重写的记忆即使起初有用, 也可能变差; 一次删除要用保留的原始轨迹回放验证, 确认它修好一处失败时没有悄悄带回另一处. 这是 L1 模型坍塌在 L2 的对应: 权重没变, 之后的行为却受早先可能出错的行为所产生的状态支配. 记忆的影响比技能更广也更难看见, 升级和淘汰都应该在更长的时间跨度上判断, 探针要同时覆盖检索, 工具使用和下游决策.
写入, 召回与遗忘是一条决策链:记忆系统常被画成向量库加相似度检索, 这只覆盖了召回的一步. 一条经历 先经过写入策略 , 变成记忆项 ; 存储结构 决定它和其他条目的关系; 查询 经召回策略 得到集合 ; 注入策略 决定以何种形式进入上下文; 最终行为产生反馈, 遗忘策略 再更新存储. 整体可以写成
任何一环都可能让有用经历失效. 写入器漏掉关键条件, 检索器召回错误条目, 注入器把来源压缩掉, 模型忽略了正确记忆, 淘汰器又依据这次失败删掉条目. 只比较「有记忆」和「无记忆」只能测整条链的总效应, 无法定位该修哪一环.
写入的起点是信息选择. 原始轨迹 包含大量偶然细节, 记忆 希望保留对未来任务 有用的信息. 理想目标可以写成带容量约束的信息瓶颈:
第一项奖励记忆对未来结果的预测或决策价值, 第二项惩罚把整段轨迹原封不动存下. 实际系统无法直接计算互信息, 但这个形式揭示压缩的矛盾: 摘要太短会丢掉适用条件和反例, 太长又挤占上下文并带入噪声. ACE 的增量条目试图减少整篇重写造成的信息损失, A-Mem 的链接试图保留关联, 两者都没有自动解决「哪些细节对未来有用」.
一条可审计记忆至少包含命题、作用域、来源、时间、置信和反证. 命题是准备复用的内容; 作用域说明在哪些任务和环境下成立; 来源指回原始轨迹或外部证据; 时间用于判断过期; 置信记录证据强度而非生成模型的语气; 反证保存已知失败条件. 若只存一句「遇到测试失败先重装依赖」, 后续无法知道它来自哪个仓库、是否只适用于锁文件损坏、有没有导致环境被破坏的反例.
来源不能在压缩时丢失. 记忆文本 可以是多个轨迹的归纳, 仍应维护来源集合 . 新证据支持或反驳条目时, 更新的是来源图和条目置信, 而非直接覆盖原句. 若发现某条原始轨迹标签错误, 可以沿来源边撤销其贡献. 没有来源图, 一条错误经验被合并进十次摘要后几乎无法清除.
召回的目标超出语义近邻, 它要选择对当前决策有正边际价值的证据. 设不注入记忆时行为效用为 , 注入集合 后为 , 记忆集合的价值为
包含 token、延迟与干扰. 两条单独有用的记忆一起注入可能冲突, 所以 不一定可加. 单纯取相似度最高的前 条假定每条贡献独立且与长度无关, 在存在冲突、重复和顺序效应时不成立.
召回可以分成候选生成、证据过滤和集合选择. 候选生成追求高召回率, 允许混入无关项; 过滤器检查时间、权限、作用域和来源强度; 集合选择在预算内覆盖互补信息并减少冲突. 条目间交互集中在集合选择阶段. 把三步压成一次向量排序速度快, 代价是无法说明漏召回、错召回和组合干扰分别贡献了多少错误.
检索质量要在行为层测. 常见的 Recall@k 只问目标条目是否出现在前 , 可目标条目未必真的帮助模型, 也可能存在多个等价条目. 更直接的指标是干预后的任务差值: 固定任务与随机种子, 分别运行无记忆、召回集合、人工最小充分集合和随机同长度集合. 无记忆对照测总收益, 人工集合测检索还有多少上限, 随机集合测仅增加上下文的影响. 若召回集合与随机集合相近, 向量指标再高也没有转化为决策价值.
注入位置改变记忆的作用. 系统指令附近的条目更像高优先级规则, 工具结果旁边的条目更像局部证据, 末尾附录可能被忽略. 同一条记忆放在不同位置取得不同结果, 不应归因为条目本身. 评测记忆库时应冻结模板与位置; 要优化注入策略, 则固定条目集合单独比较. MemGPT 让模型主动换入换出, 相当于把注入决策交给执行策略, 它的收益同时包含存储和控制能力.
记忆会形成反馈环. 条目影响行为, 行为产生新轨迹, 新轨迹又支持原条目. 若系统把自己的成功判断当独立证据, 一个早期误判会被反复强化. 设条目置信为 , 每次被采用后按照自评结果 更新 , 当 受条目本身影响且判官偏宽松时, 更新并非独立观测. 防止自证需要外部结果、可执行验证或与条目无关的审计样本. 同一模型的反思可以提出修改, 不足以确认修改.
矛盾记忆需要保留条件, 不能简单投票. 「先运行完整测试」与「先运行最小失败测试」在不同时间预算下都可能正确. 将两条合并成「视情况选择测试」丢掉了可执行边界; 只保留票数高者又抹掉少数场景. 更好的表示是带条件的规则图: 节点存命题, 边表示支持、反驳和限定, 查询时根据当前上下文激活条件. 条件未知时返回冲突状态, 让控制器补充信息.
时间衰减只适用于会自然过期的事实, 不适合作为统一遗忘规则. API 版本、用户偏好和环境状态随时间变化, 旧条目应降权; 数学恒等式、验证过的故障机制不会因时间自动失效. 记忆项需要声明变化过程. 对易变事实可以设生存概率 , 超过阈值后要求重新验证; 对稳定规则按新反证更新, 不做机械衰减.
删除是一种有风险的干预. 条目长期未被召回, 可能是任务分布暂时没有覆盖; 条目被频繁召回但看不出收益, 可能是它与其他条目冗余. 直接删除后若未来任务失败, 很难知道是否与删除相关. 因此先降级为冷存储, 在线不主动召回, 回归与审计仍可访问. 观察一段任务窗口后没有负面变化, 再做物理删除. 高风险保护条目即使低频, 也应按事件损失而非触发次数决定保留.
反事实回放能估计删除影响. 对历史任务 , 固定其他记忆与执行条件, 比较含条目 和移除 的结果. 记贡献
权重 应接近未来部署分布并提高高风险任务比重. 不一定表示条目无用, 它可能被另一条冗余记忆替代. 可以进一步成组移除相似条目, 检查共同贡献. SkillBrew 的留一思想同样适用于记忆, 只是记忆的静默注入让调用边界更难确认.
记忆容量还受上下文读取能力限制. 存储可以无限增长, 每次能注入的 token 有限. 当候选条目数增加, 检索阈值不变会带来更多假阳性; 提高阈值又会漏掉罕见表达. 这类似开放集分类, 新任务可能不属于任何已有记忆的作用域. 选择器应允许「不用记忆」这个动作, 并校准拒绝阈值. CTIM-Rover 的结果说明无条件注入全部记忆会低于无记忆基线, 拒绝能力本身就是记忆系统的重要能力.
多用户系统还要处理记忆所有权与信息流. 用户画像、私有轨迹和组织经验不能因语义相似被另一个用户召回. 权限过滤必须发生在候选进入模型上下文之前, 不能先把敏感文本交给模型再要求它忽略. 删除请求需要沿来源图移除原文、摘要、派生条目和缓存; 只删向量库的一条索引, 派生总结仍可能泄露信息.
评测长期记忆不能随机打散会话. 若同一用户、仓库或事件的近重复信息跨训练和测试, 系统可以靠表面相似召回, 看不出能否处理真正的时间变化. 更严格的划分按实体和时间切割: 早期轨迹用于写入, 后期任务测试复用; 再加入事实反转和工具升级, 检查旧记忆能否被纠正. 指标同时报告收益、误注入、过期条目使用率、冲突发现率与删除后的回归.
记忆层的核心由此落在治理, 不在存储介质. 向量、图、层级摘要分别提供不同索引结构, 它们都无法自行判断一条经验是否真实、是否仍有效、是否值得影响当前决策. 写入门、来源链、作用域、拒绝选项、冲突处理和可逆遗忘共同决定存储会积累能力还是积累噪声.
3. Harness
3.1. 当作外围对象
技能和记忆决定哪些经验保留下来, harness 决定每个持久组件怎么被调用, 观察和提交. 它构造上下文, 调用工具, 观察轨迹, 归因失败, 执行内部检查; 提出, 内部筛选, 提交和回滚由固定的改进器控制. 综述认为这是 L2 里最薄的一层: 很多看起来是改循环的工作, 保留下来的其实是训练过的权重, 属于 L1.
第一类从外部对待 harness, 本身不保留演化后的 harness.
综述举的 CUDAnalyst 冻结 CUDA 核生成的轨迹, 选择性地注入单个反馈组件, 用联盟式归因找出哪些信号真正驱动了规划决策. 它的贡献是可观测性: 之后的增益可以追溯到某一处反馈与推理的交互. 这是诊断分析, 本身不构成持久的脚手架更新. AutonomyLens 把场景规格, 仿真执行, 遥测分析, 反事实测试生成合成一个测试循环, 从观察到的失败合成新测试. 它产生的是端到端的行为证据, 但一个可写的测试 harness 可以提供开发证据, 不能充当自己那次更新的外部审计.
AutoHarness (Lou 等, 2026, Google DeepMind) 把对象收窄到防护代码. 起因是一个统计: Gemini-2.5-Flash 在 TextArena 游戏里的失败, 78% 来自非法动作. 它让 Gemini-2.5-Flash 为每个游戏写一个 Python 的合法动作校验器, 根据环境报错反复修改, 用 Thompson 采样做树搜索, 合法率到 100% 停止. 生成的 harness 在 145 个游戏里拦下了全部非法动作, Flash 带上它, 在 16 个单人游戏上平均奖励 0.745, Gemini-2.5-Pro 0.707. 另一个变体把整个策略写成代码, 推理时不再调用模型, 平均奖励 0.870, GPT-5.2-High 0.844. 拦截发生在动作执行之前.
3.2. 当作保留的程序
第二类把 harness 本身当作持久的, 可演化的程序.
Meta-Harness (Lee 等, 2026, 斯坦福等) 把整个 harness 当优化目标. 提议者是一个编程 Agent, 可以通过文件系统读到以往所有候选的源码, 分数和完整执行轨迹, 而不只是一段压缩过的摘要. 在线文本分类上, 比 ACE 平均高 7.7 个点 (48.6 对 40.9), 上下文 token 少到约 1/4. 检索增强的数学推理上, 一个搜出的 harness 在五个没参与搜索的模型上, 200 道 IMO 级题目平均提高 4.7 个点. TerminalBench-2 上, Opus 4.6 用搜出的 harness 达到 76.4%, 手工设计的 Terminus-KIRA 74.7%. 论文自己说明, TerminalBench-2 的搜索和最终评测用的是同一套 89 题, 这一项是开发证据.
Self-Harness (Zhang 等, 2026, 上海人工智能实验室) 不借助更强的外部模型, 让同一个模型改进自己的 harness: 从执行轨迹里挖掘这个模型特有的失败模式, 针对它提出最小修改, 修改通过回归测试才采纳. 三个模型乘三个基准的九种组合, 最终 harness 在留入和留出样本上都提升. 部分结果:
| 模型 | 基准 | 初始 | 最终 |
|---|---|---|---|
| Qwen3.5-35B-A3B | Terminal-Bench 2.0 | 18.0 | 36.7 |
| Qwen3.5-35B-A3B | SWE-bench Verified | 19.5 | 41.5 |
| Qwen3.5-35B-A3B | AppWorld | 22.5 | 52.2 |
| GLM-5 | SWE-bench Verified | 52.0 | 55.5 |
| GLM-5 | AppWorld | 44.4 | 85.0 |
起点低的模型相对提升大, 起点高的在 SWE-bench 上只提高 3.5 个点.
M★ (Pan 等, 2026, 港城大与微软) 把记忆 harness 写成可执行的 Python 程序, 包含 schema, 逻辑, 指令三部分, 一起做反思式代码演化, 每个配置 20 轮, 按验证集选最好的程序, 在测试集上报告. 八个指标里七个最好, 相对最强基线最多高 31%. ALFWorld 已见任务上 0.700, 低于 GEPA 加向量检索的 0.820. 它的做法是给每个任务配一个专门的记忆循环.
MemoHarness (Huang 等, 2026, 圣母大学等) 把 harness 拆成六个可编辑的控制维度: 上下文, 工具, 编排, 记忆, 解码, 输出处理. 经验库分两层, 逐例诊断和蒸馏出的全局模式; 推理阶段按检索到的经验为每个用例调整 harness. Terminal-Bench 上 GPT-5.3-Codex 达到 0.806, 比最强基线 Codex 高 0.084. 摘要自己写明, 统计稳健性和组件归因留给以后的工作.
Continual Harness (Karten 等, 2026, 普林斯顿等) 是综述的收尾案例: 不重置环境, 在同一次运行里一边行动一边改自己的提示, 子 Agent, 技能和记忆. 论文报告, 用它的 Agent 是第一个在不输一场战斗的条件下通关宝可梦蓝, 困难模式的黄和水晶的 AI 系统. 从零开始时, 它相对极简基线大幅减少按键成本, 补回了和人工专家 harness 之间的大部分差距. 它还包含一个在线协同学习环节: 开源模型的轨迹由前沿教师模型重新打标签, 再用来更新开源模型, 这部分是 L1. 综述引用它是为了保留下来的 harness 改动, 那是更深的 L2 目标.
5. 参考来源
- Kaiqi Wang, Wenjin Hou, Yuchen Yan 等 (2026). Diving into Reliable Self-Evolving Agents: A Survey. §5.3 Skills and Experience, §5.4 Memory and Retrieval, §5.5 Runtime Harness, §5.6 Reliability and the Fixed-Improver Limit.
- Guanzhi Wang 等 (2023). Voyager: An Open-Ended Embodied Agent with Large Language Models.
- Boyuan Zheng 等 (2025). SkillWeaver: Web Agents can Self-Improve by Discovering and Honing Skills.
- Xiangyi Li 等 (2026). SkillsBench: Benchmarking How Well Agent Skills Work Across Diverse Tasks.
- Jiahao Qiu, Xuan Qi, Tongcheng Zhang 等 (2025). Alita: Generalist Agent Enabling Scalable Agentic Reasoning with Minimal Predefinition and Maximal Self-Evolution.
- Johannes Moll 等 (2026). GRASP: Gated Regression-Aware Skill Proposer for Self-Improving LLM Agents.
- Hongyi Liu, Haoyan Yang 等 (2026). SkillsVote: Lifecycle Governance of Agent Skills from Collection, Recommendation to Evolution.
- Wentao Hu, Zhendong Chu 等 (2026). SkillBrew: Multi-Objective Curation of Skill Banks for LLM Agents.
- Noah Shinn 等 (2023). Reflexion: Language Agents with Verbal Reinforcement Learning. NeurIPS 2023.
- Andrew Zhao 等 (2023). ExpeL: LLM Agents Are Experiential Learners. AAAI 2024.
- Qizheng Zhang 等 (2025). Agentic Context Engineering: Evolving Contexts for Self-Improving Language Models. ICLR 2026.
- Siru Ouyang 等 (2025). ReasoningBank: Scaling Agent Self-Evolving with Reasoning Memory. ICLR 2026.
- Shengtao Zhang 等 (2026). MemRL: Self-Evolving Agents via Runtime Reinforcement Learning on Episodic Memory.
- Charles Packer 等 (2023). MemGPT: Towards LLMs as Operating Systems.
- Wujiang Xu 等 (2025). A-Mem: Agentic Memory for LLM Agents.
- Mirac Suzgun 等 (2025). Dynamic Cheatsheet: Test-Time Learning with Adaptive Memory.
- Tobias Lindenbauer, Georg Groh, Hinrich Schütze (2025). From Knowledge to Noise: CTIM-Rover and the Pitfalls of Episodic Memory in Software Engineering Agents. REALM 2025.
- Xinghua Lou 等 (2026). AutoHarness: improving LLM agents by automatically synthesizing a code harness.
- Yoonho Lee 等 (2026). Meta-Harness: End-to-End Optimization of Model Harnesses.
- Hangfan Zhang 等 (2026). Self-Harness: Harnesses That Improve Themselves.
- Wenbo Pan 等 (2026). M★: Every Task Deserves Its Own Memory Harness.
- Yue Huang 等 (2026). MemoHarness: Agent Harnesses That Learn from Experience.
- Seth Karten 等 (2026). Continual Harness: Online Adaptation for Self-Improving Foundation Agents.
- Minhua Lin, Juncheng Wu 等 (2026). Harness Updating Is Not Harness Benefit: Disentangling Evolution Capabilities in Self-Evolving LLM Agents.
- Xing Zhang 等 (2026). Ratchet: How Reliable Must an LLM Judge Be to Retire a Skill?.
- Xing Zhang 等 (2026). Library Drift: Diagnosing and Fixing a Silent Failure Mode in Self-Evolving LLM Skill Libraries.
- Andrew Borthwick (2026). RoboPhD: Evolving Diverse Complex Agents Under Tight Evaluation Budgets.
上一篇: 3.1.1 · L2: 提示, 程序与架构 · 下一篇: 4.1.1 · L3: 自指智能体