
ragdebuggingproductionretrievaldata-qualitysegment:solution-company
RAG 管道故障模式:生产环境调试现场指南
RAG 故障模式的全面目录,包含症状、根本原因和修复方法。基于真实生产事件和社区讨论构建。
EErtas Team·
RAG 管道会静默地失败。与崩溃的服务或抛出的异常不同,损坏的 RAG 管道仍然会返回答案。只不过是错误的答案、不完整的答案,或者被不应该到达 LLM 的信息所污染的答案。系统看起来运行正常,实际上却在输出无用的结果。
本指南编录了我们在生产 RAG 系统中反复看到的故障模式。每个条目遵循相同的结构:您观察到什么、为什么会发生以及如何修复。请收藏本页。当凌晨 2 点您的检索管道返回无意义的结果而您 无法弄清原因时,您会需要它。
故障模式 1:检索未命中(相关文档存在但未被检索)
症状: LLM 说"我没有关于这个的信息"或虚构一个答案,即使正确的文档在您的向量存储中。用户报告系统"不知道"您明知已经索引的内容。
根本原因: 查询 embedding 和文档块 embedding 在向量空间中不够接近,尽管它们在语义上是相关的。这发生在以下情况:
- 查询使用的术语与源文档不同(用户询问"解雇员工",文档使用"非自愿终止")
- embedding 模型未在您的领域词汇上训练
- 块太大,用不相关的上下文稀释了 embedding
- 块太小,丢失了与查询匹配所需的语义含义
修复方法:
- 添加混合搜索层(BM25 关键词搜索与向量相似度并行)以捕获术语不匹配
- 在上线前用真实用户查询测试检索——不仅仅是您自己编写的查询
- 尝试不同的块大小 :256-512 个 token 对大多数文档类型来说是一个合理的起点
- 如果您的内容使用专业词汇,考虑使用领域适配的 embedding 模型
- 添加查询扩展或重写,在 embedding 之前重新表述用户查询
故障模式 2:检索到错误的上下文(不相关的文档获得高分)
症状: LLM 给出自信但不正确的答案,引用了错误文档、错误章节或完全不同主题的信息。检索到的块看起来合理但与实际问题无关。
根本原因: 向量相似度不等于相关性。两个段落可以在语义上相似(相同领域、相同词汇),但一个对另一个并不相关。常见触发因素:
- 模板文本(页眉、页脚、免责声明)获得高相似度分数,因为它们到处出现
- 来自不同时间段或版本的文档未被区分
- 缺少元数据过滤器,因此搜索考虑整个语料库而不是相关子集
修复方法:
- 添加元数据过滤(日期、文档类型、部门、版本), 使检索在相似度排序之前缩小搜索空间
- 在摄取过程中去除模板文本——在分块之前移除页眉、页脚和重复的免责声明
- 在初始检索之后实施重排序步骤,使用 cross-encoder 模型比原始余弦相似度更准确地评分查询-文档相关性
- 添加相关性阈值——如果块的相似度分数低于经过测试的最低值,则不要将其传递给 LLM
故障模式 3:过时的上下文(文档已过期)
症状: LLM 基于旧信息给出答案——上季度的定价、被替代的政策、已弃用的 API 端点。用户失去信任,因为他们知道信息已更改但系统仍给出旧答案。
根本原因: 向量存储包含已被更新或替换的文档的 embedding,而索引管道不检测或处理更新。这是生产中最常见的 RAG 故障,因为大多数团队构建了初始索引管道,但从未构建更新管道。
修复方法:
- 在元数据中实施带时间戳的文档版本控制,以便可以按新近度过滤
- 构建增量重新索引管道,检测更改的文档并仅重新 embed 更新的块