高级 13 分钟优化

检索增强:通过 chiffres

直接回答

Ragas 是一个开源的 Python 库(Apache 2.0 许可,GitHub 上超过 15000 星标),用于量化文档检索链路的质量:忠实度、回答相关性、上下文的精确率和召回率。它可完全本地运行,仅使用本地的评判模型和嵌入模型,从而避免将您的文档和回答发送至第三方服务进行简单评估。

没有量化指标时,调整文档检索链就像盲人摸象:改变分块大小、更换嵌入模型,再凭三个问题的回答给人的感觉来判断。Ragas 是一个 Python 库,能将这些直觉转化为可衡量的指标,并在回答不佳时区分问题出在检索还是模型。它可以完全使用本地模型运行,从而避免为了评估而将您的文档发送给第三方服务。

作者: Mohamed Meguedmi·更新于 2026-09-29·已在 Windows、macOS 和 Linux 上测试

#为什么‘看起来不错’并不足够

Ragas 是一个开源 Python 库,采用 Apache 2.0 许可证,为文档检索链的质量提供量化指标:回答对提供片段的忠实度、相对于问题的相关性,以及检索上下文的精确率和召回率。从而将检索的失误与模型的失误区分开来。它可以与由 Ollama 提供的本地评判模型一起运行,前提是该模型符合 Ragas 强制的结构化输出格式,且其上下文包含整个问题、片段和回答。在采用之前,请记住三点:其分数用于比较同一系统的两个版本,而非评估绝对质量;测试集比库本身更重要;在线教程混合了旧版和新版 API。

当回答错误时,同一个症状背后可能隐藏着两种截然不同的原因:要么检索到的文本片段中没有所需信息,要么片段中有这些信息,但模型却答偏了。两种情况的修正方法不同——前者要调整分块和嵌入,后者要调整模型和提示词。没有测量,就只能盲目修正;一项改动可能改善三个问题的回答,却让另外五个问题的回答变差,而我们对此毫无察觉。

另一个风险在于比较。‘270亿参数的模型在这里真的更好吗?’这个问题需要通过重复相同的提问来验证,而不是通过讨论来解决。这正是可复现评估所实现的。Ragas在GitHub上的星标已超过15000颗。PyPI上最新发布的版本为0.4.3,发布于2026年1月13日,仓库的GitHub组织已更改为vibrantlabsai。请锁定您使用的版本。

#四项关键指标

本地 RAG 工具包

你的文档,你的 AI:基于你的 PDF、笔记和邮件的可靠本地 RAG——无需向云端发送任何内容。

  • 在线空间,终身可用
  • PDF + 文件
  • 30 天内退款
每项指标能诊断什么问题
测量提出的问题指标下降时揭示的问题需要为其提供什么
忠实度回答是否完全有提供的文本段落作为依据?得分:有依据的陈述数量除以回答中的陈述总数模型编造内容或进行外推问题、回答、检索到的段落
回答的相关性回答是否回应了所提出的问题?评判模型根据回答生成三个问题,再比较这三个问题与原始问题的相似度提示词或模型偏离主题问题、回答以及一个嵌入模型
上下文精确率有用的段落是否排在前列?各排名位置精确率的平均值检索返回无关结果,或结果排序不佳问题,按检索顺序的段落,参考答案
上下文召回率是否检索到了所有需要的信息?参考答案中的各项陈述有多少比例得到检索段落的支持切分过细,阈值过严,嵌入向量质量差问题、段落、参考答案

Ragas 文档明确指出,回答相关性并不评估准确性:它只衡量回答与问题的契合程度,并对不完整或充斥多余细节的回答扣分。因此,它不能替代忠实度。结合解读这些指标,才能让这些数字发挥作用。召回率低而忠实度高,说明系统诚实,但获得的信息不足:需要改进检索。忠实度低而召回率高,则说明情况相反:信息已经检索到了,模型却自行编造了内容。这两类问题需要在流程中不同的环节分别解决。

i
保真度是首要监控的指标
在专业场景中,编造但看似合理的回答,比不作回答代价更高。一条能承认“文档中没有说明”的处理链路,比一条表现出色却偶尔出错且不给出任何提示的处理链路更可取。

#构建测试集

这部分需要下功夫,而且自动化处理并非没有代价。有用的测试集应包含用户实际提出的问题,保留他们不够顺畅的表述、内部使用的缩写和打字错误——而不是由文档编写者重新整理得规规矩矩的问题。

  1. 01
    从真实问题出发
    三十到五十个来自实际使用的问题,比两百个编造的问题更有价值。请纳入那些未能成功回答的问题:它们最能提供启示。
  2. 02
    写出参考答案
    为每个问题写出正确答案,长度为一到两句话。Ragas 用这些答案来估算上下文召回率:基于 LLM 的版本将这些参考答案作为预期段落的替代,从而避免逐一标注段落。
  3. 03
    保留没有答案的测试案例
    语料库无法回答的问题。好的系统必须明确说明无法回答;没有这些测试案例,就无法衡量系统的这项能力。
  4. 04
    固定评测数据集
    它不应与系统同时更新,否则无法在时间维度上进行有效对比。

Ragas 还提供辅助生成合成测试集的功能,直接以语料库本身为基础:文档区分了单跳问题(只有一个信息源)和多跳问题(需要关联多个信息源),问题可以是具体的,也可以是抽象的。一篇官方指南展示了如何将这一功能适配到非英语语料库,所用示例是西班牙语,以便在用户的真实问题尚未积累起来之前开展初步评估。这是一个方便的起点,但绝不能作为替代:完全合成的测试集缺少别扭的表述和打字错误,而这些恰恰能暴露文档检索的实际弱点。

#全部本地运行

Ragas 使用两个模型进行评估:一个评判模型负责读取问题、文本片段和回答,另一个嵌入模型用于衡量相似度。Ragas 的快速入门默认使用 OpenAI,但也展示了使用 Ollama 的方案:将兼容 OpenAI 的客户端指向 http://localhost:11434/v1,再将该客户端传给 llm_factory 函数。只有回答相关性需要嵌入模型;忠实性、上下文精确率和上下文召回率都只使用评判模型。

本地评判模型要可信,必须满足两个条件。第一个是结构化输出:当前的评估指标要求评判模型以规定格式给出中间判断(提取陈述、给出判定)。本地模型可能以普通文字作答,未能满足这一格式约定,从而导致 JSON 错误或空评分(NaN);OneUptime 的一篇指南建议在开展任何一轮评测前,先用一个极小的请求测试评判模型。没有官方来源规定模型的最低规模,您需要自行验证。第二个是上下文:显存低于 24 GiB 时,Ollama 默认使用 4 000 个 token 的上下文,文档建议为繁重任务增大这一数值(变量 OLLAMA_CONTEXT_LENGTH)。上下文容量不足的评判模型,实际上是在为被截断的文本评分。

Python:本地裁判(Ragas当前API)
# pip install ragas openai
from openai import AsyncOpenAI
from ragas.llms import llm_factory
from ragas.metrics.collections import Faithfulness, ContextRecall

# Client compatible OpenAI pointé sur Ollama (la clé est un simple libellé)
client = AsyncOpenAI(api_key="ollama", base_url="http://localhost:11434/v1")
juge = llm_factory("mistral", provider="openai", client=client)  # nom du modèle tiré avec ollama pull

fidelite = Faithfulness(llm=juge)
resultat = fidelite.score(
    user_input="Où se trouve la tour Eiffel ?",
    response="La tour Eiffel se trouve à Paris.",
    retrieved_contexts=["La tour Eiffel est située à Paris, en France."],
)
print(resultat.value)  # entre 0 et 1
→
复现测试,而不是随意重新运行
将每轮评测保存在一个标有日期的文件中,并记录所测试系统的版本和 Ragas 的版本。这样,六个月后,您就能回答“上下文精确率从什么时候开始下降?”这个问题,而不是等用户投诉时才再次发现问题。
!
旧版 API,遥测功能
许多教程仍将 LangchainLLMWrapper 与 evaluate 函数搭配使用:这是旧版 API,文档说明它在 0.4 版本中被弃用,并在 1.0 版本中被移除。另一点是:Ragas 默认会收集匿名化的使用数据,将变量 RAGAS_DO_NOT_TRACK 设置为 true 即可禁用此收集。如果评估必须保持离线,请将该变量设为 true。

#正确解读结果

这些是指标,而非评分
忠实度为 0.82 并不意味着“82% 的回答正确”。这个数值用于比较同一系统的两个版本,而不是证明其具有某种绝对质量水平。
裁判存在偏见
关于 LLM 评判模型的参考论文(arXiv 2306.05685)描述了位置偏差、偏好冗长回答的偏差以及自我偏好偏差。不同轮次的评估应使用同一个评判模型,否则测出的差异反映的是评判模型,而不是被评估的系统。
仅凭一轮评估无法证明什么
生成结果存在波动。在小规模测试集上,零点零几的差异可能只是噪声。
人工阅读几个案例
数字能告诉您该关注哪里,却不能说明具体出了什么问题。一轮评测中表现最差的十个案例,比总体平均值更能揭示问题。
两种评估方式及其优劣
方法它带来的价值其局限
对少数案例进行人工复核面对涉及重要后果的问题,这是唯一真正的质量把关方式无法规模化,每轮评估都需要投入专家时间
本地评判模型(Ragas)可复现、安装后免费、快速对比两个版本位置偏差、偏好冗长回答的偏差和自我偏好偏差;评分并非绝对真理
用户评价(点赞)反映真实使用情况,数据可免费收集通常反馈不多,而且一个点赞并不能说明哪一步出了问题

#具体用例

选择分块大小
使用同一套测试集,依次以 256、512 和 1024 个 token 的分块大小重新测试,可以得到每种配置的召回率数值,而不是凭未经验证的偏好作出选择。
验证更换嵌入模型的效果
新的嵌入模型,即使据称在通用基准测试中表现更好,也可能降低您特定语料库上的上下文精度;只有开展一轮本地评估才能看出这一点。
说明为何需要添加重排序器
对比重排序前后上下文精度,可量化出实际收益,否则仅能停留在会议中的主观感受。
跟踪语料库更新后的性能退化
新增文档可能稀释检索效果;每次导入后重新运行固定测试集可提前检测到性能退化,而无需用户察觉。
在两个服务商或架构之间进行权衡
面对用于构建同一文档处理流程的两个竞争方案,在相同测试集和相同语料库上获得的评分,比商业演示更能帮助您迅速作出选择。

#组织评估工作

评估频率
每次更改文档切分方式、嵌入模型或生成模型后都应进行评估。对于稳定的系统,无需每天开展一轮评估。
测试语料库大小
问题集仍然很小;需要贴近生产环境的是被评估的文档语料库:它必须是生产语料库的一个有代表性的副本,或者就是完整的生产语料库。
一次评估的实际成本
每项指标都会多次调用评判模型(例如,评估忠实度时,先提取各项断言,再逐一验证)。因此,成本会随问题数量与指标数量的乘积增加:在运行全部五十个问题之前,先测量五个问题所需的时间,再据此安排整轮评估。

#该方法的局限性

用模型进行评估,相当于让一个人工智能评判另一个人工智能:这种方法实用、经济,但并不完美。它能发现性能回退,并对不同版本进行排名;但在涉及重大责任的领域,它不能替代人工审阅,因为事实错误会带来责任。最后,每轮评估都会占用计算时间:如果机器同时还为用户提供服务,就应在负载较低时运行,例如夜间或周末,而不是在使用高峰时段。

冗长偏差值得再多解释几句,因为它有些反直觉。OneUptime 的一篇文章解释说,在较长的回答中,评判者有更多机会引用评分标准中的关键词、显得全面,并给出有说服力的理由。因此,促使被评估模型回答得更冗长的提示词,可能会提高分数,却并未改善用户得到的回答。在忠实度方面,Ragas 文档还提到了一种基于 HHEM-2.1-Open 的变体。这是 Vectara 提供的免费小型幻觉检测分类器:它用专门的模型替代核验步骤,如果本地评判模型不稳定,可以尝试这一方法。

最简单的应对方式是方法论上的:绝不将由评委获得的忠实度评分与由另一个评委获得的评分,或第三方发布的评分进行比较。该数值仅在相同测量配置下才有意义——相同的评委、相同的评估提示、相同的指标版本。这是一个内部比较工具,而非通用排名标准。

#FAQ

Ragas 是否可以在没有云端模型的情况下运行?+
可以,前提是明确配置一个本地评判模型。该库采用 Apache 2.0 许可证,在 GitHub 上拥有超过 15,000 个星标,其快速入门默认使用 OpenAI,但其指南展示了如何将兼容 OpenAI 的客户端指向 Ollama。只有评估回答相关性时才需要嵌入模型。启用 RAGAS_DO_NOT_TRACK 即可关闭遥测。
测试集需要多少个问题?+
三十到五十个真实问题就已能构成一个可用的测试基础,用于发现明显的性能退步。超过这一数量后,价值更多来自测试案例的多样性——包括语料库中没有答案的问题——而不是向被测文档处理流程提出的问题总数。
应优先关注哪项指标?+
忠实度,因为在错误会引发责任的专业场景中,编造答案的代价比没有答案更高。其次是上下文召回率,它反映的是回答时所需信息是否可用,而这一步先于对答案措辞的评判。
可以使用 Ragas 比较两个模型吗?+
可以,这是它最实用的用途之一:使用同一组问题、同一语料库和同一评估者,只更换生成模型。这是唯一严谨的方法,能判断更大的模型是否会针对您的实际文档,改善您所获得的回答。
本地运行的评判模型可靠吗?+
足以比较两个版本,前提是它遵循 Ragas 要求的结构化输出格式(请通过一次单独调用进行测试),且上下文包含它需要阅读的全部内容:显存低于 24 GiB 时,Ollama 默认使用 4,000 个 token。对于事关重大的主题,它不能替代人工复核,而且存在位置偏差、偏好冗长回答的倾向和自我偏好。
Ragas 是否可以自动生成测试集?+
是的,该库提供根据语料库辅助生成合成问题的功能,有助于在真实问题尚未积累起来时开展初步评估。它不能替代用户实际提出的问题:用户不够流畅的表述会暴露出一些薄弱之处,而表述规整的合成问题集永远无法以同样的方式揭示这些问题。
这份指南对您有帮助吗?

有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。