上篇文档主要是对Advanced-RAG的定义、策略和适用场景做了一个细致的分析,那么当我们准备将一个基于大模型的RAG应用投入生产时,如何去判断这个RAG是否合理呢?下面有一些问题是需要提前考并应付的:
LLM输出的不确定性会带来一定的不可预知性。一个 RAG 应用在投入生产之前需要科学的测试以衡量这种不可预知性。
在LLM应用上线后的持续维护中, 需要科学、快速、可复用的手段来衡量其改进效果, 比如回答的置信度是上升了 10%还是下降了5%?
RAG 应用的"外挂"知识库是动态的, 在不断维护的过程中, 可能会产生新的知识干扰。因此, 定期检测与重新评估是确保应用质量的重要手段。
由于 RAG 应用依赖基础大模型, 那么如何在大量的商业与开源大模型中选择最适合企业的 大模型或如何知道大模型升级一次版本对 RAG 应用产生了多大影响?
当前,常见的RAG应用主要有两种评估方法:1、人工评估;2、自动化评估。
人工评估是RAG评估的最基础的办法,通俗的来说就是找一些垂直领域专家或专业的人工评估员对RAG生成的结果进行评估,评估的标准包括准确性、连贯性、相关性等。但是,懂得都懂,这种办法虽然能提供高质量的反馈,但是这种方法耗时费力,且受制于评估员的主观性和经验差异性。
就当前而言,自动化评估是企业的主流选择,同时也是当前RAG的主流和发展方向,主要是用过LLM和相关算法对RAG生成的文本进行量化评分,从而快速评估RAG性能。
任何RAG系统的有效性和性能都是依赖两个核心组件:检索器和生成器,检索器高效地识别和检索相关的文档,生成器使用检索到的信息生成连贯、相关和准确的响应。而为了评估RAG系统,通常使用两种类型评估:
检索评估:主要目的是评估上下文相关性,即检索到的文档与用户查询的匹配程度,确保提供生成组件的上下文是相关和准确的。
响应评估:衡量系统能否根据检索到的文档所提供的上下文信息,有效地生成高质量的最终响应。
RAG 应用的评估依据(评估模块输入要素):
输入问题(question):用户使用RAG应用时输入的问题。
生成的答案(answer):需评估的RAG应用输出,即问题的答案。
上下文(context):用户增强RAG应用输出的参考上下问题,通常在检索阶段生成。
参考答案(reference_anwser):输入问题真实的正确答案,通常需人类标注。
检索出的上下文与输入问题相关性
含义:指上下文中有多少内容与输入问题相关。
示例:
问题:“埃菲尔铁塔的建造年份?”
检索器返回:
“埃菲尔铁塔于 1887 年动工,1889 年竣工。”
“巴黎是法国的文化中心。”
对上述示例的分析:
第二个片段虽与巴黎相关,但未包含建造年份信息。
context_relevancy 会根据关键信息(如“1887”“1889”)的存在与否进行评分,而非仅统计相关片段的数量,且这种评估方式一般使用较少。
在具体的定义上,这个有点争议,
一种说法是:检索出的上下文(context)中与参考答案(reference_answer)相关的部分在上文(context)中是否出现在最前面的位置,这种较为常用。
另一种说法是:检索到的上下文(context)中 相关信息的比例,可以理解为
问题:“苹果公司的总部在哪里?”
上下文:“苹果公司(Apple Inc.) 成立于 1976 年,总部位于美国加利福尼亚州库比蒂诺市,CEO 是蒂姆·库克,主要产品包括 iPhone 和 Mac。”
分析:问题关注“总部位置”,上下文中仅“加利福尼亚州库比蒂诺市”相关,其余(成立时间、CEO、产品)无关→精确率 = 1/4=25%。
衡量检索到的上下文中是否包含回答问题所需的全部关键信息,或者说检索到的上下文(context)与参考答案(reference_answer)之间的一致程度,有时也称为命中率(hit_rate)。
问题:“《三体》的作者是谁?哪一年出版?”
参考答案:“刘慈欣,2006 年。”
上下文:“刘慈欣,中国科幻作家,2006 年开始在《科幻世界》连载《三体》。”
分析:参考答案的关键信息是“刘慈欣”和“2006 年”,上下文均包含→召回率 = 100%。
反例:若上下文仅包含“刘慈欣”,未提“2006 年”,则召回率 = 50%。
生成的答案(answer)是否完全基于提供的上下文(context)信息,没有捏造、幻觉或与上下文矛盾的内容。
将生成答案拆解为原子事实(如时间、地点、事件),逐一检查是否能在上下文中找到直接依据,如果存在上下文未提及的信息,即使正确,若上下文无依据也视为不忠实。
问题:“爱因斯坦在哪一年获得诺贝尔奖?”
生成答案:“爱因斯坦于1921年因光电效应研究获得诺贝尔物理学奖。”
上下文:“1921年诺贝尔物理学奖得主阿尔伯特·爱因斯坦,获奖理由为‘发现光电效应定律’。”
分析:答案中“1921年”“光电效应”“诺贝尔物理学奖”均来自上下文,无额外信息→ 忠实度=100%。
反例:若答案添加“他当时在普林斯顿大学任教”(上下文未提及),则忠实度下降。
生成的答案(answer)是否直接、清晰地回答了用户原始的查询问题(question)。即使答案忠实于上下文,但如果答非所问,那么这个答案也是无效的。
问题:“如何煮咖啡?”
生成答案:“咖啡豆需研磨至中粗度,用90°C热水冲泡3分钟。”
分析:答案直接针对“如何煮”的步骤,包含关键动作(研磨、冲泡温度、时间)→相关性高。
反例:若答案为“咖啡豆起源于埃塞俄比亚”(回答“起源”而非“方法”),则相关性低。
指标 | 归属 | 相关评估输入 | 含义 |
context_recall | 检索 | 上下文(context)、参考答案(reference_answer) | 上下文中覆盖用户问题所需关键信息的比例 |
context_precision | 检索 | 上下文(context)+参考答案(reference_answer)或者问题(question)+上下文( context) | 上下文的关键信息位置是否靠前或者是上下文的关键信息所占比例 |
faithfulness | 响应 | 答案(answer)、上下文(context) | 生成的答案是否完全基于提供的上下文信息 |
answer_relevancy | 响应 | 答案(answer)、问题(question) | 生成的答案是否直接、清晰地回答了用户原始的查询问题 |
context_relevancy | 检索 | 问题( question)、上下文( context) | 上下文中有多少内容与输入问题相关,较少使用 |