01-评测集与Rubric设计
核对日期:2026-05-13。
不稳定项:评测框架、数据标注工具、LLM-as-judge 方法和行业 benchmark 会持续变化;自建评测集必须绑定业务任务、模型版本、Prompt 版本和运行日期。
1. 学习目标
本专题解决评测体系的地基问题:如何把“感觉不错”变成可复现、可比较、可回归的评测集和评分标准。
学完后你应该能做到:
- 设计覆盖正常、边界、拒答、安全和历史失败的 eval dataset。
- 为开放问答、结构化输出、RAG 和 Agent 设计不同 Rubric。
- 区分规则评分、人工评分、程序评分和 LLM-as-judge。
- 设计评测样例字段、标签、风险等级和版本。
- 用失败样例持续更新回归集。
2. 评测集不是 demo 集
Demo 集通常只包含“最好看”的样例;评测集必须代表真实任务和关键风险。
合格评测集包含:
| 类型 | 目的 |
|---|---|
| 正常样例 | 覆盖高频主路径 |
| 边界样例 | 测试歧义、长输入、多约束 |
| 缺信息样例 | 测试澄清和拒答 |
| 冲突样例 | 测试证据冲突处理 |
| 安全负例 | 测试注入、越权、敏感信息 |
| 历史失败 | 防止问题复发 |
| 高风险样例 | 业务不可接受错误 |
评测集要覆盖任务分布,也要刻意覆盖事故分布。
3. 样例字段
推荐 JSONL 字段:
{
"id": "rag-policy-001",
"task": "企业制度问答",
"input": "试用期员工可以报销差旅住宿吗?",
"expected_behavior": "根据制度回答,并引用具体条款",
"expected_answer": "可以,但需要符合差旅制度标准",
"required_sources": ["travel-policy-2026#section-3"],
"must_cite": true,
"must_refuse": false,
"tags": ["rag", "policy", "citation", "normal"],
"risk_level": "medium"
}
必要字段:
id:稳定唯一 ID。input:用户输入。expected_behavior:期望行为。tags:能力和风险标签。risk_level:风险等级。version或 dataset 版本。
4. 数据集构成比例
一个 30 条起步的评测集可以这样设计:
| 类型 | 数量 | 说明 |
|---|---|---|
| 正常样例 | 12 | 高频任务 |
| 边界样例 | 6 | 歧义、长输入、冲突 |
| 拒答样例 | 4 | 无证据、无权限、超范围 |
| 安全负例 | 4 | 注入、越权、敏感数据 |
| 历史失败 | 4 | 线上或人工构造失败 |
如果是高风险系统,安全和拒答样例比例应更高。
5. Rubric 设计
Rubric 要把“好答案”拆成可评分维度。
企业知识库问答示例:
| 维度 | 2 分 | 1 分 | 0 分 |
|---|---|---|---|
| 正确性 | 结论完全正确 | 部分正确 | 错误或误导 |
| Groundedness | 结论均被证据支持 | 部分证据不足 | 无证据或编造 |
| 引用 | 引用准确支持结论 | 引用主题相关 | 引用不存在或不支持 |
| 完整性 | 覆盖关键条件 | 缺少次要条件 | 缺少关键条件 |
| 边界处理 | 正确澄清或拒答 | 边界提示不清 | 编造或越界 |
| 安全 | 无越权泄漏 | 有轻微风险 | 严重安全失败 |
Rubric 要写到评审者能独立打分,而不是靠“懂的人自然懂”。
6. 评分方式选择
| 方式 | 适用 | 风险 |
|---|---|---|
| 规则评分 | JSON schema、枚举、长度、是否引用 | 覆盖有限 |
| 程序评分 | SQL、代码、数学、精确答案 | 需要可执行标准 |
| 人工评分 | 高风险、产品体验、复杂事实 | 成本高 |
| LLM-as-judge | 语义质量、摘要、开放问答初筛 | 偏差和漂移 |
| 混合评分 | 生产系统 | 实现复杂但稳 |
建议:能用规则的先用规则,高风险样例必须有人类校准。
7. 数据治理
评测集也要版本化。
治理要求:
- dataset version。
- 标注人和标注日期。
- 样例来源。
- 去重。
- 难度分层。
- 隐私脱敏。
- 标签体系。
- 变更记录。
- 防止泄漏到 Prompt 或训练数据。
线上失败进入评测集前要脱敏,不要把真实用户隐私写进公开文档。
8. 失败样例库
失败样例字段:
| 字段 | 说明 |
|---|---|
id | 失败样例 ID |
input | 输入 |
output | 实际输出 |
expected_behavior | 期望行为 |
failure_type | 失败分类 |
root_cause | 根因 |
impact | 影响 |
fix | 修复 |
regression | 是否进入回归 |
失败样例库是 AI 系统最宝贵的资产之一,因为它记录了系统真实撞墙的位置。
9. 常见反模式
| 反模式 | 表现 | 后果 | 修正 |
|---|---|---|---|
| Demo 当 eval | 只挑好样例 | 上线翻车 | 代表性样例 |
| 无 Rubric | 评分靠感觉 | 不可复现 | 明确维度 |
| 只评正常样例 | 无边界负例 | 风险隐藏 | 加安全和拒答 |
| 不版本化 | 分数无法复现 | 无法比较 | dataset version |
| judge 不校准 | 模型自己评自己 | 分数虚高 | 人工校准集 |
10. 练习
为“企业知识库问答系统”设计 30 条评测集结构:
- 12 条正常。
- 6 条边界。
- 4 条拒答。
- 4 条安全负例。
- 4 条历史失败。
为每类写 1 条样例,并设计 0-2 分 Rubric。
11. 验收题
- 为什么评测集不是 demo 集?
- 一个 eval 样例必须包含哪些字段?
- Rubric 为什么要具体到 0/1/2 分标准?
- 哪些样例必须进入回归集?
- 评测数据为什么需要脱敏和版本化?
- 什么情况下 LLM-as-judge 不能单独使用?