测试 LLM 应用:当输出非确定性时
- Sam Wilson
- 测试 , 质量
- 11 May, 2026
用确定性代码库的测试范式去测 LLM 应用,结果是周末挂、周一过的 flaky 测试。同样的输入,模型输出在多次调用之间并不稳定;即便温度为零,模型本身也会更新带来漂移。快照测试一直在响,没人再读;精确匹配在空格和大小写上失败。团队学会了忽略 CI——这比没有测试更糟。
真正能抓回归的测试类型
属性断言:输出包含一个 X 到 Y 之间的数字、输出提到了用户的名字、输出是合法 JSON。这种测试不在乎确切文本,又能抓真回归。参考集评估:一组手挑的输入配上预期分类输出(对/错,不是精确字符串)。校准测试:温度为零时,同一输入跨多次运行应该产生语义一致的输出——比的是语义相似度,不是相等。开放式问题用 LLM 当裁判,但要先用人工标注集校准过裁判。
该放弃的部分
别再测精确措辞,除非措辞本身就是契约——例如结构化输出,schema 就是测试。别再用 seed 和 prompt 缓存的小聪明把测试搞确定。接受方差,去测真正重要的属性。
在 LLM 代码库里活下来的测试,恰恰是看起来最不像你别的代码库里那些测试的测试。这感觉很错,又是对的。