Eval Dataset

Eval Dataset 是用于评估 Agent 质量的标准案例集合;不仅需要定义期望行为,还要通过分层、分组切分和风险切片避免泄漏与平均分掩盖关键失败。

#type / concept #status / evergreen #tech / ai

[!info] related notes

Eval Dataset

一句话定义

Eval Dataset 是用于评估 Agent 质量的标准案例集合。每个 case 不一定要求唯一标准答案,但应明确输入、期望不变量、禁止行为、工具/trace 期望和可用于切片分析的元数据。

核心原理

数据集结构

@dataclass
class EvalCase:
    id: str
    query: str
    expected_answer: str = ""
    expected_tools: list[str] = None
    expected_sources: list[str] = None
    tags: list[str] = None
    difficulty: str = "medium"
    case_category: str = "normal"
    risk_slice: str = "standard"
    scenario_family_id: str = ""

对于开放式 Agent 任务,更稳健的 case 还可以记录:

expected invariants
forbidden behaviors
trace expectations
scoring rubric

而不是强迫模型复述唯一字符串答案。

评估运行

async def run_evaluation(agent, dataset: EvalDataset, judge) -> EvalReport:
    results = []
    for case in dataset.cases:
        response = await agent.run(case.query)

        score = await judge.evaluate(
            query=case.query,
            answer=response.text,
            reference=case.expected_answer,
        )

        results.append({
            "case_id": case.id,
            "score": score,
            "latency": response.latency,
            "tokens": response.token_usage,
        })

    return EvalReport(results)

Dataset 不是一个长期混用的题库

生产 eval 通常需要区分不同用途:

Development
→ 用于改 Agent / Prompt / Validator

Calibration
→ 用于调 Judge rubric / threshold

Holdout
→ 用于未见数据上的最终资格验证

Regression
→ 保存历史真实 failure,防止复发

Challenge
→ 故意覆盖高风险 failure mode

如果长期用同一批案例一边调系统、一边声称它证明泛化能力,最终分数会被开发过程污染。

Split 要同时考虑 Coverage 与 Leakage

推荐同时使用:

Stratified
→ 重要 case category 在需要的 split 中有代表

Grouped
→ 同一 user / episode / scenario family 不跨 split

具体见 Eval Dataset 的分层与 Grouped Split

Dataset 必须支持 Slice Metrics

仅保存 query/reference 不足以支持成熟评测。关键 case 应带有能稳定切片的标签,例如:

  • risk level;
  • case category;
  • scenario family;
  • evidence richness;
  • tool-required;
  • safety / governance path。

这样 overall score 才能和 关键切片门槛 同时报告。

常见坑

  1. 数据集太小: 少量普通用例无法覆盖边界情况
  2. 不做回归测试: 改了 Prompt 不知道效果变好还是变差
  3. 不做标签分类: 不知道哪类问题质量差
  4. row-level 随机切分造成泄漏: 同一 scenario family 的近重复案例跨 development/holdout
  5. 把 challenge raw average 当生产成功率: 高风险 oversampling 的集合分布与真实流量不同
  6. 只定义唯一答案: 对开放式 Agent 任务,更重要的可能是行为不变量和禁止行为

参考资料

创建于 2026/6/30 更新于 2026/8/19