
🧠 图解记忆: 先分清检索错还是生成错,再用质量、延迟、成本和业务结果一起验收。
💡 答案要点
RAG 评估框架(RAGAS):
python
# RAGAS 三大核心指标
from ragas import evaluate
from datasets import Dataset
# 准备评估数据
eval_data = Dataset.from_dict({
"user_input": ["问题1", "问题2", ...],
"retrieved_contexts": [["文档1", "文档2"], ...],
"response": ["答案1", "答案2", ...],
"reference": ["标准答案1", "标准答案2", ...]
})
# 计算指标
result = evaluate(eval_data, metrics=[
faithfulness, # 答案是否忠于检索内容
answer_relevancy, # 答案是否切题
context_recall, # 检索内容是否完整
context_precision # 检索内容是否精确
])四大核心指标详解:
| 指标 | 含义 | 目标值 | 测量方式 |
|---|---|---|---|
| Faithfulness | 答案事实是否来自检索内容 | >0.9 | LLM判断答案中有多少陈述被检索内容支持 |
| Answer Relevancy | 答案和问题相关程度 | >0.8 | LLM生成反问,看与原问题的语义相似度 |
| Context Recall | 检索内容覆盖标准答案的程度 | >0.85 | 比较检索内容 vs 标准答案的实体重叠 |
| Context Precision | 检索内容中噪音比例 | >0.9 | 计算 Top-K 中相关文档的比例 |
Context Precision 计算:
python
def context_precision(retrieved_docs, relevant_docs, k=10):
"""Context Precision@K"""
hits = 0
for i, doc in enumerate(retrieved_docs[:k]):
if doc in relevant_docs:
hits += 1
return hits / min(k, len(relevant_docs))实际调优案例:
python
# 调优前:Faithfulness=0.72
# 问题:模型有时候会"自己发挥",脱离检索内容
# 调优方案:添加 prompt 约束
improved_prompt = """
你是一个严格基于给定上下文回答的助手。
规则:
1. 只使用上下文中的信息,不要添加外部知识
2. 如果上下文中没有相关信息,直接回答"我不知道"
3. 回答时引用上下文中的具体内容
上下文:{context}
问题:{question}
"""
# 调优后:Faithfulness=0.91面试话术:
"RAG 评估用 RAGAS 框架,核心看四个指标:Faithfulness(答案是否忠于检索内容)、Answer Relevancy(答案是否切题)、Context Recall(检索是否完整)、Context Precision(检索是否精确)。生产环境我会用 RAGAS 配合人工抽检,每周跑一次评估看板。Faithfulness 最关键,低于 0.9 就得优化 Prompt 或检索质量。"
📚 参考:RAGAS:RAG 评估框架官方文档