← 全部极客知识库

大模型通识 / 大模型理论基础

17. 幻觉与不可靠性:为什么模型会把错误说得很像真的

原文备份 · 第 18 / 20 篇 · 查看极客时间原知识库 ↗

本篇目录 · 8 节

来源:大模型理论基础

复习助手给你一段很像样的回复:

第二章复习安排在 2026 年 10 月 4 日,北京时间 19:00—19:40。请带好教材。我已经把计划保存为 P73。

日期、时间、提醒和操作结果一应俱全。可是,笔记从没说要带教材,保存工具也明确返回了失败。正确的信息和无依据的内容混在一起,反而让整段话更容易被相信。

前面的课程解释了模型怎样生成、检索、推理和调用工具。这一篇把这些环节连起来,回答一个开发者绕不开的问题:怎样判断一段回答到底可靠在哪里,又是在哪一步出了问题?

本文的笔记、回复、工具结果和统计数字均为教学构造,没有调用模型做实际测试。开头是上一篇计划保存案例的另一个失败分支,不是把上一篇的成功记录改判为失败。

一、“幻觉”这个词,不能代替具体诊断

在大模型讨论中,幻觉通常指生成了没有可靠依据、与事实或给定材料不符的内容。但不同任务使用的判断标准并不完全相同。

先区分两件事:

  • 事实性:这句话是否符合它所描述的事实。
  • 忠实性:这句话是否忠于本任务提供的资料或证据。

假设旧笔记说周五复习,现实中已经改为周六。模型照抄周五,可以忠于旧笔记,却不符合当前事实。反过来,模型碰巧猜中了周六,也不代表它完成了“依据这份材料回答”的要求。

摘要研究很早就讨论过这两个维度:生成内容可能偏离输入,而判断是否得到输入支持,与判断是否符合外部世界,需要分别处理。这里借用这种区分,不把某篇摘要研究的实验结果推广为所有模型的错误率。Maynez 等:On Faithfulness and Factuality in Abstractive Summarization

还要区分“没有依据”和“已经证明错误”。材料没提要带教材,只能说这个要求得不到现有材料支持;不能据此断定现实中一定不需要教材。如果工具明确说未写入,而回答说保存成功,则已经与执行证据冲突。

JSON 少了一个括号、加法算错、误读用户要求、调用服务超时,也都影响可靠性。把它们统称为幻觉,往往会错过真正该修的地方。

二、为什么模型能写得很顺,却没有说对

第 05 篇讲过,预训练让模型从大量文本中学习预测。它由此获得知识、语言规律和解决问题的能力;这些能力是真实可用的。但预测训练中的文本,与逐条核验现实世界,不是同一个过程。

文本里既有事实,也有流传很广的误解;既有已经更新的信息,也有过时版本。模型学到常见说法,并不意味着它已经判断了说法的真实性。TruthfulQA 就专门设计过容易诱发人类常见错误观念的问题,研究模型模仿这些说法的现象。它说明了一种失败机制,不能用其中的历史成绩替代今天的产品评测。TruthfulQA 原论文

后训练可以鼓励模型遵循指令、承认证据不足;检索可以补充资料;推理可以改善条件组合。可是,这些改进都不能让缺失的信息自动出现。

例如,输入只有“周六晚上复习第二章”。真实安排可能是本周六 19:00,也可能是下周六 20:00。这两种现实都与输入相容。没有其他上下文,模型无法仅凭这句话确定年月日和具体时刻。多写几段分析,也不会补上用户没有提供的条件。

开发时可以问一句很有用的话:即使换一个认真负责的人,只看程序实际送出的这些信息,他能确定答案吗?

如果也不能,优先补资料或澄清;如果能够,再检查模型是否遗漏条件、读错证据或算错结果。这个区分能避免一遇到问题就反复修改“请认真思考”的提示词。

三、沿着信息经过的路径定位错误

下面的分类用于排查,不要求给每次失败贴唯一标签;一次问题可能同时涉及多个环节。

现象 可能出错的位置 首先核对什么
回答的是去年的产品规则 参数知识或来源过时 信息日期、当前官方资料
知识库有新安排,回答却沿用旧安排 检索、版本过滤、上下文组装 最终送给模型的原文,而不只是数据库内容
新旧两份安排都在输入里,模型选了旧的 上下文利用、版本判断 生效时间和“此前作废”等条件
19:00 加 40 分钟算成 19:50 计算或推理 可独立复算的步骤
把“暂不复习”看成“复习” 图片识别或转写 原图、音频及否定词
用户说“下次”,模型自行补出日期 歧义处理 是否存在明确的参照时间
保存失败却回复成功 工具结果解释、状态管理 执行回执和实际记录
内容对,但 JSON 无法解析 输出格式 解析器、Schema 和结构约束

信息进入上下文,也不等于一定被正确利用。Lost in the Middle 在当时测试的模型与任务上发现,相关信息的位置会影响表现。对应用的启发是检查实际输入和关键信息的位置;它不是“所有模型必然忽略中间内容”的定律。Lost in the Middle

修复措施要对应原因。资料过时,先更新资料;计算易错,让程序复算;返回格式不稳定,使用结构约束;操作结果被误报,改进状态传递和完成条件。换成更强的模型可能有帮助,但不能取代这些检查。

四、做一次逐条核对:把整段回答拆开

现在给开头的回答配上全部证据。本节只使用以下三项,E1—E3 是教学编号,不是外部文献引用。

E1:笔记 N17 的当前内容

第二章复习定于 2026 年 10 月 4 日,北京时间 19:00 开始。此前的安排作废。

E2:用户的明确要求

按这个开始时间,安排 40 分钟复习。

E3:保存工具本次返回

{
  "ok": false,
  "committed": false,
  "error": "permission_denied"
}

在这个构造接口的约定里,E3 表示权限检查拒绝了本次写入,并且确认没有提交。它不是网络超时,也不意味着所有产品遇到相同字段都采用这套语义。

把回答拆成可分别检查的陈述:

陈述 检查依据 结论
复习日期为 2026 年 10 月 4 日 E1 明确提供日期 有依据
北京时间 19:00 开始 E1 明确提供时区和时间 有依据
19:40 结束 E1 的 19:00,加 E2 的 40 分钟 可计算得到
必须带教材 E1、E2 均未提及 现有证据不支持
已保存为 P73 E3 明确确认未写入 与证据冲突;P73 也没有来源

这里最后一行把“保存成功并有该编号”作为一项操作结果检查。实际评估时可以拆得更细,但同一批比较必须采用一致规则。

这体现了原子事实核对的思路:把长回答拆成较小、能分别验证的陈述。FActScore 用类似思路评估长文本中得到可靠来源支持的原子事实比例。我们这里只做人工教学核对,不是在复现它的完整评测方法。FActScore 原论文

按表里的五项计数,三项有支持,比例为 3÷5=60%。这个数字不能表达全部后果:一次错误的“已保存”,可能让用户完全错过复习。应用还需要把这类关键错误单独标记,而不是让其他正确句子把它平均掉。

更合适的回答是:

根据当前笔记,第二章复习从 2026 年 10 月 4 日北京时间 19:00 开始;按你要求的 40 分钟计算,应在 19:40 结束。现有材料没有说明需要携带什么。保存工具因权限不足拒绝了写入,本次计划尚未保存。

它保留了能回答的部分,也清楚交代了未知和失败。没有必要因为保存失败,就把已经确定的日期和时长一并隐藏。

五、有引用,仍要检查引用到底支持了什么

引用能够帮助读者检查回答,但链接存在,只完成了第一步。

假设“必须带教材”后面也标了 E1。E1 的确存在,也确实讨论第二章复习,却没有提教材。这个引用与话题相关,仍然不能支持对应结论。

读一条带引用的关键陈述,可以依次检查:来源是否真的存在;引用的段落是否包含所需内容;内容是否支持这一具体陈述;它的时间、版本和适用对象是否吻合。若来源本身可能错误,还要继续核实来源的可信度。

ALCE 将生成文本的正确性和引用质量纳入不同的评价维度,正是因为“写出了引用”不能直接代替“引用提供了充分支持”。Enabling Large Language Models to Generate Text with Citations

对于自己的项目,可以沿着这条路径查证:

flowchart LR
    A[原始笔记或媒体] --> B[实际提取和送入的证据]
    B --> C[回答中的具体陈述]
    C --> D[原文核对与独立计算]
    D --> E[向用户报告有依据的结果]
    T[工具执行回执或状态查询] --> D

比如图片原文有一个“不”,提取文本把它漏掉了。此时回答即使忠于提取文本,仍然偏离原图。只让模型再次阅读错误的提取结果,未必能发现这个问题。

同样,搜索没有找到携带要求,只能说明“本次检索没有找到”。除非检索范围、资料完整性和问题规则足以支持,否则不要跳到“没有携带要求”。检索未命中与事实不存在之间,还有一段需要证明的距离。

六、自信、低温度和反复检查,各能说明什么

“我很确定”首先是一段生成文本。某个 Token 的生成概率很高,表示在给定上下文下它容易被选中;这不是整段答案符合事实的概率。

即使系统专门输出“正确概率为 90%”,也需要评估它的概率是否经过校准:在大量类似、被赋予相近置信度的预测里,实际正确比例是否与声称的概率相符。校准研究讨论的是这种对应关系。On Calibration of Modern Neural Networks

假设十个回答都自报 90%,实际只有六个正确。这个小组观察到的正确比例是 60%,没有体现出声称的 90%。但十个样本也不足以让你建立“今后把 90% 一律改成 60%”的普遍规则。要校准,必须定义任务、评分方式和有代表性的验证数据。

降低采样温度主要改变生成时的选择方式。它可能减少输出变化,却不能给模型补充缺失资料。错误若来自最偏好的候选,反复选这个候选只会让错误更稳定;实际服务也未必保证完全复现。

让模型“再检查一下”有时有用,尤其是原来遗漏了一个已经提供的条件。但如果检查仍依赖相同的误解和缺失资料,它也可能再次认可错误。关于无外部反馈的推理自纠正,研究曾在所测试的任务上发现改进有限甚至退步;这不是关于所有后续模型的永久结论。Large Language Models Cannot Self-Correct Reasoning Yet

SelfCheckGPT 则利用多次生成之间的不一致来寻找潜在问题。不一致是值得检查的信号;一致也可能来自共同的错误知识,不能直接当作正确证明。SelfCheckGPT 原论文

因此,遇到重要错误,下一步应尽量增加可独立检查的依据:打开原文、重新读取图片、运行计算、执行测试或查询保存状态。多一个模型的赞同,也需要看它是否获得了新的证据。

七、承认不知道,还要避免什么都不回答

对于复习助手,证据不足时可以采取不同动作:

  • 年月日缺失但用户要写日历:提出具体澄清问题。
  • 日期已确定,携带资料不明:回答日期,标明资料未知。
  • 新旧安排冲突且无生效信息:呈现冲突,请用户确认。
  • 保存结果超时:报告状态尚未确认,查询状态后再决定是否重试。

最后一项与 E3 不同:超时可能发生在服务已经写入、回执尚未送达之后。不能把“我没收到成功消息”自动改写成“已经失败”,更不能未经核对就重复创建。

允许系统不作答,会影响两个指标。回答覆盖率是有多少问题得到了回答;已回答部分的正确率是回答中有多少正确。选择性分类研究讨论过通过拒绝部分预测来权衡覆盖与错误风险。这里借用它的评价视角,不把论文的特定保证直接套给大模型应用。Selective Classification for Deep Neural Networks

看一个构造的 12 题比较,暂且每题只算完整回答或不回答:

策略 回答数 答对数 答错数 不回答数 覆盖率 已回答部分正确率
A 10 8 2 2 83.3% 80%
B 6 6 0 6 50% 100%

B 在已回答的题目上更稳,但完整解决的问题只有 6 个;A 解决了 8 个,也产生了 2 个错误。若只展示“正确率 100%”,就隐藏了覆盖下降。若只鼓励多回答,又可能增加没有依据的猜测。

项目该如何选,取决于答错的后果、澄清是否方便,以及被放弃的问题中有多少其实可以解决。这个小样本中没有观察到错误,也不代表以后不会出错。

对个人项目,一个合理的起点是:把“证据充分时答对”“证据不足时准确说明缺口”“操作失败时如实报告”都列入成功标准。可靠性包括知道何时需要补充条件,而不是总能给出一个完整句号。

八、检查一下你是否能定位问题

1.旧笔记写周五,现实已改周六。模型照旧笔记回答周五。能说它既忠于材料又不符合当前事实吗?

可以。这说明来源更新和回答忠实度是两个检查;不能因为回答照着资料写,就跳过资料是否有效。

2.把“带教材”的引用从 E1 改为 E2,能解决问题吗?

不能。E2 只提供 40 分钟时长,换一个真实存在但不支持结论的编号,没有增加证据。

3.工具请求超时,助手说“保存失败,所以我立即再建一条”。哪个判断需要修正?

超时通常只说明未及时获得结果,不能仅据此判定未写入。应先利用状态查询或服务支持的幂等机制处理,避免重复创建。

4.同一道题连续十次得到相同答案,且采样温度很低,能认为答案已验证吗?

不能。这反映了该条件下的输出一致性。事实还需要来源或其他适合任务的独立检查。

5.策略 B 的已回答正确率为 100%,它在全部 12 题中答对了多少比例?

6÷12=50%。A 在全部题目中答对 8÷12≈66.7%。这些比例与“已回答部分正确率”的分母不同,都不能单独代替完整评价。

6.助手没找到携带资料,回复“不用带任何资料”。如何改得更准确?

改为“现有资料没有说明需要携带什么”,必要时补充检索范围或询问用户。这保留了未知,没有把未找到变成否定事实。

下一篇将用这些判断标准,结合前面讲过的上下文、检索、多模态、模型大小和推理成本,为个人项目选择模型与技术路线。选择的依据,将是具体任务上可观察的效果和代价。


上一篇:结构化输出、工具调用与 Agent · 返回本部分大纲

资料观察基准:2026 年 10 月 3 日。历史论文用于解释机制和评价方法,文中的构造结果不代表任何现售模型的表现。