知识图谱建错了,后面的检索和推理全是白费
上周四凌晨两点,我盯着屏幕上的日志,后背发凉。
一个电商客户的 GraphRAG 系统,把“2024年Q2毛利率下降3%”回答成了“毛利率增长5%”。知识图谱里的数据明明是对的,查询路径也没报错,但答案就是反的。客户在群里连发三个问号,我当时的感受就四个字:头皮发麻。
这已经不是第一次了。从2023年到现在,我见过的 RAG 踩坑团队不下20个,从最基础的向量检索一路升级到 GraphRAG,幻觉问题跟打地鼠似的——你在这边摁下去,它从那边冒出来。很多人天真地以为上了知识图谱就能干掉幻觉,现实呢?幻觉只是换了张脸。
今天这篇,我想认真聊聊 RAG 系统的幻觉溯源——不是那种泛泛的“模型会胡说”,而是深入到检索、推理、生成三个环节,把根给刨出来。尤其是 GraphRAG,它解决了一些问题,但也引入了全新的幻觉类型。这些坑,没亲自踩过真的很难想象。
幻觉不是一种病,是一组症状
先对齐一个认知:RAG 系统的幻觉跟纯 LLM 的幻觉,本质上是两回事。
纯 LLM 胡说八道,主要来自训练数据的偏差和概率采样的随机性。但 RAG 多了一个变量——检索到的上下文本身就是错的,或者被用错了。这个变量特别要命,因为 LLM 在生成答案时,默认会信任你喂给它的上下文。你把错的材料递给它,它能写出花来,但结论一定是歪的。
等等,这里我要更正一下。我刚才说“LLM 默认会信任上下文”,这个表述不太准确。更精确的说法是:LLM 在生成过程中,对系统提示词赋予的权重通常高于用户提示词,而检索到的上下文作为系统提示词的一部分注入后,模型会倾向于把它当作“既定事实”来使用。这不是信任问题,是架构层面的权重分配问题。
去年3月我在一家支付公司做内部工具时,第一次深刻体会到这个问题的恐怖。我们用基础的向量检索 + GPT-4 搭了一个支付政策问答系统,测试阶段准确率87%,看着还行。结果上线两周,用户投诉率飙升。
排查了两天,问题出在一个很隐蔽的地方:向量检索召回的文档片段语义相似,但时间戳过期了。比如用户问“目前欧洲的3DS认证要求”,系统召回了2021年的政策文档,而2023年6月欧盟已经更新了 PSD3 标准。模型基于过期的上下文,生成了一个逻辑自洽但事实错误的答案。
这就是典型的上下文失真型幻觉。后来我看到微软研究院在2024年发的一篇论文,里面有个数据:医疗问答场景中,RAG 系统约23%的错误回答源于检索阶段的相关性误判,而不是生成阶段的推理错误。23%,这个数字比我预想的高太多了。也解释了为什么很多团队拼命优化 prompt 却收效甚微——病灶在检索环节,你却在给生成环节喂药。
GraphRAG 的承诺与陷阱
GraphRAG 的卖点很清晰:用知识图谱的结构化关系,补上向量检索的语义盲区。
向量检索擅长找“相似”的东西,但不懂“关系”。比如你问“张三的直属领导是谁”,向量检索可能召回一堆包含“张三”和“领导”的文档片段,然后让模型自己猜。但 GraphRAG 可以直接从图谱里查 (张三)-[:汇报给]->(李四) 这条边,精准度完全不在一个量级。
听起来很美好对吧?
问题来了:图谱本身也是构建出来的,而构建过程就有幻觉。
今年1月我参与了一个金融领域的 GraphRAG 项目,用 GPT-4-turbo 从研报里抽取实体和关系构建知识图谱。初期我们信心满满,觉得结构化数据总比非结构化文档靠谱。结果压测时发现一个离谱的错误:系统把“阿里巴巴减持商汤科技”抽取成了“阿里巴巴增持商汤科技”。
原因很讽刺。原始文本里有一句“阿里巴巴在减持后仍持有商汤科技8.7%股份”,LLM 把“仍持有”误判为了“增持”动作。这个错误进入图谱后,所有关于“阿里巴巴投资动向”的查询都会基于错误的关系进行推理——我大概算了一下,图谱里涉及这个节点的边有37条,一条错,37条全被污染。
这就是 GraphRAG 的第一类幻觉源:图谱构建阶段的知识抽取错误。向量检索的文档错了,影响的是一次查询;图谱里的关系错了,会污染所有经过该节点的推理路径。错误的传播范围被指数级放大。
第二类问题更隐蔽:图遍历的路径偏差。
嗯...这个比较复杂。我尽量说清楚。
即使图谱本身是准确的,GraphRAG 在做多跳推理时也可能走错路。上个月我 debug 了一个案例,系统被问到“A公司的竞争对手有哪些”,图谱里 A 公司通过 [:竞争关系] 连接了 B 和 C,但 B 又通过 [:供应商] 连接了 D。系统在做二跳遍历时,错误地把 D 也纳入了竞争对手列表,因为查询引擎在语义上混淆了“竞争关系”和“供应链关系”的边界。
这种错误在向量检索里不太会发生,因为向量空间天然有距离约束,太远的你召不回来。但在图结构里,多跳之后你很容易“跑偏”,而 LLM 在生成阶段又倾向于信任图谱返回的结构化数据——毕竟它看着那么“结构化”、那么“权威”。于是幻觉就被一路绿灯地放行了。
我踩过的最贵的坑
说一个让我至今肉疼的经历。
2024年10月,帮一个客户做合同审查的 GraphRAG 系统,知识图谱里存了一万两千多份合同的条款关系。测试时表现完美,准确率91.3%。结果上线第三周出了事故:系统在回答“我们的数据存储条款是否允许跨境传输”时,基于图谱里的一条错误路径,给出了“允许”的结论。
实际上,客户的合同附录里有明确的禁止条款,但那个条款在图谱构建时被错误地关联到了另一个主体上。客户差点因此签了一份违规的数据处理协议。差点。
事后复盘,我们发现了三层问题叠加:
1. 实体链接错误:LLM 在抽取时将“数据存储条款”和“数据安全条款”混淆,导致关键约束被挂到了错误的节点下。我查了日志,当时 prompt 里用的是 gpt-4-1106-preview,这个版本在处理长文本实体消歧时确实有已知问题。
2. 图查询的过度泛化:查询引擎为了提升召回率,对关系类型做了模糊匹配,把 [:相关条款] 和 [:约束条款] 混在一起遍历。这是我自己拍板的决策,当时觉得“宁可多召回不可漏掉”,现在回头看,蠢得不行。
3. 生成阶段的确认偏差:LLM 在生成答案时,倾向于“顺从”图谱返回的结构化信息,没有进行反向验证。我们在 prompt 里没有明确要求它检查矛盾,它就真的不检查。
三层问题分别对应了 GraphRAG 幻觉的三个源头:构建偏差、检索偏差、生成偏差。任何一层单独看都不致命,但叠加在一起就变成了系统性幻觉。更可怕的是,这种幻觉在测试集上很难被发现——测试集覆盖的是高频、清晰的查询模式,而生产环境中的边缘 case 才是幻觉的高发区。
为什么你的 GraphRAG 依然在胡说八道
如果你现在正在用 GraphRAG,或者准备上,我建议你从下面几个角度做一次“幻觉体检”:
第一,检查图谱构建 pipeline 的准确率。 别只看端到端的问答准确率,那个指标会掩盖太多问题。你需要单独评估实体识别、关系抽取、实体链接这三个环节的 F1 值。我的经验是,关系抽取的准确率如果低于85%,生产环境一定会出问题。而据我了解,大多数用 LLM 做抽取的团队,这个数字在75%-80%之间晃荡——不是 LLM 不行,是 prompt 和 few-shot 的设计还不够精细。尤其是实体链接环节,很多团队甚至没单独评估过。
第二,关注图遍历的边界控制。 GraphRAG 的一个常见反模式是“遍历深度设太大,关系类型设太宽”。我现在默认只做一跳遍历,二跳及以上需要白名单审批。同时给关系类型设置优先级权重,比如 [:直接持有] 的权重是1.0,[:相关实体] 的权重是0.3,查询时按权重截断。这些约束条件在技术上不难实现,但很多团队搭系统时根本意识不到需要做——大家光顾着看那个酷炫的图可视化界面了。
第三,在生成阶段加入验证环节。 这是我从那次合同审查事故后反复强调的一个点:不要让 LLM 无条件信任检索结果。你可以在 prompt 里明确要求模型“检查上下文信息之间是否存在矛盾”,或者用另一个 LLM 做事实一致性校验。我现在一般用 Claude 3.5 Sonnet 做生成,用 GPT-4o-mini 做校验,成本大概增加30%,但对于高风险场景来说,这点成本完全值得。
第四,建立幻觉监控的分层指标体系。 别只看一个“准确率”。把它拆开:检索相关性、上下文忠实度、事实一致性、答案完整性。每个指标对应不同的幻觉类型,只有拆开了你才知道该优化哪个环节。我见过太多团队在“准确率下降”时第一反应是换模型或者调 prompt,折腾一个月发现是检索的 embedding 模型需要微调。我用的是 text-embedding-3-large,在特定领域不做微调的话,召回率和 BM25 差不多,甚至更差。
幻觉不会消失
写到这里,我想分享一个可能有点反直觉的观点:在 RAG 系统中追求零幻觉是不现实的,甚至是不经济的。
幻觉的本质是信息处理过程中的不确定性累积。只要你的系统有检索、有推理、有生成,就一定有不确定性。与其追求消灭幻觉,不如建立一套幻觉管理机制:知道哪些场景容易出幻觉、出了幻觉如何快速发现、发现后如何低成本修复。
我现在做项目时,会在设计阶段就画一张“幻觉风险地图”:横轴是查询类型(事实查询、推理查询、聚合查询),纵轴是领域风险等级。高风险+复杂推理的组合,我会默认加一层人工审核或者置信度阈值拦截。不是什么高深技术,但能避免80%的生产事故。
回到标题的问题:为什么你的 GraphRAG 依然在胡说八道?
因为 GraphRAG 解决的是“如何更精准地找到相关信息”的问题,但幻觉的源头远不止检索这一个环节。知识图谱本身的质量、图遍历的路径选择、生成阶段的推理逻辑,每一个环节都可能引入新的幻觉。
GraphRAG 不是幻觉的终结者,它只是把幻觉从一个房间赶到了另一个房间。 如果你不追过去继续治理,它就会在新的房间里肆意生长。这就是为什么2025年了,我们还在讨论这个话题。
你目前在用哪种 RAG 架构?遇到过哪些让你头疼的幻觉问题?是检索阶段翻车,还是图谱构建就埋了雷?欢迎在评论区聊聊你的踩坑经历,我每周会挑几个典型案例做详细分析。
读者评论 5