
《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 变聪明