AI Agent 工程课程

Agent Evaluation 的三层结构

一句话收获:评估不是给答案打一个分,而是建立环境、方法和决策闭环。

这个场景在解决什么问题

怎么知道一个 Agent 到底行不行?很多人以为"评估"就是给它的答案打个分(比如 8 分)。但这是错的——评估要解决的不是"答案好不好看",而是"能不能可复现地测、用什么方法验证、测完能不能做准入决策"。

这个场景的目标(goal)是:实现可复现环境、验证方法和准入决策。观察点(observation)是:从一个冻结任务构建完整评估链——拿一个被"冻结"的任务(环境、输入都固定),搭起从环境到方法到决策的完整评估链。

它值得单独学,因为它纠正了"评估=打分"的误解:评估是建立环境、方法和决策的闭环,分数只是中间的一环,只有进入决策才有工程价值。

先理清这条判断链(文字版)

评估是一条三层链,从下往上:先保证环境可复现,再定"成功"的验证方法,最后把结果变成决策:

  1. 先看评估环境——固定初始状态、工具、数据、模型和 Harness,还能重置,先保证可复现。
  2. 再看成功义务——把对象、状态、权限、证据、成本和停止拆成可验证条件,完成由独立义务决定。
  3. 然后看验证器分层——确定字段用程序、开放语义用 Rubric 或 Judge,优先用确定性证据。
  4. 最后看评估决策——按可靠性、失败类型、成本、风险决定准入、灰度或回退,保护指标和红线同时检查。

逐层详解

第 1 步:评估环境

原文:固定初始状态、工具、数据、模型和 Harness,并能重置。

白话:评估的第一步,是把运行环境"钉死"——初始状态、能用的工具、喂的数据、用的模型、跑在哪个 Harness(运行框架),全都固定下来,并且能一键重置回初始状态。

类比:像做科学实验,得先固定实验条件(同样的试剂、同样的温度、同样的仪器),并且每次都能恢复到初始状态,否则两次实验结果没法比。

举例:评估"订单处理 Agent",固定初始状态=一个干净的测试数据库、固定工具集、固定测试数据、固定模型版本、固定 Harness 配置,跑完一次能重置回初始,再跑第二次。

为什么重要:环境不稳定时运行结果不可比较。如果每次跑的环境都飘来飘去(数据变了、工具变了、模型换了),那两次结果根本没法比较,评估就失去意义。

怎么验证(证据点)

  • 初始状态:初始状态是被明确定义和固定的。
  • 版本冻结:数据、工具、模型的版本都冻结。
  • 清理方式:有明确的清理/重置方式能回到初始。

别踩的坑(边界):同一文字任务不等于同一运行环境。两个"文字上一样"的任务描述,如果背后环境不同(数据不同、工具不同),就不是同一个运行环境,结果不能直接比。

落地检查:先保证可复现。落地时的第一优先:先让环境能复现,环境不可复现,后面评估全是空中楼阁。

第 2 步:成功义务

原文:将对象、状态、权限、证据、成本和停止拆成可验证条件。

白话:评估"成功"不能只看最终答案,要把成功的标准拆成一条条"义务"(obligation):操作的对象对不对、状态对不对、权限有没有越界、证据全不全、成本超没超、什么时候该停止——每条都变成可验证的条件。

类比:像验收一个装修工程,不能只看"房子看起来还行",要拆成"水电通没通、墙面平不平、预算超没超、有没有按时交房"一条条验收。

举例:"订单处理"的成功义务拆成:对象=改的是正确的那个订单;状态=订单状态最终是"已完成";权限=没越权动别的订单;证据=有操作留痕;成本=调用次数在预算内;停止=到达终止条件后确实停了。任何一条不满足都不算成功。

为什么重要:最终答案可能掩盖局部越界。只看最终答案"对不对",可能掩盖了过程中偷偷越权、偷偷超成本的问题——答案对,但过程违规,也不能算成功。

怎么验证(证据点)

  • 义务清单:成功义务被拆成清单列出来。
  • 外部证据:每条义务有外部证据支撑。
  • 否决条件:有"一票否决"的硬条件(比如越权直接失败)。

别踩的坑(边界):运行结束不能作为唯一成功标准。程序跑完了、没报错,不代表成功——"跑完了"只是最弱的标准,成功要由独立的义务来决定。

落地检查:完成由独立义务决定。落地时"完成"不能由 Agent 自己说,要由一套独立的义务清单逐条判定。

第 3 步:验证器分层

原文:确定字段和状态用程序,开放语义用 Rubric 或 Judge,并抽查一致性。

白话:验证器要分层:能确定的东西(字段对不对、状态对不对)用程序断言来验;开放的语义(这回答写得合不合理)用 Rubric(评分标准)或 Judge(LLM-as-a-Judge,用大模型当裁判)来评;同时要抽查这些验证器之间的一致性。

类比:像阅卷,选择题用机器判(程序断言),作文题用评分标准或老师来判(Rubric/Judge),还要定期抽查老师判得准不准(一致性)。

举例:"订单状态是不是'已完成'"这种确定字段,用程序断言直接查数据库;"给用户的解释是否清晰得体"这种开放语义,用 Rubric 打分或让 Judge 模型评;还要抽几条,看看程序断言和 Judge 的判断是否一致。

为什么重要:不同对象需要不同证据强度。确定性的东西要强证据(程序直接验),开放的语义只能弱证据(评分/裁判),不能用同一种方式验所有东西。

怎么验证(证据点)

  • 程序断言:确定性字段/状态用程序断言验证。
  • 来源核验:涉及事实的,核验它的来源。
  • Judge 边界:明确 Judge 能验什么、不能验什么。

别踩的坑(边界):LLM-as-a-Judge 不能验证权限和外部写入。让大模型当裁判,只能评"语义好不好",它没法验证"权限有没有越界""外部系统有没有被写对"——这些必须用确定性手段。

落地检查:优先使用确定性证据。落地时的原则:能确定验证的,优先用程序/确定性证据,Judge 只用来兜那些确实开放的部分。

第 4 步:评估决策

原文:根据可靠性、失败类型、成本和风险决定准入、灰度或回退。

白话:评估的最后一步,是把分数变成决策——根据可靠性(稳不稳)、失败类型(怎么失败的)、成本、风险,决定这个 Agent/改动是"准入"(正式上)、"灰度"(小范围试)、还是"回退"(退回去)。

类比:像考试成绩不只是个数字,还要据它决定"能不能录取、要不要先试读、还是直接拒"。

举例:评估完订单 Agent,发现可靠性 99%、失败主要是边界小错、成本可控、风险低,决策=准入上线;如果可靠性 80%、有越权风险,决策=回退重做或灰度小范围试。

为什么重要:分数只有进入决策才有工程价值。一个 8 分,如果不落地成"上还是不上、灰度还是回退",就只是个数字,没有工程意义。

怎么验证(证据点)

  • 样本与重复:样本量够不够、有没有重复运行看稳定性。
  • 失败分布:失败集中在哪、是什么类型。
  • 决策门槛:准入/灰度/回退的门槛是事先定好的。

别踩的坑(边界):平均分提高不证明所有边界改善。平均分上去了,可能是"大部分简单题做对了",但关键边界/红线反而更差了——平均分不能代表边界都变好。

落地检查:保护指标和红线同时检查。落地时不能只看平均分,要同时检查"保护指标"(不能退化的底线)和"红线"(绝对不能碰的硬条件)。

落地可行性小结

本场景涉及的核心技术栈:Harness(运行框架)可复现环境(冻结初始状态/工具/数据/模型)成功义务(obligation)程序断言Rubric(评分标准)LLM-as-a-Judge(大模型当裁判)准入/灰度/回退决策

真实落地要检查的事:

  • 评估环境要冻结初始状态、工具、数据、模型、Harness,并能重置。
  • 成功标准要拆成对象/状态/权限/证据/成本/停止的可验证义务,设否决条件。
  • 验证器分层:确定性用程序断言,开放语义用 Rubric/Judge,并抽查一致性。
  • 决策要有事先定好的门槛,同时查保护指标和红线,不只看平均分。

常见坑:

  • 环境不稳定就开测,结果不可复现、不可比较。
  • 只看最终答案,掩盖了过程中的越权和超成本。
  • 拿 LLM-as-a-Judge 去验证权限和外部写入(它做不到)。
  • 只盯平均分,忽略红线失败,以为"整体变好"。

回顾

  • 评估不是打分,是"环境 → 方法 → 决策"的闭环。
  • 评估环境必须冻结初始状态/工具/数据/模型/Harness,保证可复现。
  • 成功由独立义务决定(对象/状态/权限/证据/成本/停止),不是"跑完就算"。
  • 验证器分层:确定性用程序断言,开放语义用 Rubric/Judge,优先确定性证据。
  • 分数只有进入准入/灰度/回退决策才有价值,且要同时查保护指标和红线。