独立课程
在这里学习完整课程并检验你的理解。
RAG Formation 的 16 节课程内容已完成。本页包含完整课程内容、本地参考资料和可直接在浏览器中完成的即时练习。
本课的具体收获
学完之后,你能拆解一道评估题,并准确说明它的参考答案为什么可靠;如果不可靠,也能指出问题在哪里。
观看讲解视频
1 · 评估就是一份契约
一道评估题不只是用户可能输入的一句话,它是产品团队与评分程序之间的一份契约:
问题:用户提出的问题
预期来源:必须支持答案的文档
必需事实 / must_include:正确答案必须包含的高信号事实
预期答案:评分器使用的参考含义
预期拒答 / expect_refusal:语料库没有答案时,系统是否应该拒答
跳过这份契约,分数可能看起来非常严谨,却在悄悄衡量完全错误的事情。
主要阅读:OpenAI《评估最佳实践》——注意为什么非确定性的 AI 系统一开始就需要结构化评估。
2 · 阅读演示评估集
打开:
demo/eval_set.yaml
这套演示评估集包含 65 道问题,分布在 25 份合成文档中:
- 35 道事实问题
- 7 道参考文档查找问题
- 9 道多跳问题
- 5 道跨语言问题
- 3 道缩略词问题
- 6 道不可回答问题
这样的组合不是随意安排的。聊天机器人可能轻松解决普通语义问题,却在精确的 SOP 编号、多文档推理,或知道何时拒答这些场景中失败。
3 · 为什么检索匹配只使用元数据
以 q30 为例:
预期来源: PR-QA-MRD-001、PR-QA-MRD-009
必需事实: 90 jours
这里有一个陷阱:语料库中的文档会互相交叉引用。PR-QA-MRD-001 的文本块正文里可能直接提到 PR-QA-MRD-009。如果盲目搜索整个文本块,评分器可能会错误地把 PR-QA-MRD-009 计为已检索到,尽管该文档本身从未真正出现在结果里。
这正是 eval.py 只信任来源元数据的原因——例如 source、document_name 和 filename 字段,而不是仅仅因为正文里出现了一个编号就给检索加分。
4 · 可回答与不可回答
这六道不可回答题不是糟糕的测试设计,而是安全检查。每道题都在问一个简单问题:系统知道自己的知识边界在哪里吗?
| 问题类型 | 预期来源 | 预期行为 |
|---|---|---|
| 可回答 | 一份或多份文档 | 回答所问事实并引用来源 |
| 不可回答 | 无 | 拒答,或说明已索引数据中没有答案 |
5 · 练习:相信题目还是拒绝它?
案例 A:expect_sources 指向 PR-QA-MRD-009,但语料库中任何地方都没有这份文件。这道题仍然有效吗?
案例 B:预期文档编号只出现在另一份文档的正文中,其他地方都没有。此时检索仍然应该得分吗?
案例 C:一道题完全没有预期来源,并标记为 expect_refusal: true。可靠的聊天机器人应该怎么做?
6 · 检查你的评估集
从 eval_set.yaml 的每个类别中挑一道题,并写下:
- 这道题到底可不可以回答?
- 哪些来源文档真正支持它?
- 正确答案必须包含哪个事实?
- 交叉引用会不会诱使评分器错误加分?
- 在这里,安全的失败应该是什么样?
企业场景连接
在 SOP、QA、法规、供应商和审计场景中,评估集不只是测试工具,也是产品安全边界的一部分。它首先定义了什么叫“有依据”“正确”和“未知”。
下一步行动
再运行一次离线一致性检查:
cd demo
python3 eval.py verify
然后从六个类别中各挑一道题,写一份简短检查报告并发给我——尤其要包含一个例子,说明只使用元数据匹配如何避免一次错误的检索加分。
对真实标签、评分逻辑或任何评估类别有疑问,尽管问我。 交完检查报告后,我会把第 3 课标记为完成。