Agent实践:大模型为什么会「幻觉」?防它靠流程,不靠提醒(2/12)

幻觉是机制而不是 bug,靠流程防,不靠提醒

Agent课程第 2 讲封面:能力边界与幻觉

幻觉是机制而不是 bug,靠流程防,不靠提醒

我问 AI,帮我详细介绍「架构师之路沈剑」从出生到创业的履历,一定要详细,6000 字!太有意思了,说的有理有据,这个老六——要不是我自己,差点都信了。

大模型为什么要编?它知道自己在编吗?先说结论:幻觉(hallucination)——模型自信地编造看似合理但不真实的内容——并不是某个模型的缺陷,而是所有大模型的共性。它不是 bug,是机制的必然产物。这一讲咱们把这件事讲透。

问题一:它为什么非得编,而不能说”不知道”?

核心原因一,训练决定的:模型分不清”知道”和”编得像”。模型从海量文本里学到的是统计规律。有些事实,训练数据里只出现过一次,比如某个人的生日。有些编造的内容,出现的次数多,统计权重就高了。

谎言重复千遍,就成了真相。在大模型的世界里,确实是这样。

那些”一次性信息”的真相,大模型靠统计是学不会的。但训练目标不管这些,它要求模型”问什么都能答,而且要答得像回事”。所以模型学到的不是事实,而是“事实长什么样”——论文标题的格式、日期的格式、API 的命名风格。模型不是在”说谎”,它根本不知道自己在编——它没有”我知道的”和”我编的”这个概念区分,只有训练过程中学到的统计概率。

核心原因二,评估决定的:瞎猜被奖励,诚实被惩罚。大模型的主流评测几乎全是”考试思维”:看准确率,而不是错误率。一说你就懂了——问大模型一个问题:沈剑的生日是哪个月?它怎么会知道。此时它有两个选择:

  瞎猜一个答案    →  1/12 的概率能对
  说"我不知道"    →  必然得零分

几千几万道题测试下来,爱猜的模型在排行榜上碾压诚实的模型

不要说大模型了,考试的时候,老师是不是教我们:不要空着,随便选一个也有 25% 的概率答对。

这不是推测,是有实测的。2025 年 9 月,OpenAI 发了一篇论文(作者之一 Adam Tauman Kalai)。他们拿三个主流大模型问同一个问题:”Adam Tauman Kalai 的博士论文标题是什么?”三个模型给出三个完全不同的答案,每个都有模有样——标题、学校、年份一应俱全,而它们全错了。论文里还有组对照数据更说明问题:同一个事实问答评测里,一个较旧的模型准确率略高(24% 对 22%),但错误率高达 75%——因为它弃权率只有 1%,什么都敢答;另一个弃权率 52%,错误率只有 26%。你猜榜单上谁赢?爱瞎猜的那个。

原文引用Language models are primarily evaluated using exams that penalize uncertainty. Therefore, they are always in “test-taking” mode.

模型编答案,是因为训练和评估的整个体系,都在教它”宁可编,也不要说不知道”。指望它在生产环境里突然变得诚实,不现实。模型不是一个”偶尔说谎的助手”,它是一个”永远在应试的考生”。

问题二:怎么防?靠流程,不靠提醒

很多人的第一反应是,提示词里加一句提醒:”请诚实回答,不知道就说不知道。”

你在提示词里用过这个技巧吗?

其实吧,这句话作用很有限。大模型的”应试模式”,一句提醒改变不了训练出来的行为倾向。真正有效的方法,是把验证做到 Agent 流程里。

这是今天全文最重要的一句话。

更具体地说,我们在设计 Agent 的时候:

  • 要有验证环节——生成的代码必须跑起来才算数,生成的事实必须给来源链接才算数
  • 要求引用来源——让模型标注每个关键事实的出处,没出处的默认存疑
  • 把”不确定”设计成合法输出——输出格式里明确留一个”无法确认”的选项,而不是逼它必须给答案
  • 关键事实人工核验——关键决策点,Agent 对话中断,返回人工决策

AI 时代,审美、决策、兜底(我不愿说”背锅”),是人无可替代的能力。

以上四条,本质上是同一件事:不完全相信模型的单次输出,只相信经过验证流程的输出。到第 9 讲,我们会把”验证”升级成完整的”评估与迭代”体系——今天先建立意识。

问题三:什么任务适合交给它?

判断标准就一句话:答案能否被极低的成本验证?

适合的场景(答案可验证):
  生成类   写代码、写文案——代码跑一遍,文章看一眼,就能验证
  转换类   翻译、格式化、改写——原文就在手里,对照即可
  有验证器  单元测试校验、schema 校验、人工抽检

不适合的场景(答案难验证):
  精确事实   某人的生日、某篇论文的标题
  实时数据   今天的股价、最新的版本号
  高风险无校验  医疗建议、法律意见——错了也没人兜底

特别提醒一个和程序员关系最大的:代码幻觉。模型会编造不存在的 npm 包、不存在的 API 方法、看起来合理但签名错误的函数。它编造的方式和编论文标题一模一样——按”API 应该长什么样”的统计印象生成。

像不像面试时不懂装懂的候选人?说得越细,越像真的。

所以,AI 写代码,一定要验证:SDD 就很好,有 spec 验证;TDD 也很好,有用例验证——这也是我们的 sdd-site-agent 里,”验收标准”和”实跑验证”是设计的核心,而不是事后的补丁。

简单总结一下

① 幻觉是大模型的机制,不是 bug;

② 降低幻觉的核心是验证;

③ 任务是否适合交给大模型,看它能不能被低成本验证。

具体到第 9 讲,会详细介绍 Agent 的验证、评估与迭代体系。欢迎持续关注,让我们一起,一步一步,实现自己业务专属的 mini-agent。

实操演练(约 25 分钟)

必做部分 + 一步加餐,每一个实验都能在我们的日常 AI 助手里直接做。做完必做部分,大伙就会对”机制而不是 bug”有切肤的手感。

诱导编造实验:让它编一个事实,再编一个库
先挑一个我们确信模型不可能知道的事实去问它,比如:”某某(一个你身边普通同事的名字)的大学毕业论文题目是什么?”;再让它用一个不存在的库写代码,比如:”用 fastwechat 这个 Python 库写一个公众号消息推送的示例。”(这个库不存在)
两个它都会编:事实编得格式完美(标题、学校、年份一应俱全);代码写得完整规范(import、方法名、参数全都像真的)——但整个库是编的
对比实验:提醒到底有多大用
用同一个冷门事实问题问两次。第一次直接问;第二次加上”如果你不确定,请明确说不知道,不要猜测”。对比两次回答。
加提醒后承认不知道的概率会上升,但仍可能继续编——提醒有效但不可靠,这就是为什么防幻觉要靠流程
验证流程演练:参考文献存活率
让 AI 就一个你熟悉的技术话题推荐 3 篇经典论文或权威文档,给出标题和链接。然后我们逐一打开验证:标题真实吗?链接存在吗?记录”存活率”。
3 篇里通常会有编造的——标题像真的、链接打不开,或者标题真实但张冠李戴
(加餐·选做)字母计数测试
问 AI:”DEEPSEEK 这个单词里有几个字母 D?只回答数字。”多试几个模型或换几个单词(如 STRAWBERRY 里有几个 R)。
论文里的真实案例——多个主流模型在这个小学难度的问题上给出不同错误答案。字符级精确任务是大模型的结构性弱项

检验一下

检索练习 · 机制理解
从机制上看,大模型产生幻觉的根本原因是什么?

检索练习 · 评估激励
为什么模型在不确定时倾向于编答案,而不是说”我不知道”?

检索练习 · 防线设计
我们的系统要用 AI 生成内容并进生产,最可靠的防幻觉手段是?

检索练习 · 代码幻觉
AI 帮咱们写代码时,最容易撞上哪种幻觉?

课后作业两份记录,自己留存(后续讲次会用到):

① 一份诱导幻觉记录:从实操第 1、2 步里挑一个效果最震撼的,记录问题、模型的编造内容、以及它编得有多像真的;
② 一份防幻觉流程设计:针对我们自己的真实工作场景(比如让 AI 生成代码、生成文档),写出验证流程——输出后经过哪几步检查才允许进生产。

第 ② 份会在第 9 讲(评估与迭代)升级成完整的验收标准,写的时候想到的标准先随手记下来。

本讲一手来源

你如果想深挖一层,读这篇:OpenAI · Why language models hallucinate(论文全文:arXiv 2509.04664)

幻觉的统计根源和评估激励的完整论证都在里面。生日实验、DEEPSEEK 数 D 实验的原版数据就在论文开头,15 分钟阅读量,值得一看。

但还有一个没解决的问题:就算模型老老实实不编,咱们能塞给它的信息也是有限的——第 1 讲说过,窗口有天花板,塞多了还会慢慢”腐烂”。那到底该喂什么?怎么喂?喂多少?——第 3 讲,我们讲上下文是稀缺资源。

知其然,知其所以然。思路比结论更重要。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

京ICP备2025137728号-3