主题
自进化与持续优化:把线上失败变成受控的改进
一句话:自进化不是让 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 条、跳过工具调用前的参数校验、把原本三步的核对合并成一次生成。
排查路径(把成本拆成两个口径):
| 指标 | 优化前 | 优化后 | 说明 |
|---|---|---|---|
| 单任务 Token | 100%(基线) | 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