跳转至

生产 RAG 排障指南

面试高频考点

  • RAG 答错了怎么定位?
  • 如何区分检索问题和生成问题?
  • 为什么看起来召回了文档,答案还是错?
  • 如何设计 RAG 评估和线上反馈?
  • 生产 RAG 常见失败模式有哪些?

外部图解:生产 RAG Pipeline

NVIDIA:RAG ingest / query pipeline

图源:NVIDIA Blog - RAG 101。这张图把离线 ingest 和在线 query 分开,适合定位 RAG 故障发生在哪一段。


一句话原则

RAG 排障不要直接怪模型,要按链路拆:

问题理解 -> 检索召回 -> 排序 -> 上下文组装 -> 生成 -> 引用校验

每一层都有独立失败模式。


1. RAG 失败分类

失败类型 表现 主要原因
没召回 正确文档不在 Top-K chunk、embedding、query rewrite 问题
召回错 Top-K 都是不相关文档 关键词歧义、权限过滤、索引污染
排序错 正确文档在后面 缺 rerank 或 rerank 模型不适配
上下文脏 太多噪声塞进 prompt Top-K 太大、chunk 太长
生成错 证据正确但总结错 prompt、模型能力、格式约束
引用错 答案和引用不匹配 citation 绑定不严
不该答却答 证据不足仍然编 缺拒答策略和置信阈值

2. 排障流程

Step 1:看正确文档有没有被召回

排障细节: 如果正确文档没有进入 Top-K,先不要调生成 prompt。应检查文档是否被接入、解析是否丢字段、chunk 是否切断答案、embedding 是否更新、权限过滤是否误杀、query 是否缺少关键词。这个阶段的目标是证明“证据能被找到”,否则后面 rerank 和生成都无从优化。

指标:

  • Recall@5
  • Recall@10

如果没召回:

  • 检查 query 是否需要 rewrite
  • 检查 chunk 是否切碎了关键信息
  • 检查 embedding 是否适合语言和领域
  • 检查关键词检索是否能补上专有名词

Step 2:看正确文档排第几

指标:

  • MRR
  • NDCG

如果召回了但排后面:

  • 加 reranker
  • 用 RRF 融合 BM25 和向量检索
  • 对标题、section_path 加权
  • 针对业务术语做 query expansion

Step 3:看上下文是否干净

指标:

  • Context Precision
  • 噪声 chunk 比例

如果上下文太脏:

  • 降低 Top-K
  • 缩短 chunk
  • rerank 后再截断
  • 对相同文档做去重

Step 4:看生成是否忠于证据

排障细节: 如果证据已经正确进入上下文但答案仍错,要检查 prompt 是否要求引用、证据是否过长、多个证据是否冲突、关键证据是否排在中间或末尾、模型是否被系统指令或用户指令带偏。常见修复包括证据去重、把关键句提前、要求逐条引用、降低 temperature、增加拒答规则和使用更强模型处理最终生成。

指标:

  • Faithfulness
  • Citation Accuracy

如果证据对但答案错:

  • prompt 强制“只基于证据”
  • 加引用检查
  • 不足时拒答
  • 用更强模型生成
  • 用 LLM-as-judge 做后验校验

3. Chunk 常见问题

Chunk 太小

表现:

  • 召回片段缺上下文
  • 模型看不到完整条件
  • 引用碎片化

解决:

  • 增加 overlap
  • 保留标题路径
  • 按语义段落切

Chunk 太大

表现:

  • 召回不精准
  • 上下文噪声多
  • token 成本高

解决:

  • 按标题、段落、表格单独切
  • 对 FAQ 用问答对作为 chunk
  • 对代码和日志单独策略

4. Query Rewrite 什么时候有用

适合:

  • 用户问题太短
  • 多轮对话有指代
  • 问题抽象
  • 需要拆多跳

不适合:

  • 错误码
  • 接口名
  • 精确产品型号
  • 日志关键字

规则:

Rewrite 不能丢掉原始关键词。生产里通常原 query 和 rewrite query 一起检索。


向量检索擅长语义相似,但不擅长:

  • 错误码
  • 版本号
  • API 名称
  • 人名
  • 产品编号
  • 日志片段

BM25 擅长精确匹配,但不擅长同义改写。

所以生产默认建议:

Dense Retrieval + BM25 + RRF + Rerank

6. 权限过滤怎么做

不要只在 prompt 里说“不能回答没权限内容”。

正确做法:

  1. 检索前按租户、部门、标签过滤
  2. 召回后再次过滤
  3. 引用里只展示可见来源
  4. 日志脱敏

如果权限过滤错了,RAG 会变成数据泄露系统。


7. 线上反馈闭环

日志至少记录:

  • query
  • rewritten query
  • retrieved chunks
  • rerank scores
  • final context
  • answer
  • citations
  • user feedback
  • latency
  • token cost

失败样本进入队列:

失败 处理
无答案 补知识库
召回错 调 chunk / embedding / hybrid
生成错 改 prompt / 模型 / judge
引用错 改 citation 绑定
用户不满意 标注偏好数据

常见误区

误区 1:Top-K 越大越好

Top-K 太大会引入噪声,让模型更容易答错。

误区 2:检索到了文档就不会幻觉

模型可能误读证据,也可能忽略证据。

误区 3:Embedding 换强模型一定解决问题

很多问题来自 chunk、权限、rerank 和 query rewrite。

误区 4:RAG 评估只看答案

必须把检索层和生成层拆开评估。


面试延伸

Q:RAG 答错了你怎么排查?

我会先看正确证据是否进入 Top-K,再看排序,再看上下文噪声,最后看生成是否忠于证据。对应指标是 Recall@K、MRR、Context Precision、Faithfulness 和 Citation Accuracy。

Q:为什么 Hybrid Search 比纯向量检索稳?

因为企业问题里有大量错误码、接口名、版本号和专有名词,BM25 对这些更稳;向量检索补语义改写,两者融合能提高召回鲁棒性。

Q:如何避免 RAG 泄露无权限文档?

权限必须在检索系统层实现,按租户和标签过滤,不能只靠 prompt 约束模型。


生产排障 Runbook

线上 RAG 出错时,建议按固定 runbook 处理,而不是临时猜:

1. 复现 query,固定用户身份和权限
2. 查看 rewrite query
3. 查看 dense / BM25 各自 Top-K
4. 查看 fusion 和 rerank 后排序
5. 查看 ACL filter 前后数量
6. 查看最终 prompt 中的 context
7. 查看模型答案是否忠于证据
8. 给失败打标签,进入优化队列

失败标签建议:

标签 含义 处理
knowledge_missing 知识库没有答案 补文档、补 FAQ
parse_failed 文档解析失败 修解析器、表格/OCR
chunk_bad chunk 切分不合理 改 chunk 策略
retrieval_miss 正确证据没召回 调 embedding/BM25/rewrite
rerank_bad 召回了但排序靠后 调 reranker 或训练数据
context_noise 上下文噪声太多 降 Top-K、压缩证据
generation_unfaithful 模型没按证据答 改 prompt、加引用校验
acl_error 权限过滤错误 修 metadata 和 filter

RAG 评估集怎么构建

生产 RAG 的评估集不应该只有“问题-答案”,最好包含证据:

{
  "question": "模型 API 超时怎么排查?",
  "gold_answer": "...",
  "gold_chunk_ids": ["ops_001", "gateway_014"],
  "must_cite": true,
  "tenant": "internal",
  "difficulty": "multi-hop"
}

评估维度:

  • Retrieval Recall@K:gold chunk 是否被召回。
  • MRR/NDCG:正确证据排序是否靠前。
  • Faithfulness:答案是否被证据支持。
  • Citation Accuracy:引用是否真实对应答案。
  • Refusal Accuracy:无证据或无权限时是否拒答。
  • Latency/Cost:质量提升是否值得成本。

面试回答模板

如果被问“RAG 线上效果差怎么办”,可以这样回答:

我不会先改模型,而是先拆链路。第一看正确证据在不在知识库,第二看有没有被 dense/BM25 召回,第三看 fusion/rerank 后有没有进入上下文,第四看模型是否忠于证据。每层都有对应指标和日志,定位后再决定补文档、调 chunk、换 embedding、加 rerank、改 prompt 或做权限修复。

这个回答能体现你理解 RAG 是系统工程,而不是一个向量库 demo。


原始论文

论文 链接
Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks (Lewis et al., 2020) arxiv.org/abs/2005.11401
Dense Passage Retrieval for Open-Domain Question Answering (Karpukhin et al., 2020) arxiv.org/abs/2004.04906
Self-RAG: Learning to Retrieve, Generate, and Critique (Asai et al., 2023) arxiv.org/abs/2310.11511
Corrective RAG (Yan et al., 2024) arxiv.org/abs/2401.15884
RAGAS: Automated Evaluation of Retrieval Augmented Generation (Es et al., 2023) arxiv.org/abs/2309.15217

延伸阅读与视频

平台 标题 说明
📖 NVIDIA Blog RAG 101: Demystifying Retrieval-Augmented Generation Pipelines 生产 RAG pipeline 的工程拆解
📖 LangChain Docs RAG evaluation concepts 线上 trace 和 RAG 评估入口
📖 LlamaIndex Docs Evaluating RAG applications RAG 检索和生成评估实践
📖 Anthropic Research Prompt injection defenses RAG/Agent 场景下的提示注入风险