跳转至

NLP高频面(42)RAG系统评估:方法、指标与实践指南

本文讨论了检索增强生成(RAG)系统评估的相关内容,包括评估的挑战、维度、方法、数据集设计、离线与在线评估对比、代码实现、案例研究以及未来展望等,旨在为RAG系统的评估提供系统化的方法和指导。关键要点包括:

RAG系统概述:RAG系统在大型语言模型生成文本时引入外部检索模块,由检索和生成组件构成,能提升知识密集型NLP任务效果,但评估复杂且具挑战性。

评估维度全景图:包括检索准确性、生成质量、真实性、鲁棒性、对齐性、响应多样性和效率等多个维度,各维度侧重考察系统不同方面性能。

常见评估方法与指标:检索模块评估指标有Precision@K、Recall@K等;生成模块评估指标包括基于参考答案的自动指标、无参考的自动评价和人类评价指标;联合评估方法包括问答任务制的准确率、多轮对话任务的评价等。

评估数据集设计:要覆盖真实场景和多样化查询,提供高质量的参考输出和标注,可利用模拟用户反馈,同时注意数据集规模与更新。

离线评估与在线评估的对比:离线评估可控性强、能快速迭代和提供丰富指标反馈,但可能无法涵盖实际情况;在线评估以用户反馈为依据,真实可靠,但面临资源与风险、变异因素多等挑战,一般采用离线优先、在线验证的流程。

代码实现与评估框架:可利用现有库计算指标,如Hugging Face的evaluate库;还有LangChain、Haystack等评估框架及专门的RAG评估工具,评估代码应良好组织以确保可重复性和效率。

未来展望:包括深化事实一致性评估、评估人类偏好与价值观、推动评估数据与基准进化、统一评估框架、加强人机交互评价与用户研究、开展跨模型和多模态评估以及关注效率与成本评估等。

引言:RAG系统概述与评估挑战

检索增强生成(Retrieval-Augmented Generation,简称 RAG)是近年来自然语言处理领域的一个重要进展。RAG 系统在大型语言模型生成文本的过程中引入了外部检索模块,从外部知识库获取相关信息,以缓解纯生成模型可能出现的幻觉和知识盲点。通过将查询相关的事实作为上下文提供给生成模型,RAG 能够显著降低输出中不符合事实的成分,提高内容的可靠性和准确性。

一个典型的RAG系统由两大组件组成:检索组件和生成组件。检索组件从海量的外部知识源(如文档库、数据库甚至整个互联网)中搜索与用户查询相关的内容,然后将检索到的结果作为上下文提供给生成组件;生成组件(通常是大型预训练语言模型)根据用户查询和检索到的上下文,生成连贯且符合语境的回答。图1展示了RAG系统的典型结构,包括数据接入的索引流程和查询时的生成流程。


Image

引入检索后,RAG系统在知识密集型任务上表现出色。例如,Lewis等人提出的RAG模型在开放域问答等任务上达到了当时的最新性能,生成的答案相比不使用检索的序列到序列模型更加具体、丰富且与事实一致。这表明,通过结合参数化记忆(生成模型自身存储的知识)和非参数化记忆(外部知识库),RAG能够显著提升知识密集型NLP任务的效果。

然而,RAG系统的评估也因此变得更加复杂和具有挑战性。传统单一模型的评估通常聚焦于输出质量一个维度,而RAG系统具有多层次的混合结构:既涉及检索阶段的信息查准/查全等指标,也涉及生成阶段的语言质量和真实性指标,还要考虑两者交互作用对最终结果的影响。下面我们总结RAG评估所面临的主要挑战:

检索与生成耦合的复杂性:RAG的性能取决于检索和生成两个模块的共同作用,因此无法仅通过评估单一组件来了解全貌。检索模块提供的文档质量直接影响生成模块输出的准确性和完整性;反之,生成模块对检索结果的有效利用也决定了系统整体性能。因此评估需要既考察各自模块的性能,也考察它们协同作用的效果。

动态海量知识库:检索组件面对的是体量巨大且可能动态更新的知识源,从结构化数据库到整个网络均有可能。评估这样一个检索模块面临多方面困难:首先,知识库规模庞大,相关文档可能分布在各处,需要高效评估查全率和查准率;其次,知识具有时效性,某些答案随着时间可能失效,评估必须考虑检索结果的时序有效性;此外,知识源多样且质量不一,检索可能返回误导性或低质量的信息,评估需要度量检索对不相关或低质内容的过滤能力。传统信息检索指标往往强调提高Top K的召回率,这可能促使系统倾向返回更多结果,但在RAG场景下我们更关心检索内容对生成是否有用。如何设计合理的检索评估方法,使其既注重覆盖率又关注有用性,是一个挑战。

生成结果的质量与真实性:生成模块通常由LLM驱动,它需要根据检索到的外部知识生成连贯、有用的回答。这一阶段评估的难点在于确定生成内容对输入的忠实度和准确性。模型输出不仅要在语义上相关、语言上流畅,还必须事实正确且与检索证据一致。对一些开放式或创造性的任务而言,“正确”或“高质量”的标准可能并不唯一,具有主观性,这使得评价更具复杂性。例如,在开放问答或对话生成中,不同表述可能都能满足用户需求,如何衡量这些输出的优劣需要精细的评估标准。


系统整体效用与鲁棒性:整体评估需要考察RAG系统将检索到的信息有效融入回答的能力,即检索模块对生成模块质量提升的增益。同时,还要考虑实际应用中的一些关键非功能性指标:例如响应延迟(检索和生成带来的时间开销)、鲁棒性(面对噪声输入或对抗性查询的稳定性)、歧义处理(对用户模糊查询的处理能力)等。这些实际因素直接影响用户体验和系统可用性,也应纳入评估范围。如果只关注离线准确率而忽视延迟,可能导致模型难以应用于实时场景;如果系统在稍作改动的同义词或措辞变化下性能大幅下降,则鲁棒性不足,会在现实中出现失败案例。

检索崩溃与幻觉问题:RAG特有的一些失效模式也增加了评估难度。例如,“检索塌陷”现象是指检索模型在训练后期可能退化为无论输入什么查询都返回几乎相同的文档。这一问题会让生成模块丧失有效的信息支撑。此外,LLM有时可能无视检索结果而依赖自身记忆作答,尤其在训练语料中出现过答案的情况下。对于开放域问答,如果训练语料中有多个可能正确答案,模型可能选择生成其参数中记忆的答案而非检索结果中的答案。这些都使得评估变得困难:我们需要检查检索模块是否真正发挥作用,以及生成内容是否严格依据检索证据而非臆测。对于检索不到有效信息的情况,系统是否能够适当地处理(例如回答“不知道”或要求澄清)也是一个评估点。

评价标准的缺失与不确定性:由于RAG输出的复杂性,多数现有评估指标各侧重一隅,尚不存在统一的“金标准”。以生成结果的事实一致性为例,人工评价虽然权威但耗时主观,而自动指标(如语言相似度或基于模型的判别)仍难完全对齐人类判断。此外,不同下游任务对于“成功”的定义不同,这导致评估需要任务定制:目前的基准往往各评各的侧面,缺乏全面、统一的评估框架。这给研发者比较模型、发现问题带来了困难。

综上所述,RAG系统评估具有多维度、多指标、强依赖上下文的特点,需要系统化的方法。本文将以学术化的方式,详细阐述评估RAG系统的关键维度、常用方法和指标,并探讨实践中构建评估的技巧和框架。我们将首先概览评估的各个重要维度,然后介绍检索和生成部分各自的评估指标,以及联合评估的方法。接着,我们讨论如何设计高质量的评估数据集,以及离线自动评估与在线用户反馈评估的对比。随后介绍具体的代码实现示例和开源工具/框架。通过一个案例研究,我们将对比多个RAG系统在相同任务下的评估结果,展示不同评估方法的实际意义。最后,我们展望RAG评估领域尚未解决的开放问题和未来的发展方向,包括如何更好地评估事实一致性以及引入人类偏好模型等。

评估维度全景图

要全面评估一个RAG系统,需要从多个角度衡量其性能与品质。本节我们梳理RAG评估的主要维度,构成一个“全景图”。这些评估维度包括:检索准确性、生成质量、真实性(事实一致性)、鲁棒性、对齐性、响应多样性以及效率(延迟与资源)等。每个维度侧重考察系统性能的不同方面,下文将分别阐述。

2.1 检索准确性与相关性

检索准确性是RAG系统的基础指标之一,衡量检索模块从知识库中找到相关且正确信息的能力。具体又可分为查准率(Precision)和查全率(Recall)两个基本方面。查准率关注检索结果的纯度——返回的结果中有多少比例是相关的;查全率关注检索的覆盖率——所有相关信息中有多少被成功检索到。这两个指标经常需要权衡:一个系统可以通过返回更多结果来提高查全率,但这可能牺牲查准率。

对于RAG,检索准确性直接影响生成组件的输入质量。如果检索返回的文档与查询高度相关且包含正确答案,生成模型才能产出可靠的回答。反之,如果检索到的内容偏离主题甚至是错误信息,生成结


果很可能谬以千里。因此,评估检索模块应仔细考察 相关文档是否在结果中且排名靠前。例如,我们常用 Precision@K 和 Recall@K 来评估:在返回的前K个文档中相关文档所占的比例(Precision@K)以及相关文档是否出现在前K个中(Recall@K)。

然而,如前所述,传统的信息检索评估偏向于提高Recall@K,即尽量把所有相关文档都检回来。在RAG场景下,高召回率固然重要,但如果返回大量冗余或边缘相关的文档,生成模型可能被噪音干扰,反而降低回答质量。因此评估检索时,我们还关心结果排序的有效性,即真正有用的证据是否排在靠前位置。为此,可以引入排序敏感的指标,如平均排名(Mean Rank)或平均倒数排名(Mean Reciprocal Rank, MRR),以及折损累积增益(DCG/nDCG)等。MRR关注第一个相关文档出现的位置,nDCG则允许对相关性进行分级打分,并考虑文档位置的折损,能够评估系统在排序中的表现以及对高度相关文档的偏好程度。

另一个细分指标是 内容覆盖率 。对于复杂查询,相关信息可能分散在多个文档中。一个好的检索模块应该尽可能检索到 所有必要的证据 。比如对于一个需要综合多方面知识的问答,评估者可以检查检索结果是否覆盖了问题所涉及的各个要点。这方面可以通过 召回相关实体 或 知识点 的指标来衡量,如 “实体召回率” (Context Entity Recall)——检索结果中包含了问题涉及的关键实体的比例。如果检索返回的文档虽然相关但遗漏了某些关键信息点,那么生成环节也无法正确地回答那些要点。

需要注意的是,有时知识库可能不包含正确答案(尤其在封闭域或最新信息查询中)。评估检索时,应能识别这种情况。负例查询(即不存在答案的查询)在评估集中占一定比例有助于测试系统是否会错误地返回看似相关但实际上并不包含答案的文档。这要求检索模块在没有相关内容时具有适当的拒答或返回空结果的能力。因此,我们在设计评估时,也可记录空检索的准确性,即对于应无答案的查询,系统未返回任何错误结果的比例。

2.2 生成质量与连贯性

生成质量维度关注RAG系统生成模块输出的自然语言文本的优秀程度。这包括语言层面的流畅度、连贯性,以及内容层面的相关性和有用性。理想的RAG回答应当准确回答用户的问题、条理清晰、语法正确、风格和语气恰当,同时避免含糊其辞或令人困惑的表述。

衡量生成质量的传统指标很多源自机器翻译、文本摘要等NLG任务。例如:

BLEU(Bilingual Evaluation Understudy):通过计算生成文本与参考答案之间的n元语法(n-gram)重合率来评估质量,重视精确匹配程度。BLEU常用于机器翻译领域,如果有参考答案文本,则可用来衡量RAG输出与理想答案的接近程度。较高的BLEU通常意味着输出涵盖了更多参考答案中的措辞和短语。需要注意BLEU对字面匹配要求高,可能无法充分评价那些同义替换或措辞不同但同样正确的答案。

ROUGE(Recall-Oriented Understudy for Gisting Evaluation):最常用于文本摘要任务,衡量生成摘要与参考摘要之间的n元语法和长串序列的重合。与BLEU偏精确匹配不同,ROUGE更看重召回,即参考答案的信息在多大程度上被生成答案覆盖。因此ROUGE在评估RAG回答是否涵盖参考答案要点方面有用。如果我们的评估数据为每个问题准备了参考答案或关键点列表,可以用ROUGE-L(Longest Common Subsequence)或ROUGE-n来检查模型回答是否包含了足够多的参考内容。

语言连贯性和流畅度一般由人工主观评估,但也可以借助模型打分或较浅层的指标。例如,可以统计生成文本的语法错误数、或者使用预训练语言模型对输出句子打分来评估其流畅度。此外,还有如困


惑度(Perplexity)这样的度量,用模型自身的概率看输出是否高概率自然语言。但因为RAG的输出通常自由多样,困惑度的作用有限,更多还是依赖人工或语法检查工具。

在开放问答或对话场景,有时输出并非一句话即可完成,而需要一定的结构和上下文衔接。这就需要评估连贯性(Coherence)和逻辑性。连贯性指回答内部是否条理清楚、前后一致,没有自相矛盾或跳脱的话题。逻辑性则指回答的推理过程和结论是否合乎逻辑。在评估中,我们可以让评审人员或自动工具检查回答中是否存在主题突然改变、前后信息矛盾、语意不清等现象。例如,对于一个要求解释原因的提问,如果模型给出的多句话回答前后矛盾,那连贯性就是差的。近期也有利用LLM本身来衡量这方面的尝试,例如提示GPT-4对回答的连贯性打分。

值得指出的是,生成质量不完全等同于回答准确性。一个回答可以语言上表达很好,但内容上并未真正回答问题或不准确;反之,有的回答内容点到了但语言较生硬。在RAG评估中,需要结合真实性指标(下一节)一起来看。但首先保障生成语言质量过关,可以避免表达缺陷干扰我们对内容正确性的判断。

2.3 真实性与事实一致性

真实性(Truthfulness)又称事实一致性(Factual Consistency),是RAG系统最重要的评估维度之一。它要求模型生成的内容与真实世界事实相符,特别是在有外部证据支撑的情况下不能违背证据或无中生有。

对于RAG而言,真实性体现在两个层次:

与检索证据一致:模型输出的每一项事实陈述应能够在检索到的文档中找到依据。也就是说,回答应当“扎根”于提供给它的上下文。如果模型引入了上下文中没有的细节,就属于“幻觉”产出,降低真实性。在评估中,我们希望度量回答对检索内容的忠实程度。一种简单的做法是让评审者逐句检查回答中关键事实是否能在提供的文档中找到出处(如标注出处句子)。自动化的做法则包括片段重叠检查和检索验证:例如将回答拆成片段,再用检索系统查询,看能否检索回与这些陈述匹配的文档。如果大量内容无法在原始检索结果中找到,则模型可能在胡编。

与客观真实一致:即便模型的陈述在检索证据中找不到,我们也希望它不要违背常识或已知事实。如果检索模块可能漏掉了一些信息,生成模型不应为了填充答案而凭空捏造错误事实。这方面的评估通常需要权威知识库或人类来判断。例如,一个医学问答系统回答了一个检索不到的新疗法,我们需要医学专家或可靠资料来核实其真伪。

评估真实性的自动指标近年有不少研究尝试。例如,Meta AI的研究者提出了 FActScore 指标,用于细粒度评估生成文本的事实准确率。FActScore通过将生成内容拆解成一系列原子事实,然后利用检索和强大的语言模型判定每个原子事实是否有可靠知识来源支持,最后计算支持的比例。这种方法可以比简单的对比参考答案更深入地分析生成文本中的细节,对长文生成的场景特别有用。例如,对一个人物生平简介的生成内容,FActScore可以逐条核实出生日期、职业、成就等是否有据可查,从而给出整体的真实性评分。

除了直接核对事实,还有一些间接评估事实性的方法。例如问答检验(QA-based evaluation):针对模型的回答,自动生成若干与事实相关的提问,让另一个QA模型根据回答内容作答,然后与真实答案比对。如果回答内容是可靠的,那么由它推导出的问答也应该正确。这类方法(如 Q^2 指标)曾用于评估摘要的事实一致性。


另一条思路是借助自然语言推理(NLI)模型。把检索证据和模型回答作为前提和假设,使用NLI模型判断“前提蕴含假设”还是“矛盾”、“中立”。如果NLI模型判定为矛盾,说明回答中有与证据冲突的地方。不过NLI模型本身也可能不可靠,因此通常结合多种信号。

人工评估真实性则是权威手段。可以让领域专家或众包标注员对每条回答标记“支持”、“拒绝”或“信息不足” $ ^{**} $(类似于事实验证任务的标签),这里“支持”表示回答与证据吻合,“拒绝”表示有冲突错误,“信息不足”表示无法从证据判断真伪。这种评价耗费较大,但对于关键场景(如医疗、法律问答)非常必要。

需要强调的是,在RAG系统中,确保真实性不仅是评估问题,更是系统目标:RAG引入检索的初衷就是为了提高事实正确率。因此我们在评估中可能会对真实性赋予较高权重。当一个系统的语言流畅度和风格都不错,但经常在细节上编造错误时,综合评估应给予较低评分。这也是为什么事实一致性评估是目前研究的热点领域之一,许多工作专注于设计更好的指标和工具来捕捉大型模型输出的潜在谬误。

2.4 鲁棒性与安全性

鲁棒性衡量RAG系统在各种非理想输入或环境下保持性能的能力。理想情况下,一个经过良好训练的系统,面对输入的微小改动、不确定性或恶意攻击,不应轻易崩溃或给出截然不正确的回答。

鲁棒性体现在多个方面:

输入扰动稳定性:如果用户查询稍作改写、同义替换、添加一些无关词,系统的回答质量应不会剧烈波动。例如,将“爱因斯坦的出生年份?”换成“爱因斯坦是哪一年出生的?”,或加入错别字、“爱因斯坦出生?”。评估时可以人为构造或自动生成一系列查询变体来测试系统的稳定性。如果某些变体导致系统检索不到答案或者答非所问,这说明模型对该类变化不够鲁棒。我们可以统计正确回答率随扰动的下降幅度作为指标。

对抗攻击抵御:更具挑战性的,是抵御恶意构造的输入。例如,有人可能在查询中混入看似合理但误导检索的词,或利用模型的弱点诱导其输出偏颇答案。对于RAG,可能的攻击包括:在问题中嵌入一个虚假断言以引导检索错误文档,或者引入奇怪格式使得检索模块解析失败等。虽然全面自动测试所有对抗情况很难,但评估集可以包括一些已知困难案例(如粘连着多个问题、含有误导信息的问题)来检查系统行为。鲁棒的系统应能识别并避免明显的陷阱。例如看到用户查询里包含“根据假新闻X,…是真的吗?”这类提示模型引用谣言的情境时,系统不应该认真回答谣言内容而应澄清或拒绝。

知识更新鲁棒性:对于依赖动态知识库的RAG系统,我们希望它对知识更新具有稳健性。例如,当底层知识库信息更新后,系统应该迅速反映最新事实,而不受旧缓存或模型记忆干扰。这可以通过时间切片评估来衡量:给模型一系列不同时期的问题(如关于某事件在2022年和2023年的描述),检查系统是否在不同时期数据下给出相符的回答。如果模型仍然输出过期信息,则在评估中扣分。

安全性 通常与鲁棒性并列,指系统不产生有害内容(包括偏见、歧视、仇恨言论等)的能力,以及遵循预先设定的对齐原则(alignment)。在RAG场景下,安全性尤其需要关注检索阶段引入的内容。因为生成模型可能受到检索到的文本影响:如果检索结果中含有不恰当内容,模型可能不加批判地复述、从而违背安全原则。因此评估对齐性(Alignment)的一个侧面,是检查系统在面对敏感或有害内容时的反应。例如,构造一些查询试图引出不良信息,观察系统是否会引入这些内容。一个对齐良


好的系统应该能够识别并过滤不适当的检索结果,或者在生成时避开输出这些信息,即便原始文档包含类似表述。

具体的安全性指标可以包括:毒性评分(使用现有的毒性检测模型打分系统回答的毒性倾向)、偏见测评(设计特定测试题来探测模型对种族、性别等是否表现偏见)等。如果RAG系统通过检索获得了公正的信息,生成模型本身经过RLHF等调优,一般能较好遵循安全守则。但我们仍需验证。例如,可以使用一个“红队”(Red Team)方法,让测试者有意尝试各种违规提问,记录系统有害输出的发生率(理想情况下应为零)。这样的安全鲁棒性评估通常需要人工分析支持,因为模型输出是否违规有时语义微妙,需要人工判断。

2.5 响应多样性

响应多样性指RAG系统在生成开放式回答时,是否具备多样化和非重复性。这个维度在对话系统、创意内容生成等场景中尤为重要。当用户多次询问相似的问题,或要求多种方案时,我们希望系统的回答不至于一成不变,而是能提供新的信息或角度。

评估响应多样性可以有以下切入点:

重问一致性 vs 多样性:当用户重复或略微修改问题多次,系统的回答应该在核心内容一致的前提下,具有一定措辞或细节上的变化,而不是机械重复同一句话。为测试这一点,可以构造若干具有相同意图的查询,让模型依次回答,观察输出差异。计算自我 BLEU(Self-BLEU)是一种量化方法:把多次回答彼此之间做BLEU计算,如果Self-BLEU得分过高,说明回答过于雷同。一个好的系统应有适度的变换,使Self-BLEU较低而Distinct-n(不同n-gram的比例)较高。

内容丰富度:对开放问题或聊天,对话模型应该能从多个方面展开,不局限于单一路径。例如用户问“你能告诉我关于X的情况吗?”,理想的系统第一次回答了A、B两点,下次再问可能补充C点新信息,而不是每次都只给A、B。如果评估集允许,人工可以标注每次回答提及的信息点,看多轮回答是否增量提供更多知识。这类似信息新增量(Information Gain)指标:TraceLoop框架就提出通过跟踪多轮交互的信息流,评估每次生成是否增加了新内容或只是重复。

多样性生成能力:在某些任务(如故事续写或文案生成)中,用户可能期待模型给出多种不同风格或视角的结果。此时评估多样性可以通过要求模型生成N个选项,计算这些选项之间的内容重叠率。指标如Distinct-n(n元不同序列的占比)或组内相似度都可用来度量。我们期望Distinct-n较高,表示生成内容涵盖丰富的用词和表达。

需要平衡的是,多样性不能以偏离准确性为代价。在问答场景,多样性更多体现在表达和细节上,而非核心事实的改变。如果模型为了追求回答不重复而乱换事实,那会损害真实性。因此评估时也要监控多样性输出是否保持一致正确。有时引入奖励模型可以实现这一点,但评估阶段主要是诊断:当发现多样输出中有矛盾,说明模型存在稳定性问题。

2.6 效率(延迟、内存与计算资源)

在实际应用中,RAG系统的效率指标同样至关重要。一个性能卓越但极其缓慢或资源耗费巨大的系统往往难以部署。因此我们需要评估:

响应延迟(Latency):指用户提出查询到系统输出答案所需的时间。RAG系统的延迟通常包括检索时间和生成时间两部分。检索时间取决于索引大小和检索算法效率(例如向量检索的ANN算法复杂


度),生成时间则取决于模型大小和生成长度。我们通常测量平均延迟和尾延迟(如95百分位延迟)来评估交互体验。如果一个问答系统平均响应需要3秒,而竞争系统只需1秒,在用户体验上差异明显。评估时可以针对不同长度的查询和不同复杂度的问题,测量系统延迟随负载的变化曲线。在A/B测试中,延迟也是一个重要指标。很多用户研究发现,响应超过一定阈值(如2秒)用户满意度会明显下降。因此在综合评估评分中,我们可能设定一个延迟上限要求,超出则扣分。

吞吐量(Throughput):如果系统需要并发处理大量请求(如在线客服场景),需要评估单位时间内系统可处理请求的数量。吞吐量与延迟相关但不同:一套系统可能单次问答1秒,但由于只能串行处理,吞吐量每秒1请求;而另一系统单次2秒但可并行10个请求,则每秒5请求。评估可以模拟并发场景下看性能是否线性降低,或出现资源争用导致更大延迟。

内存与计算资源使用:RAG系统需要存储索引(向量数据库可能占用GB级内存/磁盘)、运行大型模型(需要显存或CPU内存)等。评估应记录系统在服务时的峰值内存占用、模型参数量、必要的硬件配置等。特别是在设备端部署或资源受限环境,这些成为决定系统可行性的关键指标。例如,一个嵌入式客服机器人可能无法加载百亿参数模型,那么资源评估会更倾向小模型。对于相同任务,如果系统A用一个70亿参数模型,系统B用一个1750亿参数模型,在质量相近时,前者由于资源占用小会有明显优势。

扩展性:这属于效率范畴的更长期考量,即如果知识库规模扩大10倍,或并发用户增加10倍,系统性能指标如何变化。评估扩展性可以在不同数据规模、负载下测试性能曲线。如果发现检索延迟随着文档数增加呈线性上升或更糟,那需要在评估报告中注明瓶颈。这关系到系统未来的可扩展部署能力。

量化效率指标通常比较直接,通过日志和监控即可获得。不过需要注意对比的公平性:在比较两个系统时,要确保在相同硬件条件和优化程度下进行测量。例如,一个在GPU上运行的模型和一个在CPU上的模型延迟不具可比性。在学术报告中,我们会注明评估环境,如“在单张NVIDIA V100上测得平均延迟为X毫秒”。

综合来看,一个优秀的RAG系统应在质量和效率之间取得平衡。因此在全景评估中,质量类指标(准确性、流畅度、真实性等)和效率类指标都需要覆盖,以全面刻画系统性能。下一节中,我们将更具体地介绍评估RAG的常用定量指标和方法,其中许多指标对应于上述评估维度。

常见评估方法与指标

在了解了评估RAG系统的各个维度后,我们接下来深入探讨具体的评估方法和衡量指标。本节按照RAG系统的组成,分为检索部分的评估指标、生成部分的评估指标,以及针对整个系统联合效果的综合评估方法。

3.1 检索模块的评估指标

信息检索 领域有一套成熟的评估指标体系,这些指标直接适用于RAG系统的检索组件。下面介绍一些常见指标及其意义:

Precision@K 和 Recall@K(查准率@K、查全率@K):如前所述,Precision@K表示在检索返回的前K个结果中,有多少比例是相关的;Recall@K表示相关文档中有多少出现在前K个结果里。例如,一个查询有4个相关文档,检索系统返回前5个结果,其中包含了2个相关,则Precision@5 = 2/5 = 40%,Recall@5 = 2/4 = 50%。Precision@K通常用于衡量结果清单的准确性,而Recall@K衡量检索的覆盖


程度。在RAG评估中,经常会设置K等于检索模块实际提供给生成模块的文档数(例如K=5或K=10),以了解生成模型拿到的上下文包含了多少真正有关的信息。

平均准确率(Average Precision, AP)和均值平均准确率(Mean Average Precision, MAP):

Average Precision是对单次检索返回一组排名结果的综合评价。它的计算是对每一个相关文档,当其出现在排名第r时,计算当截断到r时的Precision,然后对所有相关文档的这些Precision取平均。简单来说,AP相当于计算精确-召回曲线下的面积。Mean Average Precision则是对多个查询的AP再取平均,得到总体性能。MAP是衡量检索系统整体性能的常用指标,兼顾了查全和查准(因为只有当更多相关被搜到且排在前列时AP才高)。在RAG评估里,如果需要比较两个检索算法在所有测试查询上的优劣,MAP是一个很好的汇总指标。

MRR(Mean Reciprocal Rank,平均倒数排名):MRR专注于第一个相关结果的位置。对于每个查询,找到第一个相关文档在检索结果中的排名r,然后计算倒数1/r,MRR是所有查询倒数排名的平均值。如果第一个相关项总是排在第一,那么MRR=1;如果总排在第二,MRR=0.5,等等。MRR在开放域问答等场景很常用,因为通常只需要找到一个包含答案的文档即可正确回答问题,越早出现越好。对RAG来说,如果检索模块MRR高,意味着几乎每个问题第一个返回的文档就是关键证据。这对生成模块非常友好,因为它总能马上拿到需要的内容。

• nDCG (Normalized Discounted Cumulative Gain) : nDCG是一种考虑了相关性等级和位置影响的指标。它假设相关文档可以有不同的重要性等级(比如高度相关、部分相关),然后累计增益DCG按排名顺序折损计算增益。DCG公式通常是 $ DCG@K = \sum_{i=1}^{K} \frac{rel_i}{\log_2(i+1)} $,其中 $ rel_i $ 是排名第i结果的相关性分(比如3分、2分、1分对应不同相关程度)。然后将DCG除以理想情况下(最佳排序)的DCG得到nDCG,使其归一化在0到1之间。nDCG@K能够体现不仅找到了相关,还关注越重要的结果排名越靠前。在RAG评估里,如果知识库标注了文档对答案的重要程度(例如包含直接答案 vs 只是背景信息),nDCG比Precision更能反映检索排序质量。常用的是nDCG@10等,看前10名加权相关性得分。

  • 命中率@K(Hit@K):这是一个简单的度量,检查在前K个结果中是否至少存在一条相关文档。它其实就是Recall@K在有且仅有一个相关目标时的情况。对于开放问答任务,Hit@1和Hit@5常被报告,因为只要前5里有正确文档,就有潜力正确回答。Hit@K可以视为Recall@K的特别版本,当相关集合大小为1时,Hit@K = Recall@K。

上述指标大都需要预先定义哪些文档算相关。因此我们通常需要评估数据集提供查询的“标准答案”所在文档,或者相关文档列表。比如,对于问答来说,如果给定了每个问题的答案出处文章,即可用这些指标评估检索。如果缺乏明确的相关文档标注,可以退而求其次,用答案文本或关键词去反查哪些文档应被检索到。

下面用一个简单的Python伪代码演示如何计算Precision@K和Recall@K,以加深理解:

代码块

假设 ground_truth_relevant 是字典,键为查询ID,值为该查询相关文档集合

2 ground_truth_relevant = {


3 "Q1": {"D1", "D3"} 4 "Q2": {"D2"} 5 } 6 # 假设 retrieval_results 是检索系统返回的结果列表 7 retrieval_results = { 8 "Q1": ["D2", "D1", "D5", "D3"], # Q1返回了D2,D1,D5,D3(排名顺序) 9 "Q2": ["D2", "D4", "D6"] 10 } 11 # 计算每个查询的 Precision@K 和 Recall@K 12 for q, results in retrieval_results.items(): 13 rel_set = ground_truth_relevant.get(q, set())

假如Q1相关文档是D1和D3,系统在前4个结果中了都找到了(D1在第2位,D3在第4位),Q2只有相关文档D2且排第一,则结果会是:

代码块 1 Q1 Precision@1: 0.00, Recall@1: 0.00 # 前1个结果没有相关 2 Q1 Precision@2: 0.50, Recall@2: 0.50 # 前2个有1个相关(D1) 3 Q1 Precision@3: 0.33, Recall@3: 0.50 # 前3个仍只有D1相关 4 Q1 Precision@4: 0.50, Recall@4: 1.00 # 前4个有2相关(D1,D3),覆盖全部 5 Q2 Precision@1: 1.00, Recall@1: 1.00 # Q2的D2在第1个,检索完美 6 Q2 Precision@2: 0.50, Recall@2: 1.00 # 前2个有1相关(D2) 7 Q2 Precision@3: 0.33, Recall@3: 1.00 # 前3个仍只有D2相关

从上述结果可以看出,这样的指标可以定量刻画检索性能。在真实评估中,我们会针对所有测试查询计算平均Precision@K、Recall@K等。有时也关注某些阈值,例如Recall@5=90%意味着大部分问题在前5文档里找到了答案。

除了这些通用指标,一些专门针对RAG检索的度量也值得一提:

知识覆盖率:如前面讨论,在复杂问答中,可能需要多个文档的综合。可以定义指标检查是否检索到了回答所需的所有知识元素。比如对于需要两个证据推理的问题(多跳问答),只有当所有中间证据文档都被检索到,才能正确回答。这种场景下,Precision/Recall不能充分体现,因为即便漏掉一个关键文档也会导致失败。因此可以专门统计完全覆盖率(all-needed-docs retrieved percentage)——即检索结果是否包含全部必要文档的比例。

检索结果的质量评分:有些框架对检索出的文档与查询的匹配度直接打分,如RAGAS工具中提出的“上下文相关性”评分。这可以通过让语言模型判断文档和查询的相关性实现,输出一个0-1分。这种评分可以细粒度评估每次检索返回内容的质量,而不仅限于二元相关/不相关。

错误拒绝率:在没有相关文档时,检索模块应该返回空结果或非常低的相关性分。评估可以记录在无答案查询集合中,系统错误地返回了高分文档的比例——这类似于信息检索中的“误报”评估。

通过综合运用以上指标,我们可以较为全面地评估RAG检索模块的效果:既看能否找到足够多的正确文档,又看排序是否合理,是否遗漏关键证据,等等。


3.2 生成模块的评估指标

生成模块的评估指标多种多样,包括传统的基于参考的评价和无参考的质量评价。这里按不同侧重点列出常用指标:

(1)基于参考答案的自动指标:如果我们为评估准备了每个问题的参考答案或期望输出(类似机器翻译的参考译文),则可以采用NLG领域经典的自动评价指标来比较模型输出与参考答案的相似度。这类指标的假设是:输出越接近人工撰写的理想答案,质量越高。

BLEU(布鲁分):前文已提及,BLEU计算输出与参考的n元gram匹配情况并结合惩罚项得出一个0-100的分数。BLEU值越高,表示机器输出和参考重合度越高。需要注意在问答场景下,参考答案可能非常简短或者有多种表达,因此BLEU的适用性有限。但在一些封闭型任务(如知识库问答,答案比较确定)中,可以使用BLEU评价生成模块回答的准确性。例如,如果答案是一个名称或一句话,BLEU接近1(或100)说明模型完全复现了参考答案。不过BLEU不能评价事实正确但表述不同的情况。

ROUGE:常用于摘要评估,如ROUGE-1、ROUGE-2(分别统计1元、2元gram召回率)以及ROUGE-L(最长公共子序列)。在RAG评估中,如果参考答案包含了解答问题所需的要点,ROUGE可以衡量模型回答是否覆盖了这些要点。举例来说,一个问题“列举X的三个优点”,参考答案给出了三个要点A、B、C,那么模型答案提到这些要点与否将决定ROUGE值高低。如果模型只说了A和B,漏了C,则ROUGE召回率会低。ROUGE相对BLEU更看重覆盖,因此对于要求全面性的回答(如列点问题)很有意义。

METEOR:另一机器翻译指标,考虑了同义词匹配和词形变化,相对于BLEU在小规模参考下相关性更高。在问答评估中,METEOR可以缓解BLEU过于苛刻的问题,比如回答用了同义词不会被完全当做错误。虽然METEOR主要在学术论文评价中出现,我们也可以将其作为辅助手段。

BERTScore:一种语义相似度指标。与上述基于符号匹配的指标不同,BERTScore利用预训练的语言模型(如BERT)将参考和候选答案编码为向量,然后计算逐词向量的匹配程度。它实际上评估输出与参考在语义空间的距离。BERTScore往往与人工评价有更高的相关性,因为它能识别语义等价而表述不同的情况。对于RAG回答,如果参考答案和模型答案意思相同但用词不同,BERTScore会给高分。使用BERTScore需要选择合适的预训练模型(一般用多语义理解良好的,例如英语用RoBERTa大模型)。它输出Precision、Recall、F1三个值,通常我们关注F1值作为总体相似度分数。

需要强调的是,参考答案的获取在开放问答场景中不总是可行。许多真实应用里,没有标准答案供比较。因此上述指标常用于封闭测试或学术基准(如SQuAD、有标准答案的问题)。在无参考的情况下,我们需要借助无参考评价。

(2)无参考的自动评价:无参考意味着没有标准答案,对输出质量的判断需要通过其他手段。近来,一个重要趋势是利用大型语言模型作为评估器。

LLM评估器(如GPT评分):利用GPT-4等强大的模型直接对候选输出进行打分或排序。方法通常是设计一个提示(prompt),让评估模型阅读问题、上下文和待评估回答,然后根据预设标准(如正确性、相关性、流畅度)给出评分或者判断优劣。这种LLM-as-a-judge的方法已在不少研究中展现出潜力:GPT-4的评分与人类评分有中等偏高的相关性,被认为可以用来减轻人工评估负担。例如,一项研究发现GPT-4对模型输出的排名与人类评价接近,并能指出参考答案存在的问题。在RAG评估中,我们可以让GPT-4依据检索到的文档评判回答是否正确、是否完整等。如果连GPT-4都能识别出的错误,


那么基本可以认定回答有问题。当然,使用LLM评估也有挑战:需要 carefully craft prompt,让它按照我们想要的维度打分;不同回合的提示一致性可能有所波动;模型本身的评判标准未必与实际最终用户的喜好完全一致。

FactScore/QuestEval等:前面提到的FActScore本质上也是无参考评价的一种,因为它不需要人工参考答案,而是通过检索知识验证生成内容。类似的还有QuestEval,它会把回答和源文章结合,自动生成问题来交叉验证答案正确性。这些指标针对事实一致性特别有效,可以自动发现回答中的错漏。例如FActScore的实现利用GPT-3和检索校验每个事实。在知识问答评估里,这类指标的出现提升了自动评价的可靠度,使我们在没有人工答案时也可大致评估输出真实性。

风格和语气匹配:对于需要特定风格的应用(如客服礼貌度),可以用规则或分类模型检测输出是否符合要求,如是否包含问候语、语气是否得体。这也是无参考的一种形式,因为我们有明确规范,不需要参考答案。比如要求回答必须包含参考来源链接,我们可以自动检查是否有URL输出,这成为一个“合规性”指标(citation accuracy)。

(3)人类评价指标:无论多少自动指标,人类的直接评价仍是不可或缺的最终标准。常用的人类评价方法包括:

信息正确性:标注员判断回答内容是否正确、完整。可以用尺度(如满分5分)或二分类(正确/部分正确/错误)。这直接对应真实性和准确性维度。

语言质量:标注员给出流畅度、连贯性评分。通常是Likert 5分或100分制。如果多维评价繁琐,也可能让标注员给出总体满意度分数,从而综合语言和内容质量。

偏好比较:一种有效的人类评估方法是成对比较(pairwise comparison)。给标注员两套系统对同一问题的回答,要求选择哪个更好。这种比较的结果经过统计分析可以推导出系统排名。比如通过Elo评分等将多次比较结果转化为分数。这种方法特别适合A/B测试,可以让实际用户在不知道是哪个系统的情况下选择回答优劣。

特定维度的人工检查:如前所述,评估对齐性、安全性往往需要人工。例如让工作人员查看回答中是否有敏感信息泄露、是否礼貌、不偏见等等。很多商业系统在上线前,会有专门的红队测试报告,列出各种不良输入输出的检查结果。

需要指出,人类评价耗时且成本高,不可能对每次模型更新都大规模进行。因此实践中常结合自动指标筛选+少量人工验证的方式。自动指标用于初步比较系统版本,只有在关键决策或需要确认时才请人评估。例如,某次改进检索算法,据自动指标表明回答准确率提升了,我们仍可能抽样一些问答对让人看,确保确实提升且没有引入新问题。

3.3 联合评估方法

联合评估方法指同时考虑RAG系统检索和生成两个部分的评估,或者直接对最终输出进行端到端的任务效果评估。这类评估往往对应具体下游任务的指标,不再将检索和生成分开,而是一并衡量整个系统完成任务的质量。

以下是几种常见的联合评估思路:

问答任务制的准确率(Exact Match / F1):在开放域问答设置下,一个RAG系统的最终目的是回答问题。因此我们可以直接使用问答任务的指标,例如精确匹配率(Exact Match, EM)和F1-score(基于


答案重叠的F1)。这些指标将检索和生成的效果融合为一:只有检索到了正确信息且生成正确答案才能得到高分。如果系统漏检信息或生成有误,最终答案的EM/F1会低。SQuAD等问答数据集使用EM和F1作为主要指标,在开放域问答(如Natural Questions, TriviaQA)中也常采用。因此对于以问答为目标的RAG系统,这是最直接的评估:看模型最终回答对问题的正确率。比如我们可以报告“Top-1答案准确率”为何,或者Top-3如果允许用户选择等。

多轮对话任务的评价:如果RAG用于对话系统,那么评估可能以整段对话为单位,包括对话成功率、用户满意度等。一个联合指标是对话完成率(是否成功解决用户问题)。这可以通过定义对话成功的客观标准(比如用户是否在结束时得到所需信息)或者让用户主观反馈实现。在评估多个轮次的RAG时,也需要考虑上下文依赖,例如知识是否在多轮中保持一致。所以联合评估在对话里可能还包括上下文一致性指标——这个超出了单轮生成的范畴,需要整体考察。在学术研究中,像DialoGPT等有使用对话级别的BLEU、METEOR、Distinct等来评估整体质量,但这些对RAG未必充分,需要特定设计。

知识覆盖率与正确性复合指标:有研究提出结合检索和生成的特殊指标。例如在给定知识库的问答中,有人使用Knowledge F1,它要求模型不仅答对问题,还要输出引用了知识库条目的证据。如果答案对但引用错误也不算完全正确。这类似要求“引用准确率”。TraceLoop提出的Citation Accuracy(引用准确性)指标也是这方向:它检查模型输出引用的文档是否真正支持对应内容。如果模型引用了一个文档但内容不匹配,那这个指标会低。对于需要输出来源的RAG应用(如带引用的问答),Citation Accuracy成为评价系统可信度的重要指标。

Retriever-Generator一致性:这概念上指检索模块提供的信息与生成模块利用的信息是否一致。在评估中,可以分析生成的回答用了哪些检索结果。例如定义“利用率”指标:回答中提及的要点占检索内容要点的比例。如果检索到了A、B、C三点信息,但回答只用了A和B,那么C被忽略了,利用率66%。理想的系统应该充分利用检索结果中的有效信息,不遗漏也不添加额外内容。如果存在回答内容不在检索结果中的情况,那就是一致性问题(生成不完全基于检索)。RAGAS等工具也提供类似上下文利用率的指标。这些指标能够提示我们:是检索阶段取回的信息不足导致回答缺失,还是检索已经足够但生成模块没有用好。

综合评分:有时我们会将多个方面的指标按照一定权重合成为一个综合评分,以便于对比模型。比如对于知识型对话系统,可以综合考虑回答准确性(占比高)、礼貌度、完整性、响应时间这几项,计算一个score。这虽然主观,但如果权重制定合理,可以在调优中作为目标函数。学术论文偶尔会见到自定义的综合指标,但通常还是拆开报告多个子指标更透明。

需要指出,联合评估往往高度依赖具体任务。针对问答,我们有明确准确率指标;针对对话或复杂任务,可能没有统一标准,需要任务定义和人工评价结合。例如在一个客户支持RAG系统中,“问题解决率”和“用户满意度”就是关键的联合指标。这可能通过线上实验(AB测试)或用户调查收集得到。相较之下,离线自动指标难以涵盖这些实际成效。

因此,在实践中我们通常先看联合的最终任务指标(如答案准确率),再通过分析检索和生成的分项指标来定位瓶颈。比如,如果整体准确率不高,我们会检查检索Recall是否足够;如果Recall够而准确率低,说明生成阶段处理不佳,需要改进生成模型或提示。

止如一项研究所指出的:“评估RAG系统需要发展综合的指标以有效捕获检索准确性和生成质量的相互作用”。这提醒我们在评估报告中,最好能将检索、生成和整体表现放在一起讨论。例如,可以绘


制一个雷达图,显示系统在检索Recall、生成流畅度、真实性、延迟等方面的分数,以便全面比较不同系统。

总结本节,常见的评估指标和方法提供了多重视角来看待RAG系统性能。实践中应根据任务需求选取合适的指标组合,既包括客观自动指标,也包括必要的人工评价,从而对系统有一个全方位的衡量。在下一节中,我们将讨论如何构建高质量的评估数据集,以支撑前述这些评估指标的有效应用。

评估数据集设计

评估指标的可靠性很大程度上取决于评估数据集的质量和代表性。一个精心设计的评估数据集能够全面且公正地考察RAG系统的能力,并发现其薄弱环节。本节讨论如何构造高质量的评估数据集,包括数据来源、标注、以及是否和如何利用模拟的用户反馈。

4.1 覆盖真实场景和多样化查询

首先,评估数据集应当充分覆盖系统预期应用的真实使用场景。这意味着所选的问题或任务应该反映实际用户会提出的内容,而不是仅局限于教科书式的问题。例如,如果RAG系统要用于客服问答,那么评估集里应包含各种用户提问的语气和风格,包括简洁的问句、长篇的描述性提问、多问句组合等。

另外,数据集中的查询应多样化,既包括常见简单问题,也包括边缘情况和复杂问题。这一点很重要,因为模型在常规问题上可能表现不错,但遇到极端输入(如很长的问题或罕见领域名词)就可能出错。通过在评估集中加入不同长度、复杂度的问题,可以观察系统性能随着问题难度的变化。实践指南建议在构建测试集时,有意识地覆盖:

不同类型的问题:如事实性问答(“什么/谁是…”)、列表型(“列出…有哪些”)、原因解释型(“为什么…”)、比较型(“X和Y区别”)等。

不同主题领域:即使系统主要面向一个域,也应包括该域内的各子主题,以及少量域外问题以测试边界情况。如果系统是通用领域,更应涵盖科技、历史、娱乐、生活等广泛主题。

不同措辞和语法:包含对同一语义的多种表达方式,如正式提问 vs 口语化提问、使用同义词的变体等。这有助于检验模型的鲁棒性和泛化能力。

为保证多样性,数据集构建者可以参考现有的大型问答集合(如Natural Questions、TriviaQA、WebQuestions等),或者从真实用户日志中抽取询问。与最终用户或领域专家讨论,有助于确保数据集中的问题具有代表性。

4.2 高质量的参考输出和标注

参考输出(Ground Truth)是评估数据集的核心。如果要计算准确率、BLEU等,需要提供每个输入查询的理想答案或评价依据。设计参考输出时,应注意:

正确且充分:参考答案本身必须是正确的。如果参考有误,会导致评估指标误导系统优化方向。此外,参考最好充分覆盖问题的关键点,以便评估覆盖度。如果一个问题可能有多个要素,参考答案最好涵盖所有要素,或者列出多个可能正确的答案。

多参考答案:对于开放问答或生成任务,一个问题往往不止一个正确回答表达。评估数据可以允许多个参考答案。例如,一个问句 “Who discovered penicillin?”,参考可以包括 “Alexander


Fleming”(亚历山大·弗莱明)以及他的全名和头衔等变体。BLEU等指标可以对多参考进行最大匹配,这样模型只要输出匹配任意一个参考即可得分。允许多参考能提高自动指标对正确答案的召回,减少模型被错误扣分的情况(有人类研究发现单一参考往往不足以评价LLM输出,因为LLM有时比参考更好)。

标注证据:对于RAG评估,很重要的一点是标注检索证据。也就是说,为每个问题明确关联的知识库文档或段落。有了这些标注,我们才能用Precision/Recall计算检索效果,也能让生成的事实性评估有依据。如果现有数据没有证据标注,可以考虑让标注员为每个答案附上出处链接或说明。这当然会增加标注成本,但会极大提升评估的诊断能力。WikiQA、Natural Questions等数据集都带有证据文章信息。

标注时,要权衡人工投入。高质量评估集通常需要专家参与标注,特别是专业领域(如医疗问答需要医生审核答案正确性)。如果资源有限,可以采用抽样验证:即先由弱AI或脚本生成初步答案,再由人审核修正。这种半自动流程能节省时间。

4.3 模拟用户反馈的利用

用户反馈是评估的重要信号来源。真实用户在使用系统时,往往会提供显式或隐式反馈:

显式反馈:如用户对答案的评分、点赞/踩、评论指正、纠错等。这些直接反馈可以作为评估指标本身(例如平均星级)或者用于监督改进模型。在评估数据集中,我们可以考虑收集一些来自真实用户的问题和他们反馈的预期答案或纠错信息。这样可以评估系统是否纠正了过去用户指出的问题,或者相比用户不满意的旧回答有改进。

隐式反馈:如用户是否看完答案、是否还追问后续问题、是否中途放弃等交互行为。这些日志可以反映回答是否满足了用户需求。如果有历史日志,可以定义一些隐式指标:例如“无满意度”的会话比例(用户频繁重复提问可能是不满意)、平均交互轮数(过长可能表示模型未能直接解答)。不过这些通常要在真实环境中观测,对于离线评估数据集,隐式反馈只能通过模拟。例如,可以在评估脚本中假设:如果模型回答正确,用户不会追问;若回答错误,用户会再尝试。因此通过模拟与模型对话,看模型能否在几轮内成功。这已经更接近在线评估,离线数据集难以完全做到,但可以引入一些多轮问题来测试,例如第二问基于第一问的回答。

模拟用户还可以用于 数据扩充 。现在强大的LLM(如GPT-4)可以扮演用户和助手,生成大量问答对或对话。研究者已开始使用LLM来自行构造评估数据。例如,让GPT-4生成一系列具有挑战的问题及对应答案(作为参考),甚至模拟不同难度、不同风格的提问。这些合成数据可以补充评估集中的空白区域。然而要小心的是,LLM生成的数据可能带有模型自身的偏好,不完全代表真实用户。如果把模型生成的数据用于评估模型,可能出现偏差(evaluation on synthetic data may not reveal all real issues)。

因此,推荐做法是 结合多种来源 构建评估集:既有真实用户问题(质量最高但数量有限),也有经过人工审核的LLM生成问题(用于扩充覆盖面),还有公开基准的题目(方便与文献方法对比)。一些近期工作展示了用LLM快速构造评测集的优势。例如,RGB等RAG基准通过让GPT生成特定格式的问题和答案,很快得到一个覆盖各种类型任务的评测集。这在学术研究中已成趋势,但在工业应用里,需要谨慎验证模型生成的问题是否符合真实需求。


4.4 数据集规模与更新

评估数据集不需要像训练集那样巨大,但也应有一定规模以确保统计显著性。通常几百到上千个测试查询是合理的,具体取决于任务复杂度。如果查询非常多样且任务困难,可能需要上千才能涵盖各种情况。而对于单一领域简单QA,几百就足够看到模型性能差异。

评估数据集不应一成不变。随着应用环境和知识的变化,评估集也要定期更新。比如一年后知识库更新了许多新事实,评估集应该加入一些新事实相关的问题,去测试模型对新知识的掌握。如果系统做了功能扩展(比如增加了多轮对话能力),评估集也要相应添加多轮交互问题。

有些组织实行挑战集(challenge set)机制:持续收集模型失败的案例,积累成一个额外的小评估集用于逼近模型的弱点。比如每次上线后,把用户投诉或模型出错的典型问题加入challenge集,下次评估时确保模型能解决这些问题。这种不断演进的数据集可以有效防止模型在某些角落案例上持续出错。

还需要注意 信息泄漏 问题。如果评估集一成不变且频繁使用,模型可能在不断迭代中“记住”评估题而出现过拟合。因此维护多个评估集(例如一个公开基准集、一个内部保密集)可以防止研发过程中过拟合某一套问题。最终上线前,用一套模型从未见过的问题进行评测,才能更真实地估计性能。

正如有研究指出的:“不存在一刀切的评估数据集,因为RAG系统具有高度的任务特定性”。我们需要针对不同评估侧重点设计不同子集,例如专门的事实一致性测试集、鲁棒性测试集等。综合这些子集,才能对系统有全面认知。

总之,评估数据集设计的目标是在有限成本下最大化评估价值:包含真实、有代表性的问题;配有可靠参考和标注;适度利用合成数据扩展覆盖;并定期更新保持与时俱进。有了好的数据集基础,我们才能自信地计算指标、比较模型。接下来,我们讨论评估的两种主要实施方式:离线评估与在线评估,以及它们各自的作用。

离线评估与在线评估的对比

评估RAG系统可以分为离线评估(Offline Evaluation)和在线评估(Online Evaluation)两大类。两者各有侧重,通常结合使用:先在离线用标准数据集和指标选出较优的模型,然后在在线真实环境中通过用户反馈验证其效果。下面分别介绍两者的特点和常用方法,并对比它们的优缺点。

5.1 离线评估

离线评估在实验室环境下进行,不直接接触真实用户。前面介绍的大部分自动指标和数据集上的测试都属于离线评估范畴。其主要特点有:

可控性强:可以严格控制测试输入、知识库版本和模型版本,在一致条件下比较不同模型的性能。这样可以进行A/B实验,精确测量性能指标差异。例如修改检索算法,其他不变,然后评估Precision/Recall变化。

快速迭代:离线评估通常能快速得到结果,因为不用等待真实用户产生数据。对于模型训练周期,研究者可以频繁运行离线评估来观测指标变化,从而进行调参或早停。自动化评估脚本使得这种迭代更加高效。

丰富的指标反馈:在离线环境,我们可以计算非常多细粒度指标,并深入分析错误案例。例如Precision@K、Recall@K、BLEU、FactScore等等——计算,帮助我们找到模型弱点。如果某模型


Recall很高但回答准确率依然低,我们就能针对性分析生成模块问题。这种详细诊断在在线阶段通常难以做到,因为在线更关注整体KPI。

离线评估的方法主要包括:

静态基准测试:使用预先准备的评估集,计算各种指标。可以绘制对比如表格、图表来比较模型版本。例如,某版本模型在一套500道题上达到平均准确率80%,新版本达到85%,且在事实一致性评分上也提升,则离线认为新版本更优。

对抗测试:设计一些极端或针对性的输入,在离线观察模型行为。例如输入长篇大段无用文本再加一个问题,看模型是否受干扰;或者输入带有微小扰动的同一问题多次,看输出稳定性。这属于 stress testing,不一定反映平均性能,但能暴露鲁棒性问题。

模拟用户交互:虽然没有真实用户,离线也可以用脚本或规则模拟一定的交互。例如针对多轮对话任务,准备一个脚本:读取一问,取模型回答,根据回答判断下一问等等。虽不及真人灵活,但可以跑出一些多轮流程,计算成功率。

离线评估的不足之处在于:

可能无法涵盖实际使用中的所有情况。再精心的数据集也有偏差,模型在真实环境可能遇到意想不到的问题。静态评估并不代表真实用户体验。用户可能提出评估集中没有的问题,也可能在意某些评估指标未覆盖的点(如回答语气)。

指标局限:自动指标并非完美代理人类喜好。例如,模型A的BLEU分可能低于模型B,但人工评估发现A的回答更清晰易懂。离线评估如果过于依赖指标,可能出现“优化指标却未改善真实体验”的情况。这在学术界并不少见(如机器翻译中过度优化BLEU反而带来翻译僵硬的问题)。

无法观察长周期效果:一些问题只有长时间交互才能显现,比如模型是否容易积累错误、或者长对话是否重复。这些在一次性离线问答中未必看出。

5.2 在线评估

在线评估是在真实系统运行环境下,借助真实用户的互动数据进行的评估。它通常发生在有限范围的灰度发布或A/B测试阶段,以用户反馈为主要依据。

主要的在线评估方法有:

A/B测试:将用户随机分成几组,各组使用不同版本的系统(或不同配置)。通过收集一段时间内各组的用户行为和反馈数据,比较系统效果。A/B测试要设定明确的评价指标,例如“用户满意度评分”、“问题解决率”、“会话时长”等,甚至一些业务指标如“转化率”、“留存率”。统计学上通过假设检验确定是否存在显著差异。A/B测试的优点是直接从用户角度评价:如果某版本显著提高了用户点赞率或降低了投诉率,就可判定更优。

用户反馈指标:在线系统通常会嵌入反馈机制,例如每条回答后让用户thumb up/down,或者在对话结束时让用户打分,还有客服场景里的“问题是否已解决?”问卷。这些反馈可以量化为指标:好评率、平均评分、解决率等等。与A/B类似,可以比较不同时间段或不同版本间这些指标变化。有时也会将这些反馈和离线指标联系,比如监测“事实错误投诉率”,看上线改进后是否下降,印证离线真实性指标的有效性。


交互日志分析:即不直接依赖用户填写的反馈,而是分析用户与系统交互的行为数据。例如:

这些隐式信号可以通过对照实验前后对比来评估改进。例如,新模型上线后观察“重复提问率”是否下降,若是则表明模型回答更能一次性满足用户。

在线评估的优点在于真实可靠:最终系统好不好,以用户是否买账来检验最有说服力。一些离线难以评估的维度(如用户是否喜欢回答风格)都融入在用户反馈中了。另外,在线评估可以发现离线没测到的问题,具有“开放集测试”的性质,逼近真实使用分布。

然而,在线评估也有不少挑战:

资源与风险:A/B测试需要投入一部分真实用户流量,如果新版本有明显缺陷,会影响这些用户体验甚至公司声誉。因此通常先确保离线评估不错,才在小流量上试。即便如此,也要监控以便发现重大问题及时下线版本。实施A/B还需要工程支撑和足够用户规模,否则结果不显著。

变异因素多:在线环境中,不可控因素很多,如用户群变化、时间因素、外界事件对用户行为的影响等,都会干扰评估。需要通过随机试验和大样本量,以及足够长的测试周期来平衡。但长周期又可能碰上其他变动(比如产品UI改版),所以经常要综合分析。统计上,要注意确保显著性(p-value)和功效(test power)。

指标选择:用户体验难以量化成单一指标,不同指标有时还会冲突。例如,一个新模型可能增加了平均会话时长(也许用户聊得更起劲了),但同时问题解决率下降(因为用户没得到直接答案一直在问)。这时评估就复杂,需要产品和数据科学团队共同解读指标,看哪些更重要。甚至需要做用户调研来佐证数据(比如长对话究竟是用户满意聊更多还是不满意才磨叽?可能需要访谈问卷)。

数据噪声:用户反馈并不总可靠。有人可能乱点满意或不满意,或者根本不提供反馈(通常反馈率很低,只极端满意或不满才会反馈)。日志行为也有歧义,比如用户重复提问也可能是因为他没看见回答或者网络问题,而不是回答不好。因此在线指标经常需要配合一定人工抽样分析,不能全自动当真。

5.3 离线 vs 在线:如何权衡

一般的开发流程是 离线优先,在线验证:

离线阶段:快速试验模型思路、参数、架构调整,在固定评估### 5.3 离线 vs 在线评估的协同

实践中,评估RAG通常采取离线优先,在线验证的流程。首先在离线通过标准数据集和自动指标反复调优模型,当离线指标显示显著改进时,再进入小流量的在线A/B测试以验证真实效果。离线评估提供快速反馈和详尽诊断,而最终是否部署取决于在线评估中用户反馈指标是否改善。

两者是互补关系:离线评估可以筛掉明显劣质的模型,减少在线试错风险;在线评估则检验离线指标的改进是否转化为真实用户价值。例如,某RAG模型在离线问答准确率提升了5%,但在线A/B测试发现用户满意度并无提升,甚至对话时长变长了。可能原因是新模型虽然更准确,但回答风格不够友好,引发更多追问。这种情况离线指标未能捕捉,但在线反馈揭示了问题。团队可据此调整模型的对齐性,再经离线验证后上线复测。

简而言之,离线评估保证模型“能行”,在线评估保证模型“好用”。只有当离线定量指标和在线用户反馈都达标时,我们才能确信RAG系统的升级真正成功。在实际迭代中,应不断在离线丰富评估集


(比如加入在线发现的新难例)、改进指标以更好预测用户感受,同时通过在线评估监控任何未被离线覆盖的新问题,形成评估的闭环。

代码实现与评估框架

评估RAG系统的过程可以借助现有的开源工具和框架来简化。下面我们介绍一些常用的技术栈(Python环境)和示例代码片段,帮助开发者快速上手评估。

6.1 利用现有库计算指标

Python生态中有许多评估指标的实现,可以直接使用。例如 Hugging Face 的 $ \text{evaluate} $ 库集成了常见的NLG指标(如 BLEU、ROUGE、BERTScore 等),使用方便。示例:

上面代码对一个简单句子计算了BLEU和ROUGE-L分数。同理,可以加载 bertscore、meteor 等指标。如果要评估检索性能,也有专门的IR评估库(例如PyTerrier、anserini)或自己计算 Precision/Recall,如前文代码所示。

对于事实一致性评估,已经有现成的实现可用。例如前述的 FActScore 提供了开源的 Python 包,可通过 pip install factscore 安装,然后对生成文本调用其 score 函数,即可得到支持的原子事实比例。不过 FactScore 需要配置检索和大型语言模型,会稍复杂。

6.2 LangChain评估模块示例

LangChain 是流行的LLM编排框架,它也提供了一些评估工具来帮助评测链式应用(包括RAG)输出的质量。LangChain的langchain.evaluation模块支持多种评价方式,包括问答比较、语言风格检查等。

一个典型用例是利用LLM对问答结果进行评价。LangChain内置了QAEvalChain,可以让一个语言模型充当评审,根据参考答案对模型的回答打分。示例代码:

在这个例子中,GPT-4会阅读问题、模型答案和参考答案,然后给出一个评价结果(例如“Correct”或“Incorrect”以及理由)。LangChain的这个功能相当于把人工评分自动化了。当然其准确性取决于所用LLM的强大程度,但研究表明GPT-4这类模型在评估问答时与人类判断有较高相关性。我们可以汇总 $ \underline{\text{graded_results}} $ 统计有多少回答被判为正确,作为模型整体准确率的估计。

LangChain还有 CriteriaEvalChain 等可以按照预设标准(如 “是否礼貌”、“是否简洁”)让 LLM 打分,非常灵活。这些工具简化了我们自己编写 prompt 来评测的工作。

6.3 Haystack评估框架示例

Haystack 是专注于问答和文档检索的框架,也提供了完整的评估管道支持。在 Haystack 中,可以方便地评估检索器、阅读器(生成模块)甚至整个 Pipeline 的效果。

假定我们用Haystack构建了一个RAG Pipeline,包括一个检索节点和一个生成节点,那么Haystack 的 $ \text{pipeline.eval}() $ 方法可以在提供标注数据(问题及其答案和答案出处)的情况下计算各项指标。例如:


from haystack import Pipeline

假设我们已经定义了 retriever 和 reader,并加载了数据集 labels

pipeline = Pipeline()

pipeline.add_node(component=retriever, name="Retriever", inputs=["Query》) pipeline.add_node(component=reader, name="Reader", inputs=["Retriever》) eval_results = pipeline.eval(labels=labels, params={"Retriever": {"top_k": 5}, "Reader": {"top_k": 1}})

Haystack会对每个问题运行Pipeline,用标注答案检查Reader输出的准确性(Exact Match、F1),以及检索的文档命中率等。它还支持详细的错误案例分析,比如可以列出哪些问题检索到答案了但阅读器提取错了,哪些完全漏检。Haystack最近还集成了 RAGAS 评估,可直接计算诸如上下文相关性、答案可信度等指标。

值得一提的是工具是 DeepEval ,这是一个与 Haystack 兼容的评估库。DeepEval 可以将评估定义为单元测试,它支持 14 种以上评估指标并能方便地与 Haystack Pipelines 对接,在 CI/CD 中自动评测 RAG 系统输出。比如,你可以编写 PyTest 测试来断言 “答案准确率至少 80%”, DeepEval 就会在 Pipeline 结果上计算指标,低于阈值则测试不通过。这样评估就融入了开发流程,当模型退化时会自动报警。

6.4 专门的RAG评估工具

近年来出现了专门针对RAG系统的评估框架,旨在简化和标准化复杂评估流程:

RAGAS:一个开源的参考无关评估工具。它聚焦于Precision、平均精度等检索指标,以及忠实度等自定义指标。RAGAS的特别之处在于不需要标准答案即可评估输出是否符合提供的上下文。这很适合在缺乏人工标注时做初步评估。RAGAS提供了灵活的接口,可与各种RAG系统集成而无需商业授权费用。比如你可以将自己的检索结果和生成答案传给RAGAS,它会返回基于平均精度和忠实度的评分,帮助你比较不同版本系统的表现。

TraceLoop:一个开源框架,突出对信息流的追踪。它能记录RAG系统从检索到生成每一步的信息来源,并据此评估信息增益、事实一致性和引用准确性等指标。例如,如果模型生成了一句话引用某来源,TraceLoop可以检查该来源是否真包含此信息,从而给出引用准确率。这种工具对学术研究或新闻领域很有用,因为这些场景非常注重信息出处的正确。

TruLens:一个偏向企业应用的评估库,专注于领域定制优化。TruLens可以让开发者定义自定义的评估指标,尤其针对特定领域知识。它内置了一些针对领域准确性的度量,并提供了与现有系统集成的接口。TruLens本身是商用工具,注重客户支持和持续更新,适合对评估要求高且愿意投入的企业团队。

Galileo:一个提供可视化平台的商业工具。Galileo的RAG模块能将各种评估指标集成到用户界面上,方便团队浏览和管理大规模评估结果。它强调可扩展性和易用性,适合需要对大量模型版本和数据进行对比分析的场景。例如,一个有成百上千问题的评估集,用Galileo可以很容易地筛选出模型失败的类别、查看每题的输出和证据,从而指导改进。

开放AI Evals:OpenAI开源了用于评估LLM的框架"Evals",也可用于RAG。它支持定义自定义的评估流程(比如链式提问、调用模型评判等),并可并行化执行评测。不过Evals使用需要编写一定代码,


对于具体RAG任务,常结合LangChain或自行调用模型来定制。

表1:常用RAG评估框架对比
使用场景推荐框架使用的指标特点概述
初期开发/无标注数据RAGAS平均精度(AP)、忠实度等无需参考答案,快速初步评估。
持续集成/自动测试DeepEvalPrecision、Recall、F1等 14+将评估嵌入CI流程,支持PyTest集成。
全链路溯源/注重引用准确TraceLoop信息增益、事实一致性、引用准确性追踪信息来源,确保输出可溯源。
在线监控/实时性能ArizePrecision、Recall、F1等实时监控RAG性能变化,适合生产环境快速反馈。
企业级全面评估/可视分析Galileo自定义指标、上下文契合度图形界面综合分析,易用高效。
特定领域优化评估TruLens域相关准确率、Precision等针对特定领域调整指标,有商业支持。

上述工具各有所长。开源工具如RAGAS、TraceLoop适合研究和初创团队,易于定制和集成;商业工具如Galileo、TruLens提供了省力的解决方案,适合大企业深度使用。许多团队可能综合使用多个工具:例如离线用RAGAS+TraceLoop找问题,上线后用Arize监控,再用Galileo做定期分析报告。

6.5 评估代码组织和可重复性

评估工作也应当像开发代码一样进行良好组织,以确保可重复性和效率。建议:

将评估脚本模块化,分成数据加载、模型推理、指标计算、报告生成几个部分,方便替换模型或数据时重用。同一套评估脚本应适用于不同版本模型,以保证结果可比。

使用随机种子控制任何随机过程(如有随机采样测试集、或模型有随机性),确保多次运行结果一致。

保存每次评估的输出和评分结果(例如保存为JSON或CSV),形成评估日志库。这样可以追溯模型历史性能,并为案例研究积累素材。

对于LLM评审这类涉及不确定性的评估,建议运行多次或多模型交叉验证,以降低偶然性。例如让GPT-4评两遍,或同时用ChatGPT和GPT-4评估,看结论是否一致。若分歧大,需要人工复核。

重视失败案例的收集整理。可以编写脚本筛选低分样例,将其汇总供分析。这些案例往往是改进的金矿,也是扩充评估集的来源(如前述挑战集)。

通过以上实践,评估代码本身也可以不断演进。当评估流程自动化并纳入开发流水线后,团队就能在每次模型更新时快速得到全面的性能报告。在持续集成中加入评估环节,有助于防止性能回退,并量化每次改进的影响。


总而言之,善用评估框架和代码工具,可以大大降低评估RAG系统的门槛和工作量。结合合理的数据和指标,这些工具能够帮助我们高效、可靠地追踪模型性能,为研发迭代提供明确方向。

案例研究:不同RAG系统的评估对比

为了展示上述评估方法的实际价值,本节通过一个案例研究,对比多个RAG系统在相同任务下的评估结果。我们选择“开放域问答”这一典型任务,比较以下三种系统:

系统A:无检索的纯生成模型(例如GPT-3.5直接回答)

系统B:基于传统BM25检索的RAG(Sparse Retrieval + GPT-3.5)

系统C:基于DPR向量检索的RAG(Dense Retrieval + GPT-3.5)

三个系统使用相同的生成模型架构,不同之处在于检索模块:系统A没有检索模块(完全依赖模型参数知识),系统B使用经典的关键词BM25检索文档,系统C使用经过训练的Dense Passage Retriever检索文档。假设我们在相同的问答数据集上评估它们,下表汇总了一些核心指标的对比结果:

指标系统A: 无检索系统B: BM25-RAG系统C: DPR-RAG
检索Recall@5N/A (无检索)72%85%
检索Precision@5N/A60%70%
答案准确率 (Exact Match)45%60%68%
答案平均F151%66%75%
FactScore (事实准确率)0.420.750.83
平均响应长度18字20字22字
平均响应延迟1.2秒 (最低)1.5秒1.7秒

表2:三种问答系统在测试集上的评估结果对比。(注:数据为示意性假设,以说明趋势。)

从表2可以看出一些有趣的现象:

系统A由于没有检索,其知识完全来自模型训练语料。它在一些常见问题上能回答正确,但总体准确率偏低(45%)。尤其是涉及冷门知识的问题,系统A经常给出错误或含糊答案。而系统B和C通过检索外部知识,将准确率显著提升到60%和68%。这印证了文献中的发现:引入检索的RAG模型显著超过纯参数模型在知识问答上的表现。

系统B与系统C的差异显示了检索质量的重要性。Dense检索的系统C比BM25系统B在检索Recall和Precision上都更高(例如Recall@5:85% vs 72%)。这直接带来最终答案准确率的提升(68% vs 60%)。特别在一些需要综合多文档的信息上,系统C常能找到所有相关段落,系统B可能漏掉一部分,导致回答不完整。由此可见,提升检索模块(从BM25到DPR)有助于提升整个RAG性能。

FactScore一项也体现了类似趋势:系统A最低,仅0.42,表示其输出中不到一半的原子事实有据可依。这反映了纯生成模型容易幻觉出错误细节。而RAG系统通过检索提高了事实支撑率,系统C达到


0.83,表明大多数陈述都有文档支撑。在人工评估中,我们也观察到系统A的回答经常包含明显谬误(例如把年份记错),系统C基本做到有据可查。这强调了RAG在事实正确性方面的价值:即使不能做到100%无错误,但显著减少了不真实信息的比例。

从效率来看,系统A因无需检索,延迟最低(1.2秒),系统C稍高(1.7秒)因为向量检索耗时略多。两种RAG系统的延迟差异相对小(1.5 vs 1.7秒),在可接受范围。但在实际部署中,如果知识库进一步扩大,Dense检索的代价可能增加,需要通过更优化的索引或减少Top K来控制延迟。在我们案例中,这一点提醒我们评估需关注性能开销,过高的延迟也许抵消了准确率提升的好处。幸运的是,本例RAG的准确率提升幅度较大(+23个百分点EM),完全可以支撑略增加0.5秒的延迟,从用户体验看仍是利大于弊。

响应长度指标显示RAG系统回答稍长一些,可能因为引用了更多细节。这本身不是坏事——只要信息相关。但值得注意回答长度过长可能影响用户体验或产生啰嗦倾向。因此在进一步评估中,我们让人工检查了回答是否简洁。结果发现系统C尽管回答长一点,但包含了更全面的要点(如在回答历史人物问题时给出了额外背景),用户反映良好。而系统B有时会因为BM25引入噪音信息导致回答跑题。这提示我们除了自动指标,还需结合人工质检确定“更长的回答”是否“更有用”。在评估报告中,我们因此加入了对每个系统输出的人工评分,发现系统C在信息丰富度上评分最高,系统A最低(这与FactScore结果一致)。

案例分析:例如,对于问题“哥伦布是哪一年抵达美洲的?”,正确答案是1492年。系统A回答:“哥伦布在15世纪末期到达了美洲。”(模糊且未给具体年份);系统B回答:“1492年。”(正确,但无其他说明);系统C回答:“1492年,哥伦布首航横渡大西洋,于1492年抵达了美洲。”(不仅给出年份,还补充了背景)。可以看到系统C利用检索提供了丰富且准确的信息。FactScore判定系统C答案的两个事实“1492年到达美洲”和“首航横渡大西洋”都有文档支持,因此得分高。而系统A由于没明说年份,被评为不正确,系统B虽正确但信息点单一。这个例子体现了评估指标与实际价值的一致:系统C获得最高准确率和事实分数,在用户体验上也被认为最佳。

通过这组对比,我们验证了评估方法对系统差异的刻画能力,也验证了RAG系统相较纯生成的优势。检索模块的改进(从无到BM25到DPR)带来了检索指标和生成指标的全面提升,最终反映在用户所关心的回答准确性上。值得注意的是,如果只看自动指标,系统C在BLEU等指标上也领先——因为它准确输出了参考答案的关键内容。但BLEU等并未体现额外的背景信息价值,所以我们辅以FactScore和人工评价来全面衡量。

这一案例研究说明:多维评估能够帮助我们深入理解不同系统的性能。例如,仅有准确率不足以解释原因,而结合检索Recall我们明白了系统差异来源于检索能力。另外也看到,在指标之外,配合适当的实例分析、人工反馈,可以验证自动评估的结论是否与实际体验一致。这种做法在研发中是很重要的:指标驱动改进,但最终还是要回到实际效果上核实。

总结来说,系统C(DPR-RAG)在本次评估中表现最佳,在保证适当响应速度的前提下,达到了最高的准确性和事实可靠性。因此,我们有充足依据认为系统C是值得部署的改进版本。这个结论也依赖于完善的评估手段,使我们对各版本优劣有清晰量化的认识,而不仅凭直觉判断。

开放问题与未来展望


尽管评估技术已经取得长足进步,要完全解决RAG系统评估的挑战仍有许多开放问题和未来研究方向。在本节,我们展望一些值得关注的领域:

(1)事实一致性评估的深化:事实一致性是RAG系统成败的关键,但目前的自动评估仍不完美。像FActScore这样的指标虽能细粒度核对事实,但依赖于检索质量和评估用的语言模型本身的可靠性。如果检索库不完备,或评估模型判断出错,都会影响准确性。因此未来需要更健壮的事实评估方法。一个方向是结合多重证据来源:同时利用搜索引擎、知识图谱等去验证生成内容,提高评估覆盖率。另外,开发专门针对幻觉检测的模型也是热点,有研究训练分类器来预测一句话是否是模型幻觉。但这些分类器本身也需要高质量数据和评估标准。总之,提高对生成文本每个细节真假的自动判别能力,将大大提升RAG系统可靠性,也方便在推理时即时纠偏。

(2)人类偏好与价值观的评估:大型模型经过RLHF(人类反馈强化学习)训练后,更加贴近用户偏好。但RAG系统引入检索后,可能出现新的偏好问题。例如,模型回答虽然factual,但措辞生硬不讨喜,或者在道德立场上不符合用户预期。如何评估输出是否符合用户偏好和社会价值观将是未来重点。这涉及评估回复的礼貌程度、情感色彩、文化适应性、政治中立性等。目前往往通过人工点评或简单的分类器(如毒性检测)去衡量,但这些维度高度主观和情境相关。未来可能需要训练“偏好模型”专门来评估输出的这些软性指标。一种思路是用类似RLHF中的奖励模型,但不是用于训练生成模型,而是直接用于评估打分。OpenAI已经在内部用奖励模型打分来筛选模型输出(例如InstructGPT论文中用一个reward model来比较模型),社区也出现了类似尝试。如果能够开源高质量的偏好评估模型,比如一个能判断“回答是否令一般用户满意”的模型,那将极大方便自动评估alignment方面的指标。当然,这类模型本身需要大量人类偏好数据训练,而且不同人群偏好不同,评估标准也许需要多元化设定,这是富有挑战的。

(3)评估数据与基准的进化:正如前文讨论,没有“一刀切”的评估集。未来评估基准会朝两个方向发展:其一,更贴近真实应用场景,支持上下文动态更新和交互的评估。比如构建一个包含不断有新文档加入的知识库,测试RAG系统持续学习和应对知识更新的能力。又或者设置一个交互式环境,让模型与模拟用户对话数轮解决问题,对整个对话流程进行评估。这种评估将超越静态单问单答,更接近实际系统的表现。其二,更细分的专项评估集,用来测试系统特定能力。例如专门的“去幻觉”挑战集、伦理困境集(测试模型在敏感话题上的响应)、复杂推理集(需要跨多文档多跳推理)。这些可以帮助发现模型极限并引导改进方向。近期已有一些工作朝这方向努力,如Facebook的KILT基准集合就涵盖了开放域QA、对话、事实验证等多任务,每个任务都有评价其知识使用的特殊指标。未来也许会出现一个统一的RAG评估基准,包含不同类型任务和场景,让研究者全面衡量一个RAG系统的多方面性能。

(4)评估框架的标准化与统一:当前评估RAG的方法和指标种类繁多,这既是活跃的表现,也带来了结果难以直接对比的问题。不同行业和论文常各用各的评估方案,导致缺乏统一标准。未来可能需要推动评估框架标准化,类似于过去机器翻译领域BLEU成为标配指标那样。在学术界,一些综述和提案(例如本文引用的RGAR框架)已经在梳理试图统一思路。如果社区能够就若干关键指标达成共识(比如知识型RAG必须报告检索Recall和答案准确率、必须报告一个事实一致性指标等等),将有助于公平比较不同方法,也推动工具开发者提供标准实现。在工业界,或许会形成事实上的标准套件。例如某大型公司开源一个评估平台,里面内置了一系列验证良好的评估流程,被广泛采用,就会起到类似作用。


(5)人机交互评价与用户研究:除了自动和静态的评估,将来可能更多地把真实用户卷入评估环节。一方面,众包平台可以在模型开发过程中更早、更频繁地获取人类评价,不仅仅在最后测试。这类似于游戏测试有内测玩家一样,AI评估也可以有“内测用户”。他们使用系统并提供详细反馈,甚至打标签训练评估模型。另一方面,对于一些主观取向强的任务,用户研究的方法值得引入AI评估。例如A/B测试后辅以用户问卷访谈,了解为什么某版本更受欢迎。这些定性反馈可能揭示自动指标未捕捉的体验因素。未来,评估RAG的团队可能需要包括懂用户研究的成员,从而将定性洞察融入模型改进。

(6)跨模型和多模态评估:当前RAG大多指文本检索+文本生成,但逐渐地,跨模态的RAG应用会出现,如从图像或视频中检索信息然后生成文本回答。这对评估又提出新要求:如何评估系统从图像中提取的信息是否正确利用?目前图像字幕生成等有自己的评估指标(如CIDEr、SPICE),未来可能融合进来。跨模型是指混合使用多个模型组件的系统评估,例如一个对话机器人既可以调用知识库也可以调用计算器,那么它的评估需要考虑工具使用的正确性。总之,RAG评估可能扩展到更广义的增强生成评估,这需要集成不同领域的方法,是一个开放课题。

(7)效率与成本的评估:随着模型变大、检索数据变多,评估本身的效率和成本也值得关注。比如评估一个超大型RAG系统可能涉及对数万测试问题运行模型,计算代价不菲。如何通过抽样等技术在可接受成本下得到有代表性的评估结果?如何评估系统的能耗、金钱成本等(特别在需要调用昂贵API或硬件时)?这些往往在技术评估中被忽视,但在实际决策中非常重要。未来或许会把这些因素纳入评估框架,使评估结果更全面。例如报告“每1000次问答消耗的美元成本”和“碳排放估计”等。

总的来说,评估RAG系统是一个不断演进的过程。随着RAG应用领域的拓展,我们需要相应地丰富评估手段。幸运的是,业界和学界已经意识到评估的重要性并积极投入研究。可以预见,在不久的将来,我们会看到更加智能的评估模型、更贴近人类判标准则的指标,以及更大规模的公共评测挑战。这些进步将帮助我们更准确地衡量RAG系统的真实性能和影响。

对于开发者和研究者而言,保持对最新评估工具和研究的关注将是一项重要任务。评估不再只是实验后附带的一环,而是指导系统设计和改进的灯塔。在“数据-模型-评估”三位一体的AI研发流程中,评估正扮演越来越主动的角色。例如,用评估反馈来自动调整检索组件、利用用户偏好评估来优化生成风格,这些都是未来可能出现的闭环优化方式。

结论:Retrieval-Augmented Generation系统作为连接模型与知识的桥梁,正变得愈发强大。而要充分发挥其潜力,科学严谨的评估至关重要。通过多维度的指标体系和灵活的评估框架,我们能够洞察RAG系统的优缺点,为改进指明方向。从当前进展看,我们已经建立了评估RAG的基本蓝图,但在对齐评估与人类期望、统一评估标准等方面依然有大量工作要做。展望未来,评估方法将继续完善,与RAG模型的革新相辅相成。我们期待看到一个生态:评估驱动更好的RAG模型诞生,而更强的模型又促使我们发明更新的评估手段。最终目标是确保这些融入外部知识的智能体可靠可信、性能卓越且贴近人意,真正服务于各行各业的需求。