人工智能幻觉解释:语言模型为何会产生幻觉以及如何减少它

  1. 首页
  2. 博客
  3. 人工智能

人工智能

AI 幻觉解释:为什么语言模型会制造事物以及如何减少它

语言模型可以给出一个自信的、写得很好的答案,但其实答案是错误的。了解发生这种情况的原因、其采取的形式以及在您自己的 AI 功能中减少和检测这种情况的实用方法。

阅读约 8 分钟
AI 幻觉解释:为什么语言模型会编造事实以及如何减少它

要点速览

  • AI 幻觉 的输出听起来似乎合理,但实际上是错误的或不受支持的。
  • 模型预测可能的文本。他们没有内在的方法来知道什么是真实的。
  • 接地来自可信来源的答案、清晰的提示和自动检查可减少幻觉。
  • 目前还没有技术可以完全消除它们,因此重要的输出仍然需要验证。

支持聊天机器人告诉客户退款需要 14 天。真正的政策是7。答案很流利,有礼貌,但错误。这是一种人工智能幻觉,也是人工智能功能需要仔细设计和测试的主要原因之一。

本指南深入浅出地解释了原因,并重点介绍了实际预防措施。接近尾声的自动检查是我们根据自己编写的示例答案运行的一个小型 Python 脚本。它不是针对实时人工智能模型运行的。

什么是AI幻觉?

幻觉是指生成式人工智能系统生成的内容实际上是错误的、编造的或与所提供的信息不支持的内容,但却将其呈现为真实的内容。该术语是一个隐喻。模型看不到东西。它生成的文本符合良好答案的模式,但与事实无关。

危险的部分是信心。幻觉答案通常看起来与正确答案一模一样,具有相同的语气、结构和细节。

为什么语言模型会产生幻觉

大型语言模型经过训练,可以根据大量训练数据中的模式来预测下一段文本(即标记)。由此可以得出以下几点结论:

  • 合理与真实不同。模型会学习答案的样子。当缺乏事实时,仍然可以发明最有可能的延续。
  • 间隙和中断。 训练数据存在间隙并在特定日期结束。该模型可能会填补缺失的事实,而不是说它不知道。
  • 训练奖励回答。 研究(包括 2025 年 OpenAI 关于模型为何产生幻觉的论文)认为,常见的训练和评估方法会奖励猜测,而不是承认不确定性,就像多项选择测试一样,错误答案不会受到惩罚。
  • 模棱两可的提示。 模棱两可的问题会促使模型假设细节。
  • 长或混乱的上下文。 当埋藏在长输入中时,重要的事实可能会被忽视。

常见的幻觉类型

类型 示例
发明的事实 错误的日期、数字或统计数据
假消息来源 不存在的引文、论文或 URL
不忠实的总结 添加文档中未包含的声明的摘要
编造的代码 调用不存在的函数或包
错误的推理 每一步看起来都很好,但结论并不成立
虚假的信心 回答没有可靠答案的问题

研究人员经常将这些错误分为事实性错误和忠实性错误,前者与现实世界相矛盾,后者与模型所提供的源材料相矛盾。对于基于您自己的文档构建的商业应用程序,忠实度通常是您可以最直接测试的。

编造的代码值得特别警告。如果助手建议安装不存在的软件包,攻击者就可以以该名称发布恶意软件包。在安装之前检查每个建议的依赖项是否真实且可信。

最重要的地方

幻觉的电影事实是无害的。幻觉的药物剂量、法律引用、退款政策或财务数字都不是。律师提交法庭文件并附有人工智能工具发明的案例引文的案例已有不少报道。根据错误答案的成本对用例进行排名,并在成本较高的地方应用最强的控制。

如何减少幻觉

  1. 将答案建立在可信数据中。 为模型提供相关事实,而不是依赖其记忆。
  2. 允许“我不知道”。明确告诉模型何时信息不可用,并将其视为一个好的结果。
  3. 具体。 清晰、狭窄的问题留给发明的空间较小。我们的提示工程指南对此进行了详细介绍。
  4. 从提供的来源索要引文或引文,然后自动验证它们。
  5. 使用结构化输出,例如具有固定字段的 JSON,因此答案更容易验证。
  6. 使用工具处理模型的薄弱环节,例如计算、日期和实时数据查找。
  7. 让人员了解情况以做出高风险决策。

以您自己的数据为基础

检索增强生成(RAG) 是最常见的基础模式。系统会在您的文档中搜索与问题相关的段落,并将其包含在提示中,并附有仅从这些段落中回答的说明。它大大减少了虚构的事实,但它并不是治愈方法。该模型仍然可能误读段落、错误地组合段落或依靠自己的知识,并且搜索步骤可能会返回错误的文档。因此接地系统仍然需要检查。

提示: 将检索到的段落记录在每个答案旁边。当报告错误答案时,您可以快速判断检索是否失败或模型忽略了良好的上下文。每个的修复方法都不同。

简单的自动检查

这是我们构建的一个廉价防护:标记答案中未出现在源文本中的任何数字。虽然很粗糙,但价格、天数和限额等数字正是代价高昂的幻觉出现的地方。

import re

SOURCE = """Refunds are paid within 7 days to the original payment method.
Orders over 1000 rupees ship free. Standard delivery takes 3 to 5 working days."""

def unsupported_numbers(answer, source):
    found = set(re.findall(r"\d+", answer))
    allowed = set(re.findall(r"\d+", source))
    return sorted(found - allowed, key=int)

我们测试了三个为模仿典型模型输出而编写的答案:

grounded     -> no unsupported numbers
hallucinated -> ['14', '500']
partly       -> ['1']

“幻觉”的答案声称14天退款和超过500卢比的免费送货,两个号码都被抓了。 “部分”答案有正确的交货时间,但添加了“或 1 天快递”,该政策从未提及,这也被抓住了。第二次检查验证引用的短语是否确实出现在源代码中:

{'paid within 7 days': True, 'no questions asked': False}

这些检查有明显的局限性。他们会错过错误的词语、单位和没有数字的无支持的主张,并且他们会错误地标记正确的计算。许多团队添加了“LLM 作为法官”步骤,其中第二个模型根据来源检查每个声明。这样可以捕获更多,但也可能是错误的,所以要衡量一下。

测试幻觉

将幻觉率视为衡量的质量指标,而不是感觉。实用的方法:

  • 使用已知的正确答案和来源构建真实问题的测试集。
  • 包括系统应该拒绝的问题,因为答案不在数据中。
  • 对答案的正确性、对来源的忠实度以及适当的拒绝进行评分。
  • 每次对提示、模型或检索设置进行更改时运行该集。
  • 供人工审核的生产对话示例。

回归测试的原则也适用于此:一组固定的案例,针对每次更改运行,并随时间比较结果。在选择如何接地系统时,我们对 RAG 与微调与提示工程 的比较解释了权衡。

给日常用户的建议

  • 验证原始来源的事实、数据、引述和引文。
  • 特别注意医疗、法律和财务信息。
  • 粘贴源文本并要求助手仅从中回答。
  • 问“你有多自信,这是基于什么?”,但请记住答案也可能是错误的。

幻觉可以消除吗?

目前的技术不行。更新的模型和更好的训练降低了许多基准上的幻觉率,并且接地有很大帮助,但每个系统仍然会犯错误。现实的目标是通过系统设计、测试和向用户发出明确的信号,使错误很少发生、易于检测且影响较小。

AI编码工具中的幻觉

开发人员每天都会在编码助手中遇到幻觉:类中不存在的方法,过时的配置选项,或者对确实由其他原因引起的错误的自信解释。这些防御措施是您已经用于人类代码的防御措施。编译或类型检查结果,运行测试,并阅读您以前未使用过的任何 API 的官方文档。要格外小心安全敏感的代码,例如身份验证、加密和输入验证,这些代码看起来看似合理,但实际上可能不安全。将人工智能建议视为快速但不可靠的同事的草稿:通常很有用,但永远不会自动纠正。

最后的话

幻觉来自语言模型的工作方式:它们生成可能的文本,而不是经过检查的事实。你无法关闭它们,但你可以围绕它们进行设计。在可信数据中给出答案,让模型说“我不知道”,添加对重要细节的自动检查,并持续测量结果。

常见问题

什么是AI幻觉?

这是指人工智能系统产生虚假或不受支持的信息,并将其呈现为真实的信息,例如发明的统计数据、引文或政策细节。

为什么人工智能模型会产生幻觉?

语言模型根据模式而不是经过验证的事实来预测可能的文本。训练数据的差距、模糊的提示和奖励猜测的训练都会增加产生幻觉的可能性。

RAG能阻止幻觉吗?

它通过向模型提供可信信息来减少它们,但并不能阻止它们。该模型仍然可能会误读来源,并且检索可能会返回错误的文档。

如何检测人工智能幻觉?

将答案与源文档进行比较,自动检查数字和报价,使用第二个模型来验证声明,并与人们一起审查样本。

人工智能的幻觉会消失吗?

随着模型的改进,比率正在下降,但目前还没有方法可以完全消除它们。重要的输出仍然需要检查和人工审查。

继续学习

与Stack Quora合作

需要测试、WordPress 或 SEO 方面的帮助?

我们帮助团队交付更好的软件并发展他们的网站。告诉我们您正在做什么,我们将建议明确的下一步。

继续阅读

更多指南 测试、人工智能和现代开发

喜欢这篇文章吗?选择一个主题并直接跳至我们最新的教程。

人工智能

人工智能幻觉解释:语言模型为何会产生幻觉以及如何减少它

人工智能幻觉解释:它们是什么,为什么语言模型产生它们,常见类型,如何通过基础和提示来减少它们,以及我们进行的简单检查。

阅读文章 →
DevOps

环境变量解释:.env 文件、秘密和配置正确完成

使用我们运行的 Python 示例解释环境变量:读取和设置它们、为什么每个值都是字符串、.env 文件、进程继承、秘密和验证。

阅读文章 →
软件开发

API 速率限制解释:算法、标头和处理 429 错误

API 速率限制通过我们运行的模拟进行了解释:令牌桶、固定窗口、滑动窗口、429 响应、速率限制标头、带回退的重试和测试限制。

阅读文章 →
测试自动化

Python 中的模拟:unittest.mock、补丁以及导致测试谎言的错误

使用unittest.mock 在Python 中进行模拟,经过测试:模拟和return_value、side_effect、修补使用名称的位置、spec 和autospec、模拟日期以及常见错误。

阅读文章 →
软件测试

代码覆盖率解释:行覆盖率与分支覆盖率以及 100% 的真正含义

用真实的coverage.py运行来解释代码覆盖率:行、分支和条件覆盖率,阅读报告,为什么100%覆盖率仍然会错过错误,以及合理的目标。

阅读文章 →
数据库与 SQL

SQL 中的 DELETE、TRUNCATE 和 DROP:差异、回滚以及何时使用它们

DELETE、TRUNCATE 和 DROP 通过经过测试的 SQL 进行了解释:各自删除什么、回滚、触发器、身份重置、速度,以及 PostgreSQL、MySQL、SQL Server 和 SQLite 有何不同。

阅读文章 →
数据库与 SQL

SQL 视图解释:创建、使用和避免陷阱(附示例)

SQL 视图通过我们运行的查询进行解释:创建视图、实时结果、隐藏列、性能、可更新和物化视图、破坏的依赖关系和最佳实践。

阅读文章 →
软件开发

TypeScript 接口与类型:真正的差异,使用编译器进行测试

TypeScript 接口与类型,使用真实编译器进行检查:两者都可以做什么,只有一个可以做什么,声明合并,扩展与交集以及要遵循的简单规则。

阅读文章 →
软件开发

Python *args 和 **kwargs 解释:灵活的函数和清晰的示例

Python *args 和 **kwargs 用我们运行的代码进行了解释:打包和解包、参数顺序、仅关键字和仅位置参数、装饰器和常见错误。

阅读文章 →
软件开发

Python Lambda 函数:语法、实际用途以及何时不使用它们

Python lambda 函数用我们运行的代码进行了解释:语法、使用键排序、映射和过滤器、闭包、后期绑定陷阱,以及何时普通 def 是更好的选择。

阅读文章 →
人工智能

什么是人工智能代理?它们是如何工作的,只需运行一个简单的代理循环

什么是人工智能代理?关于代理循环、工具、内存和护栏的简单指南,以及我们运行的一个小型 Python 循环、真正的风险以及何时简单的聊天机器人是更好的选择。

阅读文章 →
DevOps

监控与可观察性:真正的区别,包括日志、指标和跟踪

监控与可观察性解释:已知和未知的故障、日志、指标和跟踪、检查事件演练、黄金信号、OpenTelemetry 和有用的警报。

阅读文章 →
DevOps

Docker Volumes 与 Bind Mounts:以正确的方式保留容器数据

Docker 卷与绑定挂载解释:为什么容器数据消失、命名卷、绑定挂载、tmpfs、Compose 示例、备份、权限以及何时使用它们。

阅读文章 →
测试自动化

TDD 与 BDD:主要区别、以两种方式构建的一个功能以及何时使用每种方式

TDD 与 BDD 的解释是通过一种双向构建的折扣功能:使用我们运行的代码进行红绿重构、Given-When-Then 场景、工具、权衡以及何时使用每种方案。

阅读文章 →
软件开发

Git merge 与 rebase 的区别:示例及如何选择

用真实的 log 输出、对比表、rebase 黄金法则和安全的团队工作流,讲清 Git merge 与 rebase 的区别。

阅读文章 →
软件开发

Python 列表推导式:语法、示例与何时避免使用

Python 列表推导式详解:语法、过滤、if-else、嵌套循环、实测耗时,以及何时普通 for 循环更合适。

阅读文章 →
数据库与 SQL

SQL JOIN 详解:附示例(INNER、LEFT、RIGHT、FULL)

通过示例表和查询,一步步讲解 SQL JOIN:INNER、LEFT、RIGHT、FULL、CROSS 和 SELF,并介绍常见错误与性能技巧。

阅读文章 →