rag-quality-diagnose

Category: Data Risk: Low risk niuwoai/skills CC-BY-4.0

name: rag-quality-diagnose
description: RAG 检索增强问答的质量诊断与调优。当 AI 答非所问、检索不到明明存在的内容、引用了错误段落、开始编造、或者加了文档反而更差时使用。触发词:RAG、知识库问答、检索不准、召回率低、答非所问、幻觉、引用错误、向量检索、切块、rerank、重排、embedding 选型。不负责通用 prompt 优化(走 prompt-token-diet)和评测集设计(走 llm-eval-set)。

RAG 质量诊断

RAG 出问题时,八成的人第一反应是换更大的模型。但 RAG 是一条流水线,模型只是最后一环。先定位是哪一环坏了,否则换什么模型都白搭。

一、先分段归因

拿 20 条答错的样本,对每条回答两个问题:

问题 1:正确答案所在的原文,出现在检索结果里了吗?

  • 没出现 → 检索环节的问题。往下看第二节。这是最常见的情况。
  • 出现了 → 往下问第二个问题。

问题 2:把正确原文单独喂给模型,它能答对吗?

  • 能答对 → 生成环节被噪声干扰了。往下看第四节。
  • 答不对 → 生成环节或原文本身的问题。往下看第五节。

这个二分法花不了半小时,但能省掉几周的瞎调。跳过这一步的 RAG 优化都是碰运气。

二、检索召不回

按排查顺序:

切块有问题(最常见)

  • 切太碎:一个完整的答案被切成三块,每块单独看都不像答案,都排不进前几名。
  • 切太大:一块里混了五个主题,向量被平均掉,谁也不像。
  • 在语义中间切断:固定字符数切块会把表格拦腰截断、把「因为」和「所以」分开。

改法:按结构切(标题、段落、列表项),保留层级信息。相邻块留 10% 到 20% 的重叠。表格和代码块不许拆开

每一块前面拼上它的标题路径,这一招便宜且有效:

[产品手册 > 计费规则 > 超额处理] 当月用量超过套餐后,超出部分按……

向量模型不匹配

  • 中文内容用了只在英文语料上训练的 embedding 模型,效果会差一大截。选支持中文的模型。
  • 检查 embedding 是否被截断。多数模型有 512 token 上限,超出的部分直接丢弃,长块的后半段等于没入库。
  • 确认入库和查询用的是同一个模型同一个版本。换了模型必须全量重建索引,这个坑很常见。

查询和文档不在一个语域

用户问「这个怎么退钱」,文档写的是「退款流程与时限规定」。纯向量检索对这种口语与书面语的落差处理得不好。

改法:

  • 混合检索:向量 + BM25 关键词,两路结果融合(RRF 是简单有效的融合方法)。专有名词、型号、错误码这类,关键词检索比向量强得多。
  • 查询改写:让小模型把用户问题改写成两三个更书面的检索式,多路召回后合并。
  • 给文档块生成假设问题,把问题也入库,用问题去匹配问题。

召回数量与重排

  • 先把召回数量调大(比如 50),看正确答案是否进入了这 50 条。进了,说明召回没问题,是排序问题,加 reranker。
  • 加 reranker 通常比加召回数量有效得多,也便宜得多。 召回 50 条交给 rerank 模型精排出 5 条,是性价比最高的一步。
  • 元数据过滤要用上:时间范围、文档类型、部门权限,先过滤再检索,能大幅提升信噪比。

三、检索到了但排序靠后

这是最好解决的一类,加重排序器就行。判断依据:把召回数从 5 调到 50,正确答案出现了,说明是排序问题。

顺带检查:

  • 有没有大量重复内容挤占名额(同一份文档的多个版本都入库了)。做去重。
  • 有没有一堆目录页、免责声明、页眉页脚这类噪声块。入库前过滤掉。

四、检索对了但答错

模型拿到了正确原文却答错,通常是这几种:

  • 上下文太长,正确信息在中间被忽略。 把召回数从 20 降到 5,往往立刻好转。信息放在开头和结尾比放中间更容易被用上。
  • 多个片段互相矛盾(新旧两版政策都召回了)。加时间过滤,或者在 prompt 里明确「以最新版本为准」。
  • prompt 没有强制引用。 要求模型每句话标注来源块编号,无来源不许说。这一招对抑制幻觉非常有效,而且让错误可追溯。
  • 没有给拒答出口。 prompt 里必须写明「检索内容里没有依据时,直接说没有找到,不要推测」。没有这句话,模型一定会编。

五、原文本身有问题

  • 文档里就是没有这个答案,用户的期待错了。这种要在产品层面处理,让 AI 明确说「知识库里没有」,而不是硬答。
  • 文档过时、多版本并存、内部互相矛盾。这是知识库治理问题,技术手段解决不了。
  • 扫描件 OCR 质量差,表格全乱。先修数据。

RAG 救不了烂知识库。 如果诊断结论是这一条,要如实说,别用技术方案掩盖。

六、量化指标

分环节各测各的,不要只看端到端。

环节 指标 怎么算
检索 Recall@K 正确块出现在前 K 条的比例
排序 MRR / NDCG@5 正确块的排名位置
生成 忠实度 回答的每句话能否在检索块中找到依据
生成 答案正确率 与标准答案比对
整体 拒答准确率 该拒答时是否拒答,不该拒答时是否误拒

最后一行经常被漏掉。一个「什么都说不知道」的系统在忠实度上是满分,但毫无用处。

七、调优顺序

按投入产出比排:

  1. 修切块策略(最便宜,收益最大)
  2. 加 reranker
  3. 混合检索(向量 + 关键词)
  4. 减少送进模型的上下文数量
  5. prompt 加强制引用和拒答出口
  6. 查询改写 / 假设问题
  7. 换 embedding 模型(要全量重建索引,成本高)
  8. 换生成模型(放最后,通常不是瓶颈)

每改一步跑一次评测,记录分环节指标。一次改两处以上,就归因不了了。