夜雨聆风学习资料网

ARTICLE · 1257515

你的 RAG 找到了文档,为什么答案还是错的?

你的 RAG 找到了文档,为什么答案还是错的?
企业AI落地中,知识库最普及的应用。把产品手册、业务制度、技术文档接进来,让员工或者客户直接提问,既容易理解,用途也很明确。
但做过知识库的人,大多都遇到这样一个问题:系统明明找到了相关文档,回答却还是错的。于是,大家开始换模型、改提示词、调整切分方式,或者让系统多找几段内容。
这些办法可能有效。不过,在继续调参数之前,还有一个问题值得先弄清楚:检索到的内容,是否足以回答这个问题?

一、文档相关,未必够用

最基础的 RAG,可以简单理解为:把问题转换成向量,找到语义相近的文本片段,再交给模型组织答案。
如果答案就写在某个片段里,这种通常没有啥问题。比如,查询某款产品的保修期限,找到对应条款,通常就有正确答案。
但有些问题,需要把几份材料联系起来才能回答。
假设一家公司的技术文档里,分别记录了两件事:一份写着,结算应用使用 API 网关;另一份写着,API 网关把身份信息交给认证服务。
现在,有人问:如果认证服务下线,哪些应用可能受到影响?
单看认证服务的文档,未必能看到结算应用。单看结算应用的文档,也未必出现认证服务的名字。答案需要把两份文档中的关系接起来。
一次相似度搜索,可能找到了认证文档,却漏掉结算应用的文档。此时,模型拿到的材料虽然相关,却缺少关键的一环。
多检索几个片段,可能补上缺口,也可能只是多找来一些关于认证机制的说明。文字变多了,证据未必更完整。
所以,遇到错误答案时,应该先检查:模型拿到了哪些依据,缺了哪一段关系,是否已经有条件得出结论。

二、把散落的关系连起来

如何把散落的关系连起呢?知识图谱就是做这个的。简单的说就是将散落在不同材料资料建立关系。
它把应用、服务、人员等对象表示为实体,再把对象之间的关系明确记录下来。
在这个例子里,可以写成:
结算应用 → 依赖 → API 网关
API 网关 → 使用其进行认证 → 认证服务
这样,系统查询认证服务的下线影响时,就可以先找到认证服务,再查谁依赖它,继续追查这些依赖方背后的应用。
图谱增强检索可以把向量搜索与关系查询结合起来:先定位相关对象,再沿关系补充证据。微软 GraphRAG 的本地搜索也会组合图谱中的实体、关系与原始文档片段,为模型提供上下文。
这里有一个容易弄反的地方:依赖关系的箭头方向,与排查影响的方向,未必一致。
如果图中约定“依赖方指向被依赖方”,结算应用指向网关,网关指向认证服务。那么,排查认证服务下线影响时,就要反向寻找依赖方,逐层找到网关和结算应用。
而且,找到依赖链,只能说明结算应用是需要核查的潜在受影响对象。它是否真的会中断,还要看有没有备用认证、降级机制,以及这条依赖是否处于实际使用中。
关系链能帮助我们缩小排查范围,但不能替代运行状态的核实。

三、该查多少,由问题决定

找到一个节点,还只是开始。
如果问题是“认证服务的负责人是谁”,查到这个服务的负责人属性,或者一条负责人关系,也许就够了。但如果问“哪些应用间接依赖它”,只找到认证服务本身,显然回答不了。
为了理解检索范围,可以把取回的内容分成几种粒度:

检索粒度

取回什么

在这个例子中的用途

节点

一个对象及其属性

查看认证服务的状态、负责人

三元组

两个对象和一条关系

确认网关使用哪个认证服务

路径

连续相连的多条关系

追查结算应用如何依赖认证服务

子图

一组相关节点与关系

汇总多个应用的相关依赖链

这几种粒度,不是必须逐级升级的步骤。一次查询也可以组合使用,关键看问题需要什么证据。
比如,再加一个同样依赖网关的后台应用。要回答整体影响范围,就需要把两个应用的依赖链都找出来。但网关接入了哪个日志平台、认证服务归哪个团队管理,未必都与这次判断有关。
把附近的节点全部取回来,可能让上下文变得更杂。模型需要的,是能够支撑当前判断的关系。
因此,检索范围要有约束:沿哪些关系查,面向哪个环境,查到什么对象可以停止;如果因为查询深度或上下文限制提前停止,也应说明还有哪些部分没有查完。
范围扩大,不等于证据充分。范围受限,也不能悄悄省略未查明的部分。

四、图谱也会出错

关系被明确记录下来以后,看起来往往比一堆文档更有条理。但有条理的解释,也可能建立在错误信息之上。
两个名字相近的服务,被误认为同一个服务,原本无关的应用就可能被连到一起。一条依赖上个月已经改掉,图谱还没有更新,系统照样能沿着旧关系,讲出一套完整的解释。
更麻烦的是,这种回答有路径、有理由,反而容易让人相信。
如果要把图谱用于服务下线判断,就需要为关键关系保留来源、更新时间、所属环境和核实状态。已有的服务目录、配置和接口清单,也应尽量利用起来,再让模型从文档中补充关系。
沿图谱找到关系之后,还要能够回到原始依据,检查它是否仍然有效。
同时,要区分两种情况:一种是没有找到某个应用的依赖记录;另一种是经过核查,确认它不依赖这项服务。
没有找到依赖,不等于确认不受影响。
图谱可能没有收录某个系统,关系可能还没抽取出来,文档本身也可能不完整。对于这些情况,系统应明确说“证据不足,仍需核查”。

五、先看问题,再选方法

说到这里,并不意味着做知识库,就一定要先建知识图谱。
如果多数问题都能在一份制度、一段手册里找到答案,那么把文档解析、切分、检索和引用做好,就可以了。
即使答案分散在多份文档里,也可以先拆解问题、分轮检索。比如,先查哪些网关使用认证服务,再根据网关名称,追查哪些应用使用这些网关。
如果用户会反复追问依赖、上下游、归属和影响范围,而且这些关系值得持续维护时,图谱才更有投入的价值。
最后
回到开头的问题,RAG 找到了文档,答案却还是错的,原因可能就藏在那些没有被找到、没有连起来,或者已经过时的证据里。向量检索、分轮检索和知识图谱,各有适合处理的问题。无论采用哪种方法,都需要检查:依据是否充分,关系是否准确,还有哪些信息尚未查明。
在我看来,企业知识库的建设,是一项持续整理和维护业务知识的工作。文档会更新,关系会变化,系统也需要跟着调整。答案有依据,不确定的地方说清楚,用户用起来才放心,知识库也才更容易推广开来。
推荐阅读:
一个央企知识库项目,让我看到了AI落地的复杂
从0到1搭建AI知识库:业界最佳实践全解析
AI 知识库不仅仅是智能搜索,解锁6种多元应用模式

相关学习资料