#AI#DevOps

评测驱动开发:把 eval 当 CI

软件工程有 TDD,AI 工程需要 EDD——评测驱动开发。写代码前先写评测集,让它定义"什么是好",每次改动跑评测,下降即拦。本文讲清 EDD 的流程、它和 TDD 的区别(非确定、概率性)、怎么落地,以及它如何把"凭感觉调 AI"变成可工程化的迭代闭环。

本文要点

  • 主题聚焦:AI、DevOps
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2025年12月23日·更新于 2026年7月23日

传统软件有 TDD(测试驱动开发):先写测试定义"对",再写代码满足它。AI 工程需要对应的范式:EDD(Eval-Driven Development,评测驱动开发)——先写评测集定义"好",再调 prompt/模型/系统满足它,每次改动跑评测。

原因很简单:AI 部件是非确定的、没法用 assert 精确测,没有评测集你根本不知道改好了还是改坏了。

一、为什么 AI 工程需要 EDD

传统代码:assert(add(1,2) === 3)——确定性,对就是对、错就是错。

AI 部件:同一个 prompt + 输入,每次输出可能不同;"好"没有二元对错,是质量分布。所以:

  • 没法用传统单测 assert。
  • 改了 prompt,肉眼觉得好了,实际可能整体退化(你看了几个变好的,没看那 30 个变差的)。
  • 没有"好"的客观定义,团队争论"这个 prompt 行不行"全凭嗓门。

EDD 的核心:用评测集给"好"一个客观、可量化的定义,让每次改动有据可依。

二、EDD 的流程

text
1. 定义任务 + "好"的标准 → 建评测集
2. 写初始 prompt/系统 → 跑评测,得到 baseline 分数
3. 改动(prompt/模型/参数) → 跑评测 → 和 baseline 对比
4. 分数提升 → 接受,更新 baseline
   分数下降 → 拒绝,回滚
5. 持续: 新发现的 bad case 进评测集,迭代

和 TDD 的"红-绿-重构"对应,EDD 是"定标-跑评-迭代"。评测集就是你的"测试套件",分数就是"通过/失败"。

三、评测集:EDD 的地基

评测集的质量决定 EDD 的有效性。要点:

  • 覆盖核心场景 + 边界。不只是"标准问题",要有边界/模糊/对抗 case。
  • 持续从真实流量补充。线上 bad case 是评测集最好的来源——脱敏后加入,防回归。
  • 标注"期望"而非"标准答案"。AI 输出多变,标注关键事实/属性("答案应含 X""格式要 JSON""不能含 Y"),而非逐字答案。
  • 规模够用即可。50–200 条覆盖好,比 1000 条噪声强。

评测集要版本化进 Git,和代码同级——它是产品逻辑的一部分。

四、跑评测:自动化是关键

EDD 要求"每次改动跑评测",所以必须自动化:

  • 一个脚本/命令跑全量评测集 + 打分。
  • 分数和 baseline 对比,输出报告(哪些指标变了、哪些 case 翻车)。
  • 接进 CI:PR 改了 prompt/模型 → CI 跑评测 → 下降超阈值拦下来。

打分方式(之前评测相关文章详谈):

  • 规则打分(格式合法率、关键词命中)。
  • LLM-as-judge(faithfulness、relevancy)。
  • 人工抽检(关键 case)。

CI 里的样子:

yaml
# .github/workflows/eval.yml
on: pull_request (paths: prompts/**, models/**)
jobs:
  eval:
    - run: pnpm eval --baseline main
    - if: metrics dropped > 3%, fail the PR

五、EDD 和 TDD 的关键区别

TDDEDD
被测对象确定性代码非确定 AI 部件
通过标准精确相等/布尔概率/分布/分数
一次运行确定结果有方差(可能要多次取均)
失败定位明确哪行错看 bad case + trace
维护改代码改测试改 prompt 补 bad case 到 eval

最大的差别:EDD 的"通过"是概率性的、有方差的。所以:

  • 跑评测要看分布/均值,不是单次。
  • 指标小幅波动(±1%)是噪声,别过激反应。
  • 设置"显著变化"阈值(如 ±3%),超了才算真变化。

六、EDD 落地的现实挑战

1. 评测集的冷启动。没有评测集,EDD 无从谈起。但建集要标注、要时间。对策:先小(20 条核心场景),边跑边补。

2. LLM-judge 的成本。用强模型当裁判跑评测集,要花 token。对策:CI 用便宜模型粗评、关键节点用强模型精评。

3. 指标和产品价值的对齐。"faithfulness 提升了 5%",但留存没动——你的指标可能没抓住真实价值。要持续校准"评测指标"和"业务指标"的关联。

4. 团队习惯。EDD 要求团队接受"改 AI 必须跑评测"的纪律。文化建设,靠流程强制 + 数据说服。

七、EDD 的进阶:分层评测

成熟团队做分层评测:

  • 冒烟评测(10–20 条,每次 PR 跑,秒级):快速挡住明显退化。
  • 核心评测(50–100 条,合并前跑,分钟级):质量门槛。
  • 全量评测(数百条,发版前跑,小时级):全面验证。
  • 在线评测(真实流量灰度,发版后):线上真实分布。

按改动风险选跑哪层,平衡速度和覆盖。

八、EDD 的真正价值

EDD 不只是"测得严",它改变了 AI 开发的工作方式:

  • 改动有据。不再"我觉得好",是"评测分数 +X%"。
  • 敢改。有评测兜底,敢于做激进优化(换模型、重构 prompt),不怕悄悄退化。
  • 团队协作。prompt/模型评审有客观依据,不靠嗓门。
  • 知识沉淀。评测集本身是产品知识的沉淀(什么是对的、边界在哪)。

没有 EDD 的 AI 团队,迭代是玄学的;有 EDD 的,迭代是工程的。 这个差距在长期会被放大。

小结

评测驱动开发(EDD)是 AI 时代的 TDD:

  • 评测集定义"好",是 EDD 的地基(覆盖场景 + 边界 + 持续补 bad case)。
  • 自动化评测进 CI,每次改动跑、下降即拦。
  • 理解概率性:看分布不看单次、设显著阈值。
  • 分层评测:冒烟/核心/全量/在线,按改动风险选。

记住一句:没有评测的 AI 开发,是闭眼开车;有评测的,是看着仪表盘开。 EDD 的投入(建集、接 CI)看着重,但它是 AI 产品从"凭感觉迭代"走向"工程化迭代"的分水岭——这件事一旦做起来,你的迭代速度和质量都会拉开那些还在"玄学调 prompt"的团队一个身位。

Related

相关推荐