《AI不是魔法》

写给软件工程师的AI工程课

第一堂:AI为什么会产生幻觉?

这一篇适合谁:

如果你用过ChatGPT(或其他大语言模型)、写过代码、被AI骗过——那么这一篇值得看完。

前几天,一个同事兴奋地跟我说:

“ChatGPT 发现了 Python 3.14 的新特性!”

他把代码发给我。

说是新增了一个JSON高速解析接口,性能比现有的快三倍。

我第一反应不是写代码。而是打开了 Python 官方文档。

没有。

我又问了一遍 AI。它依旧十分肯定:

是的,这是 Python 3.14 的新特性,专门针对大 JSON 文件优化。

甚至还给我举了三段示例代码,看起来没有任何问题。

唯一的问题就是——它不存在。

这,就是 AI 最著名的问题——幻觉(Hallucination)

AI 不是查数据库,AI 是在预测下一个最合理的 Token。

这句话,是理解整篇文章的钥匙。

一、幻觉不是 bug,是特性

很多人第一次遇到 AI 胡说八道时,第一反应是:模型坏了?数据脏了?训练出问题了?

都不是。

幻觉不是 bug,是 LLM 的工作原理决定的。

要理解这一点,先要搞清楚一件事:AI 和传统搜索引擎最大的区别是什么?

传统搜索引擎不知道一件事,会返回相关网页,由用户自己判断答案。

AI 不知道一件事,它会怎么做?它绝不会停下来。它会根据上下文,生成一个“看起来最合理”的回答。哪怕这个回答是编的。

这是模型训练目标决定的。它不是追求“真实”,它追求的是“下一个 Token 最合理”。

二、用概率理解幻觉

很多人听过一句话:LLM 是概率模型。但这句话到底什么意思?

我举个最简单的例子。

假设有一句话:

今天天气很____

模型不会去查天气预报。它只是在预测:根据训练数据里见过的几万亿个句子,“今天天气很”后面最可能出现什么词?

它内部的计算结果大概是:

很好    45%
不错    28%
晴朗    20%
下雪     4%
核爆  0.0001%

它会根据这些概率,选择下一个 Token。通常情况下,概率越高,被选中的可能性越大。

它本身不会主动查询北京今天有没有下雨。它只是觉得,这个词在训练数据里出现的概率最高。

现在把你的问题想象成一个巨大的填空游戏。AI 做的所有事,就是把最可能的 Token 一个一个填进去,直到形成一个完整的句子。

这个过程可以用一张图来表示:

用户问题
    ↓
┌─────────────────────┐
│   预测下一个 Token    │
└─────────────────────┘
    ↓
┌─────────────────────┐
│   预测下一个 Token    │
└─────────────────────┘
    ↓
┌─────────────────────┐
│   预测下一个 Token    │
└─────────────────────┘
    ↓
      ……
    ↓
完整回答

每一步,都只做一件事:预测下一个 Token。

所以,当你问它一个它没见过的问题时,它不会说“我不知道”。它会根据上下文,挑选概率最高的 Token,生成一个听起来最合理的答案

这就是幻觉的根源。

很多人会问:AI 既然不知道,为什么不直接说“不知道”?

原因很简单。LLM 训练的目标,不是判断真假,而是继续生成文本。对模型来说,“继续回答”比“停止回答”更符合它的训练方式。它没有被训练过“什么时候该闭嘴”,它只被训练过“下一个 Token 应该是什么”。

所以,当我们觉得 AI 在“一本正经胡说八道”时,它其实只是一直在完成自己的工作——继续生成下一个最合理的 Token

三、三种最常见的幻觉

并不是所有幻觉都一样。作为工程师,我们需要区分三种类型。现实中,这三种幻觉往往会同时出现,但理解它们的区别,有助于我们定位问题。

第一种:知识幻觉(实际工作中最常见)

AI 说出了一个不存在的事实。

比如前面的“JSON高速解析接口”。模型在训练数据里没见过 Python 3.14 的真实文档,但它见过很多“新版本新增特性”的文章模式。于是它“推断”出一个合理但虚假的特性。

不知道,所以猜。

第二种:引用幻觉(论文阅读中最常见)

AI 会编造看起来完全真实的引用。

例如:

According to Smith et al. (2023), published in Nature, the protein folding accuracy improved by 47%.

论文标题是真的,期刊是真的,但 Smith 这个人可能不存在,47% 这个数字也可能是编的。

知道格式,不知道事实。

第三种:推理幻觉(数学、代码任务中更容易出现)

AI 不是不知道知识,而是在推理过程中走偏了。

比如让 AI 计算:

123456 × 789654 = ?

它可能第一步分解对了,第二步乘法错了,第三步进位错了。每一步看起来都合理,但最终结果错了。

每一步都合理,但最后错了。

四、为什么幻觉无法彻底消除?

这是很多人的误区:认为随着模型变大、数据变多,幻觉会自然消失。

不会。

原因有三。

第一,生成式模型的本质是创造,不是检索。​ 它的训练目标就是“生成最合理的下一个 Token”,而不是“从数据库中精确召回”。创造本身就意味着不确定性。

第二,训练数据永远有盲区。​ 世界上每天产生的新知识,模型不可能全部覆盖。遇到盲区,它只能“猜”。

第三,模型需要在多个可能答案之间做选择,而这种选择本身就意味着存在出错的可能。

所以结论是:幻觉是 LLM 的固有属性,不是 bug。我们能做的不是消灭它,而是给它装上护栏。

五、工程师该如何与幻觉共存?

既然幻觉无法消除,那工程师该怎么办?

答案是:不要让 AI 独自回答。给它配上可信的数据来源和验证环节。

一个真实的生产环境流程大致是这样的:

用户提问
    ↓
可信数据(文档、数据库、知识库)
    ↓
AI 组织语言
    ↓
人工或程序验证
    ↓
输出

在这个流程里,AI 只负责一件事:把已有的可信信息,用通顺的语言表达出来。

一个真实的案例:

AI 帮一个团队写了一份接口文档。接口名、URL、请求参数、响应示例,全部都有,格式规范,看起来非常专业。

开发同学按文档接入后,接口一直报 404。

排查发现:这个接口在真实系统中根本不存在——AI 根据它见过的大量接口文档模式,生成了一个看起来完全合理、但实际上不存在的接口。

从那以后,这个团队加了一条规矩:

所有 AI 生成的接口文档,必须先在测试环境验证一遍,才能交给开发。

六、最后说几句

很多人以为,AI 最大的敌人是幻觉。

其实不是。

最大的敌人,是人把 AI 当成了搜索引擎。

传统搜索引擎告诉你“没找到”,你会去换关键词。AI 告诉你一个编造的答案,你却可能把它当真。

当你开始把 AI 当成一个“擅长推理、但需要证据支撑的助手”时,很多所谓的幻觉问题,就变成了一个工程问题,而不是模型问题。

很多人问:AI 什么时候才能不产生幻觉?

我的答案是:也许永远不会。因为幻觉,本就是生成式 AI 能力的一部分。

真正重要的,不是等待一个永远不会犯错的 AI,而是理解它、用好它。

一个一分钟实验

现在,打开 AI 对话工具,问它:

“请介绍一个 Python 官方还没有发布的新 JSON 优化特性。”

看看它会不会开始编。

如果它开始一本正经地回答,说明你今天已经理解了什么叫幻觉。

工程师容易踩的坑

🚫 错误做法:
AI 说可以,所以可以。

为什么错:
AI 不是在查数据库,而是在预测 Token。它可能生成一个看起来合理、但实际上不存在的答案。

✅ 正确做法:
AI 说可以,验证以后,才可以。

本文一句话总结

AI 不是查数据库,AI 是在预测下一个最合理的 Token。

理解这一点,后面所有内容都会容易很多。

下一篇预告:

既然 LLM 天生会编造答案,那我们能不能通过“说话的方式”让它少编一点?

这就是 Prompt Engineering 要做的事。

下一篇我们聊聊:Prompt 到底是什么?为什么一句话就能让 AI 变聪明?

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐