模型答得又快又像模像样,但一查发现引用的条款不存在、数字对不上、代码里调了个不存在的函数——这大概是接入大模型后最早撞上的坑。这篇不讲原理长篇,而是给一份能照着做的降幻觉顺序:先判断幻觉属于哪一类,再决定该补检索、改提示、加校验,还是干脆换掉这个环节。
模型答得又快又像模像样,一查发现引用的条款不存在、数字对不上、代码里调了个压根没有的函数——这大概是接入大模型后最早撞上的坑。幻觉不是「模型笨」,多数时候是它在你没给足材料的情况下被迫营业,于是用最像样的措辞把空缺填满。
下面这份顺序是按「先定位、再逐层加码」来的:先判断幻觉属于哪一类,再决定该补检索、改提示、加校验,还是干脆把这个环节从模型手里拿走。四层不用全上,但顺序别倒——先加校验层去救一个召回本来就烂的检索,纯属白干。
先分清是哪一类幻觉,别一上来就换模型
幻觉按表现大致分四类:编造事实与引用、算错或数错、脱离给定材料自由发挥、格式对但内容空。四类的修法完全不同,混在一起调只会来回试。比如「格式对但内容空」是提示词没约束住输出目标,换模型没用;「编造引用」往往是知识缺失,模型根本不知道,只能编。
| 表现 | 大概率成因 | 优先动作 |
|---|---|---|
| 编造条款、引用、链接 | 知识缺失,材料里没有 | 补检索或明确说不知道 |
| 数字算错、单位搞混 | 把计算交给了语言模型 | 把计算挪到代码里做 |
| 答案漂移,换问法就变 | 知识缺失加随机性偏高 | 降随机性,多次采样比对 |
| 格式对但内容空泛 | 提示没给输出目标 | 给结构模板加字段约束 |
有个便宜好用的判断口径:同一个问题换三种问法各问一遍,看答案是否漂移。漂移大的多半是知识缺失而不是表达问题,这时候再花时间磨措辞收益很低,该去补资料。术语上拿不准的,先去 /ai-dict/category/basics 和 /ai-dict/category/tips 把概念对齐再动手,别一边查一边改。
第一层:把外部资料喂进去,让模型只做归纳
检索增强的收益通常远大于调提示词,但前提是召回质量过关。命不中的问题,模型必然开始编——它不会告诉你「我没检索到」,只会给你一段看起来很专业的答案。所以先测召回,再谈生成。切片按语义边界切,别按固定字数硬切;跨段落的答案要留重叠,否则模型只能靠猜把两段缝起来。
- 让模型在回答里标出引用来源,标不出来源的句子默认当幻觉处理
- 切片后做一次抽检:随机挑十几个问题,看标准答案是否落在召回结果里
- 跨段落问题单独建一组测试集,这类最容易暴露切片和重叠设置的问题
- 嵌入模型怎么挑、要不要加重排,看 /embeddings 的对照,别默认维度越高越好
第二层:提示与解码参数上的可控动作
提示层能做的是「给退路」和「改顺序」,不是「下命令」。明确写清材料里没有就直接说没有,比堆十句不许编造管用——后者对知识缺失无效,模型只会换个说法继续编。要求先给依据再给结论也一样:把推理摆在前面,结论漂移时你肉眼就能抓到,而不是读完一段流畅文字才发现不对。
- 给出退路在提示里加一句:材料中没有相关信息时直接回答「材料未覆盖」,不要推测。改完用知识缺失类问题验证。
- 调顺序把「先列依据、再给结论」写进输出要求,并指定依据必须是原文片段,不能是转述。
- 降随机性抽取类、分类类任务把随机性调低,减少发散式改写;创意类任务不要这么干,会把输出压得又干又死。
- 回归验证每改一版提示,跑一遍固定测试集比对,别凭感觉说「好像好了点」。
第三层:把校验做成代码,而不是靠人眼
到这一层,思路要从「让模型少犯错」转成「让错误进不来」。校验的核心是把不确定性挡在流程外:能要求结构化输出就别要自然语言,能算的就别让模型算,能查库的就别信它背。人眼适合抽查,不适合当主校验。
- 结构化输出
- 要求模型返回固定字段的 JSON,再用 schema 校验一次,格式错直接重试,不要人工修
- 关键字段二次校验
- 数字重新算一遍、ID 去库里查一遍、链接真访问一次,任何一项不过就拦下
- 多次采样取交集
- 同一问题问几遍,只在答案稳定的部分放行,不稳定就走兜底或人工
- 校验失败率监控
- 把这个比率接进监控看趋势,思路可参考 /tools/quality-monitor 和 /tools/quality-check
要注意的是,校验层越厚,成本和延迟越高。加一层之前先问:这一类错误真会发生吗,发生了代价多大?如果一年碰不上几次且后果很轻,加校验可能比错误本身更贵。额度与单价按当时的数字到 /official-api 和 /tools/model-cost-calculator 核对。
第四层:兜底与适用边界,哪些场景不该硬上
高代价场景别让模型直接给结论,它的角色应该只是候选生成和草稿整理,最终判断留给人或留给你自己的规则引擎。法务、医疗、资金操作这类,模型输出只能当线索,不能当结果。兜底路径要事先写好:查不到就走人工、走固定话术、或引导用户换个问法,别等线上出问题临时拍脑袋。
有几种情况降幻觉手段基本无效:任务依赖实时数据而你又拿不到数据源,这时候任何校验都只是把错误变得更像对的;模型能力覆盖不到的专业领域,检索也救不回来,因为连该检索什么你都写不出来;用户提问本身含糊时,先做澄清比先做检索更值。
降幻觉不是把模型变聪明,而是把它不该答的部分从流程里拿出来。下一步如果你正准备选模型或换中转,先去看各家模型在长文本与结构化输出上的实测表现,再结合自己的校验成本做取舍;中转渠道的稳定性会直接影响重试和校验频率,值得单独核一遍。→
常见问题
加了 RAG 还是会编,是模型不行吗?
多数情况是检索没召回,不是模型问题。先用同一批问题单独测检索命中率,命中率低就先修切片和重排,别急着换模型;命中率高但答案仍漂,再去看提示和解码参数。
换更大更强的模型能直接解决幻觉吗?
只能降低概率,不能消除。表达类幻觉换模型常有改善,知识缺失类幻觉换模型基本无效,必须补资料。同一个问题多问几次看答案稳不稳,比看榜单更能说明问题。
有没有办法一次性判断输出可不可信?
没有通用办法,只能按字段分而治之:结构化字段用 schema 校验,数字重新算,事实性内容回查数据源,引用逐条验证。设定一个可接受的错误率,超过就转人工,而不是追求零幻觉。