做 RAG 项目时,我如何建立评估集
用失败分类、引用命中和拒答测试代替“看起来回答得不错”的主观判断。
“感觉不错”不是指标
RAG 系统很容易在演示时给出流畅答案,但流畅并不代表正确。真正需要验证的是:检索有没有找到依据,回答有没有忠于原文,以及没有资料时系统能不能停下来。
把问题分成四类
我通常先建立一组覆盖真实使用场景的问题:
- 直接事实:答案出现在单个明确段落。
- 跨章节:需要组合两份以上资料。
- 术语与缩写:全文检索和向量检索表现不同。
- 资料外问题:系统理应拒答。
每类至少准备二十条,并记录预期来源、可接受答案和失败等级。
逐层定位失败
用户问题
-> 检索是否召回正确片段
-> 重排是否将正确片段放入上下文
-> 模型是否忠实使用上下文
-> 引用是否符合原始位置
如果召回阶段就失败,继续调整生成提示词没有意义。把链路拆开评估,才能知道下一轮优化应该落在哪一层。
最小可行评估脚本
评估集不需要一开始就做成平台。一个 JSONL 文件、一个执行脚本和一份手工复核表,就足以支持前十轮迭代。关键是每次修改后都重新运行同一组问题。
最终看什么
除了正确率,我还会记录引用命中率、拒答率、首字延迟和单位问题成本。质量、体验与成本同时可见,技术取舍才有依据。