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