1. 从“八年祭”说起:AI幻觉为什么值得反复拿出来讲
“AI幻觉”这个词,这几年被说得太多,多到有点麻木。但如果你真的在一线做过模型落地,就会知道它从来不是一个学术名词,而是一个会实实在在让人半夜爬起来改代码、写道歉邮件、甚至丢客户的问题。标题里那句“八年祭,血还在流”,我第一眼看到的时候,心里是有点触动的——八年,差不多是从早期深度学习对话系统开始被大规模商用的时间跨度,而“血还在流”说的是:这个问题到今天依然没有被根治,只是换了一副面孔继续出现。
先把话说清楚:AI幻觉(Hallucination)指的是模型生成了看起来流畅、自信、格式工整,但事实上错误、无依据、甚至完全捏造的内容。它可能是一段不存在的参考文献,一个编造的API参数,一条虚构的法律条款,也可能是客服机器人信誓旦旦告诉用户“可以退款”,而实际政策根本不允许。它最危险的地方不在于“错”,而在于“错得特别像对的”。
这篇文章适合谁看?如果你是刚接触大模型应用的开发者,它能帮你建立一套对幻觉的基本认知和防御思路;如果你已经在做RAG、Agent、智能客服、文档问答这类落地项目,里面的排查表和实操细节可以直接拿去用;如果你只是产品经理或者业务方,看完至少能明白为什么技术团队总是说“这个不能保证100%准确”。我不打算写成论文综述,而是按一个真正踩过坑的人的视角,把幻觉的成因、分类、检测、缓解、工程兜底,一层一层拆开讲。
2. 幻觉到底是怎么来的:把锅全甩给模型是不公平的
2.1 从概率生成本质理解“一本正经胡说八道”
大模型的核心机制是基于上下文预测下一个token的概率分布。它不是在数据库里查答案,而是在一个高维空间里做“最像人话的续写”。这就好比一个读了海量书的人,你问他一个他其实没读过的细节,他不会说“我不知道”,而是会根据语言习惯和相似场景,编一个听起来最合理的答案。这不是他故意骗你,而是他的工作机制决定了“流畅”优先于“真实”。
我经常用一个类比解释给非技术同事听:模型像一个特别会聊天的实习生,知识面很广,但有一个致命毛病——他分不清“我记得”和“我觉得应该是”。你问他公司报销标准,他如果没记住,就会根据一般公司的常见做法给你编一个,而且语气特别肯定。幻觉的根源就在这里:生成目标与事实性目标之间存在天然张力。
2.2 训练数据、对齐过程与解码策略的三重影响
幻觉不是单一原因造成的,我习惯把它拆成三层来看。
第一层是训练数据层面。互联网文本本身包含大量错误、过时、矛盾的信息。模型把这些都吃进去之后,学到的不只是知识,还有“如何自信地表达不确定内容”这种模式。更麻烦的是,长尾知识在训练数据里出现次数少,模型对这部分内容的“记忆”本来就模糊,但生成时又不会主动降级表达。
第二层是对齐与微调层面。为了让模型更有帮助、更符合人类偏好,训练过程中会鼓励它“尽量给出答案”,而不是频繁说“我不知道”。这种倾向在RLHF(基于人类反馈的强化学习)阶段尤其明显——一个总是拒答的模型会被认为“不好用”,于是模型学会了在不确定时也硬着头皮编。这是很多团队做业务落地时最头疼的一点:你越要求它有用,它越容易幻觉。
第三层是解码策略层面。温度(temperature)、top-p、重复惩罚这些参数直接影响输出的多样性。温度调高,创造力上去了,幻觉率也跟着上去;温度调低,输出保守,但可能变得机械、重复。很多线上事故追到最后,发现是某次为了“让回答更生动”把温度从0.2调到了0.8。
2.3 为什么RAG和联网也救不了全部
很多人以为上了RAG(检索增强生成)就万事大吉,检索到真实文档,模型照着答不就行了?实际做过的都知道,RAG只是把幻觉的战场转移了,并没有消灭它。检索环节可能召回不相关的内容,模型可能忽略检索结果自己编,也可能把检索到的多个文档错误拼接。更隐蔽的是,当检索内容本身有冲突时,模型会“自信地选一个”而不是指出矛盾。
我见过一个典型case:知识库里两份文档,一份说审批需要3天,一份说5天。模型回答用户时直接说“通常3到5天”,听起来很合理,但实际上是它自己融合出来的,没有任何一份文档这么写。这种“合理幻觉”在RAG系统里非常常见,而且极难被传统评测发现。
3. 幻觉的分类与识别:先能看见,才谈得上治理
3.1 事实性幻觉、忠实性幻觉与逻辑性幻觉
业内比较通用的分法是把幻觉分成几类,我结合自己的经验重新梳理一下,方便你在排查时对号入座。
| 幻觉类型 | 典型表现 | 常见触发场景 | 危害等级 |
|---|---|---|---|
| 事实性幻觉 | 编造不存在的事实、数据、引用 | 开放域问答、知识问答 | 高 |
| 忠实性幻觉 | 输出与给定上下文矛盾 | RAG、摘要、翻译 | 极高 |
| 逻辑性幻觉 | 推理步骤错误但结论看似合理 | 数学题、多跳推理 | 高 |
| 格式性幻觉 | 编造API参数、字段名、代码 | 代码生成、工具调用 | 中高 |
| 时间性幻觉 | 把过时信息当最新事实 | 新闻、政策、价格类问答 | 高 |
事实性幻觉最容易被发现,因为一查就知道错。忠实性幻觉最危险,因为它发生在“有据可依”的场景里,用户会默认模型是照着文档说的,结果模型自己加戏。逻辑性幻觉在数学和推理任务里特别多,模型可能中间步骤全错,最后答案却碰巧对了,这种最难排查。
3.2 用“三问法”快速判断一条输出是否可疑
在实际工作中,我不可能对每一条输出都做人工核验,所以会用一个简单的“三问法”做快速筛查:
- 这条信息在给定上下文里能找到直接依据吗?如果找不到,标记为待查。
- 如果找不到依据,模型是用什么语气说的?越肯定、越具体(带数字、带日期、带人名),越可疑。
- 把这条输出单独拿出来,脱离模型语境,它还成立吗?很多幻觉在脱离上下文后一眼就能看出问题。
这个方法不能替代自动化评测,但在人工抽检和bad case分析时非常高效。我一般会让团队新人先用这个方法做一周的bad case标注,他们对幻觉的敏感度会明显提升。
3.3 自动化检测的几条实用路径
完全靠人看肯定不现实,自动化检测我一般会组合几种手段。基于NLI(自然语言推理)的忠实性检测,把上下文和输出做蕴含判断,看输出是否被上下文支持;基于自一致性(Self-Consistency)的采样检测,同一问题多次采样,如果答案差异大,说明模型本身不确定;基于外部知识库的交叉验证,对关键实体和数值做比对。
这里要提醒一句:自动化检测本身也会误判。NLI模型可能把合理改写判成不忠实,自一致性采样成本高且对创造性任务不适用。我的经验是,检测指标要分层看,不能用一个数字概括所有场景。客服场景可以容忍一定的事实性幻觉,但忠实性幻觉必须压到极低;创意写作场景则相反。
4. 工程侧缓解幻觉的实操方案
4.1 提示词层面的约束:把“不知道”变成合法选项
很多人写提示词时只写“请准确回答”,这基本没用。有效的做法是显式给模型一个退路。比如在系统提示里加一句:“如果给定资料中没有明确答案,请直接回复‘根据现有资料无法确定’,不要推测。”这句话看起来简单,但实测能显著降低RAG场景下的编造率。
另一个技巧是要求模型先引用再回答。让模型在给出结论前,先列出它依据的原文片段。这样一方面迫使它检查依据是否存在,另一方面也方便你做后置校验。我通常会把提示词写成类似这样的结构:
请基于以下资料回答问题。 要求: 1. 先列出你依据的资料原文片段(用引号标注)。 2. 如果资料中没有相关信息,直接说明无法回答。 3. 不要使用资料之外的知识进行补充。 资料: {context} 问题:{question}这个模板不是万能的,但在我经手的多个文档问答项目里,它把忠实性幻觉率压低了相当可观的比例。注意,提示词约束的效果和模型能力有关,小模型可能依然会忽略指令,所以不能只靠这一层。
4.2 检索增强的细节优化:召回质量决定上限
RAG系统里,检索质量是幻觉的第一道闸门。我见过太多团队把精力全花在提示词上,结果召回的内容本身就不相关,模型再听话也没用。检索优化我一般关注几个点:分块策略、嵌入模型选择、混合检索、重排序。
分块不是越小越好。块太小,上下文不完整,模型容易脑补;块太大,噪声多,关键信息被淹没。我的经验是,技术文档类内容按语义段落分块,每块300到500字比较稳;对话记录类可以按轮次分块。嵌入模型要选和你的语料领域匹配的,通用嵌入模型在垂直领域往往表现一般。混合检索(关键词+向量)在专有名词多的场景下提升明显。重排序模型可以放在召回之后,把最相关的几条顶到前面,成本不高但收益稳定。
4.3 解码参数与后处理:把不确定性显性化
解码参数方面,我一般建议业务场景把温度设在0.1到0.3之间,top-p设在0.9左右。这不是绝对标准,但作为一个保守起点比较安全。如果你的场景需要创造性,那就必须接受更高的幻觉风险,并通过其他手段兜底。
后处理环节可以做几件事:关键实体校验,把输出里的数字、日期、专有名词抽出来和知识库比对;格式校验,特别是工具调用场景,字段名和类型必须严格检查;置信度估计,可以用模型自身的logprob或者额外的分类器给输出打一个风险分,高风险输出走人工审核或降级回复。
注意:后处理规则不要写得太死,否则会把合理改写也拦掉。我一般会先跑一批正常样本,确认误杀率可接受再上线。
5. 兜底与监控:承认幻觉无法归零之后的活法
5.1 产品层面的降级与免责设计
技术手段做到极致,幻觉率也只能逼近某个下限,不可能归零。所以产品设计必须承认这一点。我参与过的项目里,比较有效的做法包括:对高风险问题强制走人工,比如涉及金额、政策、医疗建议的;在回答末尾加不确定性提示,但不要写成免责声明那种没人看的套话,而是具体说明“本回答基于某文档某版本,如有出入以官方为准”;提供反馈入口,让用户一键标记错误,这些数据是后续优化的金矿。
还有一个容易被忽略的点:不要让模型替你做承诺。客服场景里,模型说“可以退款”和“根据政策,符合条件的情况下可以申请退款”,后者虽然啰嗦,但法律风险低得多。这种话术设计需要技术和业务一起定,不能全交给模型自由发挥。
5.2 线上监控指标与bad case闭环
上线之后,监控必须跟上。我一般会盯几个指标:拒答率(突然升高说明检索或提示词出问题了)、用户负反馈率(最直接的信号)、忠实性抽检通过率(定期人工抽检)、关键实体错误率(自动化比对)。这些指标要按场景、按问题类型拆开看,整体数字好看不代表没问题。
bad case闭环是长期治理的关键。我习惯建一个分类表,把每条bad case归到具体原因:检索没召回、检索召回错误、模型忽略上下文、模型知识错误、提示词歧义、解码参数问题。归因清楚了,优化才有方向。很多团队的问题是bad case收集了一堆,但没人做归因,最后只能笼统地说“模型不行”。
5.3 一个真实项目的幻觉治理时间线
我拿一个模拟项目举例,方便你感受节奏。某企业内部知识问答系统,上线第一个月,用户反馈里大约三成和答案不准有关。第一周我们做了bad case归因,发现六成是检索问题,两成是模型忽略上下文,两成是知识库本身过时。第二到四周,重点优化分块和混合检索,同时加了引用约束提示词,负反馈降到一成五左右。第二个月引入重排序和关键实体校验,负反馈降到百分之八。第三个月做产品侧降级设计,高风险问题转人工,负反馈稳定在百分之五上下。这个数字不算完美,但业务方可以接受了。
这个过程里最大的体会是:幻觉治理是系统工程,不是调一个参数就能解决的。而且每个阶段的瓶颈不一样,前期是检索,中期是提示词和模型行为,后期是产品流程和监控。
6. 几个常见误区与踩坑记录
6.1 “换个更强的模型就好了”
这是最常见的误区。更强的模型确实能降低一部分幻觉,尤其是事实性幻觉,但它不会消灭忠实性幻觉和逻辑性幻觉。而且模型越强,输出越流畅,用户越容易相信,一旦出错危害反而更大。我见过团队把模型升级后放松了监控,结果出了更严重的事故。模型能力是变量,不是解药。
6.2 “评测集分数高就没问题”
评测集和真实流量之间的差距,做过线上系统的人都懂。评测集往往是干净的、分布均匀的,真实用户问题则是长尾的、带错别字的、多意图混合的。我一般会要求团队定期从线上采样构建新的评测集,而不是一直用那套老题。另外,评测指标要包含忠实性和拒答合理性,不能只看准确率。
6.3 “用户没反馈就是没问题”
沉默的大多数是最危险的。用户遇到错误答案,很多时候不会反馈,而是直接流失。所以除了显式反馈,还要看行为信号:追问率、重复提问率、会话中断率、转人工率。这些信号往往比评分更能反映真实体验。
7. 写在最后:一些个人体会
做了这些年,我对AI幻觉的态度从“一定要解决它”变成了“学会和它共处”。这不是躺平,而是认清现实之后的务实选择。技术上,该做的检索优化、提示词约束、后处理校验、监控闭环,一样都不能少;产品上,该有的降级、提示、人工兜底,也必须设计进去。指望某一个技术突破让幻觉归零,至少目前看不到希望。
如果非要给一条最实用的建议,我会说:先把你的场景按风险分级,高风险场景用最保守的方案,低风险场景再考虑体验优化。很多团队的问题是一刀切,要么全放开,要么全收紧,结果两头不讨好。分级之后,你会发现资源投入的优先级一下子清晰了。
另外,别忽视标注和归因的长期价值。我见过太多团队把bad case当垃圾扔在一边,其实那是最宝贵的资产。每一条错误背后都是一个具体的系统缺陷,修一个少一个。这个过程很枯燥,但它是从“能用”走向“可靠”的必经之路。