RAG效果评估:你的知识库到底好不好用?

RAG效果评估:你的知识库到底好不好用?

RAG效果评估:你的知识库到底好不好用?

你把知识库搭起来了,老板也试用了一下,反馈说"还行,有时候挺准的"。

"还行"是最危险的评价。它意味着你不知道系统到底多好、多差、哪里差。今天这篇,我教你用一套低成本的方法,量化评估你的 RAG 知识库到底好不好用。

大家好,我是黒漂技术佬。


一、先定义:什么算"好用"?

RAG 系统的答案质量,拆成三个可测量的维度:

维度衡量标准举例
准确性答案是否基于文档给出,没有编造问"年假几天",答案应该和文档一致
完整性是否覆盖了文档中所有相关信息文档写了年假计算方式,AI 不能只说"去OA申请"
诚实性不知道的时候是否承认不知道文档没写的,AI 应该说"未找到",而不是编一个

学术界有很多评测框架——RAGAS、TruLens、DeepEval——但对于企业落地来说,最简单的方案往往最有效


二、方法一:人工评测(最便宜,也最诚实)

准备一份50 个问答对的评测集,这些问答对是你手动标注的"标准答案"。

评测集应该覆盖不同类型的问题:

类型1:事实查询(factoid) 问:"公司年假有多少天?" 答:5~15 天,按司龄递增 类型2:解释说明(explanatory) 问:"为什么代码评审要至少两个人?" 答:……(文档中关于 Code Review 的说明) 类型3:多跳推理(multi-hop) 问:"入职满 3 年的员工,年假加带薪病假最多能请多少天?" 答:需要综合年假制度和病假制度两篇文档 类型4:无关问题(out-of-domain) 问:"今天天气怎么样?" 答:这不是企业知识,应回复"无法回答"

打分规则(三级制)

2 分 — 完全正确,引用准确,没有编造 1 分 — 部分正确,但漏了重要信息或有轻微偏差 0 分 — 答非所问、幻觉编造、或引用了错误文档

一个 50 题的评测集,每题的"标准答案"是你人工写的,RAG 给出的实际答案由你打分。打完算平均分。

目标:平均分 ≥ 1.7 就算是"生产可用"了。低于 1.5 的话,先别上线。


三、方法二:RAGAS 自动评测(省人力,适合持续监控)

RAGAS 是一个开源的 RAG 评测框架,不需要人工标注答案,它用 LLM 自动打分。

fromragasimportevaluatefromragas.metricsimport(faithfulness,# 忠实度:答案是否基于检索到的文档answer_relevancy,# 答案相关性:答案是否切题context_recall,# 上下文召回率:是否找回了所需的所有信息context_precision,# 上下文精确率:检索结果里的噪音多不多)fromdatasetsimportDataset# 准备数据eval_dataset=Dataset.from_dict({"question":["年假怎么请?","加班费怎么算?",...],"answer":[rag_answer_1,rag_answer_2,...],"contexts":[retrieved_docs_1,retrieved_docs_2,...],"ground_truth":[human_answer_1,human_answer_2,...]# 可选})# 用 GPT-4 做评委(自动打分)result=evaluate(eval_dataset,metrics=[faithfulness,answer_relevancy,context_recall,context_precision])print(result)# {'faithfulness': 0.89, 'answer_relevancy': 0.85,# 'context_recall': 0.78, 'context_precision': 0.82}

四个指标怎么解读?

  • Faithfulness(忠实度)= 0.89:89% 的回答内容确实来自检索到的文档。剩下的 11% 是 LLM "自由发挥"的——这是最值得关注的指标,因为它直接反映幻觉率。
  • Answer Relevancy(答案相关性)= 0.85:85% 的回答确实在回答用户的问题。剩下的 15% 可能答非所问或答不完全。
  • Context Recall(上下文召回率)= 0.78:检索只找回了 78% 的所需信息。这是你的检索系统改善空间最大的地方。
  • Context Precision(上下文精确率)= 0.82:检索返回的文档里,82% 是有用的,18% 是噪音。可以试着减少 top_k。

四、方法三:用户反馈闭环(上线后的真实标尺)

评测永远是模拟。真正决定"好不好用"的是上线后的用户反馈

最轻量的方案:在每个 AI 回答下面加两个按钮。

# 前端收集反馈feedback={"question":"年假怎么请?","answer":"...","rating":"thumbs_up"|"thumbs_down",# 👍 或 👎"comment":"答案写错了,年假应该是5天不是10天",# 可选"user":"张三","timestamp":"2024-06-12T10:30:00"}# 后端存到数据库,定期跑统计

建立监控看板

至少跟踪这三个指标:

指标 1:好评率 = 👍 / (👍 + 👎) 目标:≥ 80% 指标 2:高频差评关键词 统计 👎 附带的 comment,看哪些问题类型反复出现 指标 3:拒答率 = 无匹配结果 / 总提问次数 太高(> 15%)→ 文档覆盖不足 太低(< 1%)→ 可能在编造

五、持续优化循环

评测不是一次性的事。我的实战循环是这样:

每两周跑一轮: ┌─────────────────────────────────┐ │ 1. 收集新数据(用户反馈 + 差评) │ └─────────────┬───────────────────┘ ▼ ┌─────────────────────────────────┐ │ 2. 分析差评根因 │ │ 是检索没搜到?还是LLM编造了? │ └─────────────┬───────────────────┘ ▼ ┌─────────────────────────────────┐ │ 3. 针对性优化 │ │ · 检索差 → 调整chunk/改写策略 │ │ · 幻觉多 → 加强Prompt约束 │ │ · 覆盖不足 → 补充文档 │ └─────────────┬───────────────────┘ ▼ ┌─────────────────────────────────┐ │ 4. 跑评测集验证 → 发布新版本 │ └─────────────────────────────────┘

六、一个你可能忽略的评估维度:引用追溯

企业知识库和 ChatGPT 最大的不同是:答案必须有出处

给用户的答案应该标注"这个信息来自《员工手册》第 3 页",让用户可以回原文核查。

怎么实现?

# 在检索时保存每个 chunk 的元数据chunks=vectorstore.similarity_search(query,k=5)citations=[f"[{i+1}]{chunk.metadata['source']}(第{chunk.metadata['page']}页)"fori,chunkinenumerate(chunks)]# 拼进 Promptprompt=f""" ... 在回答末尾,请列出你引用的文档来源:{"\n".join(citations)}"""

然后在评测时,额外统计一个Citation Accuracy(引用准确率):AI 标注的来源,是否真的包含对应信息。这是一个硬指标——引用错了比没引用更差。


💬 你的 RAG 系统用什么方法评估的?Faithfulness 是多少?评论区晒一下!