检索增强生成远看像"搜索多一步"。找出相关文献、粘进提示词、得到答复。大多数失败的 RAG 实现都是在这个心智模型上建起来的。把它做错的架构后果,在每一层都会显现。

RAG 不是"带生成的搜索",而是建立在检索基底之上的生成。生成步骤是承重墙;检索是约束生成步骤可编造空间的基底。把它当搜索做,会产出能找到正确文献、却对其作出自信而无法验证总结的系统——这是代价最大、也最容易被忽视的失败模式。

下面是几条具体后果。

分块策略是模型输出的一部分,不是搜索索引的一部分

分块策略通常被视为搜索引擎层面的问题:怎么切文档,让双编码器检索能找到正确片段?但分块也是被粘进模型上下文的内容。一种为检索召回率优化的分块策略——比如固定长度的重叠窗口——也可能正是给模型抛出相互矛盾片段、让它选一个支持自己第一直觉的策略。

有用的分块策略是同时让检索与生成都表现良好的策略。我们见过版面感知分块——按文档章节边界切分——在技术文档语料上超过语义分块,因为那些章节边界是值得尊重的作者决策。通用策略并不通用。分块策略是系统的一部分;应在具体语料上做基准测试。

引用必须是生成的一部分,而不是附录

常见做法——生成答复后在末尾列出已检索文献——正是让"RAG 当搜索"系统产生幻觉的架构错误。模型从未被强制把每条论断锚定到具体分块;它只是被丢了一堆上下文,要求做总结。这个总结不受任何约束。

溯源型设计强制引用在模型生成时就嵌入响应流中。后处理步骤验证每个引用是否对应已检索集合中的真实分块。无法验证的引用会导致答复被拒绝,并以更严格约束重新生成。这在推理时成本更高。但这也是我们见过的唯一一种能让生产环境中的引用幻觉率维持在个位数低位的设计。

重排序对技术语料不是可选项

双编码器检索快速且大体正确。但对于任何表面相似分块普遍存在的语料而言,它单独不够——工程规范、法规文本、医学文档都属此类。同一构件出现在二十张图纸里;同一法规条款以不同修订版本出现在五份文档中。双编码器检索会以相似分数把它们全部浮出;然后由模型负责辨析,而辨析恰好是它最不擅长的事。

领域专用重排序器不是优化项,而是结构性前提。基于文档类型、版本时间、显式的修订替代关系,以及任何你掌握的领域先验来提升分块排序。没有它,系统最自信的答复将来自最常见的分块——而无论这些分块是否最相关。

引用幻觉是另一种失败模式

常规 RAG 评测衡量答复相关性。还有第二种、更难捕捉的失败模式:模型产出的答复看起来正确,引用看起来有效,但引用实际并不包含其所支撑的内容。引用真实存在;论断与所引内容彼此矛盾。信任引用的审阅人察觉不到这个错误。

这种失败的评测必须从答复中提取每对(文献,页码)引用、调出分块、验证所引内容是否真正支持该论断。它比相关性评测成本更高。但它也是区分"能发的 RAG 系统"与"不能发的 RAG 系统"的那项评测。

为什么这件事在受监管领域更重要

在消费级聊天应用里,一条无法验证的 RAG 答复是质量问题。在受监管领域——医学、法律、金融、工程——它是责任问题。系统产出一条看起来有依据、审阅人可能会据此决策、被质询时却无法辩护的答复。RAG 架构出错的代价不在评测时支付,而是在第一次有人基于"被自信引用、引用实际并不支撑"的答复做出决策时支付。

把 RAG 当作"建立在检索基底之上的生成",把引用设计为输出的结构性要素而非附录,并在具体语料上对分块策略做基准测试。前两条决策几乎可以解释——能发的 RAG 系统与不能发的 RAG 系统之间——大部分差距。