你大概遇到过:问一个明明有标准答案的问题,模型答得又快又顺,可一核对全是编的,连不存在的条款、网址和数字都给你写出来。这篇不聊怎么搭一整套 RAG 系统,只聚焦一件事——幻觉是怎么来的、外挂知识库在哪一步真正起作用、什么情况下它反而救不了你。看完你能自己判断一个「胡说」场景该改提示、换资料还是干脆别用模型。
你大概遇到过这种场景:问一个明明有标准答案的问题,模型答得又快又顺,连不存在的条款、网址和数字都能给你写出来。等你真去核对,发现全是编的。这不是模型坏了,而是它在按自己的方式工作。这篇不聊怎么搭一整套 RAG 系统,只聚焦一件事——幻觉是怎么来的、外挂知识库在哪一步真正起作用、什么情况下它反而救不了你。
看完你能自己判断:一个具体的「胡说」场景,到底该改提示、换资料,还是干脆这个环节别让模型单独回答。整套判断链条不复杂,但要拆开看,因为幻觉不是一种病,是好几种不同的问题混在一起叫了同一个名字。
幻觉到底是什么:不是 bug,是它的默认工作方式
模型在做的事情,本质上是「接下一句最像的话」。它没有先去数据库查一遍再回答这个动作,所以「说得流畅」和「说得对」是两件独立的事。流畅是它的强项,正确是碰巧。你把这两件事分开看,很多让人恼火的表现就都能解释了。
- 编事实:把不存在的政策、功能、人物关系讲得头头是道
- 编引用:给你一个看起来很正规的出处,但那份文件根本不存在,或者里面没这句话
- 编数字:金额、比例、时间点张口就来,量级还挺像那么回事
- 编自己干过的事:声称已经调用过某个工具、查过某个网页、读过你上传的文件,实际上没有
还得分清两种情况:「不知道硬答」和「知道但说错」。前者是知识覆盖问题,你给的资料里就是没有;后者多半是资料本身有问题,或者提示词把它带偏了。这两种的修法完全不同,混在一起调只会越调越乱。
为什么会胡说:四个真正的原因
训练时它被反复强化的目标是「像人话、有帮助」,不是「准确、可核实」。所以它天然没有「我不确定」这个默认选项——除非你明确允许它这么说。这是背景,不是缺陷,但你必须知道它在那儿。
| 原因 | 典型表现 | 你该动的环节 |
|---|---|---|
| 问题超出它的可靠知识范围 | 越冷门、越新、越内部的问题越容易崩 | 补资料,别硬问 |
| 上下文里有模糊或矛盾信息 | 顺着你的暗示往下编,替你把话圆回来 | 清理输入,一次只给一致口径 |
| 提示词逼它必须给答案 | 要求「必须列三条」,它宁可编也不空着 | 放宽约束,明确允许说没有 |
| 训练目标是像人话不是准确 | 答得越顺你越容易信 | 换思路:先查再答,别靠记忆 |
注意第四行。这是最隐蔽的一条:幻觉往往和流畅度正相关,越是那种语气笃定、结构整齐的回答,越要多留个心眼。所以治理幻觉的第一原则不是「让它变聪明」,而是「别让它靠记忆答」。
外挂知识库为什么能降幻觉:它改的是哪一环
思路很直接:把「靠参数记忆答」换成「先检索、再基于检索到的原文答」。答案的原料来自你给的片段,而不是它在训练时压缩进去的印象。原料是你控制的,编造空间就被锁在材料范围内了。
- 关键动作一:让它基于检索到的原文作答,而不是自由发挥
- 关键动作二:要求标注来源,每条结论能追回原句
- 关键动作三:检索不到时明确允许回「资料里没有」,而不是硬编
- 反过来说也成立:资料本身错、切得碎、召回不到,外挂知识库只会让错误显得更「有据可依」
但要说清楚它治什么、不治什么。外挂知识库治的是知识类幻觉——「这个事实它不知道」。它治不了推理类错误,比如多步计算、逻辑推演;也治不了格式类错误,比如把表格结构搞乱。这两类得靠别的办法,指望加个知识库一并解决,会失望。
什么时候外挂知识库救不了你
先说清楚,下面这些情况不是「效果差一点」,而是方向不对——你加多少资料都填不上那个洞。早点识别出来,比后期反复调检索参数划算得多。
| 场景 | 为什么知识库救不了 | 替代做法 |
|---|---|---|
| 跨文档多步推理 | 检索给的是片段,推理链得自己搭 | 拆成多轮,每轮只答一小步 |
| 算数、统计、汇总 | 模型算数本来就不稳,跟资料没关系 | 交给计算工具,模型只负责组织语言 |
| 实时数据 | 你的库是静态快照,问的是此刻 | 接实时接口,或明确告诉用户数据截止时间 |
| 主观判断、方案取舍 | 没有唯一正确答案,不是查不到 | 模型只列维度,决策留给人 |
| 口径不一致的问题 | 用户问的和资料写的不是一回事 | 先把问题对齐,再谈回答 |
还有一种常被误判成幻觉的情况:用户问的和你资料里写的本来就不是同一个口径。模型按资料答了,用户觉得答非所问,就记成「它又胡说」。这类问题要先在问题侧对齐,不是去改模型。
落地步骤:从一份资料到能用的问答,按这个顺序做
下面这六步有先后关系,别跳。尤其第一步,很多人跳过直接切文档调参数,最后发现调来调去都是在优化一个范围本来就不对的东西。
- 先定范围写清楚只覆盖哪些主题,哪些问题明确回「资料里没有」。这一步比调参重要,范围不定,后面全是无用功。
- 理语料去重、统一版本,把一份文档按语义切成能独立读懂的小块。别按固定字数硬切,切断了上下文,检索出来的片段自己也读不懂。
- 每块带上出处文件名、章节、更新时间都挂上。答完能追回原文,这是后面验收的基础。
- 检索加一层重排把最相关的几段排在前面,别一股脑全塞进上下文。上下文塞太满,反而稀释了关键信息。
- 约束作答方式让模型只依据给定材料作答,允许说「资料未提及」,并输出引用位置。这一条直接决定幻觉率。
- 固定问题集回归准备一组小而固定的问题,改一次检索或提示就重跑一遍。没有这组题,你根本不知道这次改动是变好还是变坏。
判断做得好不好,不看它答得多漂亮,看两件事:答错时它会不会说不知道,以及每条结论能不能指回原句。这两条达标,基本可用;做不到,答得再顺也别上线。
输出侧的兜底:怎么判断这次答得靠不靠谱
就算前面都做了,输出侧还是要有一道检查。因为检索可能召回错片段,模型也可能在组织语言时把两段材料揉在一起,产生新的错。下面这套是给使用者的,不需要技术背景。
- 看引用:每条结论能不能在给出的原文里找到对应句子,找不到就当它没说过
- 看一致性:同一问题换个问法再问一次,答案互相打架就说明它在现编
- 看颗粒度:数字、日期、条款这类硬信息单独抽出来核对,这里最容易出错
- 看边界:问一个明确超出范围的问题,看它会不会老实说不知道
高风险的答案别直接发出去,加一道人工确认。对外的文档、合同相关、涉及金额的结论,都算高风险。这一道人工成本,比事后返工低得多。
上线前对照清单:六项打分,缺两项先别上线
下面六项,每项按「做了 / 没做」打分。缺两项目以上,先别上线——不是标准严,是缺的这几项正好是幻觉最容易漏出来的地方。想横向看看别家工具在这类问题上的表现,可以到站内工具目录里对照着挑,具体数据以页面当时的记录为准。
| 检查项 | 合格标准 |
|---|---|
| 覆盖范围 | 写清楚了,且明确告知使用者哪些问题它答不了 |
| 语料更新 | 有更新机制和责任人,不是一次性导入就完事 |
| 可溯源 | 每段资料能指回原文位置 |
| 兜底行为 | 检索不到时老实说不知道,而不是硬编一段 |
| 回归问题集 | 有一组固定题,改动前后能对比 |
| 反馈路径 | 答案存疑时知道找谁确认、怎么反馈 |
六项里最容易被忽略的是第四项和第六项。兜底行为决定它出错时的姿态,反馈路径决定错误能不能被发现和修掉。这两项都不做,等于系统上线后你对它的实际表现一无所知。
下一步想看看各家工具在知识库问答上的实际表现、以及它们的价格和稳定性记录,可以到站内工具目录和价格追踪页对照着挑,数据以页面当时为准。→常见问题
外挂知识库是不是能彻底消灭幻觉?
不能。它把「凭记忆答」换成「照材料答」,能大幅压低事实类胡说,但推理错误、算错数、格式跑偏还是会出。而且语料本身有问题时,它只是把错误说得更理直气壮。把它当降低概率的手段,不是保险。
我没有技术团队,能自己弄吗?
能,但先别急着上系统。把资料整理成一份干净的、有出处的文档,配合一个会按材料作答的对话工具,已经能解决大部分胡说问题。等资料量大了、更新频繁了,再考虑上检索那一套。
为什么同样的资料,别人问得准我问得不准?
多半差在问法。把问题写具体——限定范围、要求和资料口径对齐、要求给出来源,回答质量会明显不同。模糊的问题会让模型靠猜来补全,猜就是幻觉的温床。
怎么快速知道一次回答是不是编的?
三招够用:让它标出依据的原文位置并对回去;同义换个问法再问一遍看是否一致;把其中的数字和专有名词单独抽出来核对。三招里有一招对不上,这次回答就不能直接用。
资料里没有答案,它会怎么表现?
取决于你有没有明确允许它说不知道。没说的话,它倾向顺着话题编一段听起来合理的;明确要求「资料未提及就直说」之后,多数情况下会老实承认。这条规则要写进提示里,别指望它自觉。