用 LLM-as-judge 给 Agent 答案自动打分
结论先放这:Agent 改了一版 prompt 到底变好还是变差,靠人肉一条条看根本盯不过来。我后来上了一套"让大模型当裁判"的自动打分,每次迭代跑一遍就有分数,省下大把时间。下面是我真实搭的过程。
为什么要自动打分
我维护一个客服 Agent,prompt 隔三差五就要调。每次调完,我得拿一批问题手动对一遍答得好不好,一批 50 条看下来要小一个小时,看到后面眼都花了,标准还飘。
LLM-as-judge 就是再拿一个模型,给它"问题 + Agent 的答案 + 评分标准",让它打个分。机器打分,标准稳定,50 条几分钟跑完。
三步搭起来
第一步:固定一批测试集。我挑了 60 条真实问题,涵盖常见、刁钻、边界三类,存成 csv。这批以后不再变,每次迭代都拿它跑,分数才有可比性。
第二步:写裁判 prompt。这是核心,写不好分数全是噪声。我的裁判 prompt 大概长这样:
你是答案质量评审。请根据【评分标准】给【待评答案】打分。 评分标准(各项 0-2 分,满分 6): - 准确性: 答案是否事实正确、没有编造 - 完整性: 是否覆盖了用户问题的所有要点 - 简洁性: 有没有废话和重复 用户问题: {question} 参考答案: {reference} 待评答案: {answer} 请先逐项说明扣分理由,最后一行输出 JSON: {"准确性":x,"完整性":x,"简洁性":x,"总分":x}两个关键设计:一是强制先说理由再给分,直接让它打分会乱打,先讲理由分数明显更靠谱;二是给参考答案,没有参照物裁判容易自由发挥。
第三步:把分数落到表里。每跑一版 prompt,把 60 条的总分均值、各维度均值记一行。我是在一个带效果测评模块的低代码平台上搭的,它能把每次跑批的分数自动汇总成表,我只看趋势就行——这版均分 4.8,上版 5.1,那这次改动是负优化,回退。
踩过的两个坑
坑一:裁判偏爱长答案。早期我发现啰嗦的答案分数反而高,查下来是裁判把"长"误当成"完整"。我在标准里专门加了"简洁性"这一项扣废话分,才把这个偏好掰回来。
坑二:分数会漂。同一条答案,裁判模型温度不为 0 时,跑两遍能差半分。我把裁判调用的 temperature 设成 0,并且每条只跑一次固定下来,分数才稳定可复现。
一点实话
LLM-as-judge 不是真理,它和人工评估的一致性我测下来大概八成五,剩下一成五的硬骨头(比如需要专业领域判断的)还得人来看。但它最大的价值是把"这版到底变好没"从拍脑袋变成了有数字依据,迭代速度直接翻倍。
裁判模型我没另搭,直接调的讯飞星辰那边现成的模型 API,按调用付费,跑一次 60 条测试集成本几毛钱,比养一台推理机划算太多。
