您的 RAG 系统检索正确的数据,但仍然产生错误的答案。这就是原因(以及如何解决它)。

您的 RAG 系统正在以满分检索正确的文档,但它仍然自信地返回错误的答案。我构建了一个 220 MB 的本地实验,证明了几乎没有人谈论的隐藏故障模式:同一检索窗口中的上下文冲突。两个相互矛盾的文档返回,模型选择一个,然后你会得到一个流畅但不正确的响应,并且零警告。本文准确展示了它发生的原因、它悄然中断的三个生产场景,以及修复它的微小管道层 - 不需要额外的模型,不需要 GPU,不需要 API 密钥。系统的行为完全按照设计。答案仍然是错误的。您的 RAG 系统检索正确的数据 — 但仍然产生错误的答案这一帖子。这就是原因(以及如何解决它)。首先出现在《走向数据科学》上。

来源:走向数据科学

完全按照设计。答案仍然是错误的。

我想告诉你我不再信任检索分数的那一刻。

我正在对我精心构建的知识库运行查询。很好的分块。混合搜索。重新排名。返回的 top-k 文档的余弦相似度高达 0.86。每个指标都表明管道正在运行。我将这些文档传递给 QA 模型,得到了自信的答案,然后继续前进。

答案是错误的。

不是幻觉——错了。不是检索失败-错误。正确的文件已经回来了。他们两个。初步收益数据和取代它的经审计修订数据并排放置在同一上下文窗口中。该模型读取了两者,选择了其中一个,并以 80% 的置信度进行了报告。它没有任何机制告诉我它被要求对它从未设计过的争议进行仲裁。

这就是本文讨论的故障模式。它不会显示在您的检索指标中。它不会触发你的幻觉探测器。它存在于上下文组装和生成之间的间隙中——这是 RAG 管道中几乎没有人评估的一步。

我建立了一个可重复的实验来隔离它。本文中的所有内容都在大约 220 MB 的 CPU 上运行。没有 API 密钥。没有云。没有 GPU。您在终端屏幕截图中看到的输出未修改。

完整源代码:https://github.com/Emmimal/rag-conflict-demo

实验测试什么

这个设置是有意临床的。三个问题。一个知识库包含三个相互冲突的文档对,这些文档对对同一事实提出了直接矛盾的主张。检索被调整为每次都返回两个冲突的文档。

问题不在于检索是否有效。确实如此。问题是:当你向模型提交一份相互矛盾的简报并要求它自信地回答时,它会做什么?

正如您将看到的,答案是它选择了一边。默默。自信地。没有告诉你它必须做出选择。

三个场景,每个场景均取自生产

需求.txt