检索增强:通过 chiffres
Ragas 是一个开源的 Python 库(Apache 2.0 许可,GitHub 上超过 15000 星标),用于量化文档检索链路的质量:忠实度、回答相关性、上下文的精确率和召回率。它可完全本地运行,仅使用本地的评判模型和嵌入模型,从而避免将您的文档和回答发送至第三方服务进行简单评估。
没有量化指标时,调整文档检索链就像盲人摸象:改变分块大小、更换嵌入模型,再凭三个问题的回答给人的感觉来判断。Ragas 是一个 Python 库,能将这些直觉转化为可衡量的指标,并在回答不佳时区分问题出在检索还是模型。它可以完全使用本地模型运行,从而避免为了评估而将您的文档发送给第三方服务。
#为什么‘看起来不错’并不足够
Ragas 是一个开源 Python 库,采用 Apache 2.0 许可证,为文档检索链的质量提供量化指标:回答对提供片段的忠实度、相对于问题的相关性,以及检索上下文的精确率和召回率。从而将检索的失误与模型的失误区分开来。它可以与由 Ollama 提供的本地评判模型一起运行,前提是该模型符合 Ragas 强制的结构化输出格式,且其上下文包含整个问题、片段和回答。在采用之前,请记住三点:其分数用于比较同一系统的两个版本,而非评估绝对质量;测试集比库本身更重要;在线教程混合了旧版和新版 API。
当回答错误时,同一个症状背后可能隐藏着两种截然不同的原因:要么检索到的文本片段中没有所需信息,要么片段中有这些信息,但模型却答偏了。两种情况的修正方法不同——前者要调整分块和嵌入,后者要调整模型和提示词。没有测量,就只能盲目修正;一项改动可能改善三个问题的回答,却让另外五个问题的回答变差,而我们对此毫无察觉。
另一个风险在于比较。‘270亿参数的模型在这里真的更好吗?’这个问题需要通过重复相同的提问来验证,而不是通过讨论来解决。这正是可复现评估所实现的。Ragas在GitHub上的星标已超过15000颗。PyPI上最新发布的版本为0.4.3,发布于2026年1月13日,仓库的GitHub组织已更改为vibrantlabsai。请锁定您使用的版本。
#四项关键指标
你的文档,你的 AI:基于你的 PDF、笔记和邮件的可靠本地 RAG——无需向云端发送任何内容。
- 在线空间,终身可用
- PDF + 文件
- 30 天内退款
| 测量 | 提出的问题 | 指标下降时揭示的问题 | 需要为其提供什么 |
|---|---|---|---|
| 忠实度 | 回答是否完全有提供的文本段落作为依据?得分:有依据的陈述数量除以回答中的陈述总数 | 模型编造内容或进行外推 | 问题、回答、检索到的段落 |
| 回答的相关性 | 回答是否回应了所提出的问题?评判模型根据回答生成三个问题,再比较这三个问题与原始问题的相似度 | 提示词或模型偏离主题 | 问题、回答以及一个嵌入模型 |
| 上下文精确率 | 有用的段落是否排在前列?各排名位置精确率的平均值 | 检索返回无关结果,或结果排序不佳 | 问题,按检索顺序的段落,参考答案 |
| 上下文召回率 | 是否检索到了所有需要的信息?参考答案中的各项陈述有多少比例得到检索段落的支持 | 切分过细,阈值过严,嵌入向量质量差 | 问题、段落、参考答案 |
Ragas 文档明确指出,回答相关性并不评估准确性:它只衡量回答与问题的契合程度,并对不完整或充斥多余细节的回答扣分。因此,它不能替代忠实度。结合解读这些指标,才能让这些数字发挥作用。召回率低而忠实度高,说明系统诚实,但获得的信息不足:需要改进检索。忠实度低而召回率高,则说明情况相反:信息已经检索到了,模型却自行编造了内容。这两类问题需要在流程中不同的环节分别解决。
#构建测试集
这部分需要下功夫,而且自动化处理并非没有代价。有用的测试集应包含用户实际提出的问题,保留他们不够顺畅的表述、内部使用的缩写和打字错误——而不是由文档编写者重新整理得规规矩矩的问题。
- 01从真实问题出发三十到五十个来自实际使用的问题,比两百个编造的问题更有价值。请纳入那些未能成功回答的问题:它们最能提供启示。
- 02写出参考答案为每个问题写出正确答案,长度为一到两句话。Ragas 用这些答案来估算上下文召回率:基于 LLM 的版本将这些参考答案作为预期段落的替代,从而避免逐一标注段落。
- 03保留没有答案的测试案例语料库无法回答的问题。好的系统必须明确说明无法回答;没有这些测试案例,就无法衡量系统的这项能力。
- 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)。上下文容量不足的评判模型,实际上是在为被截断的文本评分。
#正确解读结果
- 这些是指标,而非评分
- 忠实度为 0.82 并不意味着“82% 的回答正确”。这个数值用于比较同一系统的两个版本,而不是证明其具有某种绝对质量水平。
- 裁判存在偏见
- 关于 LLM 评判模型的参考论文(arXiv 2306.05685)描述了位置偏差、偏好冗长回答的偏差以及自我偏好偏差。不同轮次的评估应使用同一个评判模型,否则测出的差异反映的是评判模型,而不是被评估的系统。
- 仅凭一轮评估无法证明什么
- 生成结果存在波动。在小规模测试集上,零点零几的差异可能只是噪声。
- 人工阅读几个案例
- 数字能告诉您该关注哪里,却不能说明具体出了什么问题。一轮评测中表现最差的十个案例,比总体平均值更能揭示问题。
| 方法 | 它带来的价值 | 其局限 |
|---|---|---|
| 对少数案例进行人工复核 | 面对涉及重要后果的问题,这是唯一真正的质量把关方式 | 无法规模化,每轮评估都需要投入专家时间 |
| 本地评判模型(Ragas) | 可复现、安装后免费、快速对比两个版本 | 位置偏差、偏好冗长回答的偏差和自我偏好偏差;评分并非绝对真理 |
| 用户评价(点赞) | 反映真实使用情况,数据可免费收集 | 通常反馈不多,而且一个点赞并不能说明哪一步出了问题 |
#具体用例
- 选择分块大小
- 使用同一套测试集,依次以 256、512 和 1024 个 token 的分块大小重新测试,可以得到每种配置的召回率数值,而不是凭未经验证的偏好作出选择。
- 验证更换嵌入模型的效果
- 新的嵌入模型,即使据称在通用基准测试中表现更好,也可能降低您特定语料库上的上下文精度;只有开展一轮本地评估才能看出这一点。
- 说明为何需要添加重排序器
- 对比重排序前后上下文精度,可量化出实际收益,否则仅能停留在会议中的主观感受。
- 跟踪语料库更新后的性能退化
- 新增文档可能稀释检索效果;每次导入后重新运行固定测试集可提前检测到性能退化,而无需用户察觉。
- 在两个服务商或架构之间进行权衡
- 面对用于构建同一文档处理流程的两个竞争方案,在相同测试集和相同语料库上获得的评分,比商业演示更能帮助您迅速作出选择。
#组织评估工作
- 评估频率
- 每次更改文档切分方式、嵌入模型或生成模型后都应进行评估。对于稳定的系统,无需每天开展一轮评估。
- 测试语料库大小
- 问题集仍然很小;需要贴近生产环境的是被评估的文档语料库:它必须是生产语料库的一个有代表性的副本,或者就是完整的生产语料库。
- 一次评估的实际成本
- 每项指标都会多次调用评判模型(例如,评估忠实度时,先提取各项断言,再逐一验证)。因此,成本会随问题数量与指标数量的乘积增加:在运行全部五十个问题之前,先测量五个问题所需的时间,再据此安排整轮评估。
#该方法的局限性
用模型进行评估,相当于让一个人工智能评判另一个人工智能:这种方法实用、经济,但并不完美。它能发现性能回退,并对不同版本进行排名;但在涉及重大责任的领域,它不能替代人工审阅,因为事实错误会带来责任。最后,每轮评估都会占用计算时间:如果机器同时还为用户提供服务,就应在负载较低时运行,例如夜间或周末,而不是在使用高峰时段。
冗长偏差值得再多解释几句,因为它有些反直觉。OneUptime 的一篇文章解释说,在较长的回答中,评判者有更多机会引用评分标准中的关键词、显得全面,并给出有说服力的理由。因此,促使被评估模型回答得更冗长的提示词,可能会提高分数,却并未改善用户得到的回答。在忠实度方面,Ragas 文档还提到了一种基于 HHEM-2.1-Open 的变体。这是 Vectara 提供的免费小型幻觉检测分类器:它用专门的模型替代核验步骤,如果本地评判模型不稳定,可以尝试这一方法。
最简单的应对方式是方法论上的:绝不将由评委获得的忠实度评分与由另一个评委获得的评分,或第三方发布的评分进行比较。该数值仅在相同测量配置下才有意义——相同的评委、相同的评估提示、相同的指标版本。这是一个内部比较工具,而非通用排名标准。
- 来源:Ragas 在 GitHub 上的官方仓库
- 来源:自动评判模型的冗长偏差
- 来源:忠实度指标的官方文档
- 来源:Ragas 快速入门指南(Ollama 版本)
- 来源:Ollama 默认上下文长度
- 来源:使用会生成无效 JSON 的本地评判模型评估 RAG
- 来源:关于使用 LLM 作为评审的参考文章
#FAQ
Ragas 是否可以在没有云端模型的情况下运行?+
测试集需要多少个问题?+
应优先关注哪项指标?+
可以使用 Ragas 比较两个模型吗?+
本地运行的评判模型可靠吗?+
Ragas 是否可以自动生成测试集?+
有反馈、发现了错误,或想补充说明?请告诉我们,让这份指南对每个人都更有帮助。