评估驱动的智能体开发

E6
运维 · 评估与可观测性

评估驱动的智能体开发——评估是规格,棘轮是纪律。

智能体没有编译器、没有类型系统来告诉你某次改动弄坏了什么;横在一次提示词微调与一次静默的 15 分回归之间的,唯有你在合并前跑的那个评估。本文把前五篇组装成一个开发循环:评估作为 CI 回归关卡、黄金轨迹、离线/在线之分、把生产流量采样进评估集、保持其诚实的反馈回路,以及让进展单调而非随机游走的"无回归棘轮"。

STEP 1

评估就是规格。

对智能体而言不存在别的可执行规格。提示词不声明它的契约;工具循环不对其行为做类型检查。评估集就是"能用"的定义——这意味着一个不被评估覆盖的行为,在运行层面是未定义且无保护的。开发的问题不再是"我把提示词改好了吗",而成了"评估动了吗,哪些任务翻了"。

推论:在修复之前写评估任务。一个没有失败评估的缺陷,是你会重新引入的缺陷。复现就是回归测试——这是以智能体环境为框架的 TDD。

STEP 2

评估作为 CI 回归关卡,按成本分层。

评估很昂贵(E1),所以在每次提交上跑一整个套件不可行。按成本/覆盖曲线分层,使每次改动都撞上一个快速关卡,而昂贵信号仍跑得足够频繁以捕获漂移。

  • 每次提交(秒–分钟)——确定性工具调用断言加一个小型结果检查冒烟集。便宜、无评判者、阻断合并。
  • 每 PR/每晚(分钟–小时)——完整自定义评估集,每个任务跑 k 次,报告分布(pass^k,而非 pass@1)。
  • 每周(小时)——评判者打分的主观切片,以及回放的生产轨迹回归集。
# CI gate: block merge on regression OR on absolute floor breach
res = run_suite(build, k=5)
assert res.tool_assertions.all_pass()                # hard, deterministic
assert res.pass_k >= baseline.pass_k - EPS            # no-regression ratchet
assert res.pass_k >= FLOOR                             # absolute bar
assert not res.new_failures(baseline)                    # no task regressed
STEP 3

黄金轨迹:冻结运行,而不只是答案。

黄金轨迹是一条连同其环境冻结的、已知良好的完整轨迹(E5):输入、工具观察、决策序列与结果。它是最终答案夹具无法成为的回归产物——你能在不打活工具的情况下把候选对它回放,并对决策而非仅终态字符串做 diff。

  • 结果黄金——断言候选仍抵达那个已验证终态。对替代路径稳健;默认选项。
  • 轨迹黄金——断言安全/效率不变量仍成立(无被禁工具、步数预算)。断言不变量,绝不精确匹配路径(E2 的错误)。
  • 策展,而非囤积。黄金轨迹是被维护的代码:当 API 或策略合法地变更时,刻意地重新加冕它——一次未经审查的重新加冕,正是一个缺陷如何变成新"正确"的方式。
STEP 4

离线 vs 在线评估——你两个都需要,它们回答不同问题。

离线评估(CI 套件、回放轨迹)可复现、把守合并,回答"这次改动是否让一个已知用例回归"。它看不见你没预料到的东西。在线评估——在活流量上测量——回答"它在真实分布上到底有没有用",而它是唯一让未知的未知浮现之处。

  • 离线捕获回归;在线发现新失效模式。一个分布已偏移而离线套件仍绿,是虚假信心——生产世界动了,你冻结的集合没动。
  • 在线信号——隐式的(任务完成、重试、人工接管、点赞点踩、下游对智能体动作的撤销)以及对活轨迹采样的显式评判者打分。
  • 带开关发布;在线对比。金丝雀放新构建,在全量前把它真实轨迹的一个样本对现任做评判。
STEP 5

闭合回路:生产流量成为明天的评估集。

让整套纪律产生复利的飞轮:采样生产轨迹,浮现失败与险些失败,把有教益的那些(连同环境)冻结成可回放评估任务,修复,而修复从此被永久守护。没有它,你的评估集是一份对着移动世界衰减的固定快照(E1 的评估集腐烂);有了它,评估集追踪现实,每起事故都成为一条永久的免疫系统条目。

# production -> eval flywheel
for tr in sample(prod_traces, stratify="failure_mode"):
    if tr.failed or tr.human_took_over or tr.low_judge_score:
        case = freeze(tr)              # trace + env, replayable
        eval_set.add(case)             # dated, decontaminated by origin
        # fix is not done until this case passes AND nothing else regressed

把采样器朝尾部偏,而非均值:失败、人工接管、低评判分、高成本运行。一千条顺利路径轨迹什么也教不了评估集;那二十条古怪的才是全部价值,而它们恰恰是均匀采样会淹没的。

STEP 6

棘轮,及其诚实成本。

让这一切加总起来的纪律是无回归棘轮:一次改动只在没有被覆盖任务回归且绝对地板成立时才合并——评估分数向上或持平,绝不静默向下。这把智能体开发从随机游走(每次提示词微调修好一个、弄坏两个看不见的)转为单调进展。诚实的成本:棘轮恰好只与其覆盖一样好,它会僵化成对套件的过拟合(按 E1/E4 轮换棘轮从未见过的留出任务),而过紧的 epsilon 会拦下带良性噪声回归的真实改进。评估是智能体唯一拥有的规格;在一个由采样生产失败喂养、刻意轮换的集合上,用无回归棘轮把守每一次合并——未上棘轮的进展不是进展,而是一场恰好今天是绿色的游走。