Skip to content

防幻觉策略

幻觉(Hallucination)是指AI自信地输出了错误的、不存在的,或者凭空捏造的信息。这是大语言模型的固有局限,但通过提示词设计,可以大幅降低它的发生率。

什么是AI幻觉?

一个真实的例子

User: 请介绍一下《时间简史》这本书的第三章内容。

AI: 《时间简史》第三章标题是"膨胀的宇宙",主要讨论了...
    [开始详细描述本章内容]

问题来了:《时间简史》的第三章真的是这个内容吗?

如果AI并没有真正"读过"这本书(它的训练数据可能不完整),它可能会:

  1. 编造一个章节标题
  2. 混淆不同章节的内容
  3. 编造根本不存在的细节

这就是幻觉——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,可以通过调整参数来减少"创意性"发挥带来的错误:

python
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的输出。

下一步

掌握了防幻觉策略后,让我们进入 提示词工程高级篇,学习如何处理更复杂的任务。