核心要点
降随机性:固定 temperature=0,或多次采样看通过率而非单次
断言结构而非措辞:JSON schema、必需字段、格式合规、取值范围
内容判定用语义相似度/规则/LLM 裁判,而非精确字符串匹配
设阈值与容忍区间,配合快照测试 + 关键样本人工审核
标准回答
核心矛盾:测试要确定,LLM 输出不确定
不能用 assert output == "期望字符串",否则每次措辞变动都误报。要把「精确匹配」换成「满足约束 / 足够接近」。
1. 控制随机性
- 设
temperature=0让输出尽量稳定(仍不保证完全一致)。 - 或保留采样但多次运行看通过率(如 10 次里 ≥9 次合格),用统计阈值判定。
2. 断言结构而非内容
- 输出 JSON 是否合法、是否含全部必需字段、枚举值是否合法、数值是否在范围——这些是确定性的,应优先覆盖。
3. 内容正确性的近似判定
- 规则/关键词:必须包含/禁止包含某些信息。
- 语义相似度:用 embedding 余弦相似度与参考答案比,设阈值。
- LLM-as-judge:按 rubric 让强模型判定是否切题、是否忠实,需校准与抽检。
4. 快照 + 人审 + 容忍
- 保存基线快照,diff 显著时人工复核再决定更新;为指标设容忍区间,避免抖动误报。详见 LLM 评测。
常见误区
⚠️ 常见踩坑
对 LLM 输出做精确字符串断言导致测试极度脆弱;或只跑一次采样就下结论,忽视非确定性需要多次采样/阈值判定。
追问
追问 1:temperature=0 能保证输出完全一致吗?
不能完全保证。它只是取最高概率 token、大幅降低随机性,但受浮点运算、批处理、模型/后端版本、并发等影响仍可能有细微差异。因此测试仍应断言结构与语义约束,而非依赖逐字节相同。
追问 2:语义相似度判定和 LLM-as-judge 各适合什么场景?
语义相似度适合有参考答案、判定「是否接近标准答案」的场景,快且便宜但对细粒度正确性不敏感;LLM-as-judge 适合开放生成、需按多维 rubric 评估忠实度/相关性/格式的场景,更灵活但更贵且需校准与人工抽检。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。