这篇文章我想从一个很普遍的现象切入。
你肯定有过这样的体验:让 AI 帮你总结一份长文档,它写得头头是道,引用了各种「原文观点」,但你翻回去核对时,发现有好几处根本对不上号。
那一刻你会怀疑,是我看漏了,还是它在瞎编?
大概率是后者。
这就是所谓的「幻觉」。模型错得太自信,没有「我不确定」,没有「这里可能需要再确认」,而是一本正经地编造了你没见过的内容。
以前我觉得这只是模型不够强,多换几个 prompt 就能解决。但最近看了 Anthropic 官方关于减少幻觉的最佳实践,我才意识到,问题不在模型,而在我们怎么跟它协作。
或者说,问题不在 AI,而在系统。
允许它说「我不知道」
我们总希望 AI 给出一个确定的答案。
但真相是,很多时候它真的不知道。或者更准确地说,它手里的信息不足以支撑一个确定的结论。
Anthropic 给的第一个建议很简单:明确告诉 Claude,你可以说「我不知道」。
听起来很废话对吧?
但你回想一下,你平时的 prompt 是不是充满了「请详细分析」「请给出专业建议」「请确保准确」这种要求?这些词潜台词是:你必须给我一个答案,而且这个答案要看起来很厉害。
这就把模型逼到了一个角落。它宁愿编一个看起来合理的答案,也不愿承认自己没把握。
现在我改了一个习惯。
在所有涉及事实判断、数据分析、文档解读的任务里,我都会加上一句:
「如果你对任何方面不确定,或者材料缺少必要信息,请直接说『我没有足够的信息来自信地评估这一点』。」
效果立竿见影。
它开始频繁地停下来,告诉我「这部分报告里没有提到具体的数据」「这段描述不够清晰,无法判断是否符合 xxx 第 XX 条」。
一开始我觉得这挺扫兴的,我要的是答案,不是一堆「不知道」。
但后来我发现,这些「不知道」恰恰是最有价值的部分。它帮我把模糊地带标出来了,让我知道哪些地方需要人工介入,哪些地方需要补充材料。
这才是真正的协作。
先摘录,再分析
处理长文档时,幻觉最容易出现在哪里?
出现在模型「凭印象」回答问题的时候。
当文档超过几千字,模型不可能记住每一个细节。它只能凭借模糊的印象来生成回答。而这个过程中,细节很容易丢失、扭曲,甚至被替换成它「觉得应该如此」的内容。
Anthropic 给了一个很笨但很有效的办法:
让 Claude 在执行任务之前,先逐字提取相关引文。
比如你要让它审查一份隐私政策是否符合 GDPR(通用数据保护条例)。不要直接问「这份政策合规吗?」
而是分两步走:
第一步,让它从政策中提取与 GDPR 合规性最相关的确切引文。如果找不到,就说「未找到相关引文」。
第二步,让它基于这些引文进行分析,并且必须通过编号引用这些引文。分析只能基于所提取的引文,不能引入外部知识。
这个流程看起来很繁琐,但它解决了一个核心问题:
把模型的「记忆依赖」变成了「证据依赖」。
我以前做文献调研时也踩过这个坑。让 AI 总结一篇论文的核心贡献,它经常会把作者没说的结论安上去,或者把实验条件搞混。
现在我学乖了。
我先让它把论文里关于「核心贡献」「实验设计」「局限性」的段落原封不动摘出来。然后再让它基于这些摘录写总结。
虽然多了一步,但准确率提升巨大。而且因为每一步都有原文对照,我可以快速验证它的推理是否靠谱。
让每一项主张都可追溯
如果说「先摘录再分析」是针对单次任务的技巧,那「引用验证」就是一个更系统的思路。
它的核心逻辑是:
让模型为自己的每项主张提供来源,使其回答具有可审核性。
Anthropic 举了一个新闻稿的例子。
你给模型一堆产品简介和市场报告,让它起草一份新闻稿。写完后,让它回头审查新闻稿里的每项主张,从原始材料中找到支持它的直接引文。如果某项主张找不到支持性引文,就删除它,并用空括号 [] 标记。
这个做法的本质,是把「生成」和「验证」拆成了两个阶段。
第一阶段,模型自由发挥,写出初稿。
第二阶段,模型切换角色,变成审核员,逐项检查自己的输出是否有据可依。
我在写文章时也用过类似的思路。
有时候我会让 AI 帮我扩写某个观点,但它经常会加入一些我没提供的背景信息。这些信息听起来很有道理,但我无法确认是否准确。
后来我加了一个步骤:
让它写完初稿后,再跑一轮「溯源检查」。对于每个关键论点,让它标注出信息来源——是我提供的素材,还是它的通用知识。如果是后者,我就手动核实或直接删掉。
这个过程有点像学术论文的参考文献管理。
你不能只说「研究表明」,你得告诉读者是哪篇研究、谁做的、什么时候发表的。否则你的论证就没有根基。
高级技巧
除了上面这些基础策略,Anthropic 还提到了一些进阶方法。
思维链验证,就是让模型在给出最终答案之前,逐步解释其推理过程。
这招在复杂逻辑任务里特别有用。比如让它做一个技术选型决策,你不要只问「选 A 还是选 B」,而是让它先列出评判标准,再逐一分析 A 和 B 在每个标准下的表现,最后给出结论。
这样你能看到它的思考路径,一旦发现某一步逻辑跳跃或假设错误,就能及时纠正。
N 选优验证,则是用相同的提示多次运行模型,比较输出结果。
如果三次运行的答案高度一致,可信度就高。如果三次答案差异很大,说明这个问题本身可能存在歧义,或者模型在这个领域不够稳定。
我偶尔会用这招来测试一些开放性问题的边界。比如让模型三次回答「如何设计一个 Agent 工作流」,然后对比三次的侧重点差异。有时候你会发现,某些角度只在某一次出现,那可能就是被你忽略的盲点。
迭代优化,是把模型的输出作为后续提示的输入,让它自己验证或扩展之前的陈述。
比如第一轮让它写一个方案,第二轮让它找出方案里的潜在风险,第三轮让它针对这些风险提出改进措施。每一轮都在上一轮的基础上深化,而不是一次性要求完美。
这个技巧我觉得不仅适用于AI提示词的优化,对于做产品,学习......很多很多地方都适用。
先完成再完善,一次达到完美基本上是不可能的。
限制外部知识:只用我给的材料
最后一个策略,可能是最简单但也最重要的:
明确指示模型仅使用所提供文档中的信息,不使用其通用知识。
这听起来很反直觉。我们花钱买这么聪明的模型,不就是想用它的知识库吗?
但在很多场景下,通用知识恰恰是幻觉的来源。
比如你让它分析一份内部会议纪要,它可能会不自觉地把行业常识、公开报道里的信息混进去。这些信息单独看没错,但放在你的具体语境里,可能就是误导。
所以我现在养成一个习惯。
在处理任何封闭领域任务时,我都会在 prompt 开头加一句:
「请仅基于以下材料回答问题,不要引入外部知识。如果材料中没有相关信息,请明确说明。」
这句话像一个围栏,把模型的注意力锁定在我给的材料范围内。它不能再「自由联想」,只能「就地取材」。
回到系统能力
看完这些最佳实践,我有一个很深的感受:
减少幻觉,本质上不是一个 prompt 技巧问题,而是一个系统设计问题。
你不能指望模型一次性给出完美答案。你需要设计一套流程,让它分步骤执行,每一步都有明确的输入、输出和验证机制。
先摘录,再分析。先生成,再验证。先推理,再结论。
这套流程和软件工程里的 CI/CD 很像。
你不会直接把代码推到生产环境,你会先跑单元测试,再集成测试,再人工 review。每一步都在降低出错概率,每一步都在增加可追溯性。
AI 协作也是一样。
你把任务拆解得越细,验证环节越多,幻觉的空间就越小。
当然,这些技术并不能完全消除幻觉。Anthropic 自己也说了,请始终验证关键信息,尤其是在做出高风险决策时。
但至少,我们现在有了一套更靠谱的协作方式。
不再是被模型牵着鼻子走,而是我们设计系统,让模型在系统里干活。
夜雨聆风