☰
RAG系统答不准的常见问题
2026/10/4 4:38:13 网站建设 项目流程

RAG系统答不准的常见问题:检索侧五类、生成侧四类问题逐一排查

事实上,RAG就两段关键链路:离线构建索引、在线检索生成。答案不好,要么是检索崩了,要么是生成崩了

检索侧问题:

  • 文档质量差(噪声、乱码、格式混乱)
  • chunk粒度不合理(太粗或者太细、语义割裂)
  • Embedding选型不当(中文弱、领域不匹配)
  • 召回不足(相关文档没做检索到)
  • 缺少Rerank(召回结果精度不足)

生成侧问题:

  • Prompt拼接有问题(格式混乱、指令不清晰)
  • 上下文干扰(无关chunk稀释注意力)
  • 缺少引用约束(模型超出资料自由发挥)
  • 模型理解力弱(无法从资料推断答案)

检索侧:五类常见问题

文档质量差

这是最根本的问题,缺页是最容易被忽视掉的

如果输入文档本身是扫描件OCR的乱码、格式混乱的PDF解析结果、或者充满模板噪声的HTML,那么再好的Embedding模型也无法从噪声中提取有效语义。向量化的质量决定了检索出来的质量

典型症状:检索结果里出现大量无意义的片段

应对思路:在chunking之前加强文档预处理,譬如清除页眉页脚、过滤模板噪声、对低质量文档做专项清洗甚至人工校对

Chunk粒度不合理

Chunk太小会导致每个片段只有一句话,语义不完整,Embedding向量无法准确表达这段内容的主题,导致召回时命中了相关话题但内容不完整

Chunk太大会导致每个片段包含多个话题,向量表示变成多主题的混合,和Query的语义匹配变得模糊,召回精准度下降

典型症状:用相同的中文提问,换了说法之后检索结果差异巨大;同义句子得分很低

应对思路:评估几个候选模型,在业务数据上跑召回率对比实验,选择最适合当前领域的模型

召回不足

即便Embedding模型本身没有问题,也可能因为索引数据问题导致相关文档根本没有被检索到。常见原因包括:文档更新了但是索引没有及时重建,部分文档在入库时被错误过滤掉、top-k设置太小以至于相关内容被排在k之外

典型症状:明明知识库里有答案,但是RAG系统给不出;手动搜搜能找到,自动检索找不到

缺少Rerank

初步召回的top-K片段未必按照真实相关性排序—向量相似的和内容与问题的真实相关性是两个不同的维度,有些片段向量很近,但未必精准回答了用户的具体问题

典型症状:最终答案看起来相关但是不准确,答案方向对但是细节错,Context里面明明有答案,但是模型拼接出来的回答不够准确

应对思路:在召回后加入Cross-Encoder-Rerank,让模型对(Query,Chunk)对进行精细评分,只保留真正相关度的结果传入LLM

生成侧:四类常见问题

Prompt拼接有问题

这是工程上很容易被忽视的问题,RAG系统把检索到的chunk拼进Prompt里面,但是拼接方式不当—比如多个chunk之间没有分隔符、来源信息缺失、指令和内容混在一起、或者指令表述模糊,这些都会让模型难以正确理解输入

典型症状:模型回答时把多个文档里面的内容混淆了;或者对"如果资料中没有答案请说不知道"这类指令的遵从率很低

应对思路:明确区分“系统指令”和“参考资料”,为不同来源的内容加分隔符,并在指令里明确告诉模型如何处理资料不足的情况

上下文干扰

召回的chunk里面,不是每一条都和用户问题高度相关,低相关度的chunk混入Context,会稀释模型的注意力,让模型在大量的无关信息中“迷失”,最终给出的答案受到这些干扰项的影响。这个问题在没有Rerank的系统里面尤其突出,也和top-K设置过大有关

典型症状:答案里面混入了一些奇怪的、不相关的细节;或者模型给出了一个综合了多个不相关来源的平均答案

应对思路:用Rerank过滤低相关chunk;减少传入Context的chunk数量;在Prompt里面明确要求模型只根据提供的资料作答

缺少引用约束

如果Prompt没有明确限制模型“只基于提供的资料作答”,模型会自然把自身参数里面的知识和检索到的内容混合起来回答—这会引入幻觉,让但看起来比实际上更完整,但准确性存疑

应对思路:在系统Prompt里面加入明确的引用约束,比如:请严格根据以下资料回答,资料中没有的内容请明确说明无法回答,并要求模型在答案里面标注来源

模型理解能力不足

即便检索结果质量很高,模型自身的推理能力也会成为瓶颈,尤其是当答案需跨越多个chunk进行综合推断、或者问题本身需要复杂的逻辑推理时。这类问题在使用小模型时尤其明显

应对思路:对于推理密集型问题,升级到推理能力更强的模型;优化Prompt,明确要求逐步推导,或者通过Query拆解把复杂问题分解成多个简单检索任务

如何系统地诊断RAG问题?

第一步:判断是检索问题还是升成问题

最简单的方法:手动查看检索结果。把用户的问题直接查向量库,看看返回的top-K chunk里面有没有包含正确答案

  • 如果top-K chunk里面有正确答案,但最终生成的回答是错误的->生成侧问题
  • 如果top-K chunk里面根本没有正确答案->检索侧问题

第二步:在检索侧,进一步定位

召回率评估:对一批“已知有答案”的问题,统计正确chunk是否出现在top-K结果里

如果Recall@k低,进一步分析是Embedding问题还是文档覆盖问题

检索结果质量评估:查看top-k结果的相似度分数分布—如果分数普遍很低,说明Embedding语义空间不匹配,如果分数高但是内容无关,说明Embedding模型在当前领域理解有偏差

第三步:在生成侧,进一步定位

把正确的chunk手动构造Prompt喂给模型,看模型能否正确回答,如果可以,说明是检索问题,如果不行,说明是Prompt设计或者模型能力问题

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询