跳到主要内容

K6.2 三大失败模式:对症下药

上一节的三盏灯告诉你「哪一环红了」,这一节把每种红灯对应的具体病根拆开,配上药方。RAG 翻车的方式虽多,归拢起来主要是三类。你在失败模式诊断器里已经各注入过一遍,这里把它们讲透。

病一:检索没召回(对的资料压根没捞回来)​

症状:上下文相关性红灯。用户问「退货运费谁承担」,可含答案的那段「运费规则」根本没被检索到——检索回来的全是无关内容。模型拿着一手烂牌,要么答「资料不足」,要么瞎猜。

这是 RAG 的头号失败模式,也是最致命的:因为它发生在流水线最前端,后面所有环节都救不回来。资料都没捞回来,重排排个啥、生成照着啥答?

药方全在检索(K1~K4):

  • 换更强的嵌入模型、调切块策略(K2:别把答案切散了);
  • 上混合检索(K3:语义漏的让关键词补,尤其是精确词);
  • 召回阶段多召回一些(K4:召回率优先,宁滥勿缺,反正有重排去伪存真);
  • 甚至改写查询(把用户口语化的问题改写成更好检索的形式)。

一句话:没召回的救不回,所以检索这一关要拼命「别漏」。

病二:上下文泄漏(资料对了,模型却用自己的旧记忆)​

症状:上下文相关性绿、有据性红。对的资料明明检索回来了、摆在模型面前,模型却无视它,凭训练时的「常识」瞎答——资料写着「会员退货免运费」,它却说「退货运费一般由买家承担」。

这叫「上下文泄漏」(context leak):模型参数里的旧知识「泄漏」进了答案,盖过了眼前的资料。它比病一更隐蔽——因为检索是对的,你查检索日志一切正常,可答案就是错的。

药方在生成(K5):

  • 提示词里把话说死:「只根据以下资料回答,不要使用你自己的知识,资料没有就说没有」;
  • 强制引用:逼模型给每句话标出处(K5.2)——它要标出处,就不敢轻易脱离资料编;
  • 严重时换个更「听话」(指令遵循更强)的模型。

病三:生成漂移(照着资料答,却把意思答歪了)​

症状:上下文相关性绿、有据性红(部分)。模型确实在用资料,但复述时走了样——资料说「会员免运费、非会员自付 10 元」,它压缩成了「退货一律免运费」,把「非会员要付钱」这个关键条件丢了。

这叫「生成漂移」(generation drift):忠实度打了折。它最阴险的地方在于——答案看起来通顺、大方向也对,用户很难发现少了个条件。模型对「长条件、多分支」的内容做概括时,特别容易漏掉或篡改细节。

药方也在生成(K5):

  • 要求模型逐条对应资料作答,别自由发挥概括;
  • 对关键的条件、数字,提示模型原样保留、别改写;
  • 用有据性评测(K6.1)专门盯这类「漏条件」的漂移。

一张诊断表​

把三种病根收拢成一张速查表——这就是你排查 RAG 故障时的地图:

失败模式红灯病根在一句话症状主要药方
检索没召回上下文相关性检索 K1~K4对的资料没捞回来改嵌入/切块/混合检索/多召回
上下文泄漏有据性生成 K5资料对但模型凭旧记忆答收紧指令、强制引用
生成漂移有据性生成 K5照着答但复述走样、丢条件逐条对应、关键信息原样保留
现实里的失败常常是「并发症」

教学上把三种病分开讲,实战中它们常常一起犯:检索只召回了半对的资料(病一的轻症),模型又在这半对资料上过度发挥(病二/病三)。而且还有本课没细展开的病根——比如源文档本身就是错的或过时的(垃圾进垃圾出,回扣 K0 和上篇 4.1),这种检索、生成都没错,错在知识库的「源头」,得靠数据治理解决。三盏灯帮你缩小范围,但最终定位仍要你去读那条失败的轨迹(回扣下篇 A7.3 读轨迹找根因——评测 RAG 和评测智能体是同一套侦探功夫)。

小结​

本节要点
  • 检索没召回(上下文相关性红,病根在检索):对的资料没捞回来,最致命——后面救不回,药方是拼命提高召回。
  • 上下文泄漏(有据性红,病根在生成):资料对但模型用旧记忆瞎答,药方是收紧指令、强制引用。
  • 生成漂移(有据性红,病根在生成):照着答却复述走样、丢条件,药方是逐条对应、关键信息原样保留。
  • 三盏灯 → 三种病根 → 对应药方,构成一张诊断表;现实中常是并发症,还要靠读失败案例最终定位。
📝 动手自测0/3
1. 为什么说「检索没召回」是 RAG 最致命的失败模式?
2. 检索日志显示对的资料确实被召回了,但答案还是错的、和资料矛盾。这是哪种失败?该修哪儿?
3. 资料写「会员免运费、非会员自付 10 元」,RAG 答「退货一律免运费」。这属于哪种失败?

延伸阅读​