幻觉产生的原因 | 大模型 | 做产品
幻觉产生的原因
幻觉不是 bug,是生成机制的直接产物。它的任务是接出最像的下一句,不是接出真的下一句。这两件事大多数时候重合,偶尔不重合。
你会遇到的现象
-
它给了一个不存在的函数名,参数写得像模像样,文档里根本没有
-
它引用了一篇论文,作者、年份、期刊都齐,搜出来是假的
-
它答对了九成,剩下一成错得很离谱,而且两部分的语气完全一样
为什么必然发生
回到机制:它每一步都在从候选里抽一个 token 接上去。这个过程里,**没有任何一个环节在检查「这句话是不是真的」。**它检查的是「这句话像不像会出现在这个位置」。
于是问到一个它没见过的东西时,它不会停下来。词表里总有概率最高的那个 token,抽出来接上,再接下一个。几十步之后,一段完全成立的假话就写好了。句子的流畅度和内容的真实性,是两个完全独立的东西,而它只优化前者。
-
**它没有「不知道」这个状态。**知道和不知道,在权重里不是两个可区分的信号,只是概率分布尖一点还是平一点的差别。分布平的时候,它一样会抽出一个词。
-
**越有规律的东西越好编。**API 名、参数格式、论文引用、法条编号、URL——这些都是格式高度固定的内容,编起来毫无难度,看起来还特别可信。
-
**后训练放大了自信。**它被训练成要给出有帮助的回答。回答「我不知道」在训练里通常不被奖励,于是它倾向于给一个。
-
**它会顺着你说。**你问「是不是因为 X」,即使不是,它也很可能顺着 X 展开。带假设的提问是幻觉的高发区。
所以这件事没有「修好」的那一天。能做的是把发生概率压低、把发生之后的代价控住,不是等一个不会幻觉的模型。
最容易出现的地方
高发场景为什么 冷门、专业、小众话题语料里样本少,分布平,抽到什么都有可能 具体的数字、日期、版本号格式强、语义弱,编起来最顺手 引用、链接、出处它记的是规律不是位置,出处只能重新生成 训练截止之后的事没见过,只能按截止前的模式往下推 你们内部的概念和字段从来没进过语料,它按字面猜一个 长回答的后半段每一步的误差累积,越写越远
把这张表当成设计检查表:如果你的功能刚好落在其中一格,那它一定要有校验环节,不能直接把输出交给用户。
防的四个动作
**一、限定来源。**不要让它凭记忆答,把答案该依据的材料先取出来,放进这一次的输入里,然后明确要求「只能根据以上材料回答」。这一条的效果远超其他所有手段,因为它把任务从「回忆」换成了「阅读理解」,后者它强得多。
**二、要求出处。**让它每一条结论都标出是材料里的哪一段。好处有两层:你能核,而且它在标注的时候会被迫检查这句话到底有没有依据,编的成本变高了。注意反过来的坑——它主动给的、不在你提供材料里的出处,一律当假的。
**三、交叉验证。**关键结论跑两遍,或者让另一个模型来判一次,不一致的地方拿出来人工看。这个办法费钱,只用在错了代价高的地方。更便宜的版本是:能用代码校验的就用代码校验——接口名去文档里查、数字去数据库里对、JSON 拿 schema 卡。
**四、让「不知道」成为合法答案。**在提示里明确写:材料里没有的,就回答「材料中未提及」,不要推测。同时在产品层面给这个答案留位置——空态、转人工、提示用户补充信息。如果你的界面里根本没有「答不出来」这个状态,那模型就只能编。
最后一条不算动作,算态度:**把校验的责任放在你的系统里,不要放在用户的警惕心上。**提示用户「AI 可能出错,请自行核实」是最省事也最无效的做法。真正有效的是限定范围、留出出处、卡住格式,让错误在到达用户之前就被拦住。
没有「修好」的那一天,能做的是压低概率、控住代价 效果 成本
① 限定来源 把材料先取出来,明确要求「只能根据以上材料回答」
低
② 要求出处 每条结论标出依据哪一段——它标注时会被迫检查,编的成本变高
低
③ 交叉验证 能用代码校验的就用代码:接口名查文档、数字对数据库、JSON 卡 schema
高
④ 让「不知道」成为合法答案 提示里允许回答「材料中未提及」,产品里给这个答案留位置
极低
如果你的界面里根本没有「答不出来」这个状态,那模型就只能编。
第一条的效果远超其余,因为它把任务从「回忆」换成了「阅读理解」——后者它强得多。而把校验的责任放在你的系统里,不要放在用户的警惕心上:提示「AI 可能出错,请自行核实」是最省事也最无效的做法。
接着看
大模型与搜索引擎的区别 「凭记忆答」是幻觉的根。为什么它能编出格式完美的出处。
知识截止日期 高发场景之一:截止日之后的事,它会自信地按老模式推一个。
它会做的和不会做的 「校验归你」这条分工的完整版,以及它还会替你补哪些空。
