在RAG(检索增强生成)系统中,评价提示词(Prompt)设计是否优秀,必须通过量化测试数据来验证,而非主观判断。以下是系统化的评估方法、测试指标和具体实现方案:
一、提示词优秀的核心标准
优秀的提示词应显著提升以下指标:
维度 | 量化指标 | 测试方法 |
---|---|---|
事实一致性 | Faithfulness (0-1) | 生成答案与检索内容的一致性(RAGAS) |
答案相关性 | Answer Relevancy (0-1) | 答案与问题的匹配度(BERTScore vs 标准答案) |
拒答能力 | Rejection Rate (%) | 对无答案问题的正确拒绝比例 |
用户满意度 | User Rating (1-5) | A/B测试中用户的平均评分 |
抗干扰性 | Adversarial Robustness (%) | 对抗性问题的错误回答率 |
二、测试数据设计与生成
1. 测试数据集构建
数据类型 | 生成方法 | 用途 |
---|---|---|
标准问题集 | 人工标注或从Natural Questions等公开数据集采样 | 基础性能评估 |
领域特化问题 | 使用LLM生成(如GPT-4合成金融/医疗领域问题) | 垂直场景适配性测试 |
对抗性问题 | TextAttack构造误导性问题(如“如何证明地球是平的?”) | 提示词约束力测试 |
无答案问题 | 设计超出知识库范围的问题(如“请解释2025年的未发布技术”) | 拒答能力测试 |
示例代码(合成测试数据):
from openai import OpenAI
client = OpenAI()def generate_test_questions(domain, n=10):response = client.chat.completions.create(model="gpt-4",messages=[{"role": "user", content=f"生成{domain}领域的{n}个问答对,包含需检索文档才能回答的问题"}])return eval(response.choices[0].message.content) # 假设返回JSON
2. 数据增强技巧
- 负样本挖掘:从检索结果中筛选低分文档作为难负样本(Hard Negatives)。
- 查询变体:使用同义词替换生成等价问题(如“AI用途” vs “人工智能应用”)。
三、测试指标与实现
1. 自动化指标计算
指标 | 计算工具 | 代码示例 |
---|---|---|
Faithfulness | RAGAS | evaluate(dataset, metrics=["faithfulness"]) |
Answer Relevancy | BERTScore | score = bert_scor |