# 这门 RAG 课值得上，重点在评测而不在搭建

> Jerry Liu 和 Anupam Datta 的两小时课程讲 RAG 三元组，三项检查找出问题、上下文与答案之间哪一环断了。

原文: https://fdetimes.net/zh/books-courses/building-evaluating-advanced-rag-course-review/

DeepLearning.AI 的 *Building and Evaluating Advanced RAG* 只有 2 小时 5 分钟，包含 6 个视频和 4 个代码示例。标题把“搭建”放在前面，但真正值得带去客户现场的是“评测”部分：RAG 三元组，也就是课程用来衡量 LLM 答案相关程度和忠实程度的三项指标。

对前线部署工程师（FDE）来说，这部分最值得细读。把 RAG 管道跑起来只要一个下午。难的是客户说“机器人回答错了”的时候：你得说清楚错在哪、为什么错，以及你的修复有没有让它变好。

## 谁来讲，讲了什么？

两位讲师是 LlamaIndex 的 Jerry Liu 和 TruEra/Snowflake 的 Anupam Datta。课程由 LlamaIndex 和 TruEra 两家合作方共同制作，难度为 Beginner，PRO 账户另有一份计分作业。

课程页面只显示 2025 年 10 月 7 日的更新日期，没有原始发布日期。这一点在重跑 notebook 时很重要。代码基于 LlamaIndex 编写，动手前先对照当前文档核对类名和参数，免得一个下午耗在版本报错上。

## 第一课：三元组是诊断工具

三元组由 TruEra 的开源库 TruLens 设计，用来在 RAG 架构的每条边上捕捉幻觉。上下文相关性检查每段检索到的上下文是否与问题相关；有据性衡量 LLM 的论断在多大程度上能追溯到原文；答案相关性则看答案对提问者是否真正有用。

三元组的真正价值，在于它能指出哪一环出了问题。设想一个查询人事政策的聊天机器人，员工问自己还剩几天年假。如果机器人拿差旅报销政策来回答，上下文相关性多半很低：检索器取错了文档，改提示词无济于事。

第二种情况：检索器取到了正确的休假政策，但机器人给出的天数在文档里根本没有。这时有据性会很低，因为模型超出给定上下文，夸大或编造了细节。

问题出在答案生成，要做的是收紧提示词或更换模型，而不是去动检索器。

第三种情况最难发现：上下文正确，每条论断也都有据可查，但机器人只笼统地介绍了请假流程，没有说出天数。答案有据，却帮不上提问者，所以答案相关性低。修复办法是要求模型针对所问作答。

这三个数字能把“机器人没用”的抱怨变成一张地址明确的工单。第一次和客户坐下来工作时，先要几条机器人答错的问题，逐条给三元组打分，再去动代码。

## 第二课：用小句子检索，给 LLM 更大的段落

句子窗口检索解决了一个常见矛盾：小分块检索精准但缺少上下文，大分块上下文充足却容易带进无关内容。按课程讲解，这项技术检索的不只是最相关的那一句，而是包括它前后句子在内的一个窗口。

在 LlamaIndex 中，系统按每个单句的嵌入进行匹配，然后由 `MetadataReplacementNodePostProcessor` 把每个句子替换成前后句子组成的窗口，再交给 LLM。根据文档，默认窗口是每侧 5 句，但代码示例设置的是 `window_size=3`。

所以，上下文的量要按实际运行的配置来算。按默认每侧 5 句算：每个匹配句子最多带 11 句进入提示词，取前 3 个结果时，LLM 最多读到 33 句。

若用 `window_size=3`，这两个数字分别是 7 和 21；如果匹配的句子彼此挨得近，窗口会重叠，实际句数还会更少。和客户估算延迟与 token 成本时，就用这个自己算出的上限。

## 第三课：分数高不等于有保证

TruLens 认为，三项分数都高时，可以确信应用没有产生幻觉。这个说法要带点怀疑来看，因为其他资料把三元组当作调试工具，而非质量保证。原因在打分者本身：三项指标通常都由 LLM 评审（LLM-as-judge）打分。

Snowflake 对这些评审做过基准测试：有据性评审的 F1 为 81%，答案相关性为 79%，上下文相关性只有 64%。这些评审与人工评分者的一致性从一般到较高不等，这意味着仍有部分问题会被打错分，上下文相关性尤其如此。

Snowflake 的另一篇文章表明，要改进评审，同样离不开标准答案数据。他们用 Eval-Guided Optimization 优化了评审的提示词；而在没有基准指引的情况下，TextGrad 没能改进任何一个评审。

给 FDE 的启示：向客户汇报三元组分数之前，先准备一小组人工标注的问题，弄清评审偏差有多大。

**要点:** 诊断指标告诉你故障在哪里，但只有人工评分能告诉你这个指标有多可信。

## 应该按什么顺序学？

课程难度为 Beginner。即便如此，如果你已经亲手搭过一个基础的 RAG 管道，收获会更大，因为学到三元组时，你手上已经有一个可以打分的系统。先看句子窗口那一课，再看评测部分，然后用自己的文档而不是示例数据重跑 4 个代码示例。

简历上不要只写“完成了这门课程”，而是写一行带前后对比数字的经历：比如你把一次故障定位到检索器，在一组真实问题上提高了上下文相关性，并用自己人工评分的标签核对了评审的打分。

一行证书只能说明你看完了课程。一张三元组分数表，配上你亲手标注的标签，能让面试官看到你不只会搭建，还会度量。

**本周动手试试:**

- 从客户那里（或个人 RAG 项目中）取 20 个真实问题，逐条给三项三元组指标打分，标出哪些问题失败在检索、哪些失败在答案生成
- 先用每侧 5 句的窗口运行句子窗口检索，再用 window_size=3 运行一次，对比两种配置下的上下文相关性、有据性和提示词 token 数
- 从这组问题中挑 10 个人工评分，与 LLM 评审的分数对比，找出评审在哪项指标上偏差最大

## 信源

- [Building and Evaluating Advanced RAG - DeepLearning.AI](https://www.deeplearning.ai/short-courses/building-evaluating-advanced-rag/)

- [sentence window retrieval - DeepLearning.AI](https://learn.deeplearning.ai/building-evaluating-advanced-rag/lesson/4/sentence-window-retrieval)

- [Metadata Replacement + Node Sentence Window - LlamaIndex](https://developers.llamaindex.ai/python/examples/node_postprocessor/metadatareplacementdemo/)

- [RAG Triad - TruLens](https://www.trulens.org/getting_started/core_concepts/rag_triad/)

- [RAG triad (PromptLayer glossary)](https://www.promptlayer.com/glossary/rag-triad)

- [What is the RAG Triad? - TruEra](https://truera.com/ai-quality-education/generative-ai-rags/what-is-the-rag-triad)

- [Benchmarking LLM-as-a-Judge for the RAG Triad Metrics](https://www.snowflake.com/en/blog/engineering/benchmarking-LLM-as-a-judge-RAG-triad-metrics/)

- [Eval-Guided Optimization of LLM Judges for the RAG Triad](https://www.snowflake.com/en/blog/engineering/eval-guided-optimization-llm-judges-rag-triad/)
