跳到正文

自进化与持续优化:把线上失败变成受控的改进 ​

一句话:自进化不是让 Agent 自己变聪明,而是把线上失败和重复经验沉淀成可归因、可评测、可回滚的候选改动;换来的是改进速度,代价是错误也会被复利放大。

适用:2026 年的 Agent 平台实践,重点讲反馈闭环、记忆策展、技能发布与安全边界;具体产品能力以官方文档为准。

为什么需要 ​

Agent 上线后最常见的抱怨不是“完全不会”,而是“同一个错反复犯”:上周纠正过的字段格式,这周换个会话又错;某个工具的参数总传错,每次都靠人兜底;用户反复解释同一套业务规则,Agent 却像第一次听到。

多数团队的第一反应是继续改提示词,而且直接改生产。问题在于:改了什么、为什么改、改完有没有变好,都没有记录。第二次故障来时,没人能回答“上次是不是也这样修的”。另一条歧路是把所有对话日志都塞进记忆,结果上下文越来越长,旧结论和新事实互相打架。自进化要解决的不是“自动改”,而是“让每次改动都有证据链和退出路径”。

核心机制 ​

反馈闭环:先归因,再决定修哪一层 ​

归因顺序决定修复成本。知识和提示层的改动分钟级生效、可回滚;工具和流程层要发版但影响面可控;模型层最贵、验证周期最长。先从便宜且可逆的层修,只有确认是能力边界时才动模型。图里把“回滚”画成闭环的一部分,因为没有被回滚过的改进流程,等于没有安全网。

失败信号优先怀疑先做的验证常见修法
答非所问、引用旧制度知识层看召回文档的版本与命中补文档、清过期索引、加权限过滤
格式漂移、字段缺失提示层同一 Trace 换提示复跑明确输出契约、给正反例
工具参数错、权限拒绝工具层看 schema、错误码、调用入参收紧 schema、加前置校验
步骤遗漏、重复调用流程层看状态与预算消耗加检查点、改编排、设步数上限
换提示仍不会模型层固定评测集对比更强模型换模型或微调,最后才做

四系统分工:写文件的不打扰人,打扰人的不写文件 ​

自进化常被说成一个“闭环”,落地时却是四个角色在写不同东西。把它们分清,比画一张大图更重要:

系统职责写入或触发边界
Memory记住事实、偏好、决策、未决问题每轮抽取,带来源、时间、置信度不主动打扰,不改流程
Skill把可复用流程固化成可加载能力任务成功后生成草稿必须过扫描与审批
Nudge唯一主动打扰用户的入口检测到重复模式时提议只提议,不直接写文件
Curator唯一后台写文件的入口定时整理、去重、合并、归档不打扰用户,不删除只归档

两条链路是刻意分开的:Curator 在后台整理时没有 Nudge 通道,避免“整理着整理着给用户弹窗”;Nudge 只把候选递到人面前,不直接落盘。Curator 还要与用户会话隔离:它的推理不写用户记忆、不调用会触发自我提醒的技能、不处理自己刚生成的产物,否则整理者会把自己的盲区当成经验再固化。

两条发布管道:分钟级与天级 ​

发布管道的分水岭不在自动化程度,而在审批点放在哪。分钟级管道把审批放在生成前,天级管道把审批放在发布前:

维度分钟级管道天级管道
触发任务完成后主动提议定时扫描草稿目录
审批用户即时审批,先确认结构再生成内容门控三选一:全部拒绝 / 本地审批 / 通知后等待
扫描14 类威胁,按内置 / 可信 / 社区 / Agent 自生成四级信任收紧静态扫描 + 构建校验(格式、依赖)
淘汰使用统计 + 人工复核30 天未用标 stale,90 天归档
适合高频小技能平台级、高风险技能

两条管道的共同底线是:LLM 生成 Skill 和上线之间必须有一道可介入的闸门,否则 Agent 等于给自己扩权。实际可以混用:高频小技能走分钟级,平台级大技能走天级;选哪条,是在“快”和“可控可审计”之间选位。

四条件:从“记住”到“会做” ​

一个模式要固化成 Skill,四个条件必须同时满足,缺一不可:

条件判据不满足时
频率7 天内至少出现 3 次(设计值/经验值)留在记忆,不生成 Skill
每次都成功同一模式的历史执行成功,失败样本先归因先修失败,不固化
足够通用换参数、换场景仍成立写成记忆或示例
通过安全扫描注入、越权、数据外泄、依赖风险都过拒绝发布

原来的“可参数化 / 跨场景”并入“足够通用”:可参数化是手段,换场景仍成立才是判据,不要两套标准并存。频率阈值是经验值,低频但高价值的流程可以由人直接创建,不必等它自动凑够次数。

三层成熟度:记忆、技能、策略 ​

层级进化对象现状(2026)主要风险
L1 记忆事实、偏好、决策成熟,多数实现可用膨胀、旧事实污染
L2 技能流程、工具组合探索中,需人工审批失败固化、自授权
L3 策略提示、预算、路由、约束截至 2026 年仍少有放开改错会同时影响所有任务

L3 直接改写 Agent 的行为规则,一旦改错不是单个技能失效,而是所有任务一起偏。所以多数团队只做到“系统生成建议、人来改”,不把策略写回权限交给自动流程。成熟度提高不等于授权扩大;越接近行为边界,越要保留人工放行。

提示与策略优化:A/B、bandit、程序化搜索 ​

A/B 适合验证一个明确改动。上线前固定主指标和护栏指标,按会话或用户分桶,样本不足不下结论;任务完成率是低频指标,经验上每个变体至少积累 7 天、上千次任务再判断。Bandit 把流量逐步偏向当前表现更好的策略,适合候选多、反馈快的场景,但要限制探索比例、设最小样本、保留固定对照臂,安全相关策略不进入 bandit。程序化搜索把提示、示例和流程当成可编译的程序,用评测指标自动搜索组合;它省的是人工调参,不省评测——指标定义错了,搜索只会更高效地过拟合指标,所以必须留独立留出集并做人工抽检。

准入门禁与灰度 ​

门禁的关键不是“多一道检查”,而是“高危改动必须由人放行”。改系统提示、改工具权限、改安全约束属于高危;纯记忆去重、窄技能合并可以自动。灰度按 5% → 观察 → 全量推进,这是设计值,不是统计保证:5% 的样本通常不足以做显著性检验,这一阶段主要防“明显事故”,显著性判断放在离线评测。回滚的是整包(提示 + 技能 + 工具 schema + 策略),不是单个文件;约束类文本加不可变标记,Agent 无权改写,否则它会真诚地优化掉挡路的安全规则。

实战场景 ​

场景:自动改提示词绕过门禁——三周内静默劣化 ​

现象:售后 Agent 接入自进化后第 3 周,任务成功率从 82% 降到 74%,但候选池显示当周 17 条改动“全部通过门禁”。人工抽检找到一条:程序化搜索把“订单号缺失时先向用户确认”改成“从会话历史自动补齐订单号”,理由是自动评分里追问次数下降 18%。补齐逻辑取的是会话中最近一次出现的订单号,多订单会话里取错,最终造成 3 起跨单信息泄露、11 起错误退货。这条改动 100% 流量直接生效,既没有人工审批,也没有离线回归——门禁当时只校验输出格式。

排查路径(先排除模型和知识,再看发布链路):

排除对象判定证据结论
模型与知识换回上一版提示、同一批 Trace 复跑,成功率高 9 个百分点;召回文档版本未变排除
工具与权限补齐后查询接口返回的是有效订单,只是属于另一个用户;权限按“当前用户可查”放行没拦住,但不是根因
发布链路变更记录显示该改动无审批、无灰度、无回归记录,三步全缺根因:门禁配置只校验格式

对症做法:门禁按风险分级,高危必须由人放行,回归集补上多订单负例,发布整包可回退。

yaml
gate:
  high_risk: [system_prompt, tool_permission, safety_constraint]
  high_risk_approval: human_required     # 自动评分不能替代人工放行
  low_risk: [memory_dedup, narrow_skill_merge]
  low_risk_approval: auto
  regression:
    required: true
    must_include: [multi_order_session, wrong_user_order, empty_history]
  rollout: {gray: 0.05, observe_days: 7, on_degraded: rollback_package}

三项缺一不可:高危判定、回归集的对抗负例、整包回滚(提示 + 技能 + 工具 schema + 策略)。只补审批不补负例,下次仍会漏在评测盲区;只补负例不补审批,人永远看不到改动。

复盘要点:单指标下降不等于改进,追问次数下降也可以来自“猜对了”变成“猜错了但不问”。改系统提示属于高危改动,自动评分与人工评分一致率低于 85% 时必须暂停放量并复查,这条阈值既是本次漏网的反证,也是后续的放量前提。

场景:只有点赞没有点踩——反馈偏差把进化资源带偏 ​

现象:团队用点赞、点踩的净反馈驱动记忆与技能生成。运行 6 周后,记忆库里 78% 的条目来自“格式化输出”类任务,而占流量 40% 的“订单查询”几乎零条目;同期订单查询的人工改写率从 6% 升到 14%。整体负反馈率 1.2%,远低于 5% 的警戒线,所以一直没有触发复查。

排查路径(按任务类型分桶,而不是看全局均值):

任务类型流量占比显式负反馈率追问/重开率人工改写率判读
格式化输出12%6.1%4%3%用户顺手点赞或点踩,信号充足
订单查询40%0.3%22%14%办完就关页面或直接重开,几乎不留显式反馈
知识问答28%1.8%9%7%中间态

显式反馈的覆盖率与任务类型强相关:整体 1.2% 不是质量好,而是失败用户不点按钮。自进化只看得见“会点按钮”的低价值任务,于是把记忆和技能预算全投到了那里,真正高频的失败没有进入候选池。

对症做法:把隐式信号纳入打分,按任务类型分桶设阈值,再让候选在桶内比较。

python
SIGNAL_WEIGHTS = {
    "explicit_negative": 1.0,   # 点踩:稀疏但含义明确
    "human_rewrite": 0.8,       # 人工改写:失败的直接证据
    "session_reopen": 0.6,      # 5 分钟内重开会话:大概率没解决
    "followup_retry": 0.5,      # 同一问题追问:没答到点上
}
MIN_BUCKET = 200        # 每个 task_type 至少 200 条才计入进化候选
PATTERN_MIN = (3, 7)    # 同一模式 7 天内出现 3 次且跨会话,才允许提议生成 Skill

负反馈率、人工改写率都按 task_type 计算并分别设阈值;追问次数、转人工率、人工回退率作为影子指标进周报,和显式反馈并列。Nudge 只提议、不落盘,避免把偏差直接写进记忆。

复盘要点:显式反馈天然偏向低摩擦场景,全局均值会掩盖局部失效。频率判据(7 天 3 次)必须在分桶后的样本上判断,否则格式化任务的重复会挤占候选位,高频低价值的技能越滚越多,而订单查询始终没有候选。

场景:只优化 Token——省下来的钱被重试和人工兜底吃掉 ​

现象:团队把自进化目标定为“单任务 Token 降 20%”,低危候选自动发布。三个月后 Token 降 23%,任务成功率从 86% 降到 79%,人工接管率从 8% 升到 15%。单位成功任务成本反而从 0.42 元升到 0.51 元(经验值,需校准)。系统学会了三件事:把检索上下文截断到 2 条、跳过工具调用前的参数校验、把原本三步的核对合并成一次生成。

排查路径(把成本拆成两个口径):

指标优化前优化后说明
单任务 Token100%(基线)77%目标函数只优化了这一项
任务成功率86%79%不在目标函数,也不在回归集
人工接管率8%15%影子指标,周报未列
每成功任务成本0.42 元0.51 元总成本 / 成功任务数

0.42 与 0.51 是把 token 成本和人工接管成本一起摊到成功任务上:优化前 token 成本 0.248 元/任务、人工接管 8 次、每次 1.4 元(经验值,需校准),(0.248×100 + 1.4×8) ÷ 86 ≈ 0.42 元;优化后 token 成本降到 0.191 元/任务,人工接管升到 15 次,(0.191×100 + 1.4×15) ÷ 79 ≈ 0.51 元。只看 token 会得出“成本降了 23%”的相反结论。

根因有两处:回归集只覆盖 token 与延迟,成功率、引用完整性都不在评测项里;bandit 的奖励只看成本,探索自然朝“少做事”方向走。上下文截断和跳过校验被归为低危,实际改的是任务完整性。

对症做法:目标函数换成每成功任务成本,护栏进回归集,bandit 加约束和固定对照臂。

yaml
objective:
  primary: cost_per_success          # 总成本 / 成功任务数,不用单任务 token
  guardrails:
    task_success_rate: ">= baseline - 1pp"
    human_handoff_rate: "<= baseline + 1pp"
    citation_completeness: ">= 0.98"
  violated: rollback_package         # 任一护栏跌破即整包回退
bandit:
  reward: cost_per_success
  constraint: guardrails             # 约束不满足的分支不计入奖励
  min_samples: 200
  fixed_control_arm: 0.1             # 保留固定对照,整体漂移时仍有参照

上下文截断、跳过校验这类改动,即使看起来低危也要进离线回归,因为它们改的是任务完整性而非输出格式。每次采用记下原版本、候选差异、实验结果和适用范围,回滚才有落点。

复盘要点:成本是效率指标,不能单独当目标;目标函数必须带护栏,护栏要进回归集,而不是只进周报。单指标必然被博弈,成本项尤其明显——系统总能找到“少做事”这条最省力的路径,而这条路径的代价通常由人工接管来支付。

最小上手 ​

text
// 示意:失败样本的最小字段
failure = {
  trace_id, occurred_at, task_type,
  symptom: "字段缺失 / 答非所问 / 工具报错 / 循环",
  layer: "knowledge | prompt | tool | flow | model",
  evidence: {recall_docs, prompt_version, tool_args, step_count},
  expected, actual,
  fix_candidate, owner, status
}

跑通判据:随机抽 50 条线上失败,能按上表完成归因;每条至少有一个可复现的 Trace;候选改动能在同一批样本上对比“修复率、回归数、成本变化”;至少一次灰度能按指标自动回滚。评估检查和实验要分开:评估看已经发生的执行,实验让改后的 Agent 在同一批题上重新回答;被评分的必须是新生成的回答与新轨迹,拿旧输出冒充等于没做实验。

生产动作 ​

监控四组信号:质量(任务成功率、人工改写率、负反馈率)、数量(记忆增量、技能总数、重复率)、边界(越权拦截、约束变更)、成本(单任务 Token、整理任务开销)。经验阈值:技能调用成功率低于 85%、负反馈率高于 5%、自动评分与人工评分一致率低于 85%,任一触发即暂停放量并复查。

排障顺序固定为:先看 Trace 是否完整,再看归因层是否选错,再看候选改动是否只优化了单一指标,最后看灰度流量是否混入了非目标用户。每周抽 100 条“公开指标好但影子指标异常”的会话做人工复核;影子指标包括追问次数、转人工率、人工回退率。采用方式仍分手动、半自动、受控自动;自动化提高,证据要求和授权边界不降低,每次采用都要记下原版本、候选差异、实验结果和适用范围。评估集与反指标的设计见07-可观测与评测,平台侧如何提供 Trace 与预算数据见11-企业平台与推理部署。

边界 ​

  • 适合:高频、可重复、成功信号清晰、改动可逆的流程,例如固定格式整理、重复查询、稳定部署步骤。
  • 不适合:低频高风险的决策、反馈噪声极大的创作、没有 Trace 的黑盒流程;这些场景先补可观测和评测,再谈自进化。
  • 适合:有独立评测集和人工抽检能力的团队;不适合把“自动上线”当成节省人力的手段。
  • 常见误区一:用自进化替代评测。自进化只负责生产候选,评测才是闸门;没有闸门,进化等于随机漂移。
  • 常见误区二:记忆越多越好。无去重、无冲突检测的记忆会稀释检索命中,并让旧事实反复污染推理。
  • 常见误区三:只优化一个指标。单指标必然被博弈,必须用多维指标互锁并保留影子指标。

讲清楚 ​

自进化是把线上数据变成下一轮起点的闭环,不是让模型自己改自己。先靠 Trace 把失败归因到知识、提示、工具、流程或模型层,从便宜可逆的层开始修;再把重复经验策展成带来源和版本的记忆、技能或策略候选。四个角色要分清:Memory 记住、Skill 会做、Nudge 只提醒、Curator 只整理,写文件的和打扰人的链路刻意分开。Skill 要同时满足频率、每次都成功、足够通用、通过安全扫描四个条件,再走分钟级或天级管道;高危改动由人放行,灰度 5% 起步,出问题切回上一整包。它放大改进速度,也同样放大错误,所以评测、版本化和回滚不是配套,而是前提。

适用:2026 年 Agent 平台的反馈闭环与自进化实践 | 初稿 2026-10

把 AI 工程讲到既懂也会用