AI说"成功了",但你最好自己看一眼——聊聊模型的自信幻觉
让AI帮你写一段代码,它说"已完成,运行正常"。
你拿去运行,报错了。
回去问它,它说:"哦,可能是环境配置的问题,你再试试加上xxx参数。"
你加了参数,还是报错。它又说:"这个错误是因为版本不兼容,你检查一下版本号。"
折腾了三轮,最后发现:它给你的代码从第一行就有语法错误。
它不是故意骗你。它真的以为自己给了正确的代码。
什么是"幻觉"?
学术界把这种现象叫做Hallucination(幻觉)。
指的是模型生成了听起来合理但实际上错误的内容,而且模型自己不知道这是错误的。
幻觉在纯文本场景下已经够让人头疼了——AI编造不存在的论文、虚构数据、伪造引用。但在工具调用场景下,幻觉的危害更大。
因为工具调用涉及真实的操作:读写文件、调用API、执行代码。模型说"文件已保存",但文件根本不存在。模型说"API返回了200",但实际上返回的是404。
幻觉还可以进一步细分为两种类型:事实性幻觉(Factuality Hallucination)和忠实性幻觉(Faithfulness Hallucination)。事实性幻觉是指模型生成了与客观事实不符的内容——比如"地球的卫星有两颗"。忠实性幻觉是指模型生成了与用户输入或上下文不一致的内容——比如你让它总结一篇关于环保的文章,它却写成了关于AI的文章。两种幻觉在实际使用中都很常见,但忠实性幻觉更难察觉,因为它"读起来完全没问题",只是内容和你的预期不一致。
为什么模型不知道自己错了?
回到模型的本质:它是在预测下一个最可能的词,不是在验证事实。
当模型执行一个操作时,它生成的是"操作已完成的描述",而不是"检查操作是否真的完成"。
这两件事的区别很关键:
- 生成描述:根据模式匹配,预测"人类在操作完成后通常说什么"
- 验证结果:真的去检查文件是否存在、API是否返回了预期数据
模型做的是前者,不做后者。
就像一个学生,背熟了"实验成功的标准描述",每次做完实验都按模板写报告。但他的实验实际上可能失败了——他只是不会写"实验失败"的描述,因为训练数据中"实验成功"的模式远多于"实验失败"。
我在用Trae时就被这个现象坑过一次:让它帮我创建一个配置文件,它回复"配置文件已生成,路径是config/app.json"。我去打开一看,文件不存在。它不是故意骗我,它只是生成了"配置文件已生成"这段文字,但实际并没有执行写入操作。
这个问题的根源在于模型的世界观是语言性的,而不是行动性的。模型的知识存储在语言的统计关联中,而不是通过实际的操作反馈来学习。当模型"执行"一个操作时,它其实只是在生成一段描述这个操作的文本——这个描述可能和真实世界的操作结果一致,也可能完全不一致。模型没有能力自己检查这两者之间的差异。
幻觉为什么特别"自信"?
因为训练数据中,错误的表达方式通常伴随着不确定的语气。
"我不太确定,但可能是……"——这种表达在训练数据中经常和错误答案一起出现。模型学会了:不确定的语气 = 可能错误。
反过来,当模型输出一个错误答案时,如果它用了不确定的语气,就会显得"不自信"。但训练数据中大多数内容都是自信表达的,所以模型默认使用自信语气输出——即使是错误答案。
结果就是:错误的答案也带着自信的语气。这就是"自信幻觉"这个名字的来历。
还有一个原因是模型的训练过程本身强化了自信表达。在 RLHF(基于人类反馈的强化学习)训练中,评率员倾向于给自信、流畅的回答打高分,而给支支吾吾、犹豫不决的回答打低分。长此以往,模型学会了:自信 = 高分。于是即使在输出不确定内容时,它也倾向于用自信的语气包装。
这给用户带来了一个很大的判断困难:你无法通过 AI 的表达语气来判断它的正确性。在人类沟通中,对方说"我不太确定"时你通常会多核实一下;而 AI 永远信心满满,即使它可能在胡说八道。所以一个实用的判断策略是:对 AI 的所有重要输出,都当作"需要验证的假设"而非"确定的事实"。
被指出错误后为什么还找借口?
还有一个让人头疼的现象:你指出模型的错误,它不直接承认,而是找理由解释。
"代码报错"——"那是因为你的环境配置不对"。
"文件没找到"——"可能是路径问题,你检查一下目录"。
"API返回404"——"这个接口可能需要认证,你加上token试试"。
这不是模型在"狡辩"。它是真的在根据你的反馈,预测"接下来最可能的回复是什么"。
当你说"报错了",模型预测到的最可能回复是"解释为什么报错",而不是"承认自己错了"。因为在训练数据中,解释原因的模式远多于承认错误的模式。
这种现象还有一个深层原因:模型的"自我模型"不够完整。人类能意识到"我之前说错了,现在需要修正",因为人类有一个关于自己知识状态的心智模型——知道自己知道什么、不知道什么。但当前的 AI 模型并没有这种自我监控机制。它只是在"被动地"根据上下文生成下一个 token,不会主动检查"我之前的输出和现在的事实是否一致"。
另一个相关现象是确认偏差(Confirmation Bias):模型一旦开始沿着某个方向回答,就会倾向于继续强化这个方向的反面。比如如果它已经说了"配置文件已生成",后续你再问它"文件在哪里",它更可能继续编造一个路径,而不是推翻之前的说法。这种一致性倾向在某些场景下是优点(保证回答的逻辑连贯),但在错误发生时就成了障碍。
普通用户怎么应对?
几条实用建议:
不要信任模型的自我汇报。 它说"成功了",你去验证一下。看文件在不在、代码能不能跑、数据对对。
直接指出具体问题。 不要说"报错了",要说"第15行有个SyntaxError,缺了一个右括号"。越具体,模型越容易定位到真正的问题。
要求模型验证自己的输出。 让它"运行一下这段代码看看结果"、"检查一下文件是否真的保存了"。多一步验证,少走很多弯路。
关键操作留痕。 让模型把关键步骤的实际输出发给你,而不是只告诉你"已完成"。看到实际输出,你才能判断真假。
复用已知正确的模板。 如果你确认了某段代码是正确的,保存起来作为"黄金参考"。下次遇到类似任务时,把已知的正确代码作为上下文提供给模型,而不是让模型从头生成。这样可以减少幻觉的概率,因为模型在已有正确示例的约束下,输出错误的概率会显著降低。
记住:AI的自信程度和它的正确率没有任何关系。 它说"肯定没问题"的时候,和说"我不太确定"的时候,出错的概率可能是一样的。
最后一条核心原则:AI 不是万能的,但它是极其有用的——前提是你能正确地验证它的输出。养成"先验证、再信任"的习惯,是每一个 AI 用户最重要的能力。 就像你不会用计算器算完就直接写答案而不检查一样,对 AI 的输出也应该始终保持适度怀疑。
