200条够吗?覆盖了所有 query 类型吗?生成阶段的答案质量怎么评估?也是你自己看的?有没有用自动化评估工具
P1 · evaluation · 🏢 腾讯
1️⃣ 考察意图
面试官在考察你对 RAG 系统评估的工程化思维,而非单纯背概念。核心看三点:一是测试集规模与覆盖度的 trade-off,能否用 200 条覆盖关键 query 类型并给出量化理由;二是生成阶段评估的自动化能力,是否知道 RAGAS、DeepEval 等工具,并理解忠实度、答案正确性等指标;三是对评估盲区的警觉,比如自动化工具在否定性查询上的误判。答好了能展示你从“跑通 demo”到“上线可观测”的硬实力。
2️⃣ 标准答
1. 测试集规模:200 条够吗?
- 够,但有前提。200 条是工业界常见的“快速验证集”规模,适合迭代期。但必须做分层抽样:按 query 类型分配比例。例如:简单事实查询(40%)、多跳推理(25%)、否定性查询(10%)、口语化/拼写错误查询(10%)、时间敏感查询(10%)、边界案例(5%)。
- 为什么不是 1000 条? 成本 trade-off。每条 query 需要人工标注 ground truth 答案和评估维度,200 条人工标注成本约 2-3 人天。如果上线前做回归,可以扩展到 500-1000 条,但初期 200 条足够暴露 80% 的召回和生成问题。
- 实际落地的坑:很多人只按“随机采样”建测试集,结果全是简单事实查询,多跳推理覆盖为 0。解法:用聚类 + 人工筛选,先对线上日志 query 做 embedding 聚类,每类抽 10-20 条,再补充人工构造的否定性查询(如“哪个产品没有 X 功能?”)。
2. 覆盖所有 query 类型?
- 不可能 100% 覆盖,但必须覆盖“高损类型”。高损类型指:一旦没覆盖,上线后用户满意度会暴跌的 query。例如:
- 否定性查询:RAG 系统常因检索阶段漏掉否定词而答反,测试集必须包含“不是/没有/除了”等结构。
- 多跳推理:如“2023 年 Q3 营收最高的部门是哪个?它比 Q2 增长了多少?”——需要两次检索和一次计算。
- 口语化/缩写:如“微信支付咋开通?”——测试检索器对口语的鲁棒性。
- 工具辅助:用LangSmith或Arize AI的 trace 分析,看线上哪些 query 的 retrieval 分数低、用户反馈差,反向补充到测试集。
3. 生成阶段答案质量评估:自动化 + 人工
- 自动化工具:首选 RAGAS,它提供四个核心指标:
- 忠实度(Faithfulness):答案是否基于检索到的上下文,而非幻觉。用 LLM 打分,但注意:对否定性查询,RAGAS 的忠实度可能误判(因为 LLM 会忽略否定词)。解法:对否定性 query 单独用DeBERTa 微调的分类器做二分类。
- 答案正确性(Answer Correctness):与 ground truth 的语义相似度。用 BERTScore 或 GPT-4 作为 judge,但 GPT-4 成本高,建议只用于 20% 的抽检。
- 相关性(Relevance):答案是否回答了 query。用 ROUGE-L 或 BLEU 做基线,但更推荐 LLM-as-judge(如用 GPT-4 打分 1-5)。
- 上下文精度(Context Precision):检索到的文档是否包含答案所需信息。用 NDCG@k 计算。
- 人工抽检策略:对 200 条测试集,自动化跑全量,人工抽检 50 条(按类型分层抽)。重点看自动化工具容易误判的 case:否定性 query、多跳推理、答案包含数字/日期。人工抽检时用 Likert 5 分制,并记录错误类型(幻觉/遗漏/冗余)。
- 实际落地的坑:RAGAS 的忠实度指标在上下文包含矛盾信息时表现差。例如,检索到两段文档,一段说“A 产品 2023 年营收 100 亿”,另一段说“A 产品 2023 年营收 120 亿”,RAGAS 可能认为答案“100 亿”不忠实。解法:在评估 pipeline 中增加矛盾检测,用 NLI 模型(如 BART-large-mnli)判断上下文是否矛盾,若矛盾则标记为“需人工复审”。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:测试集规模、query 类型覆盖、生成评估自动化。第一,200 条够用,但必须按类型分层抽样,比如简单事实 40%、多跳推理 25%、否定性查询 10%,否则覆盖不全。第二,不可能覆盖所有类型,但必须覆盖高损类型,比如否定性查询和多跳推理,用线上日志聚类来补充。第三,生成评估用 RAGAS 的忠实度、正确性、相关性指标跑全量,再人工抽检 50 条,重点看自动化工具容易误判的否定性 query。总结一句:200 条测试集 + 自动化评估 + 人工抽检,是工业界性价比最高的评估方案。”
4️⃣ 高频追问 & 应对
追问 1:RAGAS 的忠实度指标在否定性查询上误判率高,你怎么解决?
先分析误判原因:RAGAS 的忠实度用 LLM 逐句判断是否可归因于上下文,但 LLM 对否定词敏感度低。解法分两步:一是对测试集中的否定性 query,单独用微调的 DeBERTa 分类器做二分类(判断答案是否与上下文矛盾),准确率可达 92% 以上;二是在评估 pipeline 中增加规则层,比如检测答案中是否包含“不是/没有”等否定词,若包含则强制走人工复审。成本上,微调 DeBERTa 只需 500 条标注数据,训练 1 小时。
追问 2:如果线上用户 query 分布和测试集差异很大,你怎么保证评估有效性?
这是典型的“分布偏移”问题。解法:用在线评估补充离线评估。具体做法:在线上部署 shadow 模式,对 5% 的流量同时跑新旧版本,用用户反馈(点赞/点踩、停留时间)作为评估信号。同时,每周从线上日志中随机采样 100 条 query,加入测试集,重新计算指标。如果发现测试集指标和线上指标趋势不一致(比如测试集准确率 90% 但线上用户满意度下降),说明测试集分布已偏移,需要重新聚类和标注。
追问 3:你提到用 GPT-4 作为 judge,但成本高,有没有替代方案?
有。替代方案是开源模型微调。用 GPT-4 标注 1000 条评估数据(打分 1-5),然后微调 LLaMA-3-8B 或 Mistral-7B 作为 judge。微调后的模型在相关性打分上与 GPT-4 的 Spearman 相关系数可达 0.85 以上,但推理成本降低 90%。另外,可以用投票机制:用 3 个不同的开源模型(如 Qwen2-7B、DeepSeek-7B、Mixtral-8x7B)分别打分,取中位数,能减少单个模型的偏差。
5️⃣ 避坑 · 常见错误答法
- ❌ “200 条不够,至少需要 1000 条,否则不准确。” → ✅ “200 条在迭代期够用,但必须分层抽样覆盖高损类型。如果上线前做回归测试,可以扩展到 500-1000 条,但初期 200 条能暴露 80% 的问题,性价比最高。”
- ❌ “生成评估用 ROUGE-L 和 BLEU 就够了。” → ✅ “ROUGE-L 和 BLEU 只能衡量字面重叠,对语义正确性不敏感。必须用 RAGAS 的忠实度、答案正确性等语义指标,或者 LLM-as-judge,否则会漏掉‘答案正确但表述不同’的 case。”
- ❌ “自动化评估可以完全替代人工。” → ✅ “自动化评估有盲区,比如否定性 query 的忠实度误判、多跳推理的答案正确性误判。必须保留人工抽检,至少 20% 的测试集需要人工复审,并记录错误类型用于迭代。”
6️⃣ 简历呼应
- 如果你有 RAG 项目:从“测试集构建”切入,强调你如何用线上日志聚类 + 人工构造否定性 query 来提升覆盖度,并对比了 RAGAS 和人工评估的偏差。
- 如果你只做过传统 NLP:用“文本分类评估”类比,说明测试集分层抽样和自动化评估指标(如 F1、准确率)的迁移,但强调 RAG 评估需要额外关注忠实度和上下文精度。
- 如果你是校招无项目:聚焦“RAGAS 论文复现”,说明你阅读了 RAGAS 论文(Lewis et al., 2023),并复现了忠实度指标,发现了否定性 query 的误判问题,提出了用 NLI 模型辅助的改进方案。
- RAGAS: Automated Evaluation of Retrieval Augmented Generation (Lewis et al., 2023)
- DeepEval: A Framework for LLM Evaluation (Confident AI)
- Evaluating RAG Systems with LangSmith (LangChain 官方博客)
- BART-large-mnli: 用于矛盾检测的 NLI 模型 (Facebook AI)
- LLM-as-Judge: A Survey of Evaluation Methods (Zheng et al., 2024)