一份 RAG 系统输出声称了上下文从未给出的定价信息。作者用两个最流行的 LLM-as-judge 忠实度指标各测五次,gpt-4o 温度 0。RAGAS 给出 0.000,DeepEval 给出 1.000,五次重复一致,并解释“实际输出与检索上下文之间没有矛盾”。两个指标都叫 faithfulness,只有其中一个发现了编造。
作者为医疗 AI 工具构建了 OpenGATE,所有检查都是输出与人工标注金标的纯函数:要求事实必须出现、数字必须可追溯、上下文无法回答时必须弃权。随后与 RAGAS 和 DeepEval 做了对照实验。
实验使用 27 个冻结输出,包含生产系统输出和注入单一已知缺陷的突变体。缺陷按范围分组,检测以注入缺陷后的反应相对于未突变输出来衡量,且输出必须在每次重复中都被标记才算检出。
法官模型在语义反转上胜出:RAGAS 捕获 4/5,DeepEval 捕获 5/5,确定性检查捕获 0/5。但在遗漏上失败:缺失的抗生素剂量不构成矛盾,法官模型捕获 0/5 和 1/5,确定性锚点检查捕获 5/5。成本方面,RAGAS 每千次评估 11.49 美元,DeepEval 8.29 美元,确定性检查免费。速度上,法官模型每次重复 194 和 119 秒,确定性检查 3.8 毫秒。定位上,确定性检查会命名失败原因,RAGAS 返回标量,DeepEval 的推理有时好有时是“没有矛盾”。
定义性差异是关键:RAGAS 问“每个声明是否都有上下文支持”,DeepEval 的 faithfulness 问“是否有声明与上下文矛盾”。编造的数字不矛盾任何内容,因此在六个输出中 RAGAS 捕获 5 个,DeepEval 捕获 0 个。团队若未阅读实现就采用 LLM-as-judge faithfulness,等于无意中选择了对哪种失败模式视而不见。
在 gpt-4o 温度 0 下,法官模型稳定性尚可,但 gpt-4o-mini 上 11/27 输出在重复间改变判定。不将构建门控放在法官模型上的理由在于遗漏盲区、定义分歧和成本,这些都不是更好的法官模型能修复的。
确定性门控在生产中捕获了:静默解析失败导致约 50% 的多声明判定默认为“不支持”;去标识引擎的两个名称捕获 bug;简化器从出院小结中删除抗生素剂量。几个月后,同一系统产生了编造的血红蛋白数值,因为之前的提示修复只禁止遗漏数字,未禁止编造数字。
作者建议两者并用:LLM 法官处理语义,确定性检查作为门控。确定性检查 MIT 许可,一行命令运行,无需 API 密钥。
Repo: github.com/nickjlamb/opengate · Paper: doi.org/10.5281/zenodo.21365095
#开发者 #工具 #RAGAS #DeepEval #OpenGATE #LLMJudge #Faithfulness #RAG #AITesting
@DevToolboxHub