OpenQA

Industry & PracticeTechniques & Tutorials

有检索才用 RAGAS:知识库问答的第一条检查

智测团队 · OpenQA(openqa.cn)3 min read

只给会先查文档再回答的系统。用官方 ragas quickstart 生成项目,人写问题和当时检索到的原文。它看回答有没有贴着查出来的文字,不证明业务规则,也不代替接口测试。

这条只给已经有检索的问答:用户问题会先查出几段文档,再让模型根据这几段回答。没有这一步,就不要装 RAGAS。材料来自文档站指向的 GitHub 仓库 vibrantlabsai/ragas,安装名是 ragas。它测的是「回答有没有贴着查出来的文字」,不是模型在公开榜上的名次。

它解决什么,不解决什么

知识库机器人最常见的错不是文案按钮点不到,而是两件:查错了段落,或者查对了却在回答里加了文档里没有的话。RAGAS 把这两件拆开。贴着文档说,通常叫忠实度。该查到的段落有没有被查到、查回来的段落有没有用,是上下文那一侧的指标。具体指标名以你安装的版本为准,旧博客里的 evaluate() 写法已经和现在的快速开始不一致,不要照抄。

它不证明业务规则。文档本身写错了,忠实度仍然可以很高,因为模型忠实地复述了错误文档。退货天数、免责声明这种规则,继续用 Promptfoo 的原句断言。RAGAS 也不看界面、不看接口状态码。

用官方脚手架,不要手写一套旧接口

2026 年 9 月,文档站的快速开始是生成一个小项目,而不是从零抄评测脚本。

pip install ragas
ragas quickstart rag_eval
cd rag_eval

用 uv 时,文档写的是 uvx ragas quickstart rag_eval。生成出来的目录大致是:rag.py 放你的检索问答,evals.py 放评测,evals/datasets 放测试数据。先读生成出来的 evals.py,再改数据。不要把两年前教程里的 import 贴进去。

评测要调用模型当裁判,需要密钥。文档示例是环境变量,例如 OPENAI_API_KEY。密钥不要写进 evals.py。没有密钥就先不要跑,把测试数据写好。

跑生成出来的评测:

python evals.py

数据要人写,而且要带上查回来的文字

快速开始里的样本是问题和评分说明。你换成自己的知识库时,每条至少留下三样:用户问题、当时检索到的原文、模型回答。没有「当时检索到的原文」,忠实度无法判断,工具只能猜。

先写 10 条,三类就够:

  1. 文档里有明确句子的问题。回答应能在检索段落里找到依据。
  2. 文档里没有的问题。合格行为是说不知道,而不是编一段听起来对的话。
  3. 检索会搞混的近义问题。例如两个制度名称只差一个词。这条用来看查回来的是不是那一段。

预期不要让被测模型自己生成。评分说明用手册或文档原句。生成项目里若出现 grading_notes 这类字段,就写成「必须依据哪句、不得多承诺什么」。

结果怎么读

先看失败的那几条原始回答和检索段落,不要只看平均分。分低而段落根本是错的,先修检索或文档切分。段落是对的、回答加了段落里没有的话,再改提示词,要求只根据给定段落回答。文档自己就错了,改文档,不要改阈值把红变成绿。

阈值和指标集合会随版本变。第一条只保留你能向同事解释的一两项。解释不了的指标先关掉。

什么时候不要用

  • 系统没有检索,只是闲聊或直接调一个业务接口。
  • 你还不能导出「这次回答用了哪几段」。先接 Phoenix 看一条轨迹,把检索段落记下来,再回来跑 RAGAS。
  • 想用它替代原有的接口测试。检索问答旁边的下单、退款接口,仍用原来的断言。

你现在可以做这三件事:确认产品真的会先查文档;用 ragas quickstart 生成项目并只改其中的 10 条数据;跑一次 python evals.py,把失败分成「查错了」和「查对了但说多了」。

Found it useful? Pass it on

WeChat

Scan with WeChat to open it on your phone and forward it.

Subscribe via RSS

Submit a correction