TDD的终结:为何“Evaluation Engineering”是新的Source Code
Source: Dev.to
我最近看到一位初级工程师尝试为一个 LLM 代理编写单元测试。
他们想断言 response == "I can help with that"。测试失败了,因为 AI 回答道:“I would be happy to help with that.” 这位工程师叹了口气,更新了字符串后重新运行。结果再次失败。
这就是当今 AI 工程的现状:我们试图把概率系统强行塞进确定性的盒子里,这正在破坏我们的工作流。
在传统软件中,我们先编写实现(parse_date()),再编写测试(assert parse_date("2024-01-01") == date(2024, 1, 1))。但在 AI 场景下,AI 编写实现。我们的工作不再是写逻辑,而是写考题。
我把这称为 Evaluation Engineering,它将是你今年编写的最有价值的代码。
范式转变:从 TDD 到 Eval‑DD
在旧的世界里,人类是编码者,机器是执行者。在新的世界里,AI 是编码者,人类是审查者。
你无法编写单元测试来覆盖 AI 回答的每一种创造性变体。相反,你需要从 测试驱动开发 (TDD) 转向 评估驱动开发 (Eval‑DD)。
评估工程的三大支柱
我构建了一个简单的框架来取代我的单元测试。它由每个 AI 代码库都需要的三个核心组件组成。
1. 金色数据集(“规范”)
停止编写散文式的规范。它们对大型语言模型毫无用处。在 Eval‑DD 中,数据集本身就是规范。
# The Dataset IS the Spec
dataset.add_case(
id="edge_001",
input="Parse this date: 2024-13-01", # Invalid month
expected_output="ERROR",
tags=["invalid", "edge_case"],
difficulty="hard"
)
该数据集精确定义了“好”的标准。它是唯一的真理来源。如果 AI 通过了此数据集,则已准备好投入生产;如果未通过,则不行。
2. 评分标准(“评审”)
大多数团队只依据二元正确性进行评分,但现实中的答案可能是正确但有毒或安全但无用。ScoringRubric 类允许在加权维度上进行多维度评分。
rubric = ScoringRubric("Customer Service Rubric", "Evaluates correctness AND tone")
# Correctness is important...
rubric.add_criteria(
dimension="correctness",
weight=0.5,
description="Does it solve the problem?",
evaluator=correctness_evaluator
)
# ...but so is not being a jerk.
rubric.add_criteria(
dimension="tone",
weight=0.4,
description="Is it polite and empathetic?",
evaluator=tone_evaluator
)
如果 AI 回答“只要点忘记密码,显而易见”,它会得到:
- 正确性: 10/10
- 语气: 0/10
- 最终得分: 5/10(不及格)
这捕捉到了简单 assert 语句无法体现的细微差别。
3. 评估运行器(“测试套件”)
运行器将 AI 在金色数据集上执行,并使用评分标准进行评分,取代 pytest。它报告通过率并指示你的提示工程是否有效。
runner = EvaluationRunner(dataset, rubric, my_ai_function)
results = runner.run(verbose=True)
if results['pass_rate'] > 0.9:
print("🎉 AI meets requirements!")
else:
print("❌ AI needs improvement")
为什么这很重要
它改变了如何工作。
- 先写评估标准。 在编写提示之前,先定义成功的样子。
- 迭代提示,而不是代码。 当测试失败时,调整系统提示或少量示例,而不是重写 Python 逻辑。
- “源代码”已转移。 知识产权不再是包装代码;IP 是评估套件。
高级工程师的新工作
如果你担心 AI 会抢走你的编码工作,完全不必担心。工作已经变了。
难点不再是生成代码(Cursor、Copilot 已经能做到)。难点在于:
- 定义 Golden Dataset(捕获边缘案例)。
- 调整 Rubric(将工程判断编码为权重)。
- 分析 Failures(弄清 AI 出错的 原因)。
我们正离开确定性逻辑的时代,迈入概率工程的时代。别再通过提示乞求你的 AI 表现良好。开始给它打分吧。