--- name: agent-evolution description: 让 Agent 从运行经验中持续学习、构建自进化闭环时使用——涵盖从运行轨迹提取学习信号(三层轨迹验证)、四种进化方式(经验知识库、Prompt/Skill、程序/Harness、模型参数)的适用边界与选择依据、Prompt 自动优化、轨迹编译为程序、Agent 自我修改与安全门禁、睡眠学习与长期分层评估。触发词:持续进化、自进化、经验学习、轨迹验证器、自我修改、进化闭环。 --- # 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. 经验知识提炼管道(五步) 1. 保存不可变原始轨迹与环境结果(用于审计); 2. 为单次运行生成结构化分析:任务类型、所需能力、观察到的策略、错误与例外; 3. 按任务族聚合同类运行,为每条经验草案建"哪些轨迹支持、哪些轨迹反驳"的证据表; 4. 达到支持门槛才写入正式文档; 5. 在未参与提炼的新任务上测迁移效果。 正式经验文档写:适用场景、推荐策略、禁止做法、例外条件、证据来源、最近验证时间——不复述某次任务的完整过程。真正有迁移价值的内容来自对照(成功轨迹做了什么、失败轨迹缺少什么、策略在哪些版本/前置条件下失效),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`「构建可长期运行的持续进化闭环」— 双循环、睡眠学习、分层评估与安全边界