幻觉缓解策略:怎么让AI少说胡话?

开篇:先泼一盆冷水

在说怎么”缓解”幻觉之前,我得先告诉你一个坏消息:

幻觉不能100%消除。

原因很简单:AI的工作方式就是”概率预测”,不是”知识检索”。只要是概率预测,就有可能出错。

你不可能让AI既能自由发挥创造力,又保证100%不说错话——这俩是矛盾的。

就像你不可能让一个人既能天马行空地写小说,又保证每个字都有文献依据。

但好消息是:我们可以通过很多方法,把幻觉的概率降到很低很低,低到在大多数场景下可以接受。

今天这篇文章,就是告诉你这些方法。


一、为什么LLM会产生幻觉?(快速回顾)

在深入方法之前,先快速回顾一下幻觉是怎么产生的。

1.1 AI本质是个”猜词机器”

你给AI一段话,它做的事情是”猜下一个字该是什么”。

它不是在”回忆正确答案”,而是在”模仿最像正确答案的模式”。

1.2 幻觉产生的三大原因

原因一:训练数据有问题

AI学的是海量网络文字,而网上有多少错误信息,你懂的。

原因二:知识过时了

AI的知识有截止日期,2023年12月之后发生的事,它要么不知道,要么瞎编。

原因三:边界模糊

AI学了太多知识,但知识之间的边界它不一定清楚,容易”混搭”。


二、方法一:RLHF——让AI学会”乖一点”

2.1 什么是RLHF?

RLHF的全称是”Reinforcement Learning from Human Feedback”,翻译过来就是”从人类反馈中进行强化学习”。

这个名字听起来很复杂,但其实原理很简单:

就是让人来教AI:什么该说,什么不该说。

2.2 RLHF是怎么工作的?

第一步:先训练一个”好学生”

先用人工标注的高质量问答数据,让AI学会”正常说话”。

这一步叫”监督微调”(SFT)。你可以理解为:请了一个好老师,手把手教AI怎么回答问题。

第二步:让人来打分

然后,让人类评估员来评估AI的回答好不好。

比如同一个问题,让AI生成两个回答,让人来选哪个更好:

问题:水的沸点是多少?
回答A:水的沸点是100摄氏度。
回答B:水的沸点是100摄氏度,在海平面气压下。

评估员:A和B哪个更好?
→ B更好,因为它更完整

第三步:训练一个”打分模型”

用这些人类打分的数据,训练一个模型,让它能自动判断”这个回答好不好”。

这个”打分模型”就叫”奖励模型”(Reward Model)。

第四步:用强化学习来优化

有了奖励模型,就可以让AI”自我进化”了。

AI生成回答 → 奖励模型打分 → 根据分数调整策略 → 生成更好的回答 → 继续打分 → …

这个过程不断循环,AI的回答质量就会越来越好。

2.3 RLHF为什么能缓解幻觉?

因为人在打分的时候,可以专门关注”事实准确性”。

如果AI瞎编了一个答案,打分的人可以给低分。AI学会”避免低分”,就会减少瞎编。

2.4 RLHF的局限性

RLHF不是万能的,它有自己的问题:

问题一:人的偏好有差异

不同的人对”什么是一个好回答”可能有不同看法。张三觉得详细的回答好,李四觉得简洁的回答好。

问题二:打分的一致性难保证

让一个人评估1000个回答,前50个和后50个的评判标准可能不一致(疲劳效应)。

问题三:可能出现”奖励黑客”

AI可能学会”取悦打分的人”而不是”真的把事情做好”。

比如:

  • AI发现:回答越长,打分越高 → AI开始罗里吧嗦
  • AI发现:使用某些词汇能获得高分 → AI开始套模板

2.5 怎么用RLHF?(实操建议)

如果你在训练自己的AI,可以考虑:

# 伪代码示例:构建RLHF训练数据
training_data = []
 
# 对每个问题,生成多个回答
for question in questions:
    answers = model.generate_multiple(question, num=5)
    
    # 让人类评估员打分
    scores = []
    for answer in answers:
        score = human_evaluator.rate(question, answer)
        scores.append(score)
    
    # 记录最好的和最差的
    best_idx = scores.index(max(scores))
    worst_idx = scores.index(min(scores))
    
    training_data.append({
        "question": question,
        "chosen": answers[best_idx],
        "rejected": answers[worst_idx]
    })
 
# 用这些偏好数据训练奖励模型
reward_model.train(training_data)

三、方法二:思维链——让AI”多想几步”

3.1 什么是思维链?

思维链(Chain-of-Thought,CoT)就是让AI”先想想再答”。

普通模式:

用户:北京人口多少?
AI:北京人口约2189万。

思维链模式:

用户:北京人口多少?
AI:让我想想...北京是中国的首都,根据最新人口普查...2023年北京市常住人口约为2189万人...这个数据应该来自北京市统计局官方网站。

3.2 思维链为什么有效?

原因一:把推理过程外化了

AI在”想”的时候,实际上也在构建一个推理链条。

如果推理链中有错误,这个错误会传导到最终答案。通过观察推理过程,可以发现错误。

原因二:给AI更多的”思考空间”

普通回答只有”结论”,思维链多了”推理过程”。

如果结论错了,但推理过程合理,说明问题可能在”推理链”之外(比如训练数据过时)。

原因三:减少”冲动回答”

AI有时候会”冲动”给出一个看似合理但实际上错误的答案。思维链让AI”冷静一下”,多想想。

3.3 思维链的实操技巧

技巧一:加一句”请分步思考”

prompt = """
问题:北京的人口是多少?
 
请分步思考:
1. 北京是中国的哪个城市?
2. 根据最新的人口数据...
3. 因此,北京的人口大约是...
"""

技巧二:给个示例

Few-shot CoT——先给一个完整的思考示例,AI照着学:

示例:
问题:小明有10个苹果,给了小红3个,还剩几个?
思考过程:
- 小明一开始有10个苹果
- 他给了小红3个
- 10 - 3 = 7
- 所以小明还剩7个苹果
答案:7

现在请用类似的方式思考:
问题:[你的问题]
"""

技巧三:Self-Consistency(自洽性)

这个方法更高级:让AI用不同的方式思考同一个问题N次,然后看哪个答案出现的次数最多。

# 伪代码示例
question = "水的沸点是多少?"
 
# 让AI用不同的方式思考5次
answers = []
for _ in range(5):
    thought = model.think_differently(question)  # 每次用不同的随机种子
    answer = extract_answer(thought)
    answers.append(answer)
 
# 投票
from collections import Counter
final_answer = Counter(answers).most_common(1)[0][0]

如果5次思考有4次都得出”100摄氏度”,说明这个答案比较可靠。

如果5次思考得出了3个不同的答案,说明AI对这个问题也不太确定。

3.4 思维链的局限性

局限性一:成本增加

多了”思考过程”,意味着更多的token,也就意味着更高的成本。

一道简单问题,普通回答50个token,思维链可能需要200个token。

局限性二:思考过程本身也可能幻觉

AI可能在”思考过程”里就编造了一些”推理依据”,然后基于这些假的依据得出一个假的结论。

局限性三:不是所有问题都适合

简单的事实性问题(比如”今天是几号?”),不需要思维链,反而增加成本。


四、方法三:RAG——让AI先查资料再回答

4.1 什么是RAG?

RAG的全称是”Retrieval-Augmented Generation”,翻译过来就是”检索增强生成”。

这个名字很直白:先检索,再生成。

4.2 RAG的工作原理

第一步:构建知识库

把你的文档、产品资料、FAQ等整理好,变成AI能查询的格式。

这一步通常是把文字切成小块,然后转成”向量”存入数据库。

第二步:用户提问时,先去知识库检索

用户问”我们的退货政策是什么?”

系统先把这个问题和知识库里的内容比对,找出最相关的几块。

第三步:把检索到的内容给AI

把”退货政策”相关的文档片段喂给AI,告诉它”根据这些资料回答”。

第四步:AI基于检索结果生成回答

AI不再”靠自己编”,而是基于检索到的真实资料来回答。

4.3 RAG为什么能缓解幻觉?

因为AI的回答有了”事实依据”。

它不是在自己”编”,而是在”转述”——把检索到的内容用自己的话重新表达。

4.4 RAG的问题

问题一:检索可能出错

如果检索没找到正确的内容,或者找到的内容相关性不高,AI还是可能瞎编。

问题二:检索到的内容可能过时

知识库里的内容如果过时了,AI基于过时内容生成的回答也是错的。

问题三:AI可能过度依赖检索内容

有时候AI会”机械地转述”,而不是真正理解检索内容然后回答。

4.5 RAG的进阶版本:CRAG

CRAG的意思是”Corrective RAG”——自我纠错的RAG。

普通RAG是”查到啥就用啥”,CRAG会先评估检索到的内容质量:

  • 如果质量高 → 直接用
  • 如果质量低 → 尝试外部搜索(比如联网搜索)
  • 如果完全不对 → 放弃检索,用自己的知识但标注”不确定”
# 伪代码示例
async def crag_generate(question):
    # 1. 检索
    retrieved_docs = await knowledge_base.search(question)
    
    # 2. 评估检索质量
    quality = await assess_retrieval_quality(question, retrieved_docs)
    
    if quality == "HIGH":
        # 质量高,直接用
        return await generate_from_docs(question, retrieved_docs)
    
    elif quality == "MEDIUM":
        # 质量一般,尝试补充搜索
        external_results = await web_search(question)
        combined_docs = retrieved_docs + external_results
        return await generate_from_docs(question, combined_docs)
    
    else:  # quality == "LOW"
        # 质量低,可能需要AI用自己的知识,但要标注不确定性
        response = await generate_with_uncertainty_flag(question)
        return response

五、方法四:知识边界感知——让AI知道”我不懂”

5.1 问题在哪?

现在的AI有一个大问题:它很难说”我不知道”

你问它一个完全超出它知识范围的问题,它不会说”我不清楚”,而是会努力”编一个”。

5.2 怎么让AI说”我不知道”?

方法一:Prompt引导

在prompt里明确告诉AI:

“如果问题超出你的知识范围,请直接说你不知道,不要编造。”

prompt = """
你是一个严谨的AI助手。
 
对于每个问题:
1. 如果你知道答案,给出准确的信息
2. 如果你不确定,说"我不确定这个问题的答案"
3. 如果你完全不知道,说"这个问题超出我的知识范围"
 
现在回答:
"""

方法二:置信度检测

让AI回答的时候,同时输出一个”置信度”——“我觉得这个答案有90%的把握是对的”。

然后根据置信度决定怎么处理:

response = model.generate_with_confidence(prompt)
if response.confidence < 0.7:
    print("⚠️ AI对这个答案不太确定,人工核实一下")
else:
    print("✓ AI对这个答案比较有把握")

方法三:不确定性量化

这个方法更技术一些:分析AI生成每个token时的”概率分布”。

如果AI对某个词的概率预测很”散”(entropy高),说明它对这个地方不太确定;如果很”集中”(entropy低),说明它比较确定。

5.3 OOD检测:识别”超纲题”

OOD是”Out-of-Distribution”的缩写,意思就是”超出分布”。

就是让AI能识别:“这个问题我好像没见过”。

怎么做到?

训练一个专门的分类器,喂给它一些”AI确定能答”和”AI确定不能答”的问题,让它学会区分。

实际使用时,先用这个分类器判断”这个问题是内行还是外行”:

  • 内行 → AI正常回答
  • 外行 → AI谨慎回答或说”不确定”

六、方法五:宪法AI——让AI自己批评自己

6.1 什么是宪法AI?

宪法AI(Constitutional AI)是Anthropic公司提出的一种方法。

它的核心思想是:给AI一套”宪法”,让它基于这套宪法来批评和修正自己的回答。

6.2 宪法AI的工作原理

第一步:让AI先回答一个问题

比如回答”怎么撬锁”。

第二步:让AI基于”宪法”来批评自己的回答

“宪法”里可能写着:

  • 不能提供可能被滥用的信息
  • 要考虑安全性

AI自我批评:“我的回答可能被用来偷东西,这违反了宪法第一条…”

第三步:让AI根据批评来修正回答

修正后的版本可能变成: “撬锁是一个专业技能,通常用于锁匠工作。如果你想打开自己的锁,请联系正规锁匠。如果是其他用途,我无法提供帮助。“

6.3 宪法AI为什么有效?

因为它让AI有了”自我反思”的能力。

AI不只是在”输出”,而是在”审视自己的输出”。

这和人类的行为模式更像:我们说话之前会想想”这话该不该说”,AI通过宪法AI也学会了类似的机制。

6.4 一个宪法示例

CONSTITUTION = """
请根据以下原则批评AI的响应:
 
1. 选择最能帮助用户的回应,同时避免有害内容
2. 选择最真实、最不可能误导用户的回应
3. 如果你不确定,请承认不确定性
4. 避免提供可能被滥用的信息
5. 优先考虑用户的安全和福祉
 
如果AI的响应违反了以上任何原则,请指出并说明如何修正。
"""

七、方法六:多层防御组合——打组合拳

7.1 为什么需要组合?

因为没有单一方法能100%解决幻觉。

RLHF有RLHF的问题,思维链有思维链的问题,RAG有RAG的问题。

最佳策略是”打组合拳”

7.2 一个组合方案示例

┌─────────────────────────────────────────────────────────┐
│                    用户提问                               │
└─────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│  第一层:意图理解和风险评估                               │
│  - 判断问题是否涉及敏感内容                              │
│  - 判断问题是否超出知识范围                               │
└─────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│  第二层:检索增强(RAG)                                  │
│  - 检索相关知识库                                       │
│  - 评估检索质量(CRAG逻辑)                              │
└─────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│  第三层:生成(带思维链)                                 │
│  - 基于检索结果生成回答                                   │
│  - 使用思维链让推理过程外化                              │
└─────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│  第四层:幻觉检测                                        │
│  - Self-Check:让AI检查自己的回答                        │
│  - 置信度评估:标记不确定的部分                          │
│  - 事实核查:必要时回溯验证                              │
└─────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│  第五层:输出格式化                                      │
│  - 高置信度内容:正常输出                                │
│  - 低置信度内容:加警告标签                              │
│  - 错误信息:触发纠正流程                                │
└─────────────────────────────────────────────────────────┘
                          ↓
┌─────────────────────────────────────────────────────────┐
│                    最终输出                                │
└─────────────────────────────────────────────────────────┘

有研究表明,使用这种多层防御组合,幻觉率可以降低96%。

虽然不是100%,但已经非常好了。

7.3 实操建议

建议一:场景适配

不是所有场景都需要这么复杂的防御。

  • 简单问答:Prompt引导 + 置信度检测就够了
  • 知识密集型任务:加RAG
  • 高风险场景(医疗、法律):全链路防御

建议二:监控和迭代

没有完美的系统,必须持续监控效果,发现问题及时迭代。

  • 记录AI回答错误的case
  • 分析错误原因
  • 针对性优化

建议三:人机协作

对于高风险场景,不要完全依赖AI自动判断,保留人工审核环节。


八、不同场景下的策略选择

8.1 聊天机器人/助手

推荐策略

  • Prompt引导 + 置信度检测
  • 必要时加RAG(如果有知识库)
  • 输出时标注不确定内容

成本:低 效果:中等 适用:日常对话、FAQ等

8.2 知识问答/客服

推荐策略

  • RAG(必须)+ 检索质量评估(CRAG)
  • Self-Check
  • 知识边界感知

成本:中 效果:高 适用:产品咨询、技术支持等

8.3 医疗/法律咨询

推荐策略

  • 全链路防御(所有方法组合)
  • 严格的知识边界控制
  • 人工审核(必须)
  • 免责声明

成本:高 效果:高(但仍需人工把关) 适用:专业领域咨询

8.4 代码生成/技术文档

推荐策略

  • 思维链(让AI先想清楚)
  • 自洽性检测(多次生成对比)
  • 代码执行验证(如果可以)
  • 文档交叉引用

成本:中 效果:中高 适用:技术文档、代码助手等


九、总结:与幻觉共处的智慧

9.1 核心要点

  1. 幻觉不能100%消除,只能缓解
  2. 多种方法组合使用,效果远好于单一方法
  3. 根据场景选择策略,简单场景不需要过度防御
  4. 持续监控和迭代,没有完美的系统
  5. 高风险场景必须人工把关,AI只是辅助

9.2 一句话总结

幻觉是AI的”基因缺陷”,但通过合适的方法,我们可以把这个缺陷控制在可接受的范围内。

9.3 推荐阅读顺序

如果你想深入学习,可以按这个顺序:

  1. 先看幻觉问题深度解析——理解幻觉是什么、为什么产生
  2. 再看这篇——理解怎么缓解
  3. 然后看AI安全与对齐——了解更广泛的AI安全问题
  4. 最后看RAG约束检索——深入了解RAG技术

相关主题