Ragas 介绍
检索增强生成(Retrieval Augmented Generation, RAG)是一种旨在增强大型语言模型(LLM)能力的前沿技术。它通过连接外部知识库,有效地解决了 LLM 面临的两大核心痛点:一是知识无法实时更新,二是对长尾知识(不常见或细分的知识)的记忆能力不足。
然而,在 LLMOps 的实践闭环中,如何准确、高效地评估一个 RAG 系统,本身就是一个巨大的挑战。每一次对检索器、分块策略或生成提示的调整,都可能影响最终输出的质量。传统的评估方法严重依赖昂贵且耗时的人工标注,这形成了一个缓慢、主观且成本高昂的评估循环,使得快速的 A/B 测试和持续的系统优化几乎无法实现。
为了打破这一瓶颈,Ragas 框架应运而生。它是一个创新的、无需参考答案 (reference-free) 的自动化评估框架,其核心是利用一个强大的 LLM(根据原论文,实验中采用 gpt-3.5-turbo-16k
)作为“裁判”,从多个维度独立地、量化地评估 RAG 系统的表现。这不仅仅是一个工具,更是敏捷开发 RAG 应用的关键赋能器。
本文将聚焦于 Ragas 框架中用于评估 RAG 系统输出质量的三个核心维度:忠实度 (Faithfulness)、答案相关性 (Answer Relevance) 和 上下文相关性 (Context Relevance)。我们将为您逐步拆解每个维度的评估逻辑、核心提示(Prompt)和计算方法。
让我们首先深入探讨如何确保答案的每一句话都有据可依——忠实度。
忠实度 (Faithfulness):确保答案的每一句话都有据可依
定义
忠实度 (Faithfulness) 指的是,在生成的答案中提出的所有声明(claims),都必须能够从给定的上下文中推断出来。这个指标至关重要,因为它直接关系到 RAG 系统的可靠性。
- 避免幻觉 (Hallucination):忠实度评估的核心目标是确保生成的内容不是模型凭空捏造的,从而有效抑制 LLM 的“幻觉”现象。
- 提供事实依据:它确保了检索到的上下文可以作为生成答案的有效辩护。这在法律、医疗等对事实一致性要求极高的领域至关重要。
评估流程
Ragas 通过一个巧妙的两步流程来量化忠实度:
1. 步骤一:分解答案。首先,使用 LLM 将生成的长答案分解为一系列简短、独立的声明(statements)。这一步的目的是将复杂的答案拆解为更易于验证的基本单元。
2. 步骤二:逐一验证。接着,针对每一个分解出的声明,再次调用 LLM,判断该声明是否能够被提供的上下文所支持。
计算方法
第一步提示:分解答案
Ragas 使用以下提示(prompt)来指示 LLM 将答案分解为多个声明:
作为一名课程设计师,这里需要补充一个关键的实践细节:为了提升 LLM 在此任务上的表现,Ragas 的实际实现采用了一种经典的“少样本(few-shot)”提示技巧。这意味着在提示中会包含一个或多个示例,向模型展示如何正确地从答案中提取声明,这是一种非常有效的任务定制方法。
第二步提示:逐一验证
在获得声明列表后,Ragas 使用下面的提示来让 LLM 判断每个声明是否被上下文支持:
分数计算
最终的忠实度分数 F
通过以下公式计算:
F = |V| / |S|
其中,|V|
代表被 LLM 验证为“是”(Yes)的声明数量,而 |S|
代表从答案中提取出的总声明数量。分数越高,代表答案的忠实度越高。
在确保了答案的真实性之后,我们还需要评估答案本身是否切题。这就是下一个维度——答案相关性的任务。
答案相关性 (Answer Relevance):确保答案切题,不多不少
定义
答案相关性 (Answer Relevance) 衡量的是,生成的答案是否直接且恰当地回应了用户的原始问题。
此指标的一个关键特点是,它不关心答案是否符合事实(这是忠实度的任务),而是专注于评估答案的针对性。它会惩罚那些不完整或包含了与问题无关的冗余信息的答案。
评估流程
答案相关性的评估流程体现了一种“逆向工程”的思路:
1. 步骤一:逆向生成问题。基于 RAG 系统生成的答案,反向提示 LLM 生成 n
个可能提出这个答案的问题。
2. 步骤二:计算语义相似度。使用 text-embedding-ada-002
这样的嵌入模型,分别获取原始问题和所有 n
个逆向生成问题的嵌入向量(embeddings)。
3. 步骤三:求取平均值。计算原始问题与每一个逆向生成问题之间的余弦相似度,并取其平均值作为最终的答案相关性得分。
我们可以通过一个简单的类比来理解这个逻辑:这就像一个逻辑一致性检查。如果答案是“埃菲尔铁塔于 1889 年完工”,那么一个高度相关的问题自然是“埃菲尔铁塔是何时完工的?”。而一个不太相关的问题可能是“法国有哪些著名地标?”。通过衡量逆向生成的问题与原始问题的接近程度,我们就能有效地评估答案的切题程度。
计算方法
提示:逆向生成问题
Ragas 使用一个非常简洁的提示来完成此任务:
分数计算
答案相关性分数 AR
的计算公式如下:
AR = (1/n) * Σ(sim(q, qi))
其中,q
是原始问题,qi
是第 i
个逆向生成的问题,sim()
函数代表它们之间的余弦相似度。n
是逆向生成问题的总数。
现在,让我们将分析的焦点从“生成”端转移到“检索”端,审视 RAG 流程的另一个关键环节:上下文的质量。
上下文相关性 (Context Relevance):确保检索到的信息都是精华
定义
上下文相关性 (Context Relevance) 评估的是,检索系统提供的上下文在多大程度上只包含了回答问题所必需的信息。它旨在惩罚那些包含了过多冗余或无关信息的上下文。
保持上下文的精简和高相关性至关重要:
- 降低成本:向 LLM 传入的上下文越长,API 的调用成本就越高。精简的上下文能直接节省开销。
- 提升效率:研究 (Liu et al., 2023) 发现,当上下文过长时,LLM 如同一个会“走神”的学生,倾向于忽略中间部分的信息。一个精简、高相关的上下文能确保模型的“注意力”集中在最关键的信息上,从而生成更准确的答案。
评估流程
评估上下文相关性的流程非常直观:
1. 步骤一:提取关键句。给定原始问题和检索到的上下文,提示 LLM 从上下文中抽取出所有对于回答问题至关重要的句子。
2. 步骤二:计算句子比例。计算提取出的关键句子数量与上下文中总句子数量的比例,这个比例就是最终的上下文相关性得分。
计算方法
提示:提取关键句
Ragas 使用以下提示来指导 LLM 识别并抽取出上下文中的关键句子:
分数计算
上下文相关性分数 CR
的计算公式为:
CR = number of extracted sentences / total number of sentences in c(q)
这个比率直观地反映了上下文中的“信噪比”,分数越高,说明检索到的内容越精炼、越有价值。
至此,我们已经详细拆解了 Ragas 框架评估 RAG 系统的三个核心维度。最后,让我们对这些方法进行一个全面的归纳与总结。
Ragas 框架的核心价值
通过对忠实度、答案相关性和上下文相关性的系统性评估,Ragas 为我们提供了一个全面、自动化的视角来审视 RAG 系统的性能。
总结
下表总结了这三个维度的核心关注点与评估方法:
评估维度 | 旨在回答的核心问题 | 核心评估方法 |
---|---|---|
忠实度 (Faithfulness) | 答案中的声明是否都能在上下文中找到依据? | 将答案分解为声明,并逐一验证其是否被上下文支持。 |
答案相关性 (Answer Relevance) | 答案是否直接、完整地回应了问题,没有冗余信息? | 从答案逆向生成问题,并计算其与原始问题的语义相似度。 |
上下文相关性 (Context Relevance) | 检索到的上下文是否精简,只包含必要信息? | 从上下文中提取回答问题所需的关键句子,并计算其占比。 |
核心优势
Ragas 框架最大的价值在于其可靠性和自动化。在与人类判断的对比测试中,Ragas 的表现证明了其作为自动化评估工具的有效性。在评估忠实度 (Faithfulness) 时,其结果与人类标注员的一致性准确率高达 95% (0.95),表现出极高的可靠性。在评估答案相关性 (Answer Relevance) 和上下文相关性 (Context Relevance) 时,Ragas 的表现同样显著优于基线方法,与人类判断的准确率分别达到了 78% 和 70%,证明了其在整个评估流程中的有效性。
启示
对于正在学习自然语言处理和大型语言模型的同学来说,理解像 Ragas 这样的评估方法论,其重要性不亚于学习如何构建模型本身。我们应该将这些指标视为诊断工具,用以指导系统的优化:
- 高忠实度、低答案相关性:这可能意味着你的检索器找到了事实正确但与问题核心无关的信息。答案虽然有据可依,但并未切中要害。
- 高答案相关性、低上下文相关性:这可能暗示你的分块策略过于宽泛,导致检索出的上下文中包含了大量“噪音”。LLM 不得不费力地从中筛选关键信息。
- 低忠实度:这是一个明确的警报,说明你的生成模块可能正在产生“幻觉”,或者检索到的上下文本身就不足以支持生成答案。
掌握这些评估方法,是从理论走向实践、从构建一个“能用”的系统到打造一个“好用”的系统的关键一步。