Skip to content

9.5.2 RAG 常见错误类型有哪些? ​

先给结论:RAG 常见错误类型绝不只有“幻觉”一种。真实系统里,更常见的是多类错误混在一起,比如没召回、召回偏题、证据被截断、回答不忠实、该拒答却没拒答、版本混用、权限串漏。只有把这些错误拆开,你才能知道该修哪一层。

很多团队讨论错误时,习惯只用几个很粗的词:

  • 答错了
  • 幻觉了
  • 检索不准

这些词能表达现象,但不够支持改进。因为它们没有把错误放回系统链路里。

更实用的思路:按链路来分错误桶 ​

一个常见而有效的分法,是按照 RAG 链路拆:

  • 数据与知识准备错误
  • query 理解错误
  • 检索与过滤错误
  • 重排与结果选择错误
  • 上下文构造错误
  • 生成与忠实性错误
  • 安全与边界错误

这样分的好处是,每一桶后面都更容易对应到行动。

第一类,数据与知识准备错误 ​

这类错误的根因往往在进入检索之前。

常见表现:

  • 知识库里本来就没有正确资料
  • 文档过期,新旧版本混在一起
  • 关键字段没有进 metadata
  • chunk 切法破坏了原始语义

这类错误经常会被误以为是“检索不行”,但本质上是:

  • 数据没准备好

第二类,query 理解错误 ​

这类问题发生在进入检索前的 query 处理阶段。

常见表现:

  • 用户问题里的时间边界没识别出来
  • 缩写、别名、内部术语没有被识别
  • 多意图问题被错误压成单意图
  • rewrite 把原问题改偏了

这类问题的特点是,后面的检索和生成可能都很努力,但一开始方向就错了。

第三类,检索与过滤错误 ​

这是最常见的一类错误。

常见表现:

  • 正确文档根本没召回
  • 召回结果看起来相关,但缺少关键证据
  • 过滤条件没生效,召回了错误租户或错误版本内容
  • 召回结果里噪声很多,真正有用的内容被埋没

它通常对应:

  • recall 不足
  • filter 错误
  • 索引设计不当
  • 多路召回策略不稳

第四类,重排与结果选择错误 ​

这类问题不是“完全没召回”,而是“召回到了,但最终没保下来”。

常见表现:

  • 正确证据在候选集中,但排名太低
  • 高分结果彼此重复,占满上下文
  • 文档级和 chunk 级选择策略不合理
  • 相邻块扩展或聚合方式把关键内容冲掉

它的难点在于,很多团队只看初次召回,不看最终送进模型的那一批内容。

第五类,上下文构造错误 ​

这类错误在生产系统里非常常见,但经常被低估。

常见表现:

  • 证据本身都对,但拼在一起后逻辑不清
  • 关键约束埋在上下文中部或末尾,模型没有稳定使用
  • 多段证据缺少来源说明,模型把它们误合并
  • 太多相似证据堆在一起,反而稀释了真正关键的信息

这类问题说明:

  • “找到证据”不等于“把证据组织得可用”

第六类,生成与忠实性错误 ​

这是最容易被直接看见的一类,因为它体现在最终答案上。

常见表现:

  • 明明有证据,回答还是漏掉关键点
  • 把证据中的限定条件说丢了
  • 混合多段材料后得出错误结论
  • 超出资料范围进行脑补

这一类通常和:

  • prompt 约束
  • 证据组织方式
  • 输出格式要求
  • 模型在长上下文下的稳定性

都有关系。

第七类,安全与边界错误 ​

这类问题经常被放到最后,但风险很高。

常见表现:

  • 资料不足时不拒答
  • 召回到无权限内容
  • 把旧版本规则当成当前规则
  • 回答中暴露不该看到的信息

这类错误说明,系统不只是“答错”,而是:

  • 边界控制失败

为什么一个案例可能同时落入多个错误桶 ​

不要把错误分桶理解成“每题只能选一个标签”。真实系统里,一个失败案例可能同时存在:

  • 主错误
  • 次错误

例如:

  • 主错误是 metadata filter 没生效
  • 次错误是模型拿到错误版本后又进行了不忠实总结

如果你强行只保留一个标签,会损失很多诊断价值。更实用的做法通常是:

  • 标一个主错误桶
  • 再标一个次错误桶

一个更接近工程实践的最小错误结构 ​

python
error_case = {
    "query": "企业版升级后还适用老合同折扣吗",
    "primary_bucket": "filter_and_versioning_error",
    "secondary_bucket": "generation_overgeneralization",
    "symptom": "answer_used_wrong_version_policy",
    "root_stage": "retrieval_filter",
    "severity": "high"
}

这种结构的作用在于,让后面的统计和调优有抓手。

不同阶段最常见的错误信号 ​

如果你想快速建立直觉,可以先记住下面这些对应关系:

  • “完全不知道答案”更像证据缺失
  • “说得像对,但关键条件错了”更像忠实性或版本问题
  • “总是答到旧规则”更像更新和过滤问题
  • “资料都给了还在乱编”更像生成约束不足
  • “一到复杂问题就崩”更像多文档综合、上下文构造或长上下文问题

一句话总结 ​

RAG 常见错误类型不是几个笼统标签,而是一组可以映射到系统链路的错误桶。只有把错误拆到足够细,你才能让调优动作真正对症。