防幻觉策略
幻觉(Hallucination)是指AI自信地输出了错误的、不存在的,或者凭空捏造的信息。这是大语言模型的固有局限,但通过提示词设计,可以大幅降低它的发生率。
什么是AI幻觉?
一个真实的例子
User: 请介绍一下《时间简史》这本书的第三章内容。
AI: 《时间简史》第三章标题是"膨胀的宇宙",主要讨论了...
[开始详细描述本章内容]问题来了:《时间简史》的第三章真的是这个内容吗?
如果AI并没有真正"读过"这本书(它的训练数据可能不完整),它可能会:
- 编造一个章节标题
- 混淆不同章节的内容
- 编造根本不存在的细节
这就是幻觉——AI自信地输出了不存在的信息。
为什么AI会产生幻觉?
语言模型的本质是预测下一个最可能出现的词。当它不知道某个信息时,不会像人一样说"我不知道"——而是会生成一个听起来合理的回答。
这就像一个努力想表现好的实习生:
你问他:"上周的会议纪要在哪?" 他不知道,但不想显得无能,于是说:"应该在共享盘的会议文件夹里..."
他不是故意撒谎,只是在不确定时仍然给出了一个回答。
AI也是这样——它不想让你失望,所以即使不确定,也会给出一个听起来像回事的答案。
幻觉的常见形式
形式一:编造事实
User: 2024年世界杯冠军是谁?
AI: 2024年世界杯冠军是阿根廷队。(错误!2024年没有世界杯)形式二:虚构引用
User: 爱因斯坦在哪篇论文中提出了"上帝不掷骰子"?
AI: 这句话出自爱因斯坦1926年发表的论文《量子力学与物理现实》...
(错误!这句话出自书信,不是论文,且论文名称也是编造的)形式三:错误归因
User: "预测未来最好的方式就是创造它"这句话是谁说的?
AI: 这句话是乔布斯说的。(错误!这是Alan Kay说的)形式四:逻辑推理错误
User: 如果所有A都是B,所有B都是C,那么所有C都是A吗?
AI: 是的,所有C都是A。(错误!应该是所有A都是C,反过来不成立)五种防幻觉策略详解
策略一:明确允许AI说"我不知道"
这是最简单也最有效的方法。在System Prompt中加入明确指令:
System Prompt:
如果你不确定某个信息,请直接说"我没有关于这个问题的可靠信息",
不要猜测或编造答案。
不确定 ≠ 失败,诚实才是好助手。或者更温和的方式:
System Prompt:
当遇到你不确定的问题时,请:
1. 明确说明你不确定
2. 提供你可能知道的相关信息
3. 建议用户自行验证实际效果对比:
❌ 没有防幻觉指令
User: 2024年诺贝尔物理学奖获得者是谁?
AI: 2024年诺贝尔物理学奖获得者是...[可能编造一个名字]
✅ 有防幻觉指令
User: 2024年诺贝尔物理学奖获得者是谁?
AI: 我的知识截止于2025年初,但我无法确定2024年诺贝尔物理学奖的具体获得者。
建议你查询诺贝尔奖官方网站获取最新准确信息。为什么这有效?
AI模型在训练时学习了很多"不确定时如何表达"的语料。当你明确允许它说"不知道",它会从这些语料中调取正确的表达方式,而不是强行编造。
策略二:限制AI只使用你提供的信息
这种方法特别适合需要处理特定文档或数据的场景。明确告诉AI:只能基于提供的内容回答,超出范围就说不知道。
请只根据 <reference> 标签中的内容回答问题。
如果参考资料中没有足够的信息,请回答:"根据提供的资料,无法回答这个问题。"
<reference>
[你提供的文档内容]
</reference>
<question>
[用户的问题]
</question>实战案例:企业知识库问答
你是一位企业内部知识库助手。
请只根据以下知识库内容回答员工问题。
如果知识库中没有相关信息,请明确说明,不要编造。
<knowledge_base>
## 报销政策
1. 交通费:实报实销,单次超过500元需部门主管审批
2. 餐饮费:每日上限100元,需提供发票
3. 住宿费:出差住宿标准为经济型酒店,每晚不超过300元
## 请假制度
1. 年假:入职满一年后享有5天年假
2. 病假:需提供医院证明,年度累计不超过15天
3. 事假:需提前3天申请,年度累计不超过10天
</knowledge_base>
问题:我可以带宠物上班吗?AI的回复会是:
根据提供的知识库内容,没有关于"带宠物上班"的相关政策说明。
建议您咨询人力资源部门获取准确信息。而不是编造一个"可以"或"不可以"的答案。
进阶技巧:引用来源
回答问题时,请引用具体来自哪个章节。
格式:根据[章节名],[回答内容]
如果找不到相关内容,请说"知识库中未找到相关信息"。策略三:先找证据,再给结论
这是思维链技巧在防幻觉上的应用。让AI先找出支持结论的证据,再下判断:
在回答之前,请先在 <evidence> 标签中找出文档里
直接支持你结论的句子或段落。
如果找不到支持性证据,就说找不到,不要编造。
<document>
[文档内容]
</document>
<question>
[问题]
</question>实战案例:合同审查
你是一位合同审查专家。
请审查以下合同条款,判断是否存在不利于乙方的条款。
请在 <evidence> 中引用具体的合同原文,
然后在 <analysis> 中分析其影响,
最后在 <conclusion> 中给出结论。
<contract>
第5条 乙方应在合同签订后30日内完成全部工作,
逾期每日按合同总额的10%支付违约金。
第8条 甲方有权随时终止合同,无需支付任何赔偿。
</contract>AI回复示例:
<evidence>
找到以下条款原文:
1. "逾期每日按合同总额的10%支付违约金"
2. "甲方有权随时终止合同,无需支付任何赔偿"
</evidence>
<analysis>
条款分析:
1. 第5条违约金条款:10%的日违约金过高,通常行业标准为0.5%-1%。
若合同总额100万,逾期一天就要支付10万,风险极大。
2. 第8条单方终止条款:甲方可以无理由终止合同且不赔偿,
这意味着乙方投入的成本可能无法收回,完全不公平。
</analysis>
<conclusion>
存在不利于乙方的条款:
1. 违约金比例过高,建议降至0.5%-1%/日
2. 单方终止条款显失公平,建议增加乙方补偿条款
</conclusion>这种方法的好处是:AI必须先找到证据,无法凭空编造。
策略四:要求标注置信度
让AI对它的回答标注置信度,可以帮助你判断哪些内容需要核实:
对于你回答中的每个关键信息,请在括号内标注置信度:
- (高置信度)= 你非常确定
- (中置信度)= 你有一定把握但不完全确定
- (低置信度)= 你只是猜测,建议用户自行核实实战案例:技术问题回答
User: Python的GIL是什么?它对多线程有什么影响?
AI: Python的GIL(Global Interpreter Lock,全局解释器锁)(高置信度)
是CPython解释器中的一把互斥锁,确保同一时刻只有一个线程执行Python字节码(高置信度)。
对多线程的影响:
1. CPU密集型任务无法利用多核优势(高置信度)
2. I/O密集型任务影响较小(高置信度)
3. GIL在Python 4.0中会被移除(低置信度——这是传言,建议查看官方计划)
解决方案:
- 使用multiprocessing替代threading(高置信度)
- 使用其他Python实现如Jython(中置信度)
- 使用C扩展释放GIL(高置信度)策略五:降低随机性(API开发者专用)
如果你是通过API调用AI,可以通过调整参数来减少"创意性"发挥带来的错误:
import anthropic
client = anthropic.Anthropic()
response = client.messages.create(
model="claude-sonnet-4-20250514",
max_tokens=1024,
temperature=0, # 关键:设置为0,让输出更确定
messages=[
{"role": "user", "content": "什么是Python的GIL?"}
]
)参数说明:
| 参数值 | 效果 |
|---|---|
| temperature=0 | 最保守,输出最确定,适合事实性任务 |
| temperature=0.3 | 略有变化,但仍保守 |
| temperature=0.7 | 平衡,有创意但不疯狂 |
| temperature=1.0 | 最有创意,但可能不准确 |
什么时候用 temperature=0?
- 事实性问答
- 代码生成
- 数据提取
- 格式转换
什么时候用 temperature>0.5?
- 创意写作
- 头脑风暴
- 角色扮演对话
高风险场景的特别防护
某些场景中,幻觉的代价极高,需要更严格的防护:
医疗健康场景
System Prompt:
你是一位健康信息助手,不是医生。
重要规则:
1. 只提供一般性健康知识,不做诊断
2. 不推荐具体药物或治疗方案
3. 涉及具体病症时,必须建议咨询专业医生
4. 对于不确定的信息,明确说明
每条健康建议后,必须加上:
"以上信息仅供参考,不构成医疗建议。如有健康问题请咨询专业医生。"法律场景
System Prompt:
你是一位法律信息助手,不是律师。
重要规则:
1. 只提供一般性法律知识,不提供具体法律建议
2. 不评估具体案件的胜诉可能性
3. 引用法条时标注来源
4. 对于不确定的内容,明确说明
每条法律信息后,必须加上:
"以上信息仅供参考,不构成法律建议。具体法律问题请咨询专业律师。"财务金融场景
System Prompt:
你是一位金融知识助手,不是理财顾问。
重要规则:
1. 只提供一般性金融知识,不提供投资建议
2. 不预测具体股票、基金的走势
3. 涉及具体投资决策时,建议咨询专业人士
4. 对于不确定的信息,明确说明
每条金融信息后,必须加上:
"以上信息仅供参考,不构成投资建议。投资有风险,决策需谨慎。"一个综合防幻觉的System Prompt模板
你是一位严谨的研究助手。你必须遵守以下规则:
1. 信息边界
- 只基于用户提供的文档内容回答问题
- 如果文档中没有足够信息,请明确说:"根据提供的资料,无法回答这个问题。"
- 不要用你自己的训练知识来"补充"文档之外的内容
2. 引用规范
- 引用具体信息时,指出它来自哪个段落
- 使用引号标注原文
3. 不确定性处理
- 对于数字、日期、专有名词,格外谨慎
- 不确定时,宁可说不确定也不要猜测
4. 置信度标注
- 关键信息请标注置信度(高/中/低)
5. 边界声明
- 对于专业领域问题,提醒用户咨询专业人士小结:防幻觉速查表
| 场景 | 推荐策略 |
|---|---|
| 通用问答 | 允许说"不知道" |
| 文档问答 | 限制只用提供的信息 |
| 判断分析 | 先找证据再下结论 |
| API开发 | temperature=0 |
| 医疗/法律/金融 | 多重防护 + 专业声明 |
重要提醒
防幻觉技巧可以大幅降低错误率,但不能100%消除幻觉。对于关键决策,永远要人工核实AI的输出。
下一步
掌握了防幻觉策略后,让我们进入 提示词工程高级篇,学习如何处理更复杂的任务。