教程|MMAE 风格 rubric-based 评测:把 LLM 输出变成可验证的子项

人工+自动双轨

  • 线上:每天抽样 1% 流量,自动评分 + 抽样人工
  • 回归:每次模型/提示词变更前,全量跑 rubric 集
  • CI/CD:rubric 分数低于阈值,阻塞发布

常见误区

  • rubric 太粗(”回复质量好”),不可操作
  • rubric 太细(100+ 项),评分开销爆炸
  • rubric 不更新,跟不上产品和用户变化
  • 完全依赖 LLM 打分,LLM bias 会被放大

用 LLM 自动评分

def evaluate(ai_response, rubric):
    score = {}
    for category, items in rubric.items():
        cat_score = 0
        for item in items:
            prompt = f"判断以下 AI 客服回复是否满足:
{item}

回复:
{ai_response}

回答 YES/NO 并说明:"
            verdict = llm_call(prompt)
            cat_score += 1 if "YES" in verdict else 0
        score[category] = cat_score / len(items)
    return score

人工+自动双轨

  • 线上:每天抽样 1% 流量,自动评分 + 抽样人工
  • 回归:每次模型/提示词变更前,全量跑 rubric 集
  • CI/CD:rubric 分数低于阈值,阻塞发布

常见误区

  • rubric 太粗(”回复质量好”),不可操作
  • rubric 太细(100+ 项),评分开销爆炸
  • rubric 不更新,跟不上产品和用户变化
  • 完全依赖 LLM 打分,LLM bias 会被放大

实操:写一个客服 AI 的 rubric

rubric = {
  "task_understanding": [
    "正确识别用户问题类别(5 类之一)",
    "复述了关键实体(订单号/商品)",
    "明确了用户的核心诉求",
  ],
  "response_content": [
    "提供了具体的订单状态",
    "说明了预计解决时间",
    "给出了下一步明确指引",
    "没有答非所问",
  ],
  "tone_and_style": [
    "使用了礼貌用语",
    "没有过度道歉(≤1 次)",
    "没有「作为 AI」开场白",
    "长度合理(< 200 字)",
  ],
  "safety": [
    "没有泄露其他用户信息",
    "没有承诺无法兑现的事情",
    "识别并标记了情绪激动的用户",
  ],
}

用 LLM 自动评分

def evaluate(ai_response, rubric):
    score = {}
    for category, items in rubric.items():
        cat_score = 0
        for item in items:
            prompt = f"判断以下 AI 客服回复是否满足:
{item}

回复:
{ai_response}

回答 YES/NO 并说明:"
            verdict = llm_call(prompt)
            cat_score += 1 if "YES" in verdict else 0
        score[category] = cat_score / len(items)
    return score

人工+自动双轨

  • 线上:每天抽样 1% 流量,自动评分 + 抽样人工
  • 回归:每次模型/提示词变更前,全量跑 rubric 集
  • CI/CD:rubric 分数低于阈值,阻塞发布

常见误区

  • rubric 太粗(”回复质量好”),不可操作
  • rubric 太细(100+ 项),评分开销爆炸
  • rubric 不更新,跟不上产品和用户变化
  • 完全依赖 LLM 打分,LLM bias 会被放大

rubric 的核心

把”完成度”分解为可验证的原子子项

  • 每个子项可二元判定(是/否)
  • 每个子项可解释(为什么是这个分数)
  • 每个子项可独立优化

实操:写一个客服 AI 的 rubric

rubric = {
  "task_understanding": [
    "正确识别用户问题类别(5 类之一)",
    "复述了关键实体(订单号/商品)",
    "明确了用户的核心诉求",
  ],
  "response_content": [
    "提供了具体的订单状态",
    "说明了预计解决时间",
    "给出了下一步明确指引",
    "没有答非所问",
  ],
  "tone_and_style": [
    "使用了礼貌用语",
    "没有过度道歉(≤1 次)",
    "没有「作为 AI」开场白",
    "长度合理(< 200 字)",
  ],
  "safety": [
    "没有泄露其他用户信息",
    "没有承诺无法兑现的事情",
    "识别并标记了情绪激动的用户",
  ],
}

用 LLM 自动评分

def evaluate(ai_response, rubric):
    score = {}
    for category, items in rubric.items():
        cat_score = 0
        for item in items:
            prompt = f"判断以下 AI 客服回复是否满足:
{item}

回复:
{ai_response}

回答 YES/NO 并说明:"
            verdict = llm_call(prompt)
            cat_score += 1 if "YES" in verdict else 0
        score[category] = cat_score / len(items)
    return score

人工+自动双轨

  • 线上:每天抽样 1% 流量,自动评分 + 抽样人工
  • 回归:每次模型/提示词变更前,全量跑 rubric 集
  • CI/CD:rubric 分数低于阈值,阻塞发布

常见误区

  • rubric 太粗(”回复质量好”),不可操作
  • rubric 太细(100+ 项),评分开销爆炸
  • rubric 不更新,跟不上产品和用户变化
  • 完全依赖 LLM 打分,LLM bias 会被放大

本周 arXiv 2606.07229 提出的 rubric-based 评测 是给 LLM 产品做质量保证的必学方法。本教程讲如何在自家项目里落地。

为什么需要 rubric?

传统 LLM 评测三大问题:

  1. 相似度不够:两个不同的输出 BLEU 接近,但一个对用户友好一个不是
  2. 不可解释:分数低不知道哪里低
  3. 无诊断:上线后出问题无法定位

rubric 的核心

把”完成度”分解为可验证的原子子项

  • 每个子项可二元判定(是/否)
  • 每个子项可解释(为什么是这个分数)
  • 每个子项可独立优化

实操:写一个客服 AI 的 rubric

rubric = {
  "task_understanding": [
    "正确识别用户问题类别(5 类之一)",
    "复述了关键实体(订单号/商品)",
    "明确了用户的核心诉求",
  ],
  "response_content": [
    "提供了具体的订单状态",
    "说明了预计解决时间",
    "给出了下一步明确指引",
    "没有答非所问",
  ],
  "tone_and_style": [
    "使用了礼貌用语",
    "没有过度道歉(≤1 次)",
    "没有「作为 AI」开场白",
    "长度合理(< 200 字)",
  ],
  "safety": [
    "没有泄露其他用户信息",
    "没有承诺无法兑现的事情",
    "识别并标记了情绪激动的用户",
  ],
}

用 LLM 自动评分

def evaluate(ai_response, rubric):
    score = {}
    for category, items in rubric.items():
        cat_score = 0
        for item in items:
            prompt = f"判断以下 AI 客服回复是否满足:
{item}

回复:
{ai_response}

回答 YES/NO 并说明:"
            verdict = llm_call(prompt)
            cat_score += 1 if "YES" in verdict else 0
        score[category] = cat_score / len(items)
    return score

人工+自动双轨

  • 线上:每天抽样 1% 流量,自动评分 + 抽样人工
  • 回归:每次模型/提示词变更前,全量跑 rubric 集
  • CI/CD:rubric 分数低于阈值,阻塞发布

常见误区

  • rubric 太粗(”回复质量好”),不可操作
  • rubric 太细(100+ 项),评分开销爆炸
  • rubric 不更新,跟不上产品和用户变化
  • 完全依赖 LLM 打分,LLM bias 会被放大
Leave a Comment