跳转到主要内容

80% 陷阱:聚合 RAG 指标如何掩盖系统性长尾失效

阅读需 1 分钟Tian PanTian Pan

你的 RAG 管道在评估集上达到了 80% 的检索准确率。团队将其发布。三周后,一位客户抱怨说,系统在回答关于产品遗留集成的某些问题时,给出的答案完全错误,表现得却非常有信心。你进行了调查,将该查询输入你的管道,它检索到了完全相关的文档——但只是针对一般主题。而那三个涵盖了遗留集成边缘情况的特定文档就躺在你的语料库里,却从未被检索出来。

那 80% 的数字是真实的。但作为刚才所发生情况的信号,它几乎毫无用处。

聚合检索指标将高度非均匀的分布压缩为一个数字。你的查询流量并非来自均匀分布,你的语料库覆盖范围也不是。80% 的准确率数字可能反映了那 20% 经常出现的查询类型(如简单的查找、常见的产品问题、FAQ 式请求)接近完美的表现。这些查询锚定了该指标。而长尾部分——即关于边缘情况、遗留功能、特定配置和利基用例的频率低但关键的查询——在平均值中贡献的权重很小,但失败率却高得多。

这并非假设。对研究、教育和生物医学领域 RAG 部署的研究一致发现,验证只有在生产条件下才有意义,这正是因为长尾部分的系统性故障在离线评估期间是不可见的。

为什么你的分布具有长尾效应(即使你认为并非如此)

任何处理真实用户查询的检索系统都会呈现长尾分布。用户会询问对他们重要的事情——这通常意味着不寻常、具体或多跳的查询。分布的头部由关于表现良好的主题的频繁且表述清晰的查询主导。长尾则包含:

  • 利基话题查询:关于功能、配置或产品领域的提问,虽然出现频率较低,但其答案对业务至关重要
  • 代表性不足的时间段:上个季度的文档,尚未积累足够的关联内容来锚定检索
  • 多跳查询:需要综合多个文档的信息,其中每个文档都相关,但只有组合在一起才能回答问题
  • 词汇不匹配:查询使用的表述方式是你的语料库未采用的——例如不同的命名习惯、缩写、或者嵌入模型认为语义距离较远的同义词

长尾部分的危险之处不仅在于其性能较低,更在于长尾中的查询往往是那些出错成本最高的查询。对于简单的 FAQ 问题,用户的容忍度较高。而对于具体的合规性问题或来自受挫工程师的调试查询,则并非如此。

覆盖缺口审计

修复长尾覆盖率始于测量——这意味着要超越聚合数字,关注每个聚类的性能。该过程分为三个步骤:对查询进行聚类、测量每个聚类的性能,以及识别语料库中的结构性差距。

对查询进行聚类。对生产环境查询的代表性样本进行嵌入处理,并对这些嵌入运行 k-means 或层次聚类。选择足够大的 k 值以区分不同的查询意图——根据你的领域广度,通常在 20 到 100 个聚类之间。目标不是建立一个完美的分类体系,而是为了区分具有不同成功率的查询类型。

为每个聚类独立计算检索成功率。你通常会发现:少数高流量聚类的成功率在 90% 以上,存在一个庞大的中间地带,以及一个性能下降到 40–60% 的长尾聚类。这些低性能聚类就是你的覆盖范围缺口。

诊断结构性故障。一旦识别出失败的聚类,接下来的问题是它们为什么失败。两种常见原因需要不同的修复方法:

第一种原因是语料库缺失:你的知识库中不存在回答这些查询所需的文档。这很容易诊断——从该聚类中提取失败查询的样本,在语料库中手动查找答案,如果你找不到,说明存在内容缺口。

第二种原因是检索盲区:文档存在,但检索器始终无法将其检索出来。当查询词汇与文档词汇的分歧程度大到高维嵌入模型仍无法很好地弥合时,就会发生这种情况。你可以通过检查 BM25 搜索或直接关键字搜索是否能找到相关文档来检测这一点。如果关键字搜索在向量搜索失败的地方取得了成功,说明你遇到的是词汇不匹配问题,而不是内容缺口。

两者的修复方式各不相同。内容缺口需要补充新文档。而检索盲区则需要混合搜索架构、查询重写或文档增强——即添加可以弥合词汇差异的备选表述或元数据。

在问题爆发前识别结构性盲点

上文提到的覆盖缺口审计是被动式的——你是在诊断已经在生产环境中发生的失败。一种互补的方法是部署前语料库审计:运行分析,揭示检索器在部署前会系统性漏掉的内容。

会员专享

余下内容仅对会员开放。

会员可读完整内容 —— 每一个公开发布的观点背后,那些框架、决策与推理的全貌。

  • 完整文章,包含未公开存档的部分
  • 可落地的工作框架,附带权衡与决策依据
  • 新文章抢先看,先于公开发布

随时取消 · 一次订阅,畅读全部

参考资料

保持联系,关注我获取更多内容

阅读需 10 分钟

掩盖检索器 Bug 的 RAG 评估反模式

大多数团队采用端到端的方式评估 RAG 系统,这使得生成器掩盖了检索环节的失败。本文将介绍如何构建一个专门针对检索器的评估框架,在错误累积之前发现其中的 Bug。

insider
rag
阅读需 9 分钟

评估了错误的 RAG 管道环节

一个 RAG 系统本质上是由两台机器组成的,但大多数评估框架只给生成器评分。本文将解释为什么检索环节需要独立的评分体系,以及如何构建它。

insider
rag
阅读需 11 分钟

当你的 RAG 流读取时发生的 Wiki 中途编辑问题

当你的 RAG 摄入任务在作者编辑中途运行时,索引可能会捕获一个在 Wiki 中从未真实存在的状态。本文将探讨为什么基于轮询的流水线在大规模场景下会产生脏读,以及如何通过 CDC、版本锁定和写入静默模式来解决这些问题。

insider
rag
阅读需 11 分钟

你的 RAG 分块器是一项无人 Review 代码的数据库 Schema

将你的 RAG 分块器视为预处理,每一次边界微调都会变成一次静默的 Schema 迁移。对其进行版本管理、灰度发布,并同步负责检索评估。

insider
rag
阅读需 10 分钟

为什么你的 RAG 引用在撒谎:源归因中的事后合理化

50% 到 90% 的大语言模型引用并不完全支持它们所对应的陈述。本文将探讨为什么事后归因会导致 RAG 系统在潜移默化中失去信任,如何利用 NLI 衡量引用忠实度,以及哪些架构修复方案真正有效。

insider
rag