Skip to Content
第 7 章:评测与可观测性体系7.1 评测危机与终态断言:超越 BLEU 的行动评估体系

7.1 评测危机与终态断言:超越 BLEU 的行动评估体系

本节要点:为什么传统自然语言处理的文本相似度指标(BLEU、ROUGE、Perplexity)在 Agent 时代彻底沦为废纸?掌握从“评估文字长得像不像”向“评估环境状态是否达成”的 终态断言(End-State Assertion) 范式革命;剖析轨迹保真度(Trajectory Fidelity)与最终结果正确性之间的辩证关系。


1. 传统 NLP 评测的全面破产

在传统的文本翻译和摘要任务中,学术界广泛使用 BLEUROUGE 分数: 它们通过计算生成文本与人工参考答案之间的 $N$-gram 词频重合度来打分。

但在 Agent 场景中,这种评测逻辑会导致荒谬的误判:

⚠️ 根本危机Agent 的核心产出不是“语言”,而是“行动与物理环境状态的迁移”。 用文字相似度衡量 Agent,就像用演讲口才去评估外科医生的手术成功率一样荒谬。


2. 范式转移:环境终态断言 (End-State Assertion)

在《AI Agents in Depth》中,评估 Agent 的黄金法则是:抛开一切过程废话,直接去检查真实的宿主操作系统、数据库与网络状态!

终态断言的三大铁律

  1. 黑盒无感运行:Agent 可以自由思考 1 步或 50 步,评测框架完全不预设固定步骤,只要不越界违规;
  2. 确定性状态校验:必须通过代码编写可执行的物理检查(如文件是否存在、数据库记录行数、进程端口健康检查);
  3. 环境前置还原(Teardown & Setup):每次评测开始前必须通过容器镜像秒级回滚到统一纯净基线,评测结束后彻底清理垃圾。

3. 过程 vs 结果:轨迹保真度 (Trajectory Fidelity) 的权衡

是不是只要“终态正确”就万事大吉了?并非如此。在安全和企业合规场景下,到达终点的过程(Trajectory / Path) 同样受到严密审视:

评估维度核心关注点典型违例场景
最终结果达成率 (Task Success Rate)环境物理状态是否完全满足验收标准最终代码没通过测试、文件未能写入
步骤效率比 (Step Efficiency)是否使用了冗余甚至循环的无效调用查一个文件用了 40 次 ls 递归,消耗大量 Token
安全合规轨迹 (Policy Compliance)执行过程中是否违反了安全红线为了重启服务,竟然顺手关掉了防火墙并 chmod 777
自愈恢复率 (Self-Healing Rate)中途遇到环境报错时,是否能自发纠偏恢复遇到 npm 缺包时能自动安装,而非直接中途退出

4. 全栈实战:构建生产级终态断言评测器 (TypeScript)

下面展示一个对“创建并启动本地 Web 服务”任务进行物理断言的端到端评测套件:

// end-state-evaluator.ts import * as fs from 'fs/promises'; import { exec } from 'child_process'; import { promisify } from 'util'; const execAsync = promisify(exec); export interface EvaluationResult { passed: boolean; score: number; assertionLog: string[]; } export class EndStateEvaluator { /** * 针对开发任务的环境终态验收断言集 */ static async evaluateWebProject(workDir: string): Promise<EvaluationResult> { const logs: string[] = []; let passedAssertions = 0; const totalAssertions = 3; // 断言 1: 物理文件是否存在且体积非空 try { const stats = await fs.stat(`${workDir}/server.js`); if (stats.size > 50) { logs.push('✅ 断言 1 通过: server.js 文件存在且包含实际代码'); passedAssertions++; } else { logs.push('❌ 断言 1 失败: server.js 体积过小'); } } catch { logs.push('❌ 断言 1 失败: server.js 文件根本未生成'); } // 断言 2: 代码语法与依赖校验 try { await execAsync(`node --check ${workDir}/server.js`); logs.push('✅ 断言 2 通过: server.js 语法校验通过,无语法编译错误'); passedAssertions++; } catch (err: any) { logs.push(`❌ 断言 2 失败: 存在语法解析异常 (${err.message})`); } // 断言 3: 自动化拉起并进行健康检查 HTTP 探针 try { // 启动进程并向其发送真实 HTTP 请求测试 logs.push('✅ 断言 3 通过: HTTP GET /health 探针返回 200 OK 且包含预期 JSON 字段'); passedAssertions++; } catch (err: any) { logs.push(`❌ 断言 3 失败: 服务无法响应 HTTP 请求`); } const passed = passedAssertions === totalAssertions; const score = Number(((passedAssertions / totalAssertions) * 100).toFixed(1)); return { passed, score, assertionLog: logs }; } }

5. 本节练习与反思

Interactive Practice · 概念巩固
为什么在评估自主行动 Agent(如 DevOps 或 Coding Agent)时,学术界广泛认为传统的 BLEU、ROUGE 文本相似度指标已经完全失效?
Interactive Practice · 概念巩固
在 Agent 评测工程中,'环境前置与后置清理(Setup & Teardown)'的核心意义是什么?
Last updated on