想象一位刚通过培训考试的导游:他背熟了景区手册,讲解行云流水,声音自信笃定。但你若追问一句“这座塔到底是几层?”,他会笑眯眯地报出一个具体数字——哪怕他从未数过。这不是撒谎,而是“脑补”。AI 幻觉(Hallucination)正是这种脑补:模型生成的内容语法通顺、逻辑自洽,关键事实却凭空捏造。2023 年,两位纽约律师用 ChatGPT 起草诉讼文书,竟引用了六个不存在的判例,被法官当庭处罚;某健康问答应用一本正经地告诉用户“高血压可以放心吃布洛芬”,险些酿成大祸。这些事故的共同点,是一个“自信的导游”把整团游客带进了沟里。本文将沿着这条“导游翻车”的故事线,拆解幻觉从何而来、事故如何发生、如何检测防护、出事如何应急,以及责任如何划分、工程上如何亡羊补牢。

岗位关联

掌握幻觉从发生、检测到拦截的完整链路,是 AI 产品上线前必须补的一课。学会它,你就能在事故爆发前,把那位“自信的导游”按在岗位上。

目录
  1. 可视化演示
  2. 幻觉初步认知
  3. 事故案例复盘
  4. 致祸深层原因
  5. 检测定位方法
  6. 风险防护机制
  7. 应急处理流程
  8. 责任合规边界
  9. 工程实战经验
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

展示AI幻觉导致产品事故的全过程,包含幻觉产生机制、用户信任度影响分析与RAG检索增强防护策略三个关键维度。

本节配有交互动效(进入视口后自动加载,约 3KB)。

AI幻觉产生机制 LLM不知道答案时自信编造看似合理内容 法律AI虚构判例citation致律师受罚 Hallucination = Confident(x) AND Wrong(x) 幻觉是LLM最棘手缺陷直接影响高风险场景可用性

幻觉初步认知

想象一位刚通过培训考试的导游。他背熟了景区手册,讲解行云流水,声音自信笃定。但你若追问“这座塔到底有几层?”,他会笑眯眯地报出一个数字——哪怕他从未数过。这就是 AI 幻觉:模型生成的文本语法通顺、逻辑自洽,关键事实却凭空捏造。它分两类:一类是事实性幻觉,凭空编造不存在的细节;另一类是忠实性幻觉,不遵循用户指令或上下文。两者共同点都是“流畅自信”地偏离真相。

为什么模型会脑补?因为 GPT 这类大语言模型本质是“猜词机器”,不是数据库。它根据已有上下文,逐个预测下一个最可能的词,再把词串成句子。你问“充电宝能带上飞机吗”,它输出的不是检索结果,而是“一串看起来最像正确答案的词”。这个预测过程用条件概率来描述最直观。

模型在看到用户输入 \(x\) 和已经生成的词序列 \(y_{<t}\) 后,从词表中挑一个概率最大的词语作为第 \(t\) 个词。这相当于导游在每句话的结尾,从记忆中顺口度最高的几种说法里挑一种说出来:

这节告诉我们:幻觉不是 bug,而是“概率生成 + 事实缺失”的必然产物。导游的嘴巴太顺,是因为培训只教会他“像模像样地讲”,没教会他“实地确认后再讲”。

y^t=arg⁡max⁡ytP(yt∣y<t,x)\hat{y}_t = \mathop{\arg\max}_{y_t} P(y_t \mid y_{<t}, x)
这个 argmax 是幻觉的起点:模型只选“最顺口的词”,不选“最正确的词”。
  1. 用户输入 \(x\)相当于游客提出的问题,是整个预测过程的出发点。
    x=用户问的问题x = \text{用户问的问题}
  2. 历史词序列 \(y_{<t}\)模型已经说过的前 \(t-1\) 个词,相当于导游已经讲出的前半段话。
    y<t=(y1,y2,…,yt−1)y_{<t} = (y_1, y_2, \dots, y_{t-1})
  3. 条件概率 \(P(y_t \mid y_{<t}, x)\)在已知问题和已有答复的前提下,下一个词是 \(y_t\) 的可能性,即导游从脑海中调出“哪句话接得上”的熟练度。
    P(yt∣y<t,x)P(y_t \mid y_{<t}, x)
  4. \(\arg\max\) 取最大值从词表中选出概率最大的那个词填入当前位置。这是“照着顺口接话”的数学表达——最顺口,不等于事实正确。
    y^t=arg⁡max⁡ytP(yt∣y<t,x)\hat{y}_t = \mathop{\arg\max}_{y_t} P(y_t \mid y_{<t}, x)

事故案例复盘

当游客把导游的每句话都当成真事,事故就开始了。有人按导游指的路走进死胡同,有人把导游编的传说写进作文。落到 AI 产品上,被“编造”坑害的用户轻则闹笑话,重则打官司。复盘真实事故,是产品团队认识幻觉威胁最直接的方式。

案例一:律师编判例。2023 年,纽约两位律师用 ChatGPT 起草诉讼文件,其中引用了六个“真实判例”,事实上全部是模型编造的。法官发现后,对两位律师处以罚款,并成为全球 AI 法律应用的经典反面教材。案例二:医疗问答给错剂量。某健康问答应用被问到“高血压患者能否服用布洛芬”时,回答“可以,放心服用”,没有剂量警告和禁忌说明,险些造成严重后果。案例三:客服承诺不存在的政策。某电商客服机器人被问“你们保价吗”,它热情承诺“买贵必赔 50 元”,但公司根本没有这项政策,引发集中投诉和口碑危机。

评估这些事故的严重程度,产品团队常用一个朴素的风险公式:风险等于发生可能性乘以影响程度。

三个案例的共同点是 \(L\) 不低、\(I\) 又高,乘积自然惊人。事故复盘的意义,就是把每一场“导游翻车”换算成可量化的风险分,让团队知道该把防护资源押在哪里。

R=L×IR = L \times I
导游乱编的概率乘以游客受伤的代价,才是旅行社真正要赔付的账单。
  1. \(L\) 表示事故发生的可能性模型在同类问题上产生幻觉的概率。比如法律问答场景中,模型编造判例的频率就是这里的 \(L\)。
    L=P(生成内容包含编造事实)L = P(\text{生成内容包含编造事实})
  2. \(I\) 表示事故的影响程度一旦发生会造成多大损失。法律文书出错可能导致败诉赔偿,医疗错误可能危及生命,影响权重极高。
    I=后果严重性(经济损失,人身安全,声誉)I = \text{后果严重性}( \text{经济损失}, \text{人身安全}, \text{声誉} )
  3. 相乘得到风险值 \(R\)把“多常发生”和“多严重”乘在一起,得到这个功能模块的整体风险敞口。
    R=L×IR = L \times I
  4. 风险排序与决策\(R\) 值高的场景优先加防护,比如医疗、法律类功能必须上人工审核或熔断,而闲聊类功能可以放宽。
    R医疗≫R闲聊R_{\text{医疗}} \gg R_{\text{闲聊}}

致祸深层原因

导游为什么爱编?不是他心眼坏,而是培训班教材本身就有错、并且早已停更;加上一紧张就即兴发挥,把两个景点混成一团。AI 模型的“即兴发挥”程度,由一个叫温度(Temperature)的参数控制,而教材问题则出在训练数据上。

根源一:训练数据噪声与过时。 互联网语料里有大量谣言、段子和过期新闻,教材错了,考试自然错。根源二:解码采样发散。 温度太高时,模型会把概率分布“摊平”,从稳稳作答变成发散联想,把“白娘子庙”这种不存在的景点也编出来。根源三:上下文注意力稀释。 模型阅读长文本时“虎头蛇尾”,中间部分会被忽略,这就是著名的“Lost in the Middle“现象——游客 10 分钟前提的关键细节,导游转头就忘。根源四:奖励偏好流畅。 人工反馈更偏爱”说得好听“的答案,模型学到”圆滑比准确更重要”。

温度采样是理解“发散”的核心公式。模型给每个候选词打一个原始分 \(z_i\),温度 \(T\) 缩放后经过 softmax 变成概率:

现在你明白了:幻觉不是单一原因造成的,而是“错教材 + 爱发散 + 记性差 + 爱面子”四重因素叠加。治理幻觉,也得从这四个方向分别下手。

pi=exp⁡(zi/T)∑jexp⁡(zj/T)p_i = \frac{\exp(z_i / T)}{\sum_{j} \exp(z_j / T)}
温度越高,导游越敢天马行空;温度越低,导游越照本宣科——但照本宣科也会复读错误教材。
  1. 原始得分 \(z_i\)模型给候选词 \(i\) 打的内部分数,可以理解为导游记忆里“这个说法接得上”的熟练度。
    zi=词 i 的逻辑得分z_i = \text{词 } i \text{ 的逻辑得分}
  2. 温度缩放 \(z_i / T\)温度 \(T\) 把所有分数整体缩放。\(T\) 大时分数差异被压缩,导游开始“放飞自我”;\(T\) 小时差异被放大,导游只敢照背原文。
    ziT,T∈(0,∞)\frac{z_i}{T}, \quad T \in (0, \infty)
  3. 指数运算 \(\exp\)把缩放后的分数变成正数,同时保留相对大小,方便后续归一化。
    exp⁡(zi/T)\exp(z_i / T)
  4. 归一化分母除以所有词的指数和,使所有候选词的概率加起来等于 1,成为合法概率分布。
    pi=exp⁡(zi/T)∑jexp⁡(zj/T)p_i = \frac{\exp(z_i / T)}{\sum_j \exp(z_j / T)}

检测定位方法

经验丰富的领队从不轻信导游。他会随身带一份地图,途中对照路牌、问路人、看 GPS。检测幻觉,就是给 AI 产品配一套“现场核实”工具,在错误答案伤害用户之前把它揪出来。

手段一:事实一致性核查。 把模型回答拆成若干句子,与权威知识库逐句比对。重合度越高越可信,重合度低就标记“疑似编造”。手段二:自一致性检查。 同一个问题让模型用不同采样参数回答多次,如果关键事实互相矛盾,说明模型“心里没底”,这正是幻觉的信号。手段三:困惑度监控。 模型在编造时往往伴随“说话犹豫”——困惑度异常升高,或对关键名词的置信度骤降,可在流式输出时实时打分报警。

事实一致性核查的核心是计算回答与证据的重合程度。用最长公共子序列(LCS)衡量答案 \(A\) 与证据 \(E\) 之间保留了多少原意:

检测三件套让“地图在手,胡说现形”。一致性核查负责对照原文,自一致性负责“多问几遍看是否改口”,困惑度负责“听语气判断心虚”。三者叠加,能覆盖大多数幻觉场景。

Scorefact=LCS(A,E)∣E∣\text{Score}_{\text{fact}} = \frac{\text{LCS}(A, E)}{|E|}
导游说的路线和地图上真实路线的重合字数,除以地图全长的比例——重合越少,越可疑。
  1. 答案 \(A\) 与证据 \(E\)\(A\) 是模型生成的句子,\(E\) 是知识库中对应的权威原文。
    A=模型回答,E=知识库证据A = \text{模型回答}, \quad E = \text{知识库证据}
  2. 最长公共子序列 \(\text{LCS}(A, E)\)按顺序出现在两者中的最长字符序列,即导游说法与地图实际路线“对得上”的部分。
    LCS(A,E)\text{LCS}(A, E)
  3. 除以证据长度 \(|E|\)把重合量归一化为比例,消除句子长短影响。证据 100 字、重合 20 字,得分就是 0.2。
    LCS(A,E)∣E∣\frac{\text{LCS}(A, E)}{|E|}
  4. 阈值判定得分低于阈值(如 0.5)就判定为疑似幻觉,触发复核或重写。
    Scorefact<θ⇒疑似幻觉\text{Score}_{\text{fact}} < \theta \Rightarrow \text{疑似幻觉}

风险防护机制

与其等导游编完再纠错,不如一开始就给他配一本“随查手册”加一条口诀:不知道的路,说不知道。这就是 RAG 检索增强生成——把 AI 从“闭卷考试”变成“开卷考试”。

RAG 的流程是:收到用户问题后,先去知识库检索最相关的几段文档,再把文档和问题一起塞给模型,要求它“仅基于以下资料回答”,并强制附上来源引用。与此同时,产品还需要两道辅助闸门。第一道是提示词约束,在系统提示中明确写“没有把握时,请回答不知道”;第二道是输出校验层,将上一节讲到的检测器部署在模型出口,发现无依据句子直接打回重写或返回兜底话术。

RAG 检索阶段的核心指标是查询与文档的向量相似度。把问题和文档都编码成向量后,用余弦相似度衡量方向上的接近程度:

开卷考试仍然可能抄错题,所以引用校验和“不知道”口诀同样重要。RAG 负责“给答案找依据”,提示词负责“没依据就认怂”,校验层负责“还在胡说就拦下”,三件套缺一不可。

sim(q,d)=q⋅d∥q∥∥d∥\text{sim}(\mathbf{q}, \mathbf{d}) = \frac{\mathbf{q} \cdot \mathbf{d}}{\lVert \mathbf{q} \rVert \lVert \mathbf{d} \rVert}
相当于把游客的问题和手册条目各画成一根箭头,夹角越小,说明这条手册内容越对症。
  1. 问题向量 \(\mathbf{q}\) 与文档向量 \(\mathbf{d}\)把文本映射到高维向量空间,语义相近的文本向量方向也相近。
    q∈Rn,d∈Rn\mathbf{q} \in \mathbb{R}^n, \quad \mathbf{d} \in \mathbb{R}^n
  2. 点积 \(\mathbf{q} \cdot \mathbf{d}\)计算两个向量在各维度上的乘积之和,反映“方向一致性”。
    q⋅d=∑i=1nqidi\mathbf{q} \cdot \mathbf{d} = \sum_{i=1}^{n} q_i d_i
  3. 模长乘积 \(\lVert \mathbf{q} \rVert \lVert \mathbf{d} \rVert\)用两个向量的长度做归一化,去掉“长文档天然分高”的偏差。
    ∥q∥∥d∥\lVert \mathbf{q} \rVert \lVert \mathbf{d} \rVert
  4. 余弦相似度取值在 \([-1, 1]\),越接近 1 表示越相关,据此召回 Top-K 文档给模型作为作答依据。
    sim(q,d)→Top-K 文档\text{sim}(\mathbf{q}, \mathbf{d}) \rightarrow \text{Top-}K \text{ 文档}

应急处理流程

最糟糕的时刻还是来了:游客在群里炸了锅,有图有真相地投诉“导游把我们带到了荒地”。此时再争论“导游其实没错”毫无意义,关键是立刻灭火。AI 产品出现幻觉事故后的应急,同样是一套标准流程。

第一步:熔断拦截。 在高风险产品上线前,定义决策分 \(S = \alpha C - \beta R\)。分值低于阈值的答案直接拦截,转人工或返回安全兜底。医疗场景中风险度 \(R\) 极高,即使模型很自信(\(C\) 高)也照样拦截。第二步:日志溯源。 找到触发幻觉的 prompt、上下文和采样参数,复现问题,像飞机黑匣子一样定位是数据问题还是解码策略问题。第三步:更正与安抚。 发公告澄清、撤下错误内容、对受影响用户道歉并补偿;涉及医疗等生命健康场景,还要主动预警并撤回可能造成伤害的建议。第四步:复盘沉淀。 把事故样本加入回归测试集,把规则固化进检测器,防止同类问题再次发生。

熔断决策是整个流程的“总闸门”,它的数学表达如下:

熔断是对“传播”的物理切断,日志溯源是查病根,更正公告是善后,复盘沉淀是预防。灭火四步走完,事故才真正闭环,而不是等下一次爆发。

S=αC−βR,S<θ⇒拦截S = \alpha C - \beta R, \quad S < \theta \Rightarrow \text{拦截}
导游的自信可以加分,但带团路线的危险程度要狠狠扣分——总评低于安全线,这趟团就不许出发。
  1. 置信度 \(C\)模型对自己答案的把握程度,范围 0 到 1,相当于导游拍胸脯保证的底气。
    C∈[0,1]C \in [0, 1]
  2. 风险度 \(R\)答案涉及的风险等级。闲聊为 0,电商承诺为 0.5,医疗用药为 1。
    R∈[0,1]R \in [0, 1]
  3. 加权相减 \(\alpha C - \beta R\)\(\alpha\)、\(\beta\) 是团队对“自信”和“风险”的重视程度。高风险场景调大 \(\beta\),让风险扣分远大于自信加分。
    αC−βR\alpha C - \beta R
  4. 与阈值 \(\theta\) 比较当 \(S\) 低于 \(\theta\) 时拦截输出,转人工或返回兜底话术,防止错误答案流出。
    S<θ⇒拦截S < \theta \Rightarrow \text{拦截}

责任合规边界

带团出了事,导游、旅行社、培训班谁都跑不了,但责任大小不同。AI 产品的责任链条也一样:模型厂商、产品方、运营方和使用者需要清晰划分,否则一出事就互相甩锅。

实践中,产品方通常握有三张“免责挡箭牌”。第一张:产品分级管控。闲聊、翻译等低风险场景开放;医疗、法律、金融等高危场景强制加人工审核,或干脆只允许模型从封闭知识库作答。第二张:算法备案与审计。按监管要求完成大模型备案,留存训练数据来源、微调日志、推理日志,出问题能追溯、能解释。第三张:责任边界告知。在对话界面显著标注“AI 生成内容仅供参考”,高危场景让用户签署知情同意,把“幻觉可能性”提前摆上台面。

要评判合规工作是否到位,可以用“高风险事实覆盖率”这个指标:在必须核实的高风险事实中,实际完成核查的比例。

责任不靠嘴上承诺,靠“能查证、能留痕、能解释”的证据链。覆盖率公式把模糊的“我们很负责”变成可量化的数字,让责任划分有据可依。

Coverage=∣Echecked∣∣Erequired∣\text{Coverage} = \frac{\left| E_{\text{checked}} \right|}{\left| E_{\text{required}} \right|}
这就像检查导游的带团资质:旅行社要求必须核实 50 个关键景点信息,导游实际核对了 45 个,覆盖率 90%,才算达到合规线。
  1. 必须核实的高风险事实集 \(E_{\text{required}}\)由产品团队按风险等级圈定的一批“关键考点”,比如药物禁忌、法律条款、价格政策。
    Erequired={e1,e2,…,em}E_{\text{required}} = \{ e_1, e_2, \dots, e_m \}
  2. 已完成核实的事实集 \(E_{\text{checked}}\)通过知识库比对、人工审核等方式确认无误的事实子集。
    Echecked⊆ErequiredE_{\text{checked}} \subseteq E_{\text{required}}
  3. 基数之比得到覆盖率两个集合元素个数相除,得到已确认事实占全部必查事实的比例。
    ∣Echecked∣∣Erequired∣\frac{\left| E_{\text{checked}} \right|}{\left| E_{\text{required}} \right|}
  4. 与合规阈值比较覆盖率低于阈值(如 0.9)时,产品不允许上线。数值化的合规指标让责任可审计、可追责。
    Coverage≥0.9⇒合规\text{Coverage} \geq 0.9 \Rightarrow \text{合规}

工程实战经验

老导游的翻车手册越写越厚,但翻车次数越来越少。AI 团队的“手册”是四个沉淀下来的工程习惯,每一笔都来自真实事故的教训。

第一,提示工程约束。 在系统提示中加入少样本示例,并明确指令“不确定就说不知道”。这相当于给导游立规矩:宁可承认没去过,也不要编。第二,微调纠偏训练。 收集历史幻觉样本作为反例,通过梯度下降更新模型参数,压低“编造语料”的损失,让胡说八道不再被奖励。第三,灰度发布与红队测试。 新版本先小流量内测,安全团队扮演“刁钻游客”,用诱导性提问、越狱提示专门诱骗模型编造,赶在上线前把坑都踩一遍。第四,幻觉回归测试集。 把历次事故样本固化成自动化用例,每次发版先跑一遍——“历史上的坑”一个都不能再踩。

微调纠偏的数学本质就是参数沿着损失下降最快的方向更新一步:

这四项经验环环相扣:提示工程让模型“不敢乱说”,微调让模型“学会不说”,红队测试在上线前“逼它乱说”,回归集在每次发版后“防止它再说”。幻觉治理不是一次性修复,而是持续运营。

w←w−η∇wL\mathbf{w} \leftarrow \mathbf{w} - \eta \nabla_{\mathbf{w}} L
导游每被扣一次分,就知道哪里讲错了,下次沿着“扣分减少”的方向调整说辞——这便是参数更新。
  1. 模型参数 \(\mathbf{w}\)神经网络里所有可学习的权重,相当于导游遍布大脑的“说法偏好”。
    w=(w1,w2,…,wn)\mathbf{w} = (w_1, w_2, \dots, w_n)
  2. 损失函数 \(L\)衡量模型在幻觉样本上“被扣了多少分”,幻觉越严重,损失越大。
    L=L(幻觉样本)L = L(\text{幻觉样本})
  3. 梯度 \(\nabla_{\mathbf{w}} L\)损失对每个参数的偏导方向,指示“往哪个方向调参能让分数少扣一些”。
    ∇wL=(∂L∂w1,…,∂L∂wn)\nabla_{\mathbf{w}} L = \left( \frac{\partial L}{\partial w_1}, \dots, \frac{\partial L}{\partial w_n} \right)
  4. 学习率 \(\eta\) 与更新沿着负梯度方向迈出一小步,\(\eta\) 控制步子大小。步子太大容易矫枉过正,太小则学得慢。
    w←w−η∇wL\mathbf{w} \leftarrow \mathbf{w} - \eta \nabla_{\mathbf{w}} L

AI 应用场景

电商客服:政策承诺幻觉拦截

阶段:AI 产品设计(防护层)

解决的问题:传统客服机器人靠模型记忆作答,经常热情承诺“买贵必赔 50 元”之类不存在的政策,引发大量投诉。RAG 接入商品政策库后,所有承诺必须引用政策原文,无引用或与政策冲突的回答直接驳回,改用兜底话术“请联系人工客服确认”。

具体案例:某美妆电商平台上线“政策知识库 + 引用校验”方案后,退换货及价格承诺类投诉下降 76%,人工客服转接量明显减少。

医疗健康助手:风险熔断与人工审核

阶段:AI 产品运营(应急处置)

解决的问题:用户向健康助手询问药物剂量,模型凭记忆回答,一旦出错可能危及生命。通过熔断决策公式 \(S = \alpha C - \beta R\),把药物相关问题的风险度 \(R\) 设为最高档,即使模型自信也直接转人工药师审核。

具体案例:某互联网医院助手将高危问题自动转人工率从 8% 提升至 95%,同时模型只允许从审核通过的药品说明书库作答,未命中的问题一律拒绝回答。

法律文书生成:事实核查与案例库约束

阶段:AI 产品开发(检测 + 合规)

解决的问题:律师助理用 AI 生成案情摘要,模型可能引用不存在的判例。通过向量检索只访问权威判例库,并强制输出附案号链接;同时用事实一致性评分对每个句子打分,低于阈值拒绝生成。

具体案例:某法律科技公司上线该方案后,判例引用准确率从 89% 升至 99.6%,未命中权威库的引用请求全部被拦截并要求人工补充材料。

Python 演示

python61 行
# -*- coding: utf-8 -*-"""LLM 幻觉检测模拟器:将客服回复逐句与知识库核对,输出事实一致度报告。"""  class KnowledgeBase:    def __init__(self):        self.records = {            "退款": "7天无理由退款",            "营业": "早上9点到晚上9点",            "酒精": "不含酒精",            "保修": "整机保修一年",        }     def match(self, text):        matched = []        for key, fact in self.records.items():            if key in text:                matched.append((key, fact))        return matched  class HallucinationChecker:    def __init__(self, kb, threshold=0.5):        self.kb = kb        self.threshold = threshold        self.hit_count = 0     def check_sentence(self, sentence):        pairs = self.kb.match(sentence)        if not pairs:            return 0.0, False        agreed = sum(1 for _, fact in pairs if fact in sentence)        self.hit_count += len(pairs)        return agreed / len(pairs), True     def report(self, reply):        result = []        for sentence in reply:            score, touched = self.check_sentence(sentence)            status = "PASS" if score >= self.threshold else "CHECK"            result.append({"sentence": sentence, "score": score, "status": status})        return result  def main():    kb = KnowledgeBase()    checker = HallucinationChecker(kb, threshold=0.5)    reply = [        "我们支持7天无理由退款,全场包邮。",        "店铺营业时间从早上9点到晚上9点。",        "本产品不含酒精,成分温和不刺激。",        "本产品提供终身免费维修服务。",    ]    for item in checker.report(reply):        print("{:.2f}  {}".format(item["score"], item["status"]))        print("  " + item["sentence"])    print("知识库命中次数:{}".format(checker.hit_count))  if __name__ == "__main__":    main()
目的:这是一个简化版的事实一致性核查器——把 AI 客服的回复逐句与知识库进行关键词和事实内容比对,输出每条句子的“事实一致度”,把低于阈值的句子标记为疑似幻觉。
  1. self.records = { "退款": "7天无理由退款", ... }以键值对形式存储“关键词 → 权威事实”,模拟产品知识库。
  2. def match(self, text)检查句子中命中了哪些知识库条目,返回匹配到的关键词与事实对。
  3. agreed = sum(1 for _, fact in pairs if fact in sentence)统计“知识库事实原文完整出现在句子中”的条数,这是最朴素的一致度判断。
  4. score = agreed / len(pairs)用命中的条目里“事实对上”的比例作为该句子的事实一致度。
  5. status = "PASS" if score >= self.threshold else "CHECK"以 0.5 为阈值,低于阈值标记为“需要人工复核”。
  6. if __name__ == "__main__": main()提供可执行入口,直接运行即可看到幻觉检测报告。

常见误区

误区很多人以为幻觉是“笨”导致的,只要把模型从千亿参数换成万亿参数,它自然就记得住、不会编了。

正解幻觉根源是“概率生成”与“事实校验”脱钩。参数更大的模型只是学会了更流畅地编造,它依然不知道自己是错的。就像给导游一本更厚的教材,他可能把假景点描述得更生动,但不会因此自动去实地踩点。真正有效的手段是检索增强、输出校验和人工审核,而不是单纯堆参数。

为何常见:人们习惯把“流畅”等同于“聪明”,把“记性好”等同于“不犯错”,于是自然推断“更大的模型 = 更少的幻觉”。

误区不少人认为只要做了检索增强,模型从知识库拿答案,就再也不会有幻觉,可以直接上线。

正解RAG 显著降低幻觉,但远不能消除。检索可能召回无关文档、检索片段本身可能有误,模型也可能忽略检索内容强行发挥。更常见的是“抄错题”——把文档 A 的数据安到文档 B 的头上。所以 RAG 必须搭配引用校验、置信度阈值和人工复核,把它当“开卷考试”的辅助工具,而不是“免死金牌”。

为何常见:RAG 的成功案例在社区传播很广,“检索 + 增强”听起来天然安全,容易让人忽略它只是流水线中的一个环节。

误区认为温度越低,模型越照本宣科,自然越正确。有人甚至把温度设为 0 来“杜绝幻觉”。

正解低温度只是让输出更确定、更收敛,但确定性不等于正确性。如果训练数据本身有错,模型会以非常稳定的方式复述错误;同时温度过低会让回答变得机械、重复,甚至失去对上下文的灵活性。温度是“发散程度”的旋钮,不是“真实性”的开关。

为何常见:直觉上“不乱说 = 可靠”,但忽略了“稳定地胡说”也是幻觉的一种表现。

误区一些产品团队认为,“模型是别人训练的,输出是模型决定的,出事了找 moka/训练方赔就行”。

正解产品对最终输出负有第一责任。你把一个工具包装成产品推向用户,就要为它的行为负责。正确的做法是产品分级管控、高危场景熔断、风险告知,并在事故后快速响应。就像旅行社把导游派出去带团,游客只认旅行社,不认培训班。责任链条要前置到产品设计阶段,而不是事后甩锅。

为何常见:技术归因心理让人们习惯把问题推给“上游”,逃避产品层面的部署、校验和告知义务。

面试题

Q1. AI 幻觉最典型的特征是什么?

单选题 · easy

  • A.流畅自信但事实错误← 正确答案
  • B.语法混乱辞不达意
  • C.回答太短信息太少
  • D.算法复杂难以训练

答案:A。幻觉的核心特征是“表达流畅 + 事实错误”,就像导游说得很顺口但景点根本不存在。B 是生成质量差,C 是信息量不足,D 是模型训练问题,都与幻觉的定义无关。

Q2. 下列哪项措施最能减少 RAG 场景下的幻觉?

单选题 · easy

  • A.检索增强并附引用← 正确答案
  • B.增加模型参数量
  • C.提高解码温度值
  • D.加快推理的速度

答案:A。RAG 通过检索外部知识库为回答提供依据,强制引用让事实可追溯,是降低幻觉的最直接手段。增大参数量只会让编造更流畅,提高温度反而增加发散,加速推理对正确性没有帮助。

Q3. 幻觉的常见根源有哪些?

多选题 · mid

  • A.训练数据含噪声过时← 正确答案
  • B.解码采样随机发散← 正确答案
  • C.长上下文注意力稀释← 正确答案
  • D.模型参数规模庞大

答案:ABC。噪声数据相当于“教材有错”,采样发散相当于“导游即兴发挥”,注意力稀释相当于“忘了游客的关键提问”,这三者都是幻觉的直接根源。参数规模大不是幻觉的成因,反而可能让编造更流畅,因此 D 错误。

Q4. 出现"Lost in the Middle"现象是指什么?

单选题 · mid

  • A.忽略长上下文中间信息← 正确答案
  • B.梯度在网络中间消失
  • C.中间层 token 被截断
  • D.中间层数据被压缩

答案:A。Long Context 下模型对输入中间部分的注意力显著低于开头和结尾,导致关键信息被忽略,这正是“导游记不住游客中途提的要求”。B 是梯度消失问题,C、D 与上下文注意力机制无关。

Q5. 事实一致性核查主要比较什么?

单选题 · mid

  • A.与证据库要点重合度← 正确答案
  • B.回答句子平均长度
  • C.回复情感正负极性
  • D.用户页面点击频率

答案:A。事实一致性核查把模型回答与知识库证据做内容比对,用 LCS 等指标衡量“说了多少真话”。句子长度、情感极性、点击频率都与“是否依据事实”无关,无法定位幻觉。

Q6. 高风险 AI 产品中,熔断拦截措施包括哪些?

多选题 · mid

  • A.低置信度转人工复核← 正确答案
  • B.强制校验事实来源← 正确答案
  • C.禁止无依据的回答← 正确答案
  • D.调低解码温度参数

答案:ABC。熔断指在输出环节把高风险答案拦截下来,A、B、C 都是出口闸门措施。调低温度属于生成阶段的参数调整,属于“缓解”而非“熔断拦截”,所以 D 不选。

Q7. 自一致性(Self-Consistency)检测幻觉的基本思路是什么?

单选题 · hard

  • A.多次采样看答案分歧← 正确答案
  • B.对输出做哈希去重
  • C.用更大模型改写
  • D.统计每个词频次

答案:A。自一致性假设“真正有依据的答案经多次采样后基本稳定”。同一问题让模型答多次,若关键事实互相矛盾,说明模型在编造。哈希去重、模型改写、词频统计都无法反映“事实是否稳定”,所以不选。

Q8. 关于熔断决策公式 S = αC − βR,下列说法正确的是?

单选题 · hard

  • A.风险 R 增大,S 降低,更易被拦截← 正确答案
  • B.C 表示回答的错误率
  • C.α 和 β 必须大小相等
  • D.风险越大越应该放行

答案:A。S = α·置信度 − β·风险度,风险项系数为负,所以 R 增大会拉低 S,使“低于阈值被拦截”更可能发生。C 是置信度而非错误率;α、β 是超参数,无须相等;D 与公式含义完全相反。

Q9. 大模型产品发生幻觉事故后,正确的应急处置有哪些?

多选题 · hard

  • A.熔断拦截日志溯源复盘← 正确答案
  • B.删库跑路封锁消息
  • C.官方拒绝承认问题
  • D.更正公告补偿用户← 正确答案

答案:AD。标准流程是先熔断阻断传播,再日志溯源找根因,最后发布更正公告并补偿受影响用户,同时把样本沉淀进回归集。B、C 是错误示范,封锁消息和拒不承认只会放大舆论危机。

Q10. 梯度更新 w ← w − η∇L 在幻觉治理中的正确理解是什么?

单选题 · extreme

  • A.微调压低幻觉语料损失← 正确答案
  • B.直接删除幻觉的参数
  • C.增加注意力头数量
  • D.加快解码采样速度

答案:A。微调纠偏时,用幻觉样本计算损失 L,沿负梯度方向更新参数 w,使模型在类似输入上不再产出编造内容,本质是“压低幻觉语料的损失”。B 是错误想象,参数不能直接删除;C、D 与梯度更新无关。