SuperAPI AI 工具集

evaluate-rag

数据与分析

查看项目

更新于 10-14 21:59

技能介绍

用途

evaluate-rag 用于评估检索增强生成(RAG)流水线的检索与生成质量。它面向需要衡量 RAG 系统表现的场景,帮助定位失败究竟来自检索、生成还是两者。

主要能力

先做错误分析

在选择指标之前,先对 RAG 流水线的端到端 trace 做错误分析。检查实际检索到的内容与模型所需内容之间的差异,判断问题出在检索、生成还是两者。优先修复检索。

分别评估检索与生成

对每个组件独立衡量,并为每个检索阶段使用合适的指标:

  • 首轮检索:优化 Recall@k,即使引入噪声也要包含所有相关文档。
  • 重排序:优化 Precision@k、MRR 或 NDCG@k,把最相关的文档排在最前。

构建检索评估数据集

需要将查询与作为 ground-truth 的相关文档块配对。

  • 人工整理(质量最高):编写真实问题,并将每个问题映射到包含答案的确切文档块。
  • 合成 QA 生成(可扩展):对每个文档块,提示 LLM 提取一个事实,并生成一个只能由该事实回答的问题。

合成 QA 提示模板:

Given a chunk of text, extract a specific, self-contained fact from it.
Then write a question that is directly and unambiguously answered
by that fact alone.

Return output in JSON format:
{ "fact": "...", "question": "..." }

Chunk: "{text_chunk}"

对抗性问题生成:创建更难的查询,它们看起来与多个文档块的内容相似,但只能由其中一个文档块回答。

流程:

  1. 选择包含明确事实的目标文档块 A。
  2. 使用嵌入搜索找到相似文档块 B、C(共享术语但缺少答案的文档块)。
  3. 提示 LLM 使用 B 和 C 中的术语编写一个问题,该问题只能由文档块 A 回答。

示例:

  • 文档块 A:"In April 2020, the company reported a 17% drop in quarterly revenue, its largest decline since 2008."
  • 文档块 B:"The company experienced significant losses in 2008 during the financial crisis."
  • 生成的问题:"When did the company experience its largest revenue decline since the 2008 financial crisis?"

只有文档块 A 包含答案,文档块 B 是合理的干扰项。

过滤合成问题:使用 few-shot LLM 评分对合成查询的真实性打分,只保留被评为真实(1-5 分制中的 4-5 分)的查询。此处适合使用 Likert 评分,因为目标是用于数据集整理的模糊排序,而非衡量失败率。

检索指标

  • Recall@k:前 k 个结果中找到的相关文档比例。

    Recall@k = (relevant docs in top k) / (total relevant docs for query)

    首轮检索优先考虑召回率。LLM 可以忽略不相关内容,但无法从缺失内容中生成答案。

  • Precision@k:前 k 个结果中相关结果的比例。

    Precision@k = (relevant docs in top k) / k

    用于重排序评估。

  • Mean Reciprocal Rank (MRR):第一个相关文档出现得有多早。

    MRR = (1/N) * sum(1/rank_of_first_relevant_doc)

    最适合只需要一个关键文档块的单事实查找。

  • NDCG@k(Normalized Discounted Cumulative Gain):用于文档效用各异的等级相关性。奖励将更相关的项目排在更高位置。

    DCG@k  = sum over i=1..k of: rel_i / log2(i+1)
    IDCG@k = DCG@k with documents sorted by decreasing relevance
    NDCG@k = DCG@k / IDCG@k
    

    注意:弱相关文档的最优排序可能得分高于排在较低位置的高度相关文档。需辅以 Recall@k。

  • 选择 k:k 因查询类型而异。事实查找使用 k=1-2。综合查询("summarize market trends")使用 k=5-10。

指标选择

查询类型 主要指标
单事实查找 MRR
需要广泛覆盖 Recall@k
排序质量重要 NDCG@k 或 Precision@k
多跳推理 Two-hop Recall@k

评估与优化分块

将分块视为可调超参数。即使使用相同的检索器,仅分块方式不同,指标也会变化。

固定大小分块的网格搜索:测试分块大小与重叠的组合。为每种配置重新索引语料库。在评估数据集上衡量检索指标。

搜索网格示例:

Chunk size Overlap Recall@5 NDCG@5
128 tokens 0 0.82 0.69
128 tokens 64 0.88 0.75
256 tokens 0 0.86 0.74
256 tokens 128 0.89 0.77
512 tokens 0 0.80 0.72
512 tokens 256 0.83 0.74

内容感知分块:当固定大小分块拆分了相关信息时:

  • 使用自然文档边界(章节、段落、步骤)。
  • 为分块添加上下文:在嵌入前为每个分块前置文档标题和章节标题。

评估生成质量

确认检索正常后,从两个维度评估 LLM 如何处理检索到的上下文:

  • 答案忠实度:输出是否准确反映检索到的上下文?检查:
    • 幻觉:源文档中不存在的信息。在 RAG 中,即使来自 LLM 自身知识的正确事实也算作幻觉。
    • 遗漏:上下文中相关信息在输出中被忽略。
    • 误解:上下文信息被不准确地表述。
  • 答案相关性:输出是否回应了原始查询?答案可能忠实于上下文,但未能回答用户所问。

使用错误分析发现流水线中的具体表现。识别哪类信息会被幻觉,哪些约束会被遗漏。

按指标模式诊断失败

Context Relevance Faithfulness Answer Relevance 诊断
High High Low 生成器关注了正确文档的错误部分
High Low -- 对检索内容产生幻觉或误解
Low -- -- 检索问题。修复分块、嵌入或查询预处理

多跳检索评估

对于需要来自多个文档块信息的查询:

  • Two-hop Recall@k:两个 ground-truth 文档块都出现在前 k 个结果中的 2 跳查询比例。

    TwoHopRecall@k = (1/N) * sum(1 if {Chunk1, Chunk2} ⊆ top_k_results)

    通过分类诊断失败:第 1 跳未命中、第 2 跳未命中,或排名超出前 k。

反模式

  • 使用单一的端到端正确性指标,而不分别衡量检索与生成。
  • 不先阅读 trace 就直接跳到指标。
  • 过拟合合成评估数据。定期用真实用户查询验证。
  • 将相似度指标(ROUGE、BERTScore、余弦相似度)作为主要的生成评估。使用由错误分析驱动的二元评估器。
  • 在不检查上下文接地的情况下评估生成。

使用方式

该技能以指导性说明的形式提供评估 RAG 流水线的方法、指标、数据集构建流程与诊断表。资料未提供具体的安装命令、代码调用方式或运行环境要求。

适用场景

  • 评估检索增强生成系统的检索与生成质量。
  • 构建检索评估数据集(人工或合成)。
  • 选择检索指标并优化分块超参数。
  • 诊断 RAG 失败来源并评估多跳检索。

限制

资料未提供该技能的收费、价格、平台支持、具体安装步骤或效果保证等信息。