AI 幻觉怎么治?检索、自查、置信度三条路,都有论文撑腰(2026实战)

模型一本正经地报出一个不存在的工具名,客户端直接报错「工具未找到」;回答里编一个不存在的论文号,读者拿去引用就闹笑话。写工具、做产品,幻觉都是绕不开的坎。今天不聊它是什么,聊怎么把它按住。

之前写过一篇 AI 幻觉是什么,讲的是原理和成因。这篇讲手段。检索、验证、让模型自己报不确定度,三条路各有适用场景,也都有实证数据支撑,不是玄学。

第一条路:让答案有出处,检索增强

幻觉的直接原因是模型靠参数记忆瞎编。编的比例有没有办法量?Kadavath 等人在 2022 年测过一批模型,采样式问答任务里,GPT-3 的答案只有 43% 到 57% 能被人工标注确认,模型自己评估哪个选项「我最确定」,选出来的答案反而有 63% 到 73% 是对的。这个结论值得记住:模型其实知道自己什么时候在瞎编,它的自我评估比随机采样可靠。

RAG 的思路就是不给它瞎编的机会。把外部资料先检索出来塞进上下文,要求模型只根据资料回答。Lewis 等人 2020 年那篇提出 RAG 的论文里,开放域问答任务 Natural Questions 上,参数量 3 个多亿的 BART 底座加上检索,效果超过了 parameterized seq2seq 基线。资料在手,编的空间就被压缩了。

工具调用是同一逻辑的变体。模型报出工具名和参数,你的代码真实执行,返回真实数据,模型照着结果说话。之前写 Function Calling 那篇时讲过六步流程,本质就是把「答」换成「查了再答」。Kimi 文档里有个模式值得抄:工具数量多的时候别一次全塞给它,先给一个工具搜索工具,让它先查目录再调用,工具选错的概率会明显下降,这比把一百个工具描述全堆进上下文靠谱。

检索不是万能:检索失败时,模型会退回老路

实践中 RAG 项目最常见的翻车不是「检索不准」,而是「没检索到也硬答」。分块切得太碎或太粗,检索回来的片段丢掉了关键上下文;用户问题写得含糊,关键词和文档对不上,两种情况都会让模型拿到一堆不相干的资料,然后照编不误,还显得有理有据。

所以检索质量本身就是幻觉治理的一环。分块怎么切,看之前那篇 RAG 分块,结构、粒度、重叠三个决定;查询太含糊就上查询改写,多查询、HyDE、Step-back 三个套路在 查询改写那篇都有。另外建议在提示词里明写一条逃生通道:「如果提供的资料里没有相关信息,直接回答不知道,不要推测」。这条规则简单,实测里确实能减少一批强行编造的回答。

第二条路:让模型自查,验证链

检索解决「资料从哪来」,但没解决「资料和答案对不对得上」。Meta 的研究团队 2023 年提出 Chain-of-Verification,思路是把验证拆成四步:先起草一个答案,然后针对草稿里的事实论断设计验证问题,逐个独立回答这些验证问题(独立回答是为了避免草稿里的错误污染验证),最后拿着验证结果生成修订版。

论文在维基数据列表类问题、MultiSpanQA、长文本生成三类任务上验证了有效性,幻觉率都有下降。原理不复杂:让模型检查自己的答案,比让它一口气写完更可靠,就像写完代码回头跑一遍测试。

顺着这个思路还有一个更便宜的招:看模型自己的置信度。API 里打开 logprobs 参数,每个 token 的对数概率都能拿到,模型对某个事实犹豫时,对应 token 的概率往往明显偏低。之前那篇 logprobs 入门写过怎么读这些数字,把「输出置信度低于阈值就转人工」做成规则,能拦下一部分高风险编造。它抓不住「自信地胡说」的情况,所以要和检索配合用,不能单打独斗。

这套流程 API 调用次数会翻几倍,成本敏感的场景要权衡。轻量替代是提示词里加一句「回答前先列出你用到的事实,标注哪些不确定」,实践里也有不错的效果,只是没有 CoVe 这种论文级的验证。

第三条路:约束解码,把输出框死

结构化输出的场景有更硬的手段。让模型输出 JSON,字段名和格式都可以用约束解码锁死:把 JSON Schema 编译成 token 级别的掩码,每一步只允许生成合法 token,格式错误从根上不可能发生。这在之前讲约束解码那篇里展开过,llama.cpp 和 OpenAI SDK 的 structured outputs 都是这个原理。

格式锁死了,内容还是会编。所以 JSON 输出最好带证据字段,让模型给每个结论附上依据编号,后处理时逐条核对依据是否真实存在。字段是软约束,但配合抽查能兜住大部分编造。

落地组合建议

三条路不是互斥的,实战里按场景组合:

问答类产品,RAG 打底,效果好不好不能靠感觉,用 RAGAS 那篇讲的 Faithfulness 指标持续监控,掉分就查分块或检索策略。工具调用场景,描述写清楚,工具多就上工具搜索模式。高风险场景(医疗、法律、金融),加一层 CoVe 自查或人工复核,让模型在不确定时明确说「我不确定」,别硬答。

最后提醒一句:所有手段都是降概率,不是归零。模型自我评估可靠这个发现说明,让它习惯性输出「不确定」三个字,比什么花活都实用。还有一个容易漏的点:训练数据有截止日期,价格、版本号、政策这类时效性事实,永远走检索或工具拿实时数据,别让模型凭记忆答,这是幻觉重灾区里最容易被例行公事化的一个。

发表评论