自进化智能体(Self Evolving AI Agents)记忆层 | OPD-Evolver:让智能体不只是“记住经验”,而是真的学会自我进化
欢迎来到人工智能的世界博客主页卿云阁欢迎关注点赞收藏⭐️留言首发时间2026年7月30日✉️希望可以和大家一起完成进阶之路作者水平很有限如果发现错误请留言轰炸哦万分感谢前言介绍本小节会分成两个部分介绍【1】第一个部分理论知识介绍【2】第二个部分代码实现部分论文信息论文标题OPD-Evolver: Cultivating Holistic Agent Evolver via On-Policy Distillation作者Guibin Zhang, Xun Xu, Yanwei Yue, Zikun Su, Wangchunshu Zhou, Xiaobin Hu, Shuicheng Yan机构LV-NUS Lab, FDU, PKU, Bytedance Inc. 复旦 北大 字节跳动论文链接https://arxiv.org/abs/2606.17628v1项目地址GitHub / Hugging Face传统记忆 Agent做完任务 → 把经验存下来 → 下次检索出来放进 Prompt。OPD-Evolver做完任务 → 判断哪些经验真正有用 → 学会选择、使用、提炼和维护经验 → 再把这些能力蒸馏进模型参数。也就是说它希望从“带记忆的 Agent”进一步变成“会利用经验持续进化的 Agent”。这篇论文提出了一个slow-fast co-evolution框架fast loop负责在线使用和更新记忆slowloop则通过 on-policy distillation把“哪些经验真的有用”蒸馏进模型本身。保留经验不等于学会进化什么才叫真正的“自我进化”论文认为真正的自我进化应该满足Agent 能把过去的交互过程和结果转化为未来持续的行为改善。就像人的学习一样比如整理错题第一层保存经验 我经历过什么第二层调用经验以前有没有遇到过类似情况第三层从经验中进化过去的成功和失败怎样改变我未来的判断方式一个合格的 Agent Evolver 需要四种能力Experience Selection经验选择从许多候选经验中选出当前任务真正需要的经验。 例如Agent 要修改数据库表结构Experience-grounded Execution经验执行基于经验执行 找到经验后能够把经验正确地用于当前任务。Experience Writing经验写入完成任务后把过程提炼成未来真正能用的知识。Experience Management经验管理对旧记忆进行评分、合并、删除和维护避免经验库变成垃圾场。这四件事不能分开训练。选择弱会把噪声带进 prompt执行弱agent 仍然依赖外部提示写入弱会制造低质量记忆管理弱长期运行会退化。OPD-Evolver 的核心贡献就是把这四种能力放进同一个经验生命周期里训练。以曝气系统为例进行解释当前任务生化池进水氨氮突然升高需要通过调整曝气在保证出水氨氮达标的同时尽量降低能耗。任务轨迹读取当前水质→ 调节鼓风机→ 观察DO和氨氮变化→ 再次调节→ 最终结束本次工况处理任务结果出水是否达标 消耗了多少电能经验库记忆 A:冬季低温条件下硝化反应速度较慢应适当延长高曝气状态的维持时间。记忆 B:曝气头堵塞时单纯提高鼓风机频率不能有效提升 DO应先检查曝气设备。记忆 C:在进水氨氮快速上升时一次性大幅增加风量容易造成能耗峰值可以分阶段提高曝气。记忆 D:雨季流量升高时应注意水力停留时间缩短带来的影响。Experience Selection从候选经验中选择假设当前实际情况是水温正常进水流量基本稳定曝气设备运行正常进水氨氮突然快速升高。那么四条记忆中A 不太适用因为当前不是低温B 不太适用因为设备没有堵塞C 直接相关因为当前确实是氨氮快速升高D 不太适用因为当前没有雨季流量冲击。因此Agent 应该只选择记忆 CExperience-grounded Execution利用经验执行Agent 选择了记忆 C氨氮快速升高时采用分阶段增加曝气避免一次性增加造成能耗峰值。接下来不能直接照抄某一次历史控制值。因为只是相似不是相同因此Agent 应该学习记忆背后的策略 不要一次性把风量拉到很高而是逐步调整并根据环境反馈继续决策。步骤1发现进水氨氮快速升高 步骤2将鼓风机频率从40 Hz提高到43 Hz 步骤3观察一段时间发现DO略有上升但氨氮仍在升高 步骤4将频率从43 Hz提高到46 Hz 步骤5继续观察氨氮开始下降 步骤6维持一段时间 步骤7氨氮恢复正常后逐步降低曝气环境给出任务结果Experience Writing从新轨迹中写出经验这次经历中有什么值得留给未来当进水流量稳定、曝气设备正常且氨氮快速升高时应优先采用分阶段增加曝气并观察氨氮响应的策略避免一次性大幅增加风量造成能耗峰值。Experience Management整理经验库记忆库里已经有一条旧经验氨氮升高时逐步提高风量比较节能。合并当曝气设备正常且进水氨氮快速升高时分阶段增加曝气并根据氨氮和 DO 响应继续调整通常比一次性大幅增加风量更节能。如果还有一条旧经验说任何氨氮升高都应该立即把鼓风机调到最高频率。 而长期运行结果表明这条经验经常导致能耗过高那么系统可以降低它的价值甚至将其删除。Fast loop在线使用经验但不改模型参数模型参数暂时不变时Agent 怎样依靠外部记忆在连续任务中快速积累和利用经验假设智能曝气 Agent 连续处理不同运行任务任务1处理低温下的氨氮升高 任务2处理进水流量突然增加 任务3处理DO传感器异常 任务4处理氨氮负荷冲击 ……每完成一次任务Agent 都会从记忆库检索过去经验 选择适合当前任务的经验 使用经验完成控制 根据本次结果写入新经验 定期整理记忆库一个任务的完整流程在设备正常、流量稳定的情况下处理一次进水氨氮快速升高并兼顾出水水质和曝气能耗。为什么要把记忆分成四层Trajectory Memory轨迹记忆Tip Memory提示记忆Skill Memory技能记忆Tool Memory工具记忆。Trajectory Memory轨迹记忆智能曝气中的一条轨迹可能是进水氨氮从18 mg/L上升至26 mg/LAgent先将鼓风机频率从40Hz提高到43 Hz观察到DO缓慢上升但氨氮仍在升高随后将频率提高到46 Hz一段时间后氨氮开始下降最终出水达标总曝气能耗为某一数值。观察到了什么 → 采取了什么动作 → 环境发生了什么变化 → 又采取了什么动作 → 最终结果如何Tip Memory提示记忆Tip 是从经验中得到的局部警告、注意事项或启发式规则。它通常回答在什么情况下要特别注意什么比如氨氮升高但DO没有随风量增加而变化时不要继续盲目增加鼓风机频率应先检查传感器或曝气设备状态。Tip不要犯什么错Skill Memory技能记忆遇到这一类任务整体应该怎样处理 处理氨氮负荷冲击时先确认设备与传感器状态再根据负荷变化分阶段提高曝气每次调整后观察DO和氨氮趋势水质恢复后逐步降低曝气避免长期高能耗运行。Skill整个任务应该怎么做Tool Memory工具记忆论文中的 Tool Memory 保存可执行的命令、代码或者工具调用模板。输入当前DO、氨氮趋势、流量和风机状态输出一个建议的分阶段调整方案。Trajectory这一次发生了什么Tip这一次告诉我应该注意什么Skill这类任务通常应该怎么处理Tool怎样把处理方法变成可执行操作第一步应该是检索过去的经验【参考成功轨迹】 正常温度下氨氮负荷冲击的处理过程…… 【注意事项】 调整曝气后同时观察DO与氨氮趋势。 【推荐技能】 设备确认 → 分阶段调整 → 观察反馈 → 逐步恢复。 【可用工具】 氨氮趋势分析工具 分阶段曝气调整工具。整个的流程输入当前曝气任务 x_t ↓ 结合环境信息形成查询 z_t ↓ 分别从四层记忆中检索候选 C_t ↓ Selector选出记忆 S_t ↓ 格式化成记忆上下文 c_t ↓ Agent带着记忆执行控制 ↓ 得到轨迹 τ_t 和结果 R_t ↓ 向一个或多个记忆层写入 Δ_t ↓ 更新为 M_(t1) ↓ 每隔Q个任务进行 lookup、merge、delete ↓ 记录候选、选择、结果、写入和维护日志进水氨氮突然升高智能曝气 Agent 需要调节风机在保证出水达标的同时控制能耗。Selection选择经验rajectory过去处理氨氮冲击的完整运行轨迹 Tip局部提醒例如“调节曝气后不能只看瞬时 DO” Skill完整方法例如“氨氮冲击的分阶段曝气流程” Tool可调用的趋势分析或曝气计算工具。Execution带着经验执行观察氨氮持续升高、DO下降 → 动作小幅提高风机频率 → 反馈DO上升但氨氮仍未下降 → 动作再次适度提高曝气 → 反馈氨氮开始下降 → 动作维持一段时间 → 反馈水质恢复 → 动作逐步降低曝气Update根据结果更新记忆Trajectory保存本次完整的氨氮冲击处理轨迹 Tip写入“氨氮转为下降后不应继续增加曝气” Skill更新分阶段曝气流程加入停止加量的判断条件 Tool如果没有产生新工具则本层不写。Manage定期管理记忆库Lookup查找 查找所有与“氨氮负荷冲击”有关的轨迹、Tip、Skill 和 Tool。目的是找到重复、冲突或可能需要更新的经验。Merge合并氨氮升高时应分阶段增加曝气。每次调整曝气后应观察氨氮和DO趋势。氨氮升高时应分阶段调整曝气并在每次调整后依据氨氮和DO趋势决定是否继续加量。Delete删除 只要氨氮升高就立即把风机频率调到最大。