一个让人哭笑不得的故事
2023 年,美国一位律师在法庭上引用了 ChatGPT 提供的六个判例来支持他的论点。听起来没什么问题,直到对方律师和法官发现——这六个判例全是编造的。案件名称、法院、判决日期、判决内容,全是 AI 现编的。
这位律师被法官严厉批评,差点丢掉执照。
这不是个别现象。你用 AI 写过东西的话,大概率遇到过类似的情况:AI 引用了一篇不存在的论文、给出了错误的统计数据、或者编造了一个看起来合理但完全虚假的事实。而且它说这些话的时候,语气非常自信,完全没有「我在编」的痕迹。
这种现象有个正式的名字:模型幻觉(Hallucination)。
什么是模型幻觉
模型幻觉,就是大语言模型生成了看起来合理、读起来流畅、但实际上不正确或者根本不存在的内容。
注意几个关键词:
- 看起来合理:不是明显的胡话,格式正确、逻辑通顺
- 读起来流畅:语言质量没问题,不会因为表达问题让你起疑
- 实际不正确:核心信息是错的或者是编造的
这就是幻觉最危险的地方——它穿了一件「正确」的外衣,不仔细验证根本发现不了。
幻觉的分类
模型幻觉不是铁板一块,可以分为几种不同的类型:
事实性幻觉
模型给出了错误的事实信息。
比如你问它「量子力学是谁创立的」,它可能会回答一个看似合理但并不准确的说法——把多个物理学家的贡献张冠李戴,或者给出一个错误的年份。
这类幻觉最常见,也最容易被忽略,因为回答的结构和语气都像是正确的。
虚构性幻觉
模型编造了根本不存在的东西。
比如让它推荐几篇关于某个话题的论文,它可能会生成标题、作者、期刊、年份都齐全的论文引用——但这些论文压根不存在。它编造了一个完整的、看起来非常真实的信息实体。
逻辑性幻觉
模型的推理过程看似严密,但中间有一步或者几步是跳跃的或者错误的。
最终结论可能是错的,但你很难发现,因为推理链条看起来环环相扣。这在数学题和编程题中尤其常见——步骤看起来都对,结果就是不对。
指代性幻觉
在长文本生成中,模型可能会搞混之前提到的实体。
比如你让它写一篇关于 A 和 B 两家公司的对比分析,写着写着它可能会把 A 的特征说成 B 的,或者凭空引入一个之前没有提到的 C 公司。
幻觉是怎么产生的
理解幻觉的成因,有助于你在实际使用中更好地规避风险。
训练目标的天生缺陷
大模型的基础训练任务是预测下一个 token。给定前面的文字,模型要猜下一个最可能出现的字词。
注意:它优化的是「下一个字词看起来合理」,而不是「下一个字词在事实上正确」。
这两者的区别非常大。在模型看来,「水在零度时结冰」和「水在二十度时结冰」在语言流畅度上差别不大。模型选择哪个,取决于训练数据中的统计分布,而不是物理规律。
知识的压缩存储
一个 7B 参数的模型(大约 14GB 文件大小)里「存储」了从数万亿 token 训练数据中学到的知识。
这种存储是高度压缩的——模型不是把训练数据原封不动地记下来,而是把信息压缩成了参数权重中的统计模式。这种压缩过程中必然会丢失精确信息。
就像你读了一百本书然后凭记忆复述内容——大致的概念和逻辑你记得,但具体的数字、日期、引用来源很容易记混。
过于自信的输出机制
大模型的生成机制是从概率分布中采样。即使模型对某个事实「不确定」,输出的文本也不会表现出不确定——因为生成机制不区分「我确定是 A」和「A 的概率比 B 稍微高一点」。
这就是为什么 AI 胡说八道的时候语气这么自信。它没有「我不知道」的内在状态表示,只能在概率分布中选择一个最可能的选项,然后用同样自信的语气说出来。
训练数据的噪声
互联网上的数据并非全部正确。新闻报道有错误、论坛帖子有谣言、维基百科有未被纠正的错误。模型从这些数据中学习,自然也学到了错误的知识。
更麻烦的是,同一个事实可能在训练数据中有多个版本。某个历史事件的年份,可能在不同来源中有不同的说法。模型没有可靠的机制来判断哪个版本是正确的。
如何检测幻觉
既然幻觉不可避免,那就需要有检测手段。
自洽性检查
让模型对同一个问题生成多个回答,然后比较这些回答是否一致。
1 | def consistency_check(model, question, n_samples=5): |
如果模型对同一个问题给出了不同甚至矛盾的回答,说明它对这个知识点「没有把握」,幻觉的风险很高。
置信度评估
让模型自我评估回答的可信度:
1 | def confidence_assessment(model, question, answer): |
虽然模型的自我评估不完全可靠,但配合低温度采样,准确率还是不错的。
基于检索的验证
用搜索引擎或知识库来验证模型输出的事实。这是目前最可靠的检测方式。
如何缓解幻觉
完全消除幻觉在目前的技术框架下是做不到的,但可以大幅降低其发生率。
RAG(检索增强生成)
RAG 是目前缓解幻觉最有效的方案。
原理很简单:不让模型凭记忆回答,而是先从可信的知识库中检索相关信息,再让模型基于检索到的内容来生成回答。
1 | class FactGroundedGenerator: |
RAG 的关键在于那条规则:「只能基于参考资料中的信息回答」。这把模型从「凭记忆回答」变成了「看资料回答」,大幅减少了编造的空间。
如果你想用 Hermes 搭建一个带 RAG 的系统,可以参考 用 Hermes 打造私人 AI 学习助手 里的详细教程。
自检机制(Self-Verification)
让模型在输出之后做一轮自我检查:
1 | def self_verify(model, question, initial_answer): |
一次生成加一次自检,虽然多用了一倍的推理成本,但能过滤掉相当一部分明显的幻觉。
结构化输出
要求模型以结构化的格式输出,并明确标注信息来源和置信度:
1 | 要求回答格式: |
这种格式逼着模型去思考每个论点的支撑证据,减少了凭空编造的可能。
温度调节
在需要事实准确性的场景,把采样温度降低:
- 温度 0.1-0.3:最大概率采样,输出更确定但可能缺乏多样性
- 温度 0.5-0.7:平衡模式
- 温度 0.8-1.0:高随机性,创意性强但幻觉风险也高
事实性问答用低温度,创意写作用高温度——这是最基本的但很多人忽略的调节手段。
人工审核
说到底,最后一道防线还是人。
对于重要的、会被公开发布的、或者影响决策的内容,AI 生成之后必须经过人工审核。核实关键数据、验证引用来源、检查逻辑链条。
这不是说 AI 没用,而是说 AI 在当前阶段的定位应该是「辅助」而不是「替代」。它帮你快速出初稿、整理思路、提供方向,但最终的准确性由人来把关。
不同场景的幻觉风险评估
不是所有场景的幻觉风险都一样高。根据场景选择合适的防范策略:
| 场景 | 幻觉风险 | 建议策略 |
|---|---|---|
| 创意写作 | 低(甚至欢迎) | 高温度,无需特别防范 |
| 代码生成 | 中 | 可以直接运行验证 |
| 知识问答 | 高 | RAG + 自检 + 人工核实 |
| 学术引用 | 极高 | 必须人工验证每条引用 |
| 医疗/法律建议 | 极高 | 不建议直接使用 AI 输出 |
| 数据分析 | 中高 | 要求结构化输出 + 验证 |
模型幻觉会被解决吗
短期内不太可能完全解决。
原因在于幻觉是当前大模型架构的一个内在特性,而不是一个可以通过打补丁修复的 bug。只要模型的基础机制是「基于统计概率预测下一个 token」,它就没有真正的「事实核查」能力。
但长期来看,有几个方向在努力:
更好的训练数据:用更干净、更准确的数据训练,从源头减少错误知识。
检索增强的深度集成:让模型在生成过程中实时检索事实,而不是先生成再检索。
多模态验证:结合图片、表格、数据库等多种信息源来交叉验证。
过程监督:对模型的推理过程(而不只是最终结果)做监督和约束。这跟 RLHF 中的过程奖励 是相关的技术方向。
正确的心态
跟 AI 打交道,心态很重要:
把 AI 当实习生,不当专家。实习生可能很聪明、干活很快,但你不会不检查就直接把他的输出提交给客户。
越重要的内容,越需要人工核实。AI 写的微博发出去错了没什么大事,AI 写的法律文书发出去错了可能要坐牢。
学会提问。好的提问能减少幻觉。给明确的约束条件、提供参考资料、要求标注信息来源——这些技巧能显著降低幻觉率。
不要因为幻觉就否定 AI 的价值。90% 准确 + 10% 需要人工修正,跟 100% 人工从零开始相比,前者仍然是巨大的效率提升。关键是你要知道那 10% 可能出现在哪里,然后有针对性地核查。
有更多关于 AI 使用经验的话题,欢迎来 cocoloop 社区 一起讨论。