AI Agent 时代的测试与验收,从 BDD 说起
AI Agent 时代的测试与验收,从 BDD 说起
测试 AI Agent,难在哪?传统测试有个固有的前提,同样的输入,就该有同样的输出。断言把两条写死,一条对了另一条就错。这个前提在 agent 身上没办法使用。同一个问题,模型这次和下次的回答不同,工具调用的路径不同,连要走几步都可能不同。你想断言”回复必须精确等于这句话”,没有任何意义。
所以测试 agent 要先换一种想问题的方式。从”验证实现对不对”换成”验收行为该是什么样”。这正是 BDD 的老本行。
BDD 是什么?
BDD,行为驱动开发,2006 年由 Dan North 提出。它不关心代码内部长什么样,只关心系统在用户面前表现出什么行为。测试用 Given/When/Then 三段式写成自然语言,业务、开发、质量三方一起写,写出来的既是需求也是验收标准。它最重要的一个转变,是把”测试”从验证工具升格成”规格”。测试回答代码对不对,规格回答行为该是什么。
一个 Gherkin 场景长这样:
导出少于一万行的数据
Given 用户正看着一个有 8432 行的仪表盘
When 用户点击"导出 CSV"
Then 文件在 5 秒内开始下载
And 文件里的行数等于 8432
业务人员不用懂代码就能读,能评审,甚至能自己写。
为什么 agent 时代 BDD 反而更合适?
第一,BDD 关心行为契约,实现细节它不管。agent 是概率系统,你没法规定它每一步怎么做,但你可以规定它达成什么结果。Given/When/Then 把推理空间切成几段,只约束边界不规定路线,agent 自己去找路。
第二,验收标准正在变成 agent 的 system prompt。我读到过一个说法,验收标准就是新的 system prompt。我发现 agent 经常会用不符合实际业务的方式通过测试(因为它的目标就是要通过测试),只要测试能改,它总会找到最省力的变绿方式,典型的就是悄悄把”所有符合条件的商品都打折”改成”至少一个商品打折”。Gherkin 把这个漏洞堵上了。测试写在代码之前,用业务语言,产品负责人签字,存在大家都能读的文件里。
第三,场景既是测试,也是 agent 的执行蓝图。给 agent 一段 Gherkin,等于给了它一段明确的行为规格,它照这个写实现,跑不过就返工。这就是 BDD 驱动的 agent 交付。
具体怎么测?
BDD 给了骨架,真正断言 agent 输出质量要靠三层:
第一层,确定性断言。工具调用对不对、参数格式对不对、必填字段有没有、延迟超没超。这些永远可以用代码写死,不该回退。
第二层,LLM 当裁判。相关性、语气、连贯、有没有编造,这些没法用 boolean 断言,就让一个模型按你写的评分细则去评另一个模型的输出。细则写得好,LLM 裁判和人类评审的一致性大约在八成到八成半。有人把 LLM 裁判的评分门槛直接写进 BDD 的 Then 步骤,比如”回复的正确性评分不低于 0.7”。这个做法来自一场 2026 年开发者大会的实测,用 Behave 跑 Gherkin 场景,用 DeepEval 做评分,测试报告里带上完整问答记录,每次推送进 CI 都跑一遍。
第三层,对抗输入。prompt 注入、越狱、边界措辞,这些要专门的红队测试去轰。Promptfoo 这类工具把注入和越狱检测做进了内置功能。
工具怎么选,看团队工作流:
| 工具 | 形态 | 适合谁 |
|---|---|---|
| DeepEval | 开源,pytest 风格 | Python 团队,想和现有单元测试放一起 |
| Promptfoo | 开源,YAML/CLI | 想本地跑、爱做模型对比和红队 |
| LangSmith | 托管服务 | 用 LangChain/LangGraph,要生产观测 |
| Braintrust | 托管平台 | 团队大了,要统一评估加生产监控 |
工具一堆,真正决定评估质量的是一开始的测试集。Anthropic 的官方建议是,从真实用户失败里挑 20 到 50 条任务当起步,好过瞎造 200 条合成数据。真实失败暴露的是预期和实际之间的分布偏移,合成数据围着 happy path 转,漏掉的全是故障模式。正反例要平衡,拒绝用户不该做的事也要算一种正确行为。两条独立判分要和得上。每次运行要隔离状态。还要盯着评估饱和,通过率一旦到 100%,说明用例太简单,该换了。公开 benchmark 的保质期只有半年到一年,它一旦变成被刷的目标,就不再衡量你在乎的东西。这是 Goodhart 定律,LiveCodeBench 用不断更新的题目验证过。
先从五到十条黄金用例开始,真实会遇到的问题配上理想回答。确定性部分用代码断言,语义部分只挑一两个最重要的指标让 LLM 判。每次改动 prompt、工具或逻辑的提交,都触发一次评估。每周复盘一遍失效用例,从生产故障里补新的。工具选一个开源的先跑起来,DeepEval 配 pytest,或者 Promptfoo 配 CI,都可以。
验收标准是 agent 时代最便宜的边界线。它给”做对了什么”一个大家都能看懂、谁都不能偷改的定义。你不需要一个昂贵的框架,需要的只是把行为期望写成可执行、可读、有人签字的文件,然后让 agent 照着它干活。这件事 BDD 已经做了二十年,现在轮到它派上用场了。