RAG 评测数据集,到底该怎么准备?

RAG 评测数据集,到底该怎么准备?

之前学 RAGAS 的时候,总以为最难的是算指标,后来才发现,真正卡人的地方其实是数据集根本凑不齐

这篇笔记把数据集的准备拆成了两部分: "题"从哪里来 ,以及 "答"从哪里来。只有两样都齐了,整个测评才能跑通。


一、先把数据集的"原材料"分个类

如果只盯着一个空表格看,会觉得需要的东西很杂:问题、AI 回答、标准答案、参考资料......

但从数据是怎么来的这个角度看,其实就两条路:

1️. 从文档出发生成 ------ 让 LLM 替你读文档、出题

这条路的核心逻辑是:把知识文档"喂"给大模型,让它根据文档内容自动造 Q&A 对

能直接产出的内容是:

  • 原始问题(模拟用户会怎么问)
  • 标准答案(基于文档写出的正确回答,也就是 ground truth)

这种方法的代表就是 RAGAS 自带的 TestsetGenerator,以及各种自己调用 LLM 从文档出题的脚本。

2️. 从真实提问出发提取 ------ 找"人类真正关心过什么"

这类数据来自系统过去真实积累的交互痕迹,主要来源有:

  • 历史数据加工 :老客服对话、历史 Q&A 库、工单、论坛帖子
    能直接拿到:原始问题 + 真实答案
  • 人工构建 :业务专家基于文档和用户反馈,手动编写的常见问答对
    同样产出:原始问题 + 真实答案

这两条路解决的共同问题是:把"题"和"标答"先准备好

但注意,到这里还没有 AI 回答什么事


二、另一个要单独拿到的:RAG 系统"实战作答"

无论上面用哪种方式把"问题"和"标准答案"准备好了,都还缺一个关键环节------我自己的 RAG 系统,面对这些问题时,到底输出了什么

这个时候就要用到:

📌 线上 AI 问答 / 直接调用 RAG 系统

做法很简单:把已经准备好的问题,一条条喂给自己的 RAG 系统,让它跑一遍,把输出结果保存下来。

这样能拿到:

  • AI 回答(系统生成的最终答复)
  • 参考资料(检索阶段召回的文档片段)

至此,数据集的"四大件"------问题、AI 回答、标准答案、参考资料------才算真正凑齐。


三、用 RAGAS 自动生成数据集时,最容易踩的一个坑

我一开始看文档的时候,觉得 RAGAS 的 TestsetGenerator 太方便了:扔进去一堆 Markdown,就能吐出来带问题、标答和参考资料的 CSV。

于是就理所当然地想: "这下可以直接拿这个 CSV 去算 Context Precision 和 Context Recall 了吧?"

------错。

原因在于,这里"参考资料"是两回事,必须仔细区分:

指标 需要的"参考资料"是哪种? 说明
Context Precision / Context Recall RAG 系统实际检索到的资料 用来判断检索质量如何
生成数据集时附带的 reference_contexts LLM 生成标准答案时使用的上下文 用来保证标答有据可依

换句话说,自动生成数据集的"参考资料"是"出题者视角"的上下文,而评测时需要的"参考资料"是"考生(RAG 系统)视角"的上下文,两者的来源完全不一样。

所以哪怕已经拿到了 RAGAS 生成的那份漂亮 CSV,里面包含了:

  • 用户问题
  • 参考内容(其实是生成标答的依据)
  • 标准答案

要想真正算 Context Precision、Context Recall 这类指标,还是必须再把问题丢给自己的 RAG 系统跑一遍,拿到系统自己召回的参考资料和 AI 回答,才能代入公式去评测。


四、把整个流程画成一张"准备清单"

整理成步骤思维的话,就特别清楚:

Step 1:获取"题"和"标答"

  • 方式 A :基于 LLM 从文档生成(RAGAS / 自写脚本)
    产出:问题 + 标准答案(+ 出题时用的参考上下文,但不能用作检索评测)
  • 方式 B :历史数据加工 / 人工构建
    产出:问题 + 真实答案

Step 2:用 RAG 系统"作答"

  • 把 Step 1 的所有问题,输入自己的 RAG 系统
  • 产出:AI 回答 + 实际检索到的参考资料

Step 3:对齐到具体指标

  • Context Precision / Context Recall:用 RAG 系统的参考资料 + 问题 + 标准答案
  • Answer Relevancy / Faithfulness / Answer Correctness:还要加上 AI 回答

这样一看,数据集准备从来不是"生成一份 CSV 就结束",而是一个"拼图"的过程:从不同来源把四个关键字段拼齐


五、从 RAGAS 运行日志里能学到的东西

顺便记录一下,用 TestsetGenerator 生成数据时,后台在做什么(进度条里那些名词不是装饰,每一步都是有意义的):

  1. 标题提取 & 按标题切分:读文档结构,理清骨架
  2. 摘要提取:概括各部分内容,为出题提供"题眼"
  3. 节点过滤:丢掉太水的段落,只保留信息量大的文本
  4. 向量化处理:转成 embedding,为后续相似度计算准备
  5. 主题 & 命名实体提取:找出核心话题、人名/产品名/地名
  6. 相似度与重叠度计算:为跨段落推理的复杂问题搭桥
  7. 生成用户画像:虚构不同角色(小白 / 专家),让提问更真实
  8. 构思应用场景:给问题加一个"发生背景"
  9. 生成最终样本:综合以上信息,写出完整 Q&A

理解这个流程之后,就能明白为什么它会跑得很慢,也知道生成出来的问题质量很大程度取决于原始文档的规范程度和 LLM 的能力。


小结一句:别把"生成了测试集"当成"可以评测了"

生成测试集只是把"题目"和"参考答案"做出来了,真正要评判一个 RAG 系统,还得让系统亲自上考场,把答卷交出来,再拿去对照。

相关推荐
Lhappy嘻嘻19 小时前
网络(四)|全网最细网络层原理:IP 协议、IP 地址分类、子网划分、路由转发、NAT 穿透详解
java·笔记·网络协议·计算机网络
鱼子星_20 小时前
【C++】vector
开发语言·c++·笔记·stl
吃着火锅x唱着歌20 小时前
Effective C++ 学习笔记 条款38 通过复合塑模出has-a或“根据某物实现出”
c++·笔记·学习
syagain_zsx20 小时前
库制作与原理 · 链接知识笔记
c语言·c++·笔记·动态库·静态库
caimouse20 小时前
mm学习笔记_04:VAD树算法与地址空间分配
笔记·学习·算法·reactos
智者知已应修善业20 小时前
【使用D触发器74HC175实现0001 0011 0111 1111 1110 1100 1000的循环彩灯电路。】2025-4-28
驱动开发·经验分享·笔记·硬件架构·硬件工程
龙仔7251 天前
人大金仓KingbaseES V8 手动单库备份&恢复操作笔记
数据库·笔记·oracle·人大金仓
zhangrelay1 天前
消费电子原装锂电池服役8–20年且健康度>40%公开实测案例完整调研分析报告
笔记·学习
疯狂打码的少年1 天前
【软件工程】软件测试:黑盒测试(等价类/边界值/因果图)
笔记·软件工程