要最大限度利用 RAGAS 对 RAG 系统进行全面测试,覆盖所有关键评测点,并判断其交互效果是否优秀,需从 评测指标覆盖、数据设计、交互效果评估 三个维度系统化实施。以下是完整方案:
一、RAGAS 全覆盖评测指标与测试点
RAGAS 提供 4 类核心指标,需组合使用以覆盖全部测试场景:
1. 检索质量评测
指标 | 测试点 | 判断标准 | 优化方向 |
---|---|---|---|
context_precision |
检索内容是否精准相关 | 值越接近 1,检索结果越相关 | 优化 Embedding 模型/检索策略 |
context_recall |
检索是否覆盖标准答案 | 若 ground_truth 在检索结果中=1 |
增加检索文档多样性 |
2. 生成质量评测
指标 | 测试点 | 判断标准 | 优化方向 |
---|---|---|---|
faithfulness |
生成答案是否基于检索内容 | >0.9 说明幻觉少 | 强化 Prompt 约束 |
answer_relevancy |
答案是否直接回答问题 | >0.8 说明相关性高 | 优化生成模型参数 |
3. 端到端综合评测
指标 | 测试点 | 判断标准 |
---|---|---|
answer_correctness |
答案整体正确性(需人工标注) | 结合事实性、相关性综合评分(1-5) |
answer_similarity |
与标准答案的语义相似度 | BERTScore >0.7 为合格 |
4. 高级测试点扩展
测试场景 | 实现方法 |
---|---|
长尾查询 | 构造低频问题(如专业术语)测试 context_recall |
对抗性提问 | 输入误导性问题(如“地球是平的”),检查 faithfulness 是否接近 0 |
多轮交互 | 模拟连续对话,评估上下文一致性(需自定义脚本) |
二、数据准备:覆盖全测试场景
1. 测试数据集设计
test_data = {
"question": [
"量子纠缠的应用有哪些?", # 标准问题
"如何治疗不存在的疾病?", # 对抗性问题
"2023年诺贝尔物理学奖得主是谁?", # 需最新知识的开放问题
],
"answer": [...], # RAG 生成答案
"contexts": [...], # 检索到的文档
"ground_truth": [ # 标准答案(可选)
"量子密钥分发(QKD)",
"未找到相关医学证据",
"Pierre Agostini, Ferenc Krausz, Anne L'Huillier"
]
}
关键点:
- 覆盖 简单/复杂/对抗性/开放性问题。
- 至少 100 条数据 以保证统计显著性。
2. 自动化数据生成(可选)
用 LLM 合成测试数据,提升覆盖率:
from openai import OpenAI
client = OpenAI()
def generate_qa_pairs(topic, n=10):
response = client.chat.completions.create(
model="gpt-4",
messages=[{