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 步:评分方式
- 规则:JSON 字段存在、关键词包含/禁止、正则
- LLM-as-a-judge:强模型按 rubric 打 1–5 分
- 人工抽检:每周抽样 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。
动手练习
- 为客服退款场景写 10 条 Eval case(含 2 条 adversarial)
- 实现 score_contains 并对一条故意错误的回答得 0 分
- 设计 CI 阻断阈值:accuracy 下降 >2% 则失败
本节小结
Eval 集要全、可版本化;规则 + LLM judge 组合评分;CI 回归是 Prompt 改动的安全网。