想象一家开在深夜的“AI 三甲医院”。值班医生是一位不知疲倦的大语言模型,几分钟就能接待一千位病人。但院长一直不放心:这位医生偶尔会“背错书”——把一种根本不存在的药说得头头是道;或者病人明明问的是皮肤过敏,他却滔滔不绝讲起心脏搭桥。前者叫幻觉(模型编造了事实),后者叫相关性不足(回答没对上问题)。在医疗、金融、法律这些错不起的领域,一次杜撰就可能酿成大祸。于是医院成立了质量监控科,给每一份诊断记录拍“X 光片”:先扫描有没有凭空捏造的内容,再检查回答是否真正回应了提问。本文就是这座“AI 医院”质控科的操作手册——教你把幻觉检测与相关性评估这两台 X 光机装起来、用起来,并让它们越用越准。
学会幻觉与相关性监控,等于给 LLM 应用装上一台实时质检仪:你可以在用户被误导之前发现并拦截错误回答,也能沉淀高质量样本反哺模型。这是 AI 应用从“能跑”走向“可信”的关键技能,也是医疗、金融、法律等高合规场景的入行门槛。
目录
可视化演示
展示大语言模型通过思维链(Chain-of-Thought)逐步推理的过程:从问题输入到分解、检索、计算和答案生成的完整链路。
本节配有交互动效(进入视口后自动加载,约 3KB)。
问题输入阶段 用户提出问题,LLM接收并解析输入文本 系统对问题进行编码,准备进入推理链 input = encode(user_question)
幻觉来源解析:AI 医生为何杜撰病历
放射科医生拿到一张 X 光片,第一步不是急着下诊断,而是先判断阴影从哪来——是骨裂、金属假体,还是胶片上的灰尘。做 LLM 质量监控也一样,想拦截幻觉,先得知道幻觉是怎么“长”出来的。
AI 医生的“杜撰”通常来自四个病灶。一是训练语料本身有错误和噪声,模型把网上的谣言当成了教科书,这是数据偏差;二是不同年代的语料互相打架,模型把过时说法当成最新结论,这是知识冲突;三是生成过程本质是“掷骰子”,每个词都按概率采样,知识缺失时只能硬凑,这是解码随机性;四是多轮对话中把用户最早给的前提记岔了,这是上下文混淆。
要理解最核心的机制,得看懂模型选词的那只“手”。LLM 本质是一个条件概率模型:给定用户输入 $x$ 和已经生成的词 $w_{<t}$,下一个词 $w_t$ 的分布由一个“指数打分归一化”的式子决定:
当知识充分时,正确词的概率像灯塔一样突出;当知识缺失时,概率摊得比桌面还平。质检科的 X 光机第一档“病灶透视”就是盯住这条概率分布:分布越平,这位 AI 医生越可能在不懂装懂,需要提前预警。
- 条件概率的含义$P(w_t \mid w_{<t}, x)$ 表示“在已知上文 $w_{<t}$ 和用户输入 $x$ 的条件下,下一个词是 $w_t$ 的概率”,这是续写骰子的完整表达式。
- 分子为指数打分$\exp(z_t)$ 把模型对候选词 $w_t$ 的原始打分 $z_t$ 变成正数并放大差距,得分领先的词在概率中占更大份额。
- 分母为全词表归一化$\sum_{v=1}^{V} \exp(z_v)$ 遍历词表中全部 $V$ 个词的指数打分并求和,保证所有候选词的概率加起来等于 1。
- 概率平坦引发幻觉当知识缺失时,各候选词的 $z_v$ 彼此接近,概率分布趋近均匀,模型只能“瞎选一个”,这正是杜撰病历的概率学根源。
幻觉识别方法:症状复现测试的三板斧
了解了病灶,第二档是“症状复现测试”。有经验的医生会让病人换个说法重新描述症状:如果每次描述都对不上,就高度怀疑他在编。幻觉识别用的正是这个思路。
识别幻觉有四种常用手法。第一种叫自一致性检测:把同一个问题重复采样 N 次,看答案是否稳定,真知识经得起反复问,幻觉则在每次采样中漂移。第二种看置信度:生成时平均 token 概率偏低,说明骰子摇得犹豫,需要人工复核。第三种叫语义熵探测:把 N 次采样做语义聚类,再算分布的熵,熵越高说明答案越散。第四种是关键词监控:对药名、金额、日期这类高危实体做词典和正则命中检查,命中即触发复核。
自一致性是最好上手的一招,直接算“主流答案占比”:
这条公式就是复诊记录上的“三次描述是否一致”栏。病人每次复述都一样,医生才敢落笔;模型每次采样都稳定,质检科才敢放行。反之,一次一个说法,X 光片上就要亮起黄灯。
- 分子 $N_{\text{mode}}$对 N 次采样答案做语义归簇后,样本数最多的那个簇(主流答案)有多少份。簇越大,说明多数采样“说到了同一个地方”。
- 分母 $N$同一问题重复采样的总次数。工程上通常取 3 到 10 次,次数越多越稳,但推理成本也越高。
- 比值 $C$ 的语义主流答案占比。$C \approx 1$ 表示“每次复述都一样”,$C$ 明显偏低则说明每次采样都在漂移,像是病人每次换一套说辞。
检测模型选择:给质检科配备合适的阅片机
X 光机分便携机、CT、MRI 好几个档位,价格、速度和精度各不同。选幻觉检测模型同样是“按病情配设备”,不能只挑贵的。
三类方案各有定位。判别式小模型把“这句话是否与上下文矛盾”当成二分类问题,跑得快、部署便宜,适合放在高并发线上做闸门;生成式裁判用最强的模型提问“这段回答有没有事实错误”,判得准但慢且贵,适合对少量高危样本兜底审核;专用检测模型则是在幻觉数据上微调过的模型,介于两者之间,需要提前准备标注数据。
无论选哪台设备,都该用一个分数横向比较——F1:
给医院采购设备,不能只看广告上的单点精度,要看综合体检报告 F1。选检测模型同理:核对准确率、延迟、单次调用成本,再对照自己业务里真实幻觉的长相,才能配出最合身的阅片机。
- 真正例 $TP$被模型判为幻觉、且事实上的确是幻觉的样本数,这是“抓得对”的部分,后面所有指标都建立在它之上。
- 精确率 $P$模型标为“幻觉”的结果里,真正幻觉的占比。P 低说明误报多,大量好回答会被送进人工复核,浪费人力。
- 召回率 $R$真实幻觉中被成功抓出的比例。R 低说明漏报多,幻觉会溜到用户面前造成实际风险。
- 调和平均 $F_1$$\frac{2PR}{P+R}$ 对 P 和 R 取调和平均,任何一项被拉低都会显著压低 F1,防止只追精度不顾召回。
事实核查比对:翻医书逐句对出处
阅片机只能看出“形状不对”,要确诊必须翻权威医书。事实核查就是给 AI 医生的每句诊断配一本“医书”——企业的知识库。
做法是四步走。第一步知识库构建:把可信文档切成事实条目,比如从药品说明书中抽出“用法用量”条目;第二步检索召回:用户提问时用向量检索从知识库中找回最相关的若干片段;第三步矛盾检测:把回答拆成原子陈述,与这些片段逐句比对,看有没有被支持或被反驳;第四步核验结果融合:把每句陈述的比对结论汇总,判断整段回答的可信程度。
逐句比对的核心是一把“相似度尺子”,通常用余弦相似度计算陈述与知识条目的最大支撑分:
这把尺子就像把诊断记录上的每个结论,拿到医书目录里找对应出处。找到了、翻得够近,才算“有据可循”;翻遍全书都对不上,X 光片上就会亮起红灯,这份回答必须退回重写。
- 陈述向量 $\mathbf{c}$回答中拆出的原子陈述经过嵌入模型转换成的向量,相当于把这句话“翻译”成语义空间里的一个坐标点。
- 文档向量 $\mathbf{d}$知识库中每条事实也被映射到同一个语义空间,等待与陈述比对。
- 余弦相似度分子是两向量的点积,分母是两向量模长的乘积,结果只与“方向是否一致”有关,与句子长短无关,适合比较语义。
- 取最大值 $S(c)$与检索到的所有片段逐一比较,取最相关的那条作为依据;再与阈值比较,得出“支持 / 不支持”的结论。
相关性评估:检查开药是否对症
病人问皮肤过敏,医生答了二十分钟心脏搭桥——每句话都引经据典,却一句都没用。相关性评估查的就是:你到底有没有回答我问的。相关性管“对症”,幻觉管“真实”,两者是相互独立的两个质量维度。
评估通常从三个维度打分:完整性看问题要求的要点是否都覆盖,无关性看有没有夹带题外废话,忠实度看有没有偏离知识库自己发挥。RAGAS 是业内常用的指标集,其中最核心的忠实度指标定义了“有多少陈述能被知识库兜住”:
实际落地时,还要安排人工评分定期校准自动打分的偏差,形成“机器粗评 + 人工精评”的自动评估流水线。相关性就像处方上的“诊断·用药”两栏:诊断栏写对、用药栏也对得上,这份病历才真正合格。X 光机不仅照出骨折(幻觉),还要核对病历是不是拿错了(不相关)。
- 分母 $|E_{\text{total}}|$把回答拆成原子陈述后的总数,代表这次评估的全部检查对象。
- 分子 $|E_{\text{supported}}|$这些陈述中能溯源到知识库、被事实核查支持的条数。
- 比值 $F$忠实度分数,衡量回答是否忠实于给定依据。$F=1$ 表示每条陈述都有出处,$F$ 越小越可疑。
- 与幻觉的关系$F$ 本质上是幻觉的逆向指标,可与此前的自一致性、相似度支撑分合成一个多维质量分,供线上告警使用。
样本收集管理:建一座会生长的病历档案库
最后一道工序是归档。医院质检科把可疑病历收进档案,请资深专家复核,再整理成规培教材反哺年轻医生。样本收集管理就是这个“病历档案库”机制,它让 X 光机越用越聪明。
收集渠道有三条:用户反馈(投诉、点踩、追问)、线上规则触发(低分回答自动打标)、主动探测(定期注入测试问题钓鱼执法)。收上来的“生样本”先要数据清洗:去重、去掉隐私信息、过滤纯噪声;再按标注规范处理:定义幻觉类型(事实错误、凭空捏造、张冠李戴),由多人标注并计算一致性——毕竟连人都说不清的错误,机器更学不会。
标注一致性用剔除运气后的 Kappa 系数衡量:
只有 Kappa 达标,样本才敢进入回流闭环——扩充评估集、微调模型或更新提示词。档案库越厚,X 光机识别病灶的能力越强,质量监控就进入“越用越准”的正循环:这正是质控科存在的最终意义。
- 观察一致率 $P_o$两位标注员对同一批样本给出相同标注的比例,是“表面上的共识”。
- 随机一致率 $P_e$即使两人闭着眼睛瞎标,也可能因为类别分布而碰巧一致的概率。
- 分母 $1 - P_e$在随机水平之上,理论上还能提升多大的共识空间。
- 比值 $\kappa$剔除运气后剩下的真实一致性。$\kappa > 0.8$ 才说明标注规范靠谱,可以进入回流闭环。
AI 应用场景
医疗问诊平台的幻觉拦截
阶段:在线监控与告警
解决的问题:夜间 AI 分诊要接待海量问诊,纯人工抽检只能覆盖极小比例,一次杜撰的用药建议就可能酿成事故。AI 先把回答拆成原子陈述,再逐句与权威用药知识库做余弦比对,支持率低于阈值的回答自动转人工复核,实现“机器先筛、人来兜底”。
具体案例:某互联网医院的分诊助手接入“拆句—比对—告警”流水线后,夜间幻觉拦截率提升约 90%,药师需要复核的样本从全部对话缩小到只有报警子集,人力成本大幅下降。
金融客服的相关性评估
阶段:质量评估与评测
解决的问题:传统客服质检靠人工听录音抽检,答非所问的问题要等用户投诉才暴露。AI 用 RAGAS 相关性指标给每通对话的每个回答实时打分,低分对话自动进入复听队列,把被动投诉变成主动发现。
具体案例:某银行智能客服上线自动相关性评分后,答非所问类投诉下降约 60%,质检员把精力集中在低分样本上,复核效率提升三倍以上。
法律文书的坏样本回流
阶段:数据回流与模型迭代
解决的问题:法律问答要求句句有出处,幻觉不可容忍;让律师逐条阅读线上日志又不现实。通过线上拦截 + 标注规范 + Kappa 质控,把坏样本沉淀成标准数据集,再回流微调模型或更新检索知识库。
具体案例:某法律科技公司把每月拦截的坏样本按“事实错误/张冠李戴”分类标注,回流微调后模型幻觉率在三个月内下降约 40%,客户合同审查的返工量显著减少。
Python 演示
import re def bigrams(text): """把文本切成连续二字片段, 用于粗糙的语义重叠度计算""" text = re.sub(r'[^\u4e00-\u9fff0-9]', '', text) return {text[i:i + 2] for i in range(len(text) - 1)} def split_claims(text): """按句末标点把回答拆成原子陈述""" parts = re.split(r'[。;\n]', text) return [p.strip() for p in parts if len(p.strip()) > 4] def check_support(claim, kb_gram_sets): """计算一句陈述在知识库中的最大重叠度""" claim_grams = bigrams(claim) if not claim_grams: return 0.0 best = 0.0 for doc_grams in kb_gram_sets: score = len(claim_grams & doc_grams) / len(claim_grams) best = max(best, score) return best def monitor_answer(question, answer, knowledge_base, threshold=0.6): """对回答做逐句事实核查, 返回忠实度评分与告警标志""" kb_gram_sets = [bigrams(doc) for doc in knowledge_base] claims = split_claims(answer) checked = [] supported = 0 for claim in claims: score = check_support(claim, kb_gram_sets) ok = score >= threshold supported += int(ok) checked.append((claim, round(score, 2), ok)) faithfulness = supported / len(claims) if claims else 1.0 alert = faithfulness < 0.8 return checked, round(faithfulness, 2), alert if __name__ == "__main__": knowledge_base = [ "中国首条万吨级碳纤维生产线于2021年在青海西宁正式投产", "大语言模型通过海量文本训练学习语言规律, 不具备事实验证能力", "磷酸铁锂是成本较低的主流锂电池正极材料", ] question = "碳纤维生产线是在哪里、哪一年投产的?" answer = "中国首条万吨级碳纤维生产线于2021年在青海西宁正式投产。该项目总投资超过50亿元,全部采用国产设备。" checked, faithfulness, alert = monitor_answer(question, answer, knowledge_base) for claim, score, ok in checked: mark = "支持" if ok else "疑似幻觉" print("[%s 重叠度%.2f] %s" % (mark, score, claim)) print("忠实度: %.2f" % faithfulness) if alert: print("警告: 存在幻觉风险, 请人工复核!")
def split_claims(text):把回答按句号拆成原子陈述,这是“拆句”的起点,相当于把整段诊断记录切成一条条可核验的结论。claim_grams = bigrams(claim)把一句陈述转成连续二字片段的集合,用粗糙的 n-gram 表示它的“话料特征”。for doc_grams in kb_gram_sets:让这条陈述与知识库中每个条目逐一比对,模拟“翻医书找对应出处”。score = len(claim_grams & doc_grams) / len(claim_grams)集合交集占比即重叠度,重叠越高,说明知识库越为这句陈述背书。supported += int(ok)统计被支持的陈述条数,作为忠实度分数的分子。faithfulness = supported / len(claims) if claims else 1.0忠实度 = 支持条数 ÷ 总条数,对应 RAGAS 的核心思想。alert = faithfulness < 0.8忠实度低于 0.8 触发告警,把可疑回答送进人工复核队列。
常见误区
误区模型生成这段回答时每个词的概率都很高,说明它很有把握,这种输出应该不会是幻觉吧?
正解概率只反映“续写顺不顺”,不反映“事实真不真”。长尾知识上模型可能毫无根据地自信,就像一位医生语气笃定地报出一个根本不存在的药名。必须靠外部知识库核验,置信度只能作为参考信号,不能作为真相证明。
为何常见:人类习惯把“语气笃定”当成“知道答案”,而 LLM 被训练得极其擅长模仿笃定的语气,概率高和事实对被混为一谈。
误区回答读起来和问题挺贴切,还引用了不少细节,应该可以直接上线了吧?
正解相关性管“答没答到点上”,幻觉管“说的是不是真的”,两者是正交的。一个流畅又贴题但内容纯属编造的回答,既相关又幻觉,恰恰是最危险的——因为用户更容易信以为真。所以质检必须两把尺子一起用,缺一不可。
为何常见:线下体验 demo 时,回答接得顺、信息多,人的注意力会被流畅性带走,事实性细节反而被忽略。
误区我自己算不了语义,只能接最强的生成式大模型来当裁判,贵一点也没办法。
正解判别式小模型、规则加知识库比对、自一致性检测等轻量方案在很多场景已经够用,它们快、便宜、可解释。大模型裁判应该用于兜底审核少量高危样本,而不是每一句话都请“专家会诊”,否则成本会随流量爆炸。
为何常见:大模型能说会道,天然给人“更可靠”的错觉;而小模型的效果需要自己调优验证,误以为“效果不够就是模型不够大”。
误区把每周的对话记录导出来,安排几个人一条条看,有问题的记下来就行。
正解高效做法是线上规则加轻量模型实时打标,把可疑样本自动送进复核队列,人工只处理报警子集,再按标注规范清洗、算 Kappa、回流微调。人工全量抽检既漏检又滞后,等你看完一周日志,新一波幻觉早已发出去了。
为何常见:早期样本量小,人工硬扛还来得及;流量一上来,人工抽检既跟不上速度,也难保证标注标准一致。
面试题
Q1. LLM 产生幻觉最根本的原因是?
- A.训练数据中存在错误与噪声信息
- B.上下文窗口大小限制了记忆能力
- C.模型按概率生成而非查证事实← 正确答案
- D.提示词写得太短导致信息不足
答案:C。模型本质是“续写骰子”,每生成一个词都在按概率采样,并不连接外部事实库查证,这是幻觉的根本机制。数据噪声和提示词不足会加剧幻觉,但不是根源;上下文窗口与幻觉机制无关。
Q2. 自一致性检测的核心假设是?
- A.答案越长就越可靠
- B.模型参数越大就越可靠
- C.多次采样答案稳定则更可信← 正确答案
- D.置信度越高则答案越正确
答案:C。自一致性假设“真知识经得起反复采样”。就像病人复述多次都一致,医生才敢信;多次采样答案聚成稳定簇,说明不是随机凑出来的。A、B、D 都是常见但不可靠的直觉。
Q3. 实现事实核查最可靠的方式是?
- A.让模型自己判断对错
- B.用更大模型重新生成一遍
- C.统计答案中出现的关键词数量
- D.与外部知识库逐句比对核验← 正确答案
答案:D。事实核查最硬的方式是拿外部知识库逐句比对,相当于翻医书对出处。模型自评容易“护短”,换个大模型只是重新猜一次,关键词统计不看语义,三者都不可靠。
Q4. 相关性评估通常包含哪些评估维度?
- A.完整性:是否覆盖问题所有要求← 正确答案
- B.流畅度:句子是否符合语法规范
- C.无关性:是否夹带题外废话← 正确答案
- D.忠实度:是否偏离知识库依据← 正确答案
答案:ACD。相关性评估的三根支柱是完整性(该答的都答了)、无关性(没跑题)和忠实度(没偏离依据)。流畅度属于语言质量维度,与“是否对症”无关,所以不选。
Q5. RAGAS 的忠实度(faithfulness)指标如何计算?
- A.回答总字数除以问题总字数
- B.被知识库支持的陈述数除以总陈述数← 正确答案
- C.检索文档数量与生成句数之比
- D.答案与问题向量的余弦相似度
答案:B。忠实度 = 被支持的陈述数 ÷ 全部陈述数,分母问“说了几句”,分子问“几句有据可依”,这是对“是否跑题编造”的直接度量。A、C、D 衡量的分别是篇幅、检索比例和表层相似,都不是忠实度定义。
Q6. F1 分数中的召回率衡量的是什么?
- A.检出的结果中真正幻觉的占比
- B.真实幻觉中被成功检出的比例← 正确答案
- C.模型每秒生成词语数量的高低
- D.知识库覆盖业务范围的大小
答案:B。召回率回答“真实出事的(幻觉)里抓到了多少”,精确率才是“抓出的里面有多少真出事”。好比渔网:召回率看捞上多少鱼,精确率看网里鱼的占比。
Q7. 选择幻觉检测模型时应权衡哪些因素?
- A.检测准确率与召回率的平衡← 正确答案
- B.推理延迟与单次调用成本← 正确答案
- C.模型参数量越大就一定越好
- D.与业务场景知识分布的契合度← 正确答案
答案:ABD。检测模型像 X 光机档位,要同时看准头(精确率)、抓漏(召回率)、速度(延迟)、价钱(成本),还要贴合业务知识分布。参数量大不等于一定好,小模型在特定场景可能更划算。
Q8. 下列哪项属于线上问题样本的主动收集方式?
- A.下班后人工通读全部线上日志
- B.每月随机抽取一百条记录复核
- C.只收集用户主动发起的投诉
- D.监控规则触发时实时打标报警← 正确答案
答案:D。线上主动收集靠监控规则实时打标报警,像质检科给高危病历自动贴红条。人工通读、随机抽样、等投诉都太被动或太慢,无法满足实时性要求。
Q9. 知识库比对中,计算陈述与知识条目相似度通常使用?
- A.词向量或句子嵌入的余弦相似度← 正确答案
- B.对字符串反转后再比较长度
- C.数据库表主键之间的等值连接
- D.哈希取模后数值差的大小
答案:A。句子相似度通常先把陈述和知识条目各自转成嵌入向量,再算余弦相似度,相当于把语义翻译成坐标后量距离。反转比较、主键连接、哈希求差都是不相干的字符串技巧。
Q10. 以下哪些措施能系统性降低在线幻觉率?
- A.检索增强生成提供事实依据← 正确答案
- B.对疑似幻觉的回答实时拦截← 正确答案
- C.关闭所有模型输出的日志记录
- D.用质检样本回流微调模型← 正确答案
答案:ABD。系统性降幻觉要“防线前置 + 事后兜底 + 持续反哺”:RAG 让回答有据可依,实时拦截堵住漏网之鱼,坏样本回流让模型越用越稳。关日志只会让质量失控,C 必然排除。