在这里插入图片描述

还在用“肉眼扫描”判断RAG效果?RAGAS框架让你告别玄学,用一行代码量化大模型回答质量!本文将手把手拆解RAGAS四大核心指标、实战代码与避坑指南,带你搭建工业级RAG评估流水线,从此优化不再靠猜,迭代不再靠蒙。

RAGAS框架
实战地图

第一招:认清现实
RAG评估为什么是道坎

第二招:吃透指标
RAGAS四大体检科目

第三招:动手开干
五行代码跑通流水线

第四招:灵活扩展
自定义指标玩法

第五招:读懂分数
数据驱动持续进化

人工评估像玄学

RAGAS带来曙光

Faithfulness事实一致性

Answer Relevancy答案相关度

Context Relevancy上下文相关度

Context Recall上下文召回率

环境搭建避坑

数据格式对齐

多场景适配

继承Metric基类

接入私有数据

批量评估技巧

分数解读心法

归因分析模型

优化闭环建立

文字目录

  • 第一招:认清现实,RAG评估为什么是道坎?
  • 第二招:吃透指标,RAGAS的四大体检科目
  • 第三招:动手开干,五行代码跑通评估流水线
  • 第四招:灵活扩展,别让默认指标限制你的想象力
  • 第五招:读懂分数,让数据驱动RAG持续进化
  • 写在最后

嗨,大家好呀,我是你的老朋友精通代码大仙。接下来我们一起学习 《大模型RAG生成式AI开发实战》118.[第12章 RAG评估体系] RAGAS框架:开箱即用的RAG评估工具

有句话叫“代码不写测试,等于没写代码;RAG不做评估,等于瞎搞大模型。”你品,你细品。多少兄弟吭哧吭哧搭了个RAG demo,看着大模型吐出几段像模像样的回答,就觉得自己即将改变世界。结果一上线,用户反馈不是“这答案跟文档说的不一样”就是“你答的啥啊,我问东你答西”。这时候你才发现,自己连系统到底是哪里瘸了腿都不知道。更扎心的是,老板问你“咱们这个RAG准确率多少啊”,你只能摸摸鼻子说“感觉还行吧”。这种感觉,就像面试官问你这段代码时间复杂度多少,你说“跑得挺快的”一样尴尬。所以今天,咱们必须把RAGAS这个神器掰开了揉碎了讲清楚,让你从此告别“体感评估”,走上科学调优的正轨。


第一招:认清现实,RAG评估为什么是道坎?

点题。

RAG系统天生就是个黑盒拼接怪。检索模块捞出一段上下文,生成模块照着这段上下文开始编,中间任何一个环节抽风,最终答案都得翻车。可问题是,这玩意儿怎么量化和评估?传统软件测试里,我们写个assert就能判断对错,但大模型的输出是开放的、语义的、充满概率的。你说它错了吧,它好像又沾点边;你说它对了吧,它又悄悄给你加戏。RAGAS(Retrieval-Augmented Generation Assessment)就是专门来解决这个烫手山芋的。它用LLM当裁判,从多个维度给你的RAG系统打分,而且几乎是开箱即用。

痛点分析。

新手在这里最容易犯的毛病,我称之为“肉眼扫描法”和“朋友圈验收法”。什么是肉眼扫描?就是准备五六个问题,手工把答案看一遍,觉得通顺、没毛病,就打个勾上线。什么是朋友圈验收?就是把生成的结果发到群里,问“兄弟们这回答怎么样”,大家回复“666”就以为稳了。这种评估方式的主观性强到离谱,而且根本不具备可复现性。你今天心情好看啥都顺,明天心情不好看啥都烦。

更离谱的是,我见过有团队拿着BLEU或者ROUGE这些传统NLP指标来评估RAG。这就好比你拿一把量衣服尺子去测地球半径,量具和对象根本不在一个维度上。BLEU看的是n-gram重叠,大模型哪怕用完全不同的词表达了同样的意思,BLEU也能给你打零分。结果团队一看分数扑街,就开始疯狂调Prompt,最后发现指标还是上不去,陷入深深的自我怀疑。

还有个经典误区叫“单点幻觉”。有人觉得只要最终答案看起来流畅,系统就没问题。错!RAG的病根可能埋在检索里。你检索出来的上下文本身就是错的、无关的,生成模型再厉害也只能是“垃圾进,垃圾出”。没有系统化的评估框架,你根本分不清是检索在拖后腿,还是生成在搞事情。

更惨的是覆盖面陷阱。团队B上线前找了20个常见问题,人工验证效果拔群,结果上线第二天,用户随口问了个第21个问题,系统直接开始编故事。为啥?因为你的测试集没有覆盖长尾问题,而RAG系统的脆弱性恰恰藏在那些没被测过的角落里。

解决方案。

RAGAS的核心思路非常巧妙:既然LLM能生成答案,那它也能评判答案。RAGAS内置了一套基于LLM的评估指标,不需要人工标注,也不需要参考答案(部分指标),就能对RAG系统的表现进行多维度量化。它把评估拆成了检索侧和生成侧,分别打分,让你一眼就能看出瓶颈在哪里。

对于还在“肉眼扫描”的同学,我的建议是立刻停止这种玄学操作。准备一个至少包含50条数据的测试集,覆盖不同类型的问法:事实性问题、总结性问题、比较性问题、甚至是带有误导性的歧义问题。然后用RAGAS跑一轮,拿到基线分数。这样做的好处是什么?可对比!你明天换了个Embedding模型,后天调了chunk_size,大后天换了个Prompt模板,每一次改动都能用RAGAS量化出提升还是下降。优化方向从此清晰,不再是闭着眼睛扔飞镖。

这里再分享一个小技巧:RAGAS用LLM-as-a-Judge的模式,本质上是让更强的模型(或者同一个模型换一个评判身份)来审视RAG的输出。它的评判标准比规则引擎更灵活,比人工评估更稳定。只要你选对评判模型,它就不会像人类那样今天严明天松。

小结一下:评估不是RAG系统的可选项,而是它的生命线。没有度量,所有的优化都是自嗨。


第二招:吃透指标,RAGAS的四大体检科目

点题。

RAGAS之所以能快速在圈子里火起来,很大程度上是因为它提供了一套即插即用的指标矩阵。对于刚入门的同学,你需要先啃透四个核心指标:Faithfulness(事实一致性)、Answer Relevancy(答案相关度)、Context Relevancy(上下文相关度)、Context Recall(上下文召回率)。这四个指标就像给你的RAG系统做了一次全面体检,X光、B超、血常规全安排上。进阶玩家还可以关注Context Precision(上下文精确率),它衡量检索结果里相关片段的排名是否足够靠前。

为了让你更直观地理解它们的分工,先看一张图:

生成侧指标

检索侧指标

用户提问

检索模块
捞出上下文

生成模块
组织答案

Context Relevancy
上下文相关度

Context Recall
上下文召回率

Faithfulness
事实一致性

Answer Relevancy
答案相关度

痛点分析。

新手看这四个指标,第一反应往往是蒙圈:“这不都差不多吗?都是看回答好不好啊。”然后跑完代码看到四个小数, Faithfulness 0.8,Answer Relevancy 0.7, Context Relevancy 0.9, Context Recall 0.6,直接傻眼。这分数到底说明啥?我该先优化哪个?

我见过最典型的翻车案例是这样的:某同学跑完RAGAS一看,Context Relevancy高达0.92,高兴得手舞足蹈,觉得检索模块稳如老狗。结果 Faithfulness 只有0.45,Answer Relevancy 0.50。他没仔细看指标含义,以为是生成模型太弱,疯狂给GPT-4加System Prompt,甚至上了CoT(思维链)。折腾一周后,Faithfulness涨到0.50,略有改善,但用户体验依然稀烂。为啥?因为Context Recall只有0.30!检索模块根本没有把支撑答案的关键上下文捞出来,生成模型只能凭记忆瞎编。他优化错了方向,等于给一辆没油的法拉利换轮胎,跑得再快也到不了终点。

还有一个常见误区是把 Faithfulness 和 Answer Relevancy 混为一谈。Faithfulness低,说明答案在胡说,跟文档对不上;Answer Relevancy低,说明答案虽然没胡说,但答非所问。比如用户问“你们支持退款吗”,你答“我们的产品质量很好,用户满意度高”。这句话本身没幻觉,但跟问题一毛钱关系没有。新手如果只看一个总分,根本发现不了这种“一本正经地跑题”。

更隐蔽的坑是指标交叉误导。比如Context Relevancy高但Context Recall低,说明检索出来的内容条条都相关,但覆盖面太窄,漏掉了关键信息。这种情况在专业领域问答里特别常见:检索模块精准地捞出了三条相关片段,但第四条最关键的证据被切在了另一个chunk里,因为召回范围太小而 missed 掉了。

解决方案。

咱们一个一个掰开说。

Faithfulness(事实一致性):这是防幻觉的第一道防线。RAGAS会拿生成的答案和检索出来的上下文做对比,判断答案里的每一个陈述,能不能在上下文里找到依据。分数低,说明模型在自由发挥,开始编了。优化方向通常是加强Prompt里的约束,比如明确告诉模型“只能基于提供的上下文回答,不知道就说不知道”。

Answer Relevancy(答案相关度):这是看答案和问题是不是门当户对。RAGAS的做法是用LLM基于答案反推问题,看看反推出来的问题跟原问题像不像。分数低,说明答案跑偏了。这时候你要检查检索出的上下文是否偏离了问题意图,或者Prompt里是不是给了模型太多发散的空间。

Context Relevancy(上下文相关度):这是给检索模块打分的。检索出来的N段上下文里,到底有多少内容是跟问题相关的?分数低,说明向量检索捞回来很多噪音。这时候该考虑换Embedding模型、调相似度阈值、或者引入重排序(Reranker)。

Context Recall(上下文召回率):这个指标需要参考答案(ground truth)。它会把参考答案拆成若干关键信息点,然后检查这些信息点有多少被检索出的上下文覆盖。分数低,说明关键文档片段没捞上来。这时候要去优化分块策略(chunk size和overlap)、或者检查索引里是不是压根没录入相关文档。

四个指标一组合,你就能精准定位问题:检索不行还是生成不行?是噪音太多还是漏掉了关键信息?这比“感觉还行”靠谱一万倍。而且别忘了,RAGAS允许你把这四个字指标组合成一张雷达图,哪里凸哪里凹,一目了然。

小结一下:四个指标不是四张孤立的成绩单,而是一套完整的诊断报告。学会交叉解读,才能找到真正的病灶。


第三招:动手开干,五行代码跑通评估流水线

点题。

说了这么多理论,手痒了吧?RAGAS最迷人的地方就在于它的上手速度。如果你已经有一个能跑通的RAG链路,那么接入RAGAS评估,真的只需要几行代码。但新手往往在这里被各种环境问题和数据格式问题卡得死去活来。

痛点分析。

第一个拦路虎是环境。有些同学一看RAGAS依赖LangChain和OpenAI,直接pip install ragas,然后运行,boom!报错。原因可能是你的LangChain版本太老,或者ragas版本和某个依赖库闹别扭。更常见的是API Key没设置好,跑到一半报AuthenticationError,然后满世界找哪里漏了openai_api_key

第二个拦路虎是数据格式。RAGAS要求的输入不是简单的几个字符串,而是Dataset对象,里面要有questionanswercontextsground_truths这几个字段。新手最容易踩的坑是把contexts传成字符串,而不是字符串列表。比如你的检索结果是一个"文档片段1 文档片段2"的拼接字符串,RAGAS一看就懵了,因为它需要的是一个["文档片段1", "文档片段2"]的列表,这样才能逐条评估上下文相关度。还有人把ground_truths传成了标准答案字符串,但RAGAS某些指标要求它是列表格式,结果又是报类型错误。

第三个坑是模型选择。RAGAS默认用OpenAI的模型当评判器,但很多国内同学并没有稳定的OpenAI访问条件。于是代码一跑就超时,然后怀疑人生:“是不是我代码写错了?”其实不是,是网络问题。但新手往往在这里卡一整天。

第四个坑是成本失控。一激动直接拿1000条数据去调OpenAI的GPT-4做评判,一轮下来几百块没了,分数出来发现格式错误,心态直接爆炸。

解决方案。

咱们来一个最小可用实战。首先,建议新建一个虚拟环境,别让ragas和你项目里那些老旧的依赖打架。

# 安装,建议用新环境
pip install ragas langchain-openai datasets

# 准备数据,格式是关键!
from datasets import Dataset

data_samples = {
    'question': [
        '什么是RAGAS框架?',
        '如何评估RAG系统?'
    ],
    'answer': [
        'RAGAS是一个用于评估RAG系统的开源框架。',
        '可以通过Faithfulness、Relevancy等指标进行评估。'
    ],
    'contexts': [
        ['RAGAS是一个开源的RAG评估框架,使用LLM作为评判标准。'],
        ['评估RAG需要关注检索质量和生成质量两个维度。']
    ],
    'ground_truths': [
        ['RAGAS是一个开源的RAG评估框架。'],
        ['使用RAGAS等自动化指标评估RAG系统。']
    ]
}

dataset = Dataset.from_dict(data_samples)

注意看上面的contextsground_truths,都是列表的列表!这是新手最可能写错的地方。contexts里的每个元素是一个列表,代表该问题检索出的所有文档片段。ground_truths同理,是参考答案的列表。

from ragas import evaluate
from ragas.metrics import (
    faithfulness,
    answer_relevancy,
    context_relevancy,
    context_recall
)

# 如果你用OpenAI,设置好key
import os
os.environ["OPENAI_API_KEY"] = "your-key"

# 一行代码跑评估
result = evaluate(
    dataset=dataset,
    metrics=[
        faithfulness,
        answer_relevancy,
        context_relevancy,
        context_recall
    ]
)

print(result)

对于没有OpenAI条件的同学,RAGAS支持通过LangChain接入其他模型,比如国内的通义千问、文心一言,甚至本地跑的Ollama模型。你只需要把llm参数传进去就行:

from langchain_openai import ChatOpenAI

# 假设你有一个兼容OpenAI接口的本地或国内服务
llm = ChatOpenAI(
    model_name="qwen-turbo",
    openai_api_base="https://your-api-endpoint.com/v1",
    openai_api_key="your-key"
)

result = evaluate(dataset=dataset, metrics=[...], llm=llm)

跑通之后,你会拿到一个漂亮的分数表。建议第一次跑的时候先用5条数据验证格式,没问题再放大到完整测试集。别一上来就扔1000条数据,万一格式错了,API调用的钱和时间都打水漂了。评估这件事,小步快跑永远是第一原则。

另外提醒一句,如果你用的是异步框架或者在生产环境做批量评估,RAGAS也支持异步调用模式,配合asyncio可以大幅提升吞吐,节省等待时间。

小结一下:RAGAS的上手门槛不在代码复杂度,而在格式对齐和环境隔离。先跑通最小闭环,再谈批量评估。


第四招:灵活扩展,别让默认指标限制你的想象力

点题。

到这一步,你已经能用RAGAS跑出基础分数了。但现实很骨感,很多业务场景的评估需求是默认指标覆盖不了的。比如你在做医疗RAG,答案里必须严格区分“可能”和“确诊”;你在做法律RAG,需要检查引用条款的格式是否正确;你在做客服RAG,评估维度里还得加一条“语气是否友好”。这时候,RAGAS的自定义指标能力就成了你的救命稻草。

痛点分析。

新手最容易在这里产生的想法是:“RAGAS就这几个指标,不够用我也没办法,要么凑活用,要么自己另起炉灶写一套评估逻辑。”于是你看到了这样的悲剧:某同学觉得默认指标不够细,自己从头写了个评估脚本,用正则表达式匹配关键词,再用BERT算相似度,最后搞了个四不像的评分系统。维护成本高不说,关键是他的自定义系统和RAGAS的评分体系不互通,团队里其他人看不懂,也无法复用。

还有一种误区是过度依赖默认阈值。RAGAS跑出来Faithfulness 0.7,他就觉得全世界RAG系统都应该以0.7为及格线。殊不知在医疗领域,0.7可能意味着三条命,在金融领域,0.7可能只是少赚点钱。不同业务对指标的容忍度完全不同,但没有自定义能力,你就只能拿着同一把尺子量所有人。

解决方案。

RAGAS的设计很优雅,它的每个指标都是基于Metric基类实现的。这意味着你可以像搭积木一样,定义自己的评估逻辑。

核心思路就三步:

  1. 继承Metric类;
  2. 实现initscore方法,在里面写你的评判逻辑;
  3. 把你的自定义指标丢进evaluate的metrics列表里,和其他官方指标一起跑。

举个例子,假设你要评估“答案是否包含免责声明”(这在医疗和投资场景很重要):

from ragas.metrics.base import Metric, EvaluationMode
from dataclasses import dataclass

@dataclass
class DisclaimerScore(Metric):
    name = "disclaimer_score"
    evaluation_mode = EvaluationMode.qa  # 只需要问题和答案
    
    def init(self, run_config):
        # 初始化你的LLM或规则引擎
        pass
    
    async def _ascore(self, row, callbacks, is_async):
        answer = row['answer']
        # 简单规则:检查是否包含免责声明关键词
        keywords = ['仅供参考', '不构成建议', '请咨询专业']
        if any(k in answer for k in keywords):
            return 1.0
        return 0.0

当然,实际生产环境你可以用LLM来判断,而不仅是关键词。关键是你的自定义指标和官方指标能无缝协作,输出在同一个结果表格里。你甚至可以让LLM给答案的医疗风险等级打分,从1到5,然后把这个分数也纳入监控。

更进一步,你还可以做指标组合。比如定义一个加权总分:
综合分 = 0.4 * Faithfulness + 0.3 * Answer Relevancy + 0.2 * Context Recall + 0.1 * 你的自定义指标

这样团队内部汇报时,既保留了细粒度指标用于问题定位,又有一个宏观的总分用于横向对比。不同业务线可以定义不同的权重,医疗线把Faithfulness权重拉高,客服线把Answer Relevancy和自定义的友好度权重拉高,真正做到因地制宜。

小结一下:RAGAS不是黑盒工具,而是可以随业务生长的评估骨架。敢于自定义,才能真正把评估话语权握在自己手里。


第五招:读懂分数,让数据驱动RAG持续进化

点题。

跑出分数只是开始,真正值钱的动作是解读分数、定位根因、闭环优化。我见过太多同学把RAGAS当成了一个“成绩查询系统”,跑完看一眼,高了就笑,低了就哭,哭完不知道干嘛。这就好比你拿到了体检报告,看到血脂偏高,然后把报告往抽屉里一塞继续吃炸鸡。分数是手段,优化才是目的。

痛点分析。

最常见的错误操作我总结为“三板斧”:

第一板斧,看到哪个指标低就瞎调哪里。Context Recall低了?无脑把top_k从3改成10。结果Recall确实涨了,但Context Relevancy暴跌,因为噪音上下文大量涌入,Faithfulness也跟着遭殃。指标之间是有联动关系的,你动一个,可能影响一串。

第二板斧,只看绝对值,不看相对值。某个指标0.65,你觉得太低了。但如果没有基线对比,你怎么知道0.65是低还是高?也许上周还是0.45,这周0.65已经是巨大提升了。没有历史数据曲线,单点分数没有意义。

第三板斧,脱离业务谈指标。技术上Faithfulness 0.95,但用户依然不满意,因为答案虽然忠于文档,但文档本身就是过期的。这时候你的评估对象已经不该是生成模型,而是知识库的更新机制了。如果不结合业务场景,指标分数就是一串没有灵魂的数字。

解决方案。

要建立一套“指标-根因-行动”的三角分析模型。

先看Faithfulness低。这说明答案里有幻觉,编的成分多。但别急着骂LLM,先问自己:是上下文没给够,还是上下文给够了但模型不看?如果是前者,去优化检索(Recall问题);如果是后者,去加强Prompt约束,比如加一句“严格基于上下文回答,如果上下文不包含相关信息,请回答‘根据现有资料无法确认’”。

再看Context Recall低。这说明该捞的没捞上来。这时候你要去检查:

  • 是不是分块策略有问题?chunk_size太小,把一句完整的话切两半,语义丢失了。
  • 是不是Embedding模型和领域不匹配?通用模型在专业术语上召回率就是差,考虑换领域微调过的Embedding。
  • 是不是向量数据库里压根没这条知识?别笑,真有很多情况是文档漏录入或者元数据过滤错了。

然后是Context Relevancy低。这说明捞上来的太多无关内容。除了上Reranker做精排,你还可以检查Query本身是不是太模糊。用户问“怎么办”,你检索出来的内容可能横跨十个业务线。这时候加一个Query理解和改写模块,把“怎么办”扩展成具体的业务意图,检索质量立马提升。

最后是Answer Relevancy低。这说明答案和问题不搭界。如果前面三个指标都正常,那问题大概率出在生成侧的指令遵循上。试试Few-shot Prompting,给模型几个“好答案”的示例,让它对齐你的输出风格和内容边界。

为了让你更直观地理解这个决策链路,再看一张图:

Faithfulness低

上下文是否支撑答案

否:优化检索Recall或分块

是:加强Prompt约束
减少自由发挥

Context Recall低

检查Embedding模型

调整Chunk Size与Overlap

确认知识库完整性

Context Relevancy低

引入Reranker精排

优化Query改写

Answer Relevancy低

检查Prompt遵循度

增加Few-shot示例

另外,强烈建议你建立一个评估看板,记录每次实验的分数。Excel就行,不用 fancy。列名包括:日期、模型版本、Embedding模型、chunk_size、top_k、Faithfulness、Answer Relevancy、Context Relevancy、Context Recall、备注。每次只改一个变量,记录分数变化。这是做RAG优化最朴实也最有效的方法。

更进一步,测试集本身也需要迭代。你发现线上用户问的新问题在测试集里根本没有覆盖,那就应该把这类问题补充进测试集,重新跑RAGAS。评估体系和业务数据是共同生长的,不能一套题考三年。

小结一下:分数是路标,不是终点。只有建立从指标到根因再到行动的闭环,评估才能真正产生价值。


写在最后

聊了这么多,其实核心想传达的就一个观点:RAG系统的优化是一场持久战,而RAGAS就是你手里的望远镜和指南针。没有它,你在黑暗中摸索;有了它,你至少知道敌人埋伏在哪个方向。

很多新手总希望找到一个“银弹”,调一个参数、换一个模型就能让RAG系统起飞。但现实是,大模型应用的质量是系统工程,检索、生成、评估、迭代,缺一不可。RAGAS的意义不仅在于帮你打分,更在于它给你建立了一套科学的思考框架——让你知道什么时候该优化向量检索,什么时候该收紧生成约束,什么时候该回过头来审视自己的测试集是不是足够全面。

编程之路不易,RAG调优更是容易让人掉头发。但每一步有数据支撑的成长,都算数。别怕分数难看,0.4的Faithfulness不可怕,可怕的是你根本不知道它是0.4。保持好奇,持续迭代,你也能搭出让自己骄傲的RAG系统。

好了,今天就唠到这里。咱们下回见!

关注私信备注:“资料代找获取”,全网计算机学习资料代找:例如:
《课程:2026 年多模态大模型实战训练营》
《课程:AI 大模型工程师系统课程 (22 章完整版 持续更新)》
《课程:AI 大模型系统实战课第四期 (2026 年开课 持续更新)》
《课程:2026 年 AGI 大模型系统课 23 期》
《课程:2026 年 AGI 大模型系统课 21 期》
《课程:AI 大模型实战课 8 期 (2026 年 2 月最新完结版)》
《课程:AI 大模型系统实战课三期》
《课程:AI 大模型系统课程 (2026 年 2 月开课 持续更新)》
《课程:AI 大模型全阶课程 (2025 年 12 月开课 2026 年 6 月结课)》
《课程:AI 大模型工程师全阶课程 (2025 年 10 月开课 2026 年 4 月结课)》
《课程:2026 年最新大模型 Agent 开发系统课 (持续更新)》
《课程:LLM 多模态视觉大模型系统课》
《课程:大模型 AI 应用开发企业级项目实战课 (2026 年 1 月开课)》
《课程:大模型智能体线上速成班 V2.0》
《课程:Java+AI 大模型智能应用开发全阶课》
《课程:Python+AI 大模型实战视频教程》
《书籍:软件工程 3.0: 大模型驱动的研发新范式.pdf》
《课程:人工智能大模型系统课 (2026 年 1 月底完结版)》
《课程:AI 大模型零基础到商业实战全栈课第五期》
《课程:Vue3.5+Electron + 大模型跨平台 AI 桌面聊天应用实战 (2025)》
《课程:AI 大模型实战训练营 从入门到实战轻松上手》
《课程:2026 年 AI 大模型 RAG 与 Agent 智能体项目实战开发课》
《课程:大模型训练营配套补充资料》

Logo

AtomGit AI 社区提供模型库、数据集、Agent、Token等资源

更多推荐