模块四 · 系统重写 / F20 工程级 · 所有系统重写框架 →

评测驱动工程法 Triple-E Evaluation-Driven Engineering

先跑再说、后补质量——这是智能体开发最危险的反模式。
传统软件可以先建后测,因为它的行为是确定的。智能体不行,因为它的行为是概率的。这一个字的差距,让整个工程方法论需要被重写。

DEF ·为概率性输出的 Agent 系统建立评测先行(Evaluation-driven)+ 工程实现(Engineering-first)+ 持续演化(Evolving-continuously)三层循环——把评测集(Eval Set)作为成功的定义。

核心问题
智能体系统的"质量达标"是怎么被定义和持续验证的?
体系定位
第一层 · 负责回答「概率系统的工程方法应该怎么变」,是系统重写的方法论基石。
使用时机
Agent 项目立项与技术方案评审 · 提示词迭代的科学化 · 模型升级的安全验证 · 高频迭代场景的质量护栏
F20 · Triple-E 三层循环
P6
Triple-E 3 阶段闭环 E1 评测驱动 E2 工程实现 E3 持续演化
评测集 = 成功的定义(先于代码)评测集是活的,随生产失败场景持续更新

01"先实现功能,再写测试"——错误顺序的代价

大多数团队在开发智能体系统时,遵循的是一套从传统软件开发继承来的工作习惯:先实现功能,再写测试,最后在发布前做一轮质量检查。这个顺序在软件工程里运行了几十年,看起来没什么问题。

但在智能体系统里,这套顺序会带来一个后果——这个后果在发布后才会慢慢显现:你不知道系统在哪些情况下会出问题,直到它在生产环境里出了问题。

不是因为没有做测试,而是因为测试的方式是错的。传统测试覆盖的是"已知的确定性路径",智能体的失败往往发生在"未被发现的边界情况"上。这些边界情况,在你的测试用例里不存在,在你的提示词里没有描述,但它们在真实用户的使用里真实存在。

02确定性系统和概率性系统的根本差异

理论来源:传统敏捷开发方法(敏捷宣言,2001);测试驱动开发(TDD,肯特·贝克,Test-Driven Development,2002)。
本框架创新:针对概率性输出系统的特性,将传统 TDD 的"测试先行"扩展为 Triple-E 三层工程方法论:评测驱动、工程实现、持续演化;提出"评测集(Eval Set)"作为智能体质量的核心度量工具,以统计分布替代二元通过/失败作为质量标准。

传统软件工程的所有核心实践——单元测试、集成测试、回归测试、持续集成——都建立在一个没有被声明的假设上:给定相同的输入,系统产生相同的输出。

这个假设让测试变得可行。如果一个函数在测试环境里通过了,可以合理相信它在生产环境里也会通过。这种可预测性,是整个软件工程质量保障体系的基础。

智能体系统打破了这个假设。同一个提示词,在不同时刻、不同上下文、模型的不同采样结果下,可能产生不同的输出。一个今天通过的测试用例,明天未必还能通过——不是因为系统被修改了,而是因为概率性系统本来就有这种特性

你无法用"通过/失败"这个二元标准来评估一个概率性系统的质量。正确的问题不是"这个输出是对还是错",而是"这个系统在各种类型的输入下,产生高质量输出的概率分布是什么"。

03把"评测"提升为一等公民

重新设计智能体工程方法论的核心思路,来自一个优先级的倒转:把评测从开发流程的末端,提升到开发流程的起点。

在传统 TDD 里,"先写测试,再写代码"是一个已经被广泛接受的最佳实践。但即使是 TDD 的拥护者,在面对智能体开发时也会遇到一个困难:智能体的"测试"不能是一组确定性的断言,因为没有确定性的正确答案可以被断言。

需要被提前定义的,不是"正确答案是什么",而是"什么叫做一个好的输出"——也就是评测标准。评测标准一旦确定,才能构建评测集(Eval Set):一组覆盖典型场景、边缘场景和对抗场景的测试输入,配合对应的评估维度和质量基准线。

E1 · 评测驱动(Evaluation-driven)

在写任何一行代码之前,先定义评测集。包括覆盖了哪些场景类型(正常、边缘、对抗),用什么维度评估输出质量,合格的基准线是什么。评测集是整个工程工作的"成功定义"——没有这个定义,后续所有工程工作都是在不知道终点的情况下行进。

E2 · 工程实现(Engineering-first)

在评测集指引下进行系统实现。每一次代码变更之后,立即运行评测集,得到的不是"通过/失败",而是在各个维度上的评分分布。这个分布成为驱动下一步工程决策的数据基础。

E3 · 持续演化(Evolving-continuously)

评测集本身也需要随着系统的演化而不断更新。每一次在生产环境里发现的新失败场景,都应该被添加到评测集中,让这个失败不再重演。评测集是活的,不是一次性定义的文档。

04"先跑再说"的真实代价

为什么"先跑再说、后补质量"这个反模式如此普遍?因为它在短期内给人一种进展的感觉——系统跑起来了,有输出了,用户可以开始使用了。质量的问题,好像可以后面再优化。

但在智能体开发里,这种延迟的代价是指数级的,而不是线性的

当你在没有系统性评测体系的情况下积累了大量代码、提示词和系统配置,你不知道哪些部分是稳定的,哪些是脆弱的,哪些改动会破坏什么。每次想要"后补质量",都需要先理清这些未知,而这个理清的代价比从一开始就有评测体系要高出三到五倍。

更隐蔽的代价是边界案例的未知性——在没有系统性评测的开发过程中,你积累的是功能,同时也在积累"不知道哪些边界案例存在"的盲区。这个盲区本身就是技术债,而且它不会随着后来的测试工作全部消除——因为你无法测试你不知道的存在。

05质量不是状态,是统计属性

Triple-E 揭示的,是智能体工程质量的根本性重新定义:质量不是一个可以在发布前被检验出来的状态,而是在整个开发过程中被持续追踪的统计属性。

传统软件质量可以被"检验"——产品在发布前经过质量检查,检查通过意味着达到了质量标准。这种检验模式建立在确定性输出的假设上。

智能体质量只能被"追踪"——在各个评测维度上,系统的表现分布是否在向好的方向演化?新功能的加入是否造成了某些维度的退化?这种追踪,需要评测集和统计分析,不是一次性的发布前检查。

一个没有评测集的智能体系统,就像一个没有仪表盘的飞机。它可能在飞,但你不知道飞向哪里,也不知道什么时候会出问题。