我为 LLM 功能编写评估,将它们接入 CI,然后继续前进。但通过的评估套件存在盲点:它无法告诉你,如果模型悄然变差,评估是否真的会失败。绿灯并不等于一切正常。
因此我构建了 muteval 来直接衡量这一点。它借鉴软件工程中的突变测试——你故意破坏被测对象,检查测试是否能捕获到问题。muteval 降级系统(削弱提示规则、丢弃检索文档、换用更弱模型),针对每个降级版本重新运行你的现有评估套件,并报告这些注入的回归中有多少被评估捕获。未捕获的即为具体的覆盖缺口。
Mutation score: 33% (2/6 caught)
SURVIVED: deleted "if the answer isn't in the context, say you don't know"
Enter fullscreen mode Exit fullscreen mode
简单说明其工作原理。它内置约 18 种突变,每种都模拟真实系统的悄然降级:将“必须”软化为“应该”、反转“不得”、删除或损坏检索文档、打乱上下文、换用更廉价模型,或破坏 agent 设置中的工具输出。在执行任何突变前,它会先确认你的评估套件在原始系统上通过——若未通过,则无法进行有意义的测量——随后针对每个突变重新运行评估,按严重程度对存活的突变排序,并为每个缺口建议可填补的评估。
它真的能发现真实问题吗?我用它测试了 Vectara 的 open-rag-eval。引用检查捕获了导致模型停止引用来源的突变——但完全遗漏了移除“当答案不在上下文中时说‘我不知道’”规则的突变。模型在仍引用来源的同时可以胡编乱造,而引用检查根本无法捕获这种行为。添加针对该行为的检查后,问题被捕获。
它纯 Python 实现,无强制依赖,可与 deepeval/RAGAS/promptfoo 指标或自带检查配合使用:
pip install muteval
muteval init # scaffold a config
muteval check # validate it, then muteval run
Enter fullscreen mode Exit fullscreen mode
我认为下一步是开发一个能从多个维度评估套件并指出缺失评估的工具——但我想先听听其他人如何处理这个问题。如果你编写 LLM 评估:你如何确定它们是否有效?
仓库(Apache-2.0): https://github.com/AshwinUgale/muteval
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.