核心要点

  • 降随机性:固定 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 输出做精确字符串断言导致测试极度脆弱;或只跑一次采样就下结论,忽视非确定性需要多次采样/阈值判定。

追问

追问 1temperature=0 能保证输出完全一致吗?

不能完全保证。它只是取最高概率 token、大幅降低随机性,但受浮点运算、批处理、模型/后端版本、并发等影响仍可能有细微差异。因此测试仍应断言结构与语义约束,而非依赖逐字节相同。

追问 2语义相似度判定和 LLM-as-judge 各适合什么场景?

语义相似度适合有参考答案、判定「是否接近标准答案」的场景,快且便宜但对细粒度正确性不敏感;LLM-as-judge 适合开放生成、需按多维 rubric 评估忠实度/相关性/格式的场景,更灵活但更贵且需校准与人工抽检。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。