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模块
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin07
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00



