3步构建高质量RAG测试数据集:从知识图谱到场景化评估
你是否还在为RAG(检索增强生成)系统的测试数据发愁?手动编写的测试用例要么覆盖不全,要么无法反映真实用户查询模式?本文将带你通过Ragas的知识图谱技术,3步构建高质量测试数据集,解决RAG系统评估难题。读完你将掌握:知识图谱自动构建方法、多类型查询生成技巧、以及场景化测试集应用策略。
为什么需要专门的RAG测试数据集?
RAG系统的性能高度依赖查询类型与文档内容的匹配度。用户查询可分为四大类,每种类型对检索精度和生成质量有不同要求:
- 单跳特定查询:如"爱因斯坦何时发表相对论?",需精确匹配单一事实
- 单跳抽象查询:如"相对论如何改变时空观?",需综合解释性内容
- 多跳特定查询:如"哪些科学家影响了爱因斯坦的相对论研究?",需跨文档关联
- 多跳抽象查询:如"相对论自发表以来有哪些理论发展?",需时空维度的知识整合
传统随机采样或人工编写的测试集难以覆盖这些复杂场景。Ragas采用知识图谱驱动的测试数据生成方法,能系统性覆盖各类查询模式。
第一步:构建领域知识图谱
知识图谱是Ragas测试数据生成的核心。它将非结构化文档转化为结构化的实体关系网络,为智能查询生成提供基础。构建流程包含三个关键步骤:
文档分块与节点创建
首先将原始文档拆分为语义连贯的片段(chunk),每个片段作为知识图谱的基础节点。Ragas支持自定义分块策略,例如金融文档可按"资产负债表"、"现金流量表"等业务模块拆分:
from ragas.testset.graph import Node
# 创建文档节点示例
sample_nodes = [Node(
properties={"page_content": "爱因斯坦的相对论彻底改变了我们对时空的理解..."}
), Node(
properties={"page_content": "时间膨胀现象发生在物体接近光速运动时..."}
)]
实体与关系提取
使用抽取器从节点中提取关键信息,包括命名实体、关键短语和语义关系。Ragas提供预置的LLM-based抽取器和规则抽取器:
from ragas.testset.transforms.extractors import NERExtractor
# 实体提取示例
extractor = NERExtractor()
output = [await extractor.extract(node) for node in sample_nodes]
# 输出: [('entities', ['爱因斯坦', '相对论', '时空']), ...]
提取结果会作为属性添加到节点,形成富含语义信息的知识单元:
关系构建与图谱优化
通过关系构建器计算节点间的关联强度,自动建立语义连接。Ragas提供多种关系算法,如基于实体重叠的Jaccard相似度:
from ragas.testset.transforms.relationship_builders.traditional import JaccardSimilarityBuilder
# 基于实体相似度构建关系
rel_builder = JaccardSimilarityBuilder(
property_name="entities",
new_property_name="entity_jaccard_similarity"
)
relationships = await rel_builder.transform(kg)
最终形成的知识图谱可保存复用,包含节点48个、关系605个的典型图谱示例:
kg.save("knowledge_graph.json")
loaded_kg = KnowledgeGraph.load("knowledge_graph.json")
# 输出: KnowledgeGraph(nodes: 48, relationships: 605)
第二步:多场景查询自动生成
基于知识图谱,Ragas可按自定义比例生成各类查询。核心组件是TestsetGenerator,它协调知识图谱遍历和查询合成过程。
配置生成参数
首先初始化生成器,指定LLM和嵌入模型:
from ragas.testset import TestsetGenerator
generator = TestsetGenerator(
llm=generator_llm,
embedding_model=embedding_model,
knowledge_graph=loaded_kg # 加载第一步构建的知识图谱
)
定义查询分布策略
通过query_distribution参数控制各类查询的比例。默认配置为:
from ragas.testset.synthesizers import default_query_distribution
query_distribution = default_query_distribution(generator_llm)
# 输出: [(SingleHopSpecificQuerySynthesizer, 0.5),
# (MultiHopAbstractQuerySynthesizer, 0.25),
# (MultiHopSpecificQuerySynthesizer, 0.25)]
执行测试集生成
调用generate方法生成指定数量的测试样本:
testset = generator.generate(
testset_size=10, # 生成10条测试数据
query_distribution=query_distribution
)
testset.to_pandas() # 转换为DataFrame查看
生成结果包含查询、参考上下文和理想答案三部分,形成完整的评估单元:
第三步:测试集质量优化与应用
生成的原始测试集需要进一步优化,才能作为可靠的评估基准。Ragas提供多种工具提升测试集质量。
测试集质量分析
通过内置分析工具检查测试集覆盖度和多样性:
# 分析测试集属性分布
analysis = testset.analyze()
print(analysis)
# 输出包含查询类型分布、实体覆盖率、平均长度等指标
人工筛选与增强
结合领域专家知识,对自动生成的测试样本进行筛选和调整。重点关注:
- 删除歧义或无法回答的查询
- 补充边缘场景的测试用例
- 调整参考答案使其更符合实际应用需求
集成到CI/CD流程
高质量测试集可作为RAG系统迭代的评估基准,通过Ragas的评估API集成到开发流程:
from ragas import evaluate
from datasets import Dataset
# 使用生成的测试集评估RAG系统
test_df = testset.to_pandas()
dataset = Dataset.from_pandas(test_df)
results = evaluate(
dataset=dataset,
metrics=["faithfulness", "answer_relevancy"],
)
评估结果可通过可视化工具展示,直观比较不同版本RAG系统的性能:
总结与最佳实践
通过Ragas构建高质量RAG测试数据集的核心要点:
- 知识图谱是基础:投入时间优化实体提取和关系构建,这直接影响查询生成质量
- 多样化查询分布:根据实际应用场景调整查询类型比例,避免过度拟合单一模式
- 人机结合验证:自动生成+人工筛选是平衡效率和质量的最佳实践
- 持续迭代优化:将测试集作为活体资产,随文档库更新和用户反馈不断进化
Ragas的测试数据生成能力源自KnowledgeGraph类和QuerySynthesizer接口的灵活设计。通过自定义这些组件,可满足特定领域的测试需求。
完整实现细节可参考:
- 官方文档:RAG测试集生成指南
- 代码示例:testset_generation.ipynb
- API参考:ragas.testset模块
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0152- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0112



