模型评估
大模型应用上线前最头疼的问题:怎么评估效果?人工评估又贵又慢标准还不一致,BLEU/ROUGE 这类传统指标对生成式任务基本失效。LLM-as-Judge(用大模型当裁判)是目前性价比最高的方案,但用不好会踩一堆坑。本文是我们在三个项目中沉淀的实战指南。
为什么传统指标不行
指标 问题 BLEU/ROUGE 依赖字面重叠,"好的"和"不错"算错,换个说法全错 准确率 只适用于有标准答案的任务 人工评估 每千条约 500-1500 元,周期 2-3 天,标注员之间一致性差生成式任务的答案是开放的:同一问题可以有多个正确答案。评判"这个回答好不好",恰好是大模型擅长的事。
基础用法:结构化打分
JUDGE_PROMPT="""你是严格的质检员。根据给定标准评估回答质量。 [问题] {question} [参考答案] {reference} [待评回答] {answer} 评估维度: 1. 事实正确性(与参考答案矛盾则重扣) 2. 完整性(是否覆盖问题所有要点) 3. 格式遵循(是否符合要求的输出格式) 输出 JSON(不要输出其他内容): {{"correctness": 1-5, "completeness": 1-5, "format": 1-5, "reason": "一句话理由"}}"""# 温度设 0,保证评分稳定score=judge_llm.generate(JUDGE_PROMPT.format(...),temperature=0)三个工程要点:用 JSON 约束输出(好解析、可统计)、温度设 0(评分要稳定不要创意)、理由必填(理由能帮你看懂裁判在扣什么分,也显著提升评分质量)。
四个已知偏差与对策
LLM 裁判不完美,学界已经确认了四个系统性偏差:
偏差 表现 对策 位置偏差 偏向对比中的第一个/第二个 同一对答案正反序各评一次取均值 长度偏差 偏向更长的回答 prompt 明确声明"简洁不是缺点" 自我偏好 偏好自己家族模型的输出 裁判与被评模型用不同家族 权威偏差 被 answer 里的假引用误导 评测时明确"参考答案才是事实源"位置偏差的对策代码:
deffair_compare(a,b,question):s1=judge(question,a_first=a,b_first=b)# a 在前s2=judge(question,a_first=b,b_first=a)# 换序再评return(s1+s2)/2```## 校准:裁判也需要监考上线前必须回答:这个裁判可信吗?方法是**用人工标注校准**: ```text1.抽100-200条,人工和 LLM 裁判同时评分2.算一致率(分差 ≤1视为一致):>85%可用,<70%需改 prompt 或换裁判3.人工复盘分歧样本,把分歧原因写进裁判 prompt 作为补充规则4.版本迭代后重新校准——裁判 prompt 也是代码,改了就要回归我们的评估分层
日常回归: 500 条自动化测试集 + LLM-as-Judge,每次改动必跑(10 分钟) 版本对比: 2,000 条 + 双裁判交叉 + 人工抽检 100 条分歧样本 上线前: 灰度流量 + 线上用户反馈回流,闭环验证结论:LLM-as-Judge 不是替代人工,而是把人工从"评每一千条"解放到"评一百条 + 写规则"。把它当实习质检员用——能力强、要培训、需抽检。用对了,评估成本降一个数量级,迭代速度翻几倍。