幻觉、错误与能力边界

开篇问题

大模型最迷人的地方,是它能把不完整的输入补成流畅的答案。大模型最危险的地方,也正是它能把不完整的输入补成流畅的答案。

当模型不知道某件事时,它不会天然停机;当上下文缺少证据时,它仍然可以生成看起来合理的句子;当问题超出能力边界时,它也可能给出一种自信、连贯、甚至很有条理的错误。

如果说前面章节帮助你理解模型如何从 token 到 Transformer 生成文本,那么终章要完成最后一次校准:大模型不是神谕,不是数据库,不是形式化证明器,也不是稳定执行所有任务的通用程序。它是一种强大的概率生成系统。理解它的边界,才是真正会用它的开始。

本章你会理解什么

  • 幻觉为什么不是简单的“模型不聪明”。
  • 错误、幻觉、能力不足和边界外请求有什么区别。
  • 生成式模型为什么会在缺证据时继续补全。
  • 为什么模型会把语气、格式和事实正确性混在一起。
  • 作为开发者,如何建立对大模型能力的理性认知。

核心概念

幻觉指模型输出了看似合理、语气自信,但缺乏事实依据、上下文依据或推理依据的内容。它的关键不是“听起来荒唐”,而是“输出和依据断开”。

错误是更宽泛的概念。模型可能因为知识过时、上下文误读、推理失败、格式约束冲突、计算能力不足或任务表达不清而出错。不是所有错误都叫幻觉。

能力边界指模型在某类任务上无法稳定、可靠完成的范围。边界不是一条固定直线,而会受模型规模、训练数据、上下文质量、提示方式、输出长度和任务难度影响。

校准指模型表达的不确定性和真实可靠程度之间的匹配。一个校准好的系统应该在证据不足时表现出不确定,而不是用确定语气包装猜测。

生成偏置指模型倾向于继续生成符合上下文风格和任务意图的内容。用户问问题时,模型会被训练成“回答问题”,这会让它在缺少事实时仍然尝试补全。

机制拆解

模型生成的是下一个 token,不是事实证明

大语言模型的基本动作,是根据已有上下文预测下一个 token 的概率分布。这个机制可以产生非常强的语言能力:解释概念、写代码、总结文章、模拟风格、转换格式。

但它并不等于事实证明。

当你问:

某个不存在的 npm 包 ai-fast-cache 的最新版本有哪些 breaking changes?

模型可能从大量真实技术文档中学过“版本变更说明”的写法,于是生成一段很像 changelog 的回答。它能把标题、条目、迁移建议写得像真的,是因为这些语言模式在训练中很常见;但这不代表这个包存在,也不代表内容有来源。

幻觉经常不是语言能力太弱,而是语言能力太强:模型很擅长把一个问题补成完整答案,即使缺少支撑答案的事实。

“看起来合理”是训练目标的副产品

训练模型时,核心信号通常来自预测文本、遵循指令、偏好排序等过程。模型会学习什么样的回答更像人类想要的回答:完整、礼貌、有结构、符合问题形式。

这带来一个副作用:在很多场景里,模型更容易学会“给出一个像答案的文本”,而不是“在没有依据时停止”。

例如用户问:

请列出 2029 年 React 官方发布的三个新 Hook。

如果当前时间还不到 2029 年,或者上下文没有提供相关资料,严格做法应该是不回答具体事实。但从语言模式上看,“列出三个 Hook”是一个很明确的生成任务。模型可能顺着格式要求补出三个名字。

这就是生成式系统的边界:流畅性不是真实性,结构化不是可靠性,自信语气不是证据。

幻觉常发生在证据缺口处

你可以把一次回答看成从输入到输出的一条链:

问题 -> 可用信息 -> 模型推断 -> 最终表述

当“可用信息”不足时,模型仍然可能让链条看起来完整。幻觉往往出现在这些证据缺口:

  • 问题要求具体事实,但上下文没有事实来源。
  • 问题涉及最新变化,但模型参数可能过时。
  • 问题涉及私有数据,但模型没有访问权限。
  • 问题包含错误前提,但模型没有指出。
  • 问题要求精确计算,但模型只做近似语言推理。
  • 问题让模型解释不存在的概念、文件、API 或引用。

模型不会自动知道“我此刻缺证据”。它可以学会表达不确定,也可以被上下文约束为先检查依据,但从基础生成机制看,继续补全始终是一条很自然的路径。

错误不只有幻觉一种

把所有问题都叫“幻觉”会让我们失去判断力。开发者需要区分几类不同失败。

第一类是事实幻觉。模型编造事实、引用、版本、人物、论文、配置项,输出缺少外部或上下文依据。

第二类是上下文误读。证据就在上下文里,但模型没有正确使用。例如日志显示错误发生在数据库连接阶段,模型却判断为前端渲染问题。

第三类是推理错误。模型拿到了事实,但组合、比较、演绎或计算过程出错。例如把“最多 3 次重试”和“已经失败 3 次”解释成还可以再试 3 次。

第四类是指令冲突。系统指令、用户要求、历史约束和格式要求相互矛盾,模型在冲突中选择了某一侧,导致输出不符合预期。

第五类是能力不足。任务本身需要精确搜索、长期规划、形式化验证、大规模计算或真实世界操作,单靠语言模型无法稳定完成。

这些错误的表象都可能是“回答错了”,但原因不同。理解原因,才能正确判断模型边界。

为什么模型会自信地错

很多人困惑于:模型为什么不知道自己不知道?

原因之一是,模型输出的是 token 概率,不是一个独立的真值检测器。某个句子在语言上高度可预测,不代表它在事实上为真。

原因之二是,训练数据里有大量确定语气的文本。技术文档、百科、教程、论坛回答经常用肯定句表达。模型学习到这种表达方式后,即使内部不稳定,也可能输出稳定语气。

原因之三是,用户问题本身会施加任务压力。用户问“请给出答案”,模型就倾向于给答案;用户要求“不要解释,直接列出”,模型就更少表达不确定。

所以“自信”不是可靠性的同义词。对大模型来说,自信常常只是生成风格。

能力边界不是二元开关

传统程序的能力边界通常比较明确:这个函数支持某个参数,不支持就报错。大模型的边界更像一片渐变区。

同一个模型可能:

  • 能解释一个算法思想,但不能稳定证明它的复杂定理。
  • 能写出常见 API 示例,但会编造冷门参数。
  • 能总结一页文档,但在百页材料中漏掉关键例外。
  • 能做简单算术,但在多步精确计算中出错。
  • 能给出合理代码草稿,但无法保证边界条件完整。

边界还会随着上下文变化。给出清晰输入、限定范围、提供证据时,模型表现会明显提升;输入含糊、事实缺失、要求过多时,错误概率会上升。

因此,理性认知不是把模型分成“能”或“不能”,而是问:它在什么信息条件下、以多高稳定性、完成哪一类任务?

概率生成与确定性软件的接口错位

开发者熟悉的很多系统是确定性的。给定相同输入,函数应返回相同输出;数据库应保存明确记录;编译器应给出可复现错误。

大模型更像一个带随机性的生成组件。即使温度较低,它的输出也可能受采样策略、上下文细节、模型版本和服务端实现影响。更重要的是,它输出的是自然语言,而自然语言可以含糊、过度概括、遗漏条件。

这会产生接口错位:

软件系统期待:确定值、明确错误、可验证状态
语言模型返回:候选文本、隐含假设、概率性判断

如果不承认这种错位,就会把模型回答当成数据库记录、把建议当成执行结果、把总结当成完整证据、把草稿当成最终事实。

模型越强,这种错位越隐蔽,因为错误会包在更漂亮的语言里。

开发者常见误解

误解一:幻觉会随着模型变大自然消失。

更强模型通常能减少许多错误,但只要生成机制仍然需要在不完整信息下补全,幻觉风险就不会归零。能力提升改变概率,不取消边界。

误解二:只要答案有引用格式,就一定可靠。

引用格式只是文本结构。模型可以生成看起来像论文、链接或文档编号的内容。真正重要的是引用是否存在,是否支持结论,以及结论有没有超出引用。

误解三:模型说“不确定”就代表它校准良好。

不确定表达本身也可能是风格。模型可能在正确时过度犹豫,也可能在错误时非常确定。校准看的是表达和实际可靠性是否匹配。

误解四:把温度调低就能消除错误。

低温度可以减少输出随机性,让回答更稳定,但稳定不等于正确。如果最高概率的补全本身就是错误,低温度只会更稳定地产生同一个错误。

误解五:模型能解释一件事,就说明它真正掌握了这件事。

解释能力和执行稳定性不同。模型可能能讲清二分查找,却在某个边界条件代码里写错;能解释权限原则,却在具体场景中漏掉例外。

小实验 / 思考实验

实验一:不存在对象的流畅解释

向模型提问:

请解释 JavaScript 中 Promise.freezeAll() 的用法,并给出示例。

观察模型是否会指出这个 API 不存在,还是顺着常见 API 命名和文档风格生成解释。

这个实验展示了:模型可以把语言模式补齐成很像真的技术说明。开发者要警惕“像文档”不等于“是文档”。

实验二:错误前提会怎样传播

提问:

既然 Transformer 的注意力机制会逐字保存数据库记录,请解释它如何按主键查询用户信息。

这个问题把错误前提塞进了输入。观察模型是否纠正前提,还是接受前提继续回答。

很多幻觉不是模型主动发明,而是用户问题里的错误假设被模型顺从地延续。

实验三:同一问题的边界变化

先问:

请判断这段 200 行代码是否有内存泄漏。

再问:

请指出这段代码中事件监听器是否在组件卸载时移除,只关注 useEffect 的清理函数。

比较两次任务。前者宽泛、证据需求大、判断标准复杂;后者范围小、目标明确、上下文可验证。模型能力边界会因为任务定义变窄而明显改善。

本章小结

幻觉不是大模型偶尔“坏掉”的异常状态,而是生成式系统在证据不足、上下文冲突、任务超界或校准不足时自然可能出现的结果。模型的语言能力越强,它越能把缺失部分补得自然,这既是价值来源,也是风险来源。

错误也不只有幻觉。事实编造、上下文误读、推理失败、指令冲突、能力不足,都需要分别理解。把所有失败混成一个词,会让我们既高估模型,也低估模型。

作为这个入门系列的终章,最重要的收束是:大模型不是确定性软件的替代品,而是一种新的计算界面。它把语言、知识模式和生成能力压缩进一个可以交互的系统里,但它仍然受到 token、上下文、参数、注意力、采样和训练分布的限制。

理性使用大模型,不是害怕它出错,也不是假装它不会出错,而是把它放在正确的位置:让它处理语言、模式、草稿、解释、转换和不完全结构化的问题;在需要事实、权限、状态、精确计算和真实操作时,承认边界,补上依据。

当你能同时看到它的能力和限制,就不会再把幻觉当成神秘现象。你会把它看成一个信号:这里缺少证据,任务超出了当前上下文,或者生成系统正在用流畅语言掩盖不确定性。看懂这个信号,才算真正入门。

自测题

  1. 为什么说幻觉的关键是“输出和依据断开”,而不只是“答案荒唐”?
  2. 事实幻觉、上下文误读和推理错误有什么区别?
  3. 为什么低温度不能保证模型事实正确?
  4. 模型为什么可能用非常自信的语气表达错误内容?
  5. 读完整个系列后,你会如何用一句话描述大模型的能力边界?