Agent 持续进化
何时使用
- 部署后的 Agent 反复犯同类错误,需要把运行经验转化为持久能力
- 需要为运行轨迹构建验证器 / 评价器,判断"哪里错、为什么错、证据在哪里"
- 面对一个待修复缺陷,需要决定经验应写进知识库、Prompt/Skill、程序还是模型参数
- 要做 Prompt 自动优化、失败轨迹规则提炼、浏览器轨迹转工作流等单点进化
- 设计 Agent 自我修改流程(改自身 Harness、工具、重试策略),需要验证与发布门槛
- 搭建"在线执行 + 离线进化"双循环,或设计记忆/Skill 的整理、淘汰与回滚机制
- 评估系统是否真的在进化(而非只保存或只追加反馈)
核心原则
- 保存经历 ≠ 从经历中学习。学习发生在系统主动完成"评价、对照、归纳、验证"之后,而非日志写入磁盘的那一刻。一百条轨迹放进向量库只是可检索案例,不自动完成跨案例比较。
- 先评价再更新。不知道任务是否完成、哪一步导致成败,模型的反思只是猜测。评价一条轨迹依次回答三问:事情是否办成(结果)、是否以允许的方式办成(过程)、是否让用户舒服(质量)。
- 三层验证,底层优先。结果验证器读环境真值(测试、数据库、工具返回),最应优先建立且比模型自述可靠;过程验证器用政策库/权限表/动作序列做代码判定;质量层才用 LLM Rubric。结果正确不代表过程正确(删掉失败用例也能让测试通过)。
- 学习信号必须四要素齐备:成败判定(成功/部分成功/失败)、每维度结论、每条结论的证据位置(哪轮对话、哪次工具调用)、失败类型标签。单一总分无法指导更新;证据不足时验证器应拒绝评分,低置信度案例排除在学习集外。
- 按能力的表示性质选择载体(表 9-2 的边界):
- 经验知识库——事实、经验规律、例外与来源;更新快、可追溯,但依赖检索和模型正确应用
- Prompt/Skill——能用自然语言说清的判断原则、语境与例外;可解释、范围可控,但易膨胀、冲突、被忽略
- 程序/Harness——可确定性解析、可执行验证、高风险硬约束;可测试、稳定、低成本,但开发维护成本高
- 模型参数——高维感知、生成风格、隐式策略;泛化强、推理开销低,但更新与回归成本高
- 同一能力可拆到多个载体:事实入知识库,解释例外的原则入 Skill,不可绕过的权限由程序门控,高维识别能力入参数。路由结果只是更新提案,尚无发布资格。
- 经验知识库 vs 领域知识:第三章领域知识回答"用户与世界是什么样的"(如"该航司特殊餐食需提前 24 小时预订");本章经验知识库从行动轨迹与结果中提取"在什么条件下应该怎样做"(如"订票前先检查特殊餐食截止时间")。二者共享存储与检索技术,来源和验证目标不同。
- 所有修改是最小 diff + 可回滚 + 独立验证。待验证版本必须同时在触发失败的边界集上改善、在正常工作的保留集上不退化;验证者须独立于提炼者。
- 在线执行与离线进化分离。在线循环只完成任务并追加不可变证据,不直接改写正式 Agent;离线循环聚合轨迹、生成提案、过门槛发布,两者经版本化经验库和评估集连接。一次偶发成功或恶意输入不能立即改写长期能力。
- 安全边界三条:证据与指令隔离(网页/工具输出及其 LLM 摘要都是不可信证据,LLM 摘要不是净化过程);待验证能力与正式能力隔离(新产物先入不可服务真实流量的待验证区,过沙盒、权限、供应链扫描与回归后才转正);安全机制不可自我修改(Agent 不能改验证器、测试、发布门槛、审计日志和稳定版本备份——否则降低阈值即可把退化伪装成进步)。
- Harness 更新能力 ≠ Harness 受益能力。前者是从轨迹产出有价值修改,后者是任务 Agent 在正确场景激活并遵循该修改。不能用端到端分数反推更新器好坏,需分层评估。
实践模式
1. 轨迹验证器(学习信号的来源)
- 三层结构:结果层读最终环境状态;过程层查业务规则、隐私、事实依据、承诺—行动一致性(声称完成的操作是否真实发生);质量层按 Rubric 逐项给分并引用轨迹证据。
- 输出结构化诊断而非总分:每维度结论 + 证据轮次 + 置信度,失败带类型标签。
- 低置信度案例不进学习集;把它当事实固化比丢弃更危险。
2. 经验知识提炼管道(五步)
- 保存不可变原始轨迹与环境结果(用于审计);
- 为单次运行生成结构化分析:任务类型、所需能力、观察到的策略、错误与例外;
- 按任务族聚合同类运行,为每条经验草案建"哪些轨迹支持、哪些轨迹反驳"的证据表;
- 达到支持门槛才写入正式文档;
- 在未参与提炼的新任务上测迁移效果。
正式经验文档写:适用场景、推荐策略、禁止做法、例外条件、证据来源、最近验证时间——不复述某次任务的完整过程。真正有迁移价值的内容来自对照(成功轨迹做了什么、失败轨迹缺少什么、策略在哪些版本/前置条件下失效),Reflexion 式自然语言反思可参与生成草案,但反思本身不是证据。
3. 经验写成 Prompt/Skill(指令更新)
- 触发条件:多条相似轨迹反复暴露同一种策略错误,且错误能用语言清楚描述。
- 形式:带来源的最小 diff(
old_str → new_str),不让模型每轮重写整份 Prompt——重写会丢细节、把相互制约的条件合并成过度抽象的原则。可参考 ACE:上下文维护成带稳定标识符的条目集合,增量更新 + 确定性合并去重。
- 发布门槛:补丁非空、来源可追溯、保留集不退化、边界集确有改善;通过才灰度(
release_to_canary),否则拒绝。待验证补丁写入 working 文件,不覆盖正式 Prompt。
- Skill 与 Harness 边界:Skill 负责理解语境、提问、整理 Spec;Harness 负责缺少确认时否决高风险写入。否决器不替模型决定方案。
- 提炼输入决定归纳质量:给失败摘要+报错文本,模型只归纳出教训;补充 Agent/用户各自的工具清单,才能归纳出职责归属。
4. 经验写成程序(程序化经验)
- 浏览器工作流六步生命周期:捕获轨迹(保存动作参数、URL、元素定位证据——定位信息只能用于再找元素,不能证明任务完成)→ 参数化(字面量换模板变量)→ 定义状态检查(动作前/后检查 + 最终状态检查,最终检查必须读真实页面或后端状态)→ 独立回放验证(沙盒/测试站点重置到独立初始状态后完整回放,全部谓词通过才发布)→ 匹配与回放(能力库按意图检索,直接执行,无需逐步调 LLM)→ 失效与重学(谓词失败、Schema 变化即回退完整 Agent 模式)。
- 自我修改走软件发布流程,而非运行中进程覆盖自身:从稳定版本切隔离 worktree → Coding Agent 生成最小补丁 → 静态检查、单测、安全扫描、失败轨迹重放、旧任务回归 → 可灰度新版本。每次修改请求是一份可证伪的变更契约:失败证据、推断根因、归属组件、修改提案、预期修复的行为、可能受损的行为、分别验证两者的用例。
- 提案生成器的输入不只有失败案例,还必须有成功约束(不能破坏的性质)和此前被拒记录(避免换说法重复提交),共同构成有边界的方案空间。
5. 经验写入参数
- 判断依据不是"任务是否长期稳定",而是能力的表示性质:能否被外部符号较完整表达。域偏移用 LoRA/持续微调,快速变化的风格用周期性偏好训练。
- 数据来源:经评价的生产轨迹——高质量示范进 SFT,明确偏好形成成对数据,有可靠环境奖励的交互用于 RL。
6. 双循环与睡眠学习
- 离线整合五步:触发(时间/轨迹量/容量/错误频率门槛,且无高优先级在线任务)→ 定向(读正式知识、Skill 目录及版本,了解不可修改边界)→ 采集与整合(合并重复、标记冲突与适用条件,优先生成局部补丁)→ 验证与审批(迁移集/保留集/安全集,高风险等人工批准)→ 修剪与索引(长期不用或被推翻的标记过期、归档,保留来源与回滚版本)。
- 定期对抗上下文腐化:合并重复经验、把局部规则从全局 Prompt 移入领域 Skill、重验长期未用的工具、删除被推翻的知识、从原始基座重训 LoRA。
7. 进化效果的分层评估
- 指标(表 9-3):更新提案有效率(独立验证中的接受率与增益)、产物激活率(是否正确场景加载)、遵循成功率(动作序列与过程验证器)、保留任务集增益(未参与进化任务的成功率/质量/成本)。
- 长期评价至少五类:回退(新旧经验冲突)、泛化(测试集外场景)、Token 效率、安全性(规则/隐私/拒绝边界是否漂移)、长期工程质量(维护复杂度、向后兼容、调试负担)。
- 开放式任务(科研、战略)反馈慢且答案不唯一,需改变证据结构:结论与证据分离(每类声明链接可审计来源)、保留负面结果与停止原因、维护搜索多样性(不全押当前最高分)、让人类在更高层介入(定义问题、审查评价标准、决定何时停止)。
常见陷阱
- 把用户满意度或单一总分当学习信号:满意度上升可能伴随规则违规率上升,需护栏指标。
- 把低置信度结论当事实固化,或把 LLM 摘要当无害化后的指令直接纳入 Skill。
- 模型会把观察到的行为当作应然的行为:轨迹中最频繁出现的是转人工,模型就可能把"三次失败即转接"写成规则——而该环境下转接必然失败,等于把失败写进规范。提炼产物必须经与提炼者独立的验证。
- 让模型每轮重写整份 Prompt/记忆,导致重要细节在多轮改写中消失。
- 把"动作执行过"当"任务完成":没有最终状态检查的回放,只是把错误更快地重复。
- 待验证版本直接发布,或发布门槛可被提案自身修改(安全门不能由修改者自证)。
- 只修当前失败案例,不顾保留集回退、泛化、Token 成本和长期工程质量。
- 只追加不淘汰:知识无限增长引发检索错误、知识冲突、灾难性遗忘,抵消学习收益。
- 用端到端分数判断更新器好坏,忽略激活率与遵循失败。
- 提案被接受 ≠ 下游能力提升:一次提案通过只证明更新流程成立,仍需在相同任务和模型下做开关消融。
配套代码
chapter9/trajectory-verifier/ — 实验 9-1:三层轨迹验证器,对比单一总分与带证据的多维诊断
chapter9/tau2-escalation-experience/ — 实验 9-2:从 τ²-bench telecom 失败轨迹提炼转人工与工具使用规则,三臂对照
chapter9/prompt-auto-optimization/ — 实验 9-3:航空客服失败轨迹 → 三维诊断 → 最小 Prompt diff → 发布门槛
chapter9/ai-style-skill/ — 补充案例:用户"AI 味"before/after 纠正持续提炼为写作 Skill,LLM judge + 金标校准
chapter9/browser-use-rpa/ — 实验 9-5:浏览器轨迹编译为带状态谓词的待验证工作流,独立回放后才入能力库
chapter9/self-modifying-agent/ — 实验 9-6:由失败轨迹触发重试/熔断代码自我修改,Docker 沙箱验证提案
chapter9/harness-safety-gate/ — 实验 9-7:用户反馈触发高风险操作确认门禁,AST 扫描 + 隔离回放
chapter9/hermes-self-evolution/ — 实验 9-8:Hermes 读本书后自主选题、修改自身并接受独立 Reviewer 审查
chapter9/self-evolution-eval/ — 实验 9-9:四阶段纵向评估(学习/迁移/规则变化/保持),区分保存、追加与可淘汰记忆
chapter9/self-evolving-tools/ — Alita 式补充案例:Agent 从零搜索、沙盒测试并封装新工具入库复用
深度阅读
book/chapter9.md「从运行轨迹中获得学习信号」— 三层验证结构与学习信号四要素
book/chapter9.md「Agent 持续进化的四种方法」— 知识、指令、程序、参数的适用边界与各自流程
book/chapter9.md「构建可长期运行的持续进化闭环」— 双循环、睡眠学习、分层评估与安全边界