同一句问题,换个问法结论就变了;让它写代码顺手编出个不存在的函数;问一份文件,它把没写过的条款说得像真的。这些都不一定是「模型不行」,多半是某一环的条件被凑齐了。这篇不讲幻觉的定义——站内已有专门一篇——只讲在你手上这件事里,哪几种情况最容易把它诱发出来,以及按什么顺序去核对。
同一句问题,换个问法结论就变了;让它写代码,顺手编出个根本不存在的函数;问一份文件,它把没写过的条款说得像真的。这些都不一定是「模型不行」,多半是某一环的条件被凑齐了。这篇不讲幻觉的定义,站内已有专门一篇讲透,我们只讲在你手上这件事里,哪几种情况最容易把它诱发出来。
把这件事拆成数据、提示、解码三段来看,排查就有顺序了。你会发现,大多数「胡说」不是随机发生的,而是你在某个环节刚好给了它一个必须靠猜才能把话说完的场景。下面按层拆,每层都给判断标准和可执行动作。
先把「幻觉」拆成三层,别一上来就怪模型
很多人一遇到胡编就下结论说模型不行,其实同一件事放在不同层上看,结论完全不同。训练侧的问题是你给的知识它本来就没学过或学拧了;提示侧的问题是你在这一次对话里没让它有依据可依;解码侧的问题是它在没有依据的情况下被允许大胆猜。这三层的处理方式不一样,混在一起谈就永远只能得出「模型不靠谱」这种没用的结论。
- 训练侧:语料里本来就没有、或者有大量互相矛盾的说法,模型只能按学到的分布去补一个最像的答案
- 提示侧:问题本身没给足判断依据,或者上下文里混进了会误导方向的内容
- 解码侧:从概率分布里挑字的方式被调得更敢猜,同一份知识也会说出不同答案
- 三层叠加时才最容易出问题,单独一层通常只是偏差,不一定是明显胡编
判断你这次踩的是哪一层,有个很简单的动作:把原始材料原文贴进上下文,明确要求只依据下文回答,再问一遍。如果答案立刻变稳,说明主要矛盾在提示侧;如果贴了原文它还是编,那要往数据侧看,问的可能是它完全没材料的细分领域。
训练数据这一层:缺、旧、冲突,三种情况表现不一样
训练侧的问题不会以同一种形式表现出来。缺材料时它会用相近概念拼一个听起来对的答案;记的是旧印象时它会很自信地给出已经过期的口径;语料里说法打架时它会按出现频次作答,而不是按正确性排序。分清是哪一种,才知道该不该继续用它。
| 表现 | 典型场景 | 正确应对 |
|---|---|---|
| 缺 | 问极细分领域、内部术语、自造名词 | 换成让它基于你提供的材料做归纳,或换更强的检索方式 |
| 旧 | 涉及变动频繁的口径,如价格、政策、名次、版本 | 不要问记忆里的数字,直接去站内数据页现查 |
| 冲突 | 同一件事语料里有多种说法且没有权威排序 | 要求它列出不同说法并标明来源,而不是直接给结论 |
时效性强的数字是一类特别典型的坑。模型记的是某个时间点的印象,它不会自己知道已经变了。这类问题不要问模型,去 /models 和 /official-api 看当时的数字,站内有官方价格与模型资料库,比问它靠谱得多。
提示这一层:四种最容易把模型带偏的写法
提示侧是最容易被忽视、也最容易自己动手修的一层。同样一个问题,你换一种问法,输出质量可能天差地别。下面这四种写法,几乎每一次胡编都能在里头找到影子。
- 问题预设了答案,比如问「为什么 X 会导致 Y」,而 X 本身不成立,模型倾向于顺着前提往下编
- 开放式范围太宽又没有边界,模型会为了把话说完而填空
- 上下文里塞了相互矛盾的材料,模型不会主动指出冲突,而是挑一部分用来作答
- 把模型当检索库而不是推理器,要求它给出精确出处、精确编号、精确引文,这类内容它只能近似生成,是最常见的诱因
- 改问法把同样的问题改成「先说明你不确定的部分,再给能确定的部分」,看输出是否明显收敛。收敛说明原来那次是被提示带偏的。
- 标必须核实项把问题里所有时效性、精确性要求单独摘出来,写清楚这些项必须回原始来源,不要让它用记忆答。
- 贴原文能贴材料就别让它凭记忆答,明确写「只依据上文,不足就说不确定」,再对比前后两次输出的差异。
这里有个反直觉的点:措辞越强硬,比如追问「你确定吗,再想想」,它越可能顺着你的压力改口,而不是更接近事实。逼出来的答案往往比第一次更不可靠。
解码这一层:同一个模型,参数不同,胡说的概率也不同
解码这一层是很多人完全没意识到的变量。同一个模型,换个参数设置,同一份知识也能说出不同答案。参数调得更敢猜,输出更发散,在事实性任务上就更容易出现没有依据的内容。这不是模型变了,是挑字的方式变了。
- 温度类参数
- 调高会让输出更发散,创作类任务合适,事实性任务上更容易出现无据内容
- 采样范围
- 限制得越窄,模型越倾向于选高概率项,答案更保守但也更稳
- 随机种子
- 固定种子只保证可复现,不保证正确,别把稳定复现同一个错当成可靠
判断标准很简单:同一提示跑多次,如果答案在事实点上左右摇摆,说明它本来就没有确定依据。这时候调参只能让输出更好看,不能让它变对。术语对照去 /ai-dict/category/tips 和 /ai-dict/category/basics 查。
调参能让胡说变得好看,但不会让没有依据的答案变得有依据。
按任务类型分:哪些活本来就不该交给它做
除了看三层,还有个更实用的角度:看任务类型。不同任务对「准确」的要求完全不一样,有些活它天生适合,有些活你交给它就是在赌。判断口诀是:答案的对错能不能被外部材料验证。不能验证的,就别让它单独作结论。
| 任务类型 | 适合程度 | 注意点 |
|---|---|---|
| 有原文可依据的改写、归纳、结构化 | 适合 | 出错通常一眼看得出,回原文扫一遍即可 |
| 需要精确数值、编号、引文 | 需谨慎 | 必须回原始来源核对,站内相关口径可在 /safety 与 /ai-dict/category/safety 对照 |
| 凭记忆回答时效性数字与状态 | 不适合 | 这类一律去对应的数据页面现查,不要问模型 |
| 取名、写标语、编故事 | 适合 | 发散是功能不是缺陷,别拿事实性标准衡量 |
很多投诉说模型乱编,拆开看其实是任务本身就放错了位置,比如让它凭记忆报一个每周都在变的价格。这不是幻觉问题,是用法问题。把任务放对位置,一大半的胡编会自己消失。
实操:五步定位你这次到底踩了哪一环
上面讲的是判断标准,这一节给一个能直接照着走的排查顺序。五步走完,你基本能确定这次到底是哪一环出的问题,也能知道下次怎么绕开。
- 摘必须核实项把问题里所有时效性、精确性要求摘出来,标成必须核实项,明确这些不能靠模型记忆。
- 重问一次并贴原文把原始材料原文贴进上下文,明确写只依据上文,不足就说不确定,再问一遍,对比前后差异。
- 换中立问法同一个问题换成不含预设立场的问法再问一遍,对比两次答案的分歧点在哪里。
- 拆分来源让模型把哪些是材料里写的、哪些是它自己补的分开列,补的部分就是幻觉高发区。
- 摇晃测试如果答案在多次之间摇摆,或去掉上下文后就答不上来,说明结论不可用,回原始来源核对。
这些判断什么时候不成立
上面这套方法不是万能的,有几种情况用它会得出错误结论。写清楚边界,比给一个绝对化的结论更有用。
- 你已经提供完整且唯一的原文,并限定只依据原文作答:此时输出错误更多是提示理解或截断问题,不是知识缺失
- 模型明确声明信息不足并拒答:这是正常行为,不算幻觉,不要用更强的措辞逼它给答案
- 任务本身允许创作,比如取名、写标语、编故事:发散输出是功能不是缺陷,别拿事实性标准去衡量
另外一个不适用的情况是:你问的问题本身就有歧义,模型只是选了一个你没预期的解读。这时候换更明确的问法就行,不必往幻觉上靠。
降低触发概率的动作顺序
如果你想把这事变成一套固定习惯,按下面的顺序来。顺序很重要,先定边界再给材料,比反过来有效得多,因为边界不清时贴再多材料它也可能挑着用。
- 先定边界:说清哪些能推断、哪些必须查原文,不能确定的要标出来
- 再给材料:能贴原文就别让模型凭记忆答,长文本场景注意截断,截断后模型同样会补
- 再调参数:事实性任务压低发散程度,创作类任务再放开
- 最后做抽检:对必须核实项逐条回源,把核对过的口径与踩坑记录留档,同类问题下次直接套用
抽检这一步最容易被省掉,但它才是把一次排查变成长期习惯的关键。把每次踩到的坑记下来,同类问题下次直接套用已有的问法,比每次都重新试要省事得多。
下一步想看各家官方口径的当前数字,以及中转站的实时价格与可信度信息,去站内数据页对照当时的数字,比凭记忆问模型靠谱得多。→常见问题
同一个问题别人问就正常,我问就胡说,是我的问法有问题吗?
很可能。差别通常出在两处:一是有没有给可依据的材料,二是问法里有没有预设立场。把你提问时的上下文和别人的对比一下,先补材料、去掉前提,再问一遍看是否收敛。
调低温度是不是就不会幻觉了?
不是。温度只能降低输出发散程度,让措辞更稳定,但改不了「模型本来就没有这个知识」这件事。缺依据的地方,低温同样会编,只是编得更一致、更不容易被发现。
给模型开联网或挂知识库能彻底解决吗?
能显著降低知识缺失类幻觉,但前提是检索到的内容确实相关且足够新,否则会变成「有依据的错」。这类方案还会引入新问题:来源本身错了、片段被截断、多条来源互相矛盾。
怎么快速判断一个答案里哪部分最可能是编的?
盯住三类内容:精确数值与编号、具体人名机构名、看起来像引文或条款的原句。这三类最容易生成得像真的。让模型把「材料里有的」和「自己补的」分开列,补的那部分逐条回源核对。
如果我需要它给准确数字,正确做法是什么?
不要凭记忆问。把数据源原文贴进上下文,或让它只做格式整理不做判断,然后到站内对应的数据页面核对当时的数值——价格类看 /official-api,套餐额度看 /coding-plans,模型规格看 /models。