Skip to content

Eval 与回归

🎯 学习目标

  • 建立覆盖典型与边界 case 的 Eval 集
  • 使用规则评分与 LLM-as-a-judge 组合
  • 在 CI 中做 Prompt/RAG 回归测试

引言

没有 Eval,就无法证明「改 Prompt 后真的变好了」。Eval 是 LLM 应用里最接近单元测试的质量门禁。

章节正文

第 1 步:Eval 集结构

每条 case 建议包含:

yaml
- id: faq-refund-001
  input: "如何申请退款?"
  expected_contains: ["7天", "原路返回"]
  forbidden: ["随时全额", "100%保证"]
  context_docs: ["policy/refund.md"]
  tags: [faq, refund]

覆盖维度:典型问法、口语变体、 adversarial 注入、空检索、多语言、超长输入。

第 2 步:评分方式

  1. 规则:JSON 字段存在、关键词包含/禁止、正则
  2. LLM-as-a-judge:强模型按 rubric 打 1–5 分
  3. 人工抽检:每周抽样 20 条校准自动分
python
def score_contains(output: str, case: dict) -> float:
    ok = all(k in output for k in case.get("expected_contains", []))
    bad = any(k in output for k in case.get("forbidden", []))
    return 1.0 if ok and not bad else 0.0

第 3 步:回归与版本管理

Prompt 文件头注释版本:

# prompt_version: v2.3.1
# eval_baseline: run-20260620 (accuracy=0.87)

CI 流程:eval → 对比 baseline → 下降超阈值则 fail。改动必须关联 eval_run_id 与 git tag。

动手练习

  1. 为客服退款场景写 10 条 Eval case(含 2 条 adversarial)
  2. 实现 score_contains 并对一条故意错误的回答得 0 分
  3. 设计 CI 阻断阈值:accuracy 下降 >2% 则失败

本节小结

Eval 集要全、可版本化;规则 + LLM judge 组合评分;CI 回归是 Prompt 改动的安全网。