AI 幻觉怎么减少:从成因、案例到上线前的校验

AI 幻觉为什么会出现,又该怎样在答案交付客户前拦住错误?本文从编造事实、数字错误、虚假引用和工具参数错误四类案例出发,说明如何用最新证据、RAG、可核验引用、结构化输出和参数校验降低风险,并提供可运行的 Python 校验示例、同时关注正确作答与合理停止的评测方法,以及小团队本周就能执行的实施清单。

发布于

AI 幻觉怎么减少:从成因、案例到上线前的校验

减少 AI 幻觉,要从答案交付前的一道关口做起:有证据才能回复客户,缺少证据时,系统必须能够安全停止。先抓住 4 类问题:编造事实、数字错误、虚假引用和工具参数错误。每一类都需要专门的校验;语气再笃定,也不能替代证据。

客服机器人不能凭空编出政策例外,报表助手不能随口给出合计值,智能体也不能靠猜测决定修改哪位客户的记录。所谓智能体,就是用模型选择行动、调用工具的软件。落地时的目标很明确:没有依据的答案或操作,不能从应用中放行。

核验日期:2026 年 10 月 17 日。 核验依据为文中链接的模型厂商指南、API 文档、研究案例和法院记录。下文案例均注明出处;校验器和每周清单是实施建议,并非生产环境的实测结果。

什么是 AI 幻觉?它为什么会出现?

大语言模型把错误或缺乏依据的陈述当作答案输出,就是大模型幻觉。LLM 指大语言模型,即通过训练学习文本中的规律、据此生成语言的模型。即使某句话在其他场景中属实,只要你提供的文档无法支持它,对当前任务来说,它仍然没有依据。

可以把模型想成一位熟练的撰稿人,正根据桌上的材料补完一份简报。它能写出一段看似可信的缺失内容,但这并不能证明那段内容应该出现在公司的记录里。

预测通顺的文本,不等于核实事实

OpenAI 于 2025 年 9 月 5 日发布的语言模型为何产生幻觉的研究文章解释了一个关键问题:预训练学习的是如何预测文本,并不是每条陈述都附有真假标签。那些罕见、又没有规律可循的事实,尤其难以从文本规律中还原。后续训练可以改善模型行为,但表达流畅始终不是真实性的保证。

对开发者来说,这意味着产品政策、账户状态和库存信息都应该存放在应用能够读取的权威来源中。把模型“记住”的答案当作数据库,就会引入本可避免的故障。

上下文缺失或过时,答案就会留下空白

模型可能从未收到客户所需的事实。上传的文档可能已经过时,搜索可能找到了错误的产品版本,账户查询也可能失败。Anthropic 在关于 Claude 回答错误的说明中,明确将缺少近期信息列为产生混淆的原因之一。

这里要区分两种事故:助手凭空编造政策,是生成环节出了问题;助手准确复述了过期政策,是信息源管理出了问题。客户得到的都是错误答案,但修改提示词既不能让过期文档重新有效,也修不好失败的账户查询。

只奖励“答出来”,就会鼓励猜测

OpenAI 指出,只看准确率的评测可能会奖励猜测,而不是承认不确定。如果你的成功指标把每次完整作答都算作成功、把每次转交处理都算作失败,同样会落入这个陷阱。

客户要求承诺送达日期时,需要的是权威的物流预计时间。如果承运方尚未提供这一信息,明确说明缺少什么,才是有用的结果。测试和运营看板都应该认可这种处理方式。

大模型幻觉有哪些表现?先抓住四类错误

按照应用需要校验的对象来划分错误。这些类别会有交叉,但能帮助小团队找到具体的校验位置。

错误类型有记录的案例应用应做的校验
编造事实OpenAI 报告称,聊天机器人为研究者 Adam Tauman Kalai 给出了三个不同的博士论文题目,全部错误。事实字段必须有权威记录作为依据。
数字或日期错误同一项调查得到了三个不同的 Kalai 出生日期,也全部错误。将日期和数值字段与来源核对;派生值用代码计算。
虚假引用一份法院意见书记载,来自 Google Bard 的不存在的判例被写进了提交法院的法律文件。将引用解析到真实来源,并确认它能支持相关主张。
工具参数错误Berkeley 的示例中,年利率本应填写 0.05,GPT-4 却填入了 5。除了参数类型,还要检查单位和业务含义。

**编造事实:**博士论文题目的案例来自 OpenAI 自己的研究记录。模型熟悉一个名字,并不意味着知道缺失的论文题目。放到业务中,类似的问题就是因为同类产品有某项功能,就编造自家产品也具备这项能力。

**数字错误:**同一篇研究中的出生日期案例说明,日期看起来再精确,也不能充当证据。在应用中,要区分没有依据的数值和计算失误。数量应从记录中读取,合计值交给普通代码计算,再让模型解释它拿到的结果。

虚假引用:2024 年 3 月 20 日 United States v. Cohen 一案的法院意见书记载了来自 Google Bard 的三个不存在的判例。Google Bard 是 Google 当时对其生成式助手的命名。其中一条所谓的引用是 United States v. Figueroa-Florez。案件名称和引用格式看起来像真的,并不意味着背后有真实的判例依据。

工具参数错误:Berkeley Function Calling Leaderboard 的作者展示了一次调用:要求的利率是 5%,传入的参数却是 annual_interest_rate: 5,而正确的小数表示应为 0.05。两个值都是数字,单靠类型检查无法区分。这是参数语义错误;并非每一次错误的工具调用都属于事实编造,但执行前都应纳入同一套审查。

如何减少 AI 幻觉,把错误拦在客户看到之前?

在生成前后加入证据和校验,再明确任一环节缺失时系统该怎么做。开发者负责校验机制,运营人员负责权威信息源和升级处理路径。

用最新、相关的信息支撑回答

检索增强生成,即 RAG,会搜索外部材料,并把相关段落提供给模型,让“撰稿人”有据可写。Anthropic 的 Contextual Retrieval 说明解释了为什么检索片段周围的语境也很重要:孤立的摘录可能省略它所描述的公司、时期或对象。

做客服功能时,应先选定权威政策库,并为内容附上产品、地区、生效日期和访问权限等元数据。在生成答案前,先按这些字段筛选。检索取消规则时,要把例外条件一起取回;一段脱离适用条件的文字,可能被用来支撑错误的承诺。

账户的实时信息应从应用数据库或服务中读取。要判断某位客户的订单是否已经发货,文档搜索很难替代实际查询。查询失败时,应返回不可用状态,不能悄悄用通用知识补上答案。

先从简单的检索流程做起。只有当问题需要跨来源继续搜索时,再采用允许模型自主选择后续检索步骤的 agentic RAG。追加搜索也需要停止规则,并接受同样的信息源校验。

一座建筑式桥梁连接信息源、草稿、校验和回复,在通往客户的出口前设有暂缓放行的分支
先提供证据再起草,答案通过校验后才放行。

排查问题时,关键是确认正确的证据有没有送到模型手里。将来源 ID 和版本与答案一同保存,运营人员才能区分:是检索漏掉了证据,还是模型加入了没有依据的内容。

把“我不知道”设计成应用状态

Anthropic 的减少幻觉指南建议允许模型表达不确定,用原文引述支撑工作,标明依据,并删除没有支持的主张。把这些建议落实为明确的响应约定。

为模型设置清晰的结果状态,例如 answered、needs_clarification 和 insufficient_evidence。没有答案时,不要为了填满必填字段而逼模型编造。界面应把每种状态转化为有用的下一步:提出一个聚焦的追问,说明缺少哪条记录,或携带已检索到的上下文转交处理。

一条实用指令可以这样写:“仅使用所提供的政策和账户记录。如果记录不足以确定答案,请指出缺少的信息。不要根据相似案例推断是否符合条件。”测试这条指令时,要加入证据缺失的情形,不能只测容易回答的问题。

“无法确定”与出于安全原因拒答、工具超时或未授权请求不是同一类状态。日志中应分别记录,才能让对应的负责人处理。

让代码能够核验引用

引用应该指向应用已经掌握的证据。由检索环节分配来源 ID,再由服务器将 ID 解析为获准使用的 URL。不要让模型凭记忆编制参考文献或目标网址。

需要分别检查三个方面:

  • **来源是否存在:**被引用的来源 ID 必须属于本次请求获准使用、且已提供给模型的材料。
  • **引文是否准确:**引用的文字必须出现在作答时使用的那个确切版本中。
  • **能否支持主张:**该段文字是否足以证明这条主张适用于这位客户的情况。

前两项可以直接用代码检查。第三项需要领域规则、可信的结构化字段,或单独审查主张与证据的对应关系。在文档里找到“符合条件”几个字,并不能证明某位客户就符合条件。

Anthropic 的引用文档介绍了与文档关联的引用机制,可帮助定位证据。来源指针有助于审计答案,但不能据此断定来源是否最新、是否权威,或是否得到了正确解读。

用结构化输出约束格式,再校验具体值

结构化输出会用 schema 约束响应,明确允许哪些字段和取值类型,让应用更容易编写检查逻辑。OpenAI 的 Structured Outputs 指南明确提醒:输出仍然可能包含错误;如果响应约定没有提供合适的兜底方式,不兼容的输入还可能诱发幻觉。

执行工具调用前,要校验操作、必填参数、单位、允许的值、记录是否存在,以及调用者权限。租户和已认证用户的身份应由应用代码确定。适当情况下,可以让模型从获准访问的记录中做选择;但模型给出的客户 ID,绝不能作为访问权限的证明。

两个建筑式检查区形成对照:只检查格式的一侧接受数值 5,检查具体值的一侧要求将百分之五的利率写为小数 0.05
同为数值类型,单位仍可能出错。执行前要校验实际含义。

即便工具调用成功,给客户的回复也必须符合实际结果。如果工具返回的是待处理状态或错误,就不能宣称取消已经完成。最终消息应以工具返回的状态为准。本站的 AI 智能体安全护栏指南进一步介绍了相关的操作边界。

大模型幻觉检测:一个可以直接运行的校验示例

对于范围明确的事实字段,可以把模型给出的值与获准使用的记录核对,再由应用自行生成最终答案。就这个字段而言,这比判断任意一段文字“听起来是否一致”更可靠。

下面的 Python 示例使用的是演示用的客服政策测试数据,并非真实业务政策。将它保存为 verify_answer.py,运行 python3 verify_answer.py 即可。它只使用标准库,不调用任何 API。

Python
# Records must be filtered for the caller's access and policy scope
# before reaching this function. These are illustrative fixtures.
records = {
    "support-policy": {
        "text": "The support channel for this workspace is email.",
        "current": True,
        "fields": {"support_channel": "email"},
    }
}


def validate(result, sources):
    keys = {"status", "field", "value", "source_id", "quote"}
    if not isinstance(result, dict) or set(result) != keys:
        return False
    if result["field"] != "support_channel":
        return False
    if result["status"] == "unknown":
        return all(result[k] is None
                   for k in ("value", "source_id", "quote"))
    if result["status"] != "answered":
        return False
    if not all(isinstance(result[k], str)
               for k in ("value", "source_id", "quote")):
        return False
    source = sources.get(result["source_id"])
    if source is None or source["current"] is not True:
        return False
    quote = result["quote"].strip()
    return (
        bool(quote)
        and quote in source["text"]
        and result["value"]
        == source["fields"].get(result["field"])
    )


proposal = {
    "status": "answered",
    "field": "support_channel",
    "value": "chat",
    "source_id": "support-policy",
    "quote": "The support channel for this workspace is email.",
}

if not validate(proposal, records):
    print("Hold: evidence or value check failed.")
elif proposal["status"] == "unknown":
    print("I cannot confirm the support channel from these records.")
else:
    print(f"Your support channel is {proposal['value']}.")

模型给出的 chat 会被拦下,即使它引用的原文确实存在。如果值是 email,则能通过这一范围有限的校验。确定答案的是可信字段,而不只是引文匹配。

**必须看清它的边界:**这个校验器无法判断自由文本解释是否属实、政策负责人是否录入了正确事实,或上游的访问权限筛选是否生效。它的 unknown 分支只验证响应形式是否被允许,并不判断这次不作答是否必要。这些问题要交给其他检查和评测。对于影响重大的固定事实,用可信数据填充模板,可能就完全不需要生成了。

评测既要奖励答对,也要认可该停就停

评测,也称 eval,是按照预期行为对应用进行的可重复测试。应围绕客户实际遇到的错误建立评测,并在模型、提示词、检索索引、工具 schema 或政策变更时运行。

分别记录这些结果:有依据的正确答案、没有依据的答案、恰当的不作答、不必要的不作答,以及无效的拟执行操作。只看一个平均值,会掩盖改进究竟来自更好的证据,还是仅仅因为系统拒绝回答了更多问题。

精确值、来源是否属于授权集合、必填字段、权限和工具结果,交给普通代码检查。涉及语言判断的问题,例如某段原文是否支持一种改写,可以交给模型裁判,并用人工审核过的示例校准其判断。LLM 裁判本身也是会犯错的模型,不能充当独立的事实来源。

Promptfoo 是一款评测工具,其模型评分断言包括相对于参考答案的事实准确性,以及对所提供上下文的忠实度。这个区分很有用:回答可以完全符合一份过期文档,却不符合今天的实际情况。先明确怎样才算通过,再参考 Promptfoo 指南搭建测试框架。

Promptfoo 文档列出的模型评分评测断言
Promptfoo 文档中的断言区分了事实准确性与对上下文的忠实度。

每条测试轨迹都要把请求、检索证据、拟用参数、实际执行后的工具结果和最终回复保存在一起。用例失败时,这份记录能告诉你该从哪里修。即使模型裁判给文字打了高分,引用缺失或参数无效也必须明确判为失败。

哪些“解决方案”被高估了?

RAG 不能让每个答案都变成真的。 检索到了有用的段落,模型仍可能读错;引用与原文一字不差,原文也可能早已过时。检索和生成要分开测试,信息源集合也要有明确的负责人。

更大的上下文窗口不能替代信息源筛选。 Anthropic 的上下文工程指南提醒,随着上下文变长,召回率和精确率可能下降。应放入相关规则、例外条件和必要的账户证据。把所有文档都塞进提示词,不等于建立了内容更新机制。

另一个模型说“看起来没问题”,本身不算核验。 要给审查者真实证据和清晰标准。缺少独立证据时,两个模型意见一致,可能只是保留了同一个没有依据的假设。

合法的 JSON 不是答案正确的证明。 schema 可以要求填写来源 ID 和数值参数,但应用仍然需要确认来源确实存在,而且数字的含义正确。

真正需要关注的边界,是信息源回答不了哪些问题、校验机制验证不了哪些字段,以及哪些操作无法安全撤销。不存在一个通用的幻觉率,能告诉你某个具体工作流是否已经可以上线。

小团队本周就能执行的清单

如果功能会向客户作出事实性承诺,或修改业务记录,就应该立即着手。如果它只是起草材料,且已经有负责人逐项对照来源审核,可以先建立评测集、改进现有审核,再考虑复杂的自动化架构。如果确定性的查询已经能返回权威字段,可能根本不需要模型。

以下是建议的起步计划,并不代表做完一周工作就能证明系统具备生产环境可靠性。

  1. 周一:确定边界和负责人

    选定一个面向客户的工作流。运营人员明确权威信息源、信息源负责人,以及需要转交时的接收方。开发者列出哪些陈述和工具调用在缺乏依据时必须阻止。写清楚怎样才算一次正确的停止。

  2. 周二:建立小规模回归用例集

    先准备 20 个用例:8 个可以回答的问题、4 个证据缺失的情形、4 个证据过时或相互冲突的情形,以及 4 个工具参数无效或含义不清的情形。有历史事故就纳入。记录预期答案或停止方式、所需证据和禁止执行的操作。这是起步用例集,并非具有统计代表性的样本。

  3. 周三:修复证据检索和兜底机制

    修复检索漏掉现行规则、或遗漏其例外条件的用例。加入明确的证据不足响应。确认账户查询失败后,系统不会悄悄把猜测当成账户答案。

  4. 周四:在回复和执行前加入校验

    校验来源 ID 和引文,将关键字段与可信记录核对。校验工具参数的单位、记录归属和允许执行的操作。客户回复必须等所需检查全部通过后再放行;若先流式输出没有依据的文字、之后才检查,这道边界就失效了。

  5. 周五:复盘失败用例,决定发布范围

    用同一组用例测试拟上线的变更。扩大开放范围前,必须确保这组用例中没有已知的关键失败,同时也要认识到,通过测试并不等于生产风险为零。不必要的转交也要复盘。明确负责人,持续抽查线上轨迹、补充新的事故用例,并负责回滚。

第一个周一,就从最近的一次错误回答开始,保存它的完整轨迹。判断证据是缺失、过期、被误读,还是被绕过。加入能拦住这类错误的最小检查,再把这次事故固化为永久回归用例。

AI 幻觉常见问题

大模型幻觉到底是什么?

它是大语言模型作为答案生成的错误或缺乏依据的主张。对于业务应用,既要检查事实是否准确,也要检查所提供的证据能否支持该主张。响应格式错误或工具调用失败可以是错误,但未必属于幻觉。

如何衡量大模型幻觉?

先定义任务、证据和失败判定规则。将没有依据的答案、恰当的不作答和不必要的不作答分开统计,工具参数也要单独评测。说明统计单位是主张、整条回复,还是操作;分母不同,回答的问题也不同。

如何减少大模型幻觉?

提供最新且符合适用范围的证据;允许系统以有用的方式停止;核验来源引用和关键值;校验工具调用;重新运行针对具体任务的评测。如果应用验证固定字段比验证自由文本解释更可靠,就选择范围更窄的答案格式。

想获取构建可靠 AI 工作流的实用指南,可以订阅邮件通讯。

发布日期
分类
Build
系统提示词怎么写?从原理、示例到可复用模板

系统提示词怎么写?从原理、示例到可复用模板

系统提示词该写什么,哪些内容应留给用户请求?本文梳理 Anthropic、OpenAI 和 Google 的指令入口,讲清角色、规则、输出与工具使用的写法,并提供客服示例和可复制模板。从项目指令的作用范围,到多轮对话中的规则延续,再到提示词注入与应用权限,帮你判断问题究竟出在指令、证据还是执行机制。2026年10月17日Build
函数调用详解:让大模型用上你的工具与数据库

函数调用详解:让大模型用上你的工具与数据库

函数调用如何让大模型查询数据库、使用工具?本文从完整的订单状态查询代码入手,讲清工具定义、参数校验、执行与结果回传,对照 OpenAI、Anthropic 和 Gemini 的消息格式,并说明结构化输出与 MCP 各自适合什么场景,以及上线前如何处理权限、工具误选、失败重试和重复执行,帮助你跑通首个只读查询。2026年10月17日Build
MCP是什么?与 API 有何区别,产品该如何选择

MCP是什么?与 API 有何区别,产品该如何选择

MCP是什么,已有 API,还需要它吗?本文从工具发现、认证授权、部署和版本兼容入手,比较 MCP 与 REST API,并用创建工单流程说明两套接口如何共享业务规则。结合 Claude、ChatGPT、Cursor 和 GitHub Copilot 的文档,判断何时保留 API、增加 MCP 或同时提供两者。2026年10月17日Build
Hermes Agent 评测:记忆、技能与成本,是否值得部署?

Hermes Agent 评测:记忆、技能与成本,是否值得部署?

Hermes Agent 值得安装吗?这篇评测从持久记忆、自动创建技能、消息网关和定时任务出发,梳理桌面与终端安装、模型选择、Nous Portal 价格及云端托管费用。以每周客户反馈简报为例,说明如何核实记忆写入、审核技能变更、限制权限,并按每份合格报告的总成本判断是否适合企业试点。2026年10月17日Build
Ollama vs llama.cpp:本地大模型部署,怎么选才合适?

Ollama vs llama.cpp:本地大模型部署,怎么选才合适?

Ollama vs llama.cpp 怎么选?本文从模型管理、GGUF 量化、API 兼容性、并发配置与 GPU 支持逐项比较,说明何时选择 Ollama 的便捷流程,何时需要 llama.cpp 的直接控制,并梳理迁移前要核对的模型文件、上下文与请求行为,帮助团队根据实际负载决定是否更换运行时。2026年10月16日Build
Devin 价格与 Desktop 评测:迁移、功能和选型

Devin 价格与 Desktop 评测:迁移、功能和选型

Devin 价格是否划算,取决于工作流程能否受益。本文梳理 Devin Desktop 的 Agent Command Center、Spaces、Devin Local 与 ACP 接入,解释 Windsurf 迁移缺口、各套餐费用及 Teams 计费差异,说明何时更适合 Cursor 或 Claude Code。2026年10月16日Build
上下文窗口有多大才够用?读懂 token 限制与长上下文

上下文窗口有多大才够用?读懂 token 限制与长上下文

上下文窗口有多大,决定了模型一次能容纳多少输入与输出,却不保证它能准确利用所有信息。本文解释 token 限制与上下文长度的区别,对照 Claude、GPT-6 和 Gemini 4 的窗口及输出规则,并用预算示例说明为何提示词放得下、回答却可能超限,再介绍检索、摘要、压缩和缓存各自能解决什么问题。2026年10月16日Build
RAG 与微调怎么选?企业知识、模型行为与成本对比

RAG 与微调怎么选?企业知识、模型行为与成本对比

RAG 与微调该怎么选?先分清模型缺少企业知识,还是反复出现行为问题。本文通过客服问答、品牌文案和工单分类三个案例,拆解搭建方式、训练与推理费用,并说明提示词工程、长上下文和缓存如何改变成本比较。结合模型支持、部署端点、文档权限与评估要求,帮助团队判断何时检索、何时微调,以及何时值得将两者结合。2026年10月16日Build
订阅通讯

每周日,一封信。写运转中的系统,不写热评。

每周一期。无垃圾邮件。随时退订。