幻觉(Hallucination)
一、什么是幻觉
幻觉(Hallucination)指 LLM 生成看似流畅合理、但实际与事实不符或凭空捏造的内容。模型不是"知道自己不知道",而是"不知道自己不知道"——以高置信度的语气输出错误信息。
常见幻觉类型
| 类型 | 说明 | 示例 |
|---|---|---|
| 事实性幻觉 | 编造不存在的事实、数据、引用 | 引用不存在的论文、错误的 API 签名 |
| 忠实性幻觉 | 与给定上下文/文档矛盾 | 文档说 A,模型却说 B |
| 工具幻觉 | 调用不存在的函数、伪造参数 | 调用一个没有定义的 API |
| 逻辑幻觉 | 推理链条看似通顺但结论错误 | 数学推导中间跳步得错答案 |
| 代码幻觉 | 生成能编译但逻辑错误的代码 | 用不存在的库方法、错误的语法细节 |
幻觉的成因
- 训练目标是"预测下一个最可能的词",而非"说真话"——概率上流畅 ≠ 事实正确
- 训练数据本身含错误、过时信息
- 模型缺乏"不确定性表达"能力,倾向于给出确定答案
二、为什么 Agent 场景下幻觉后果更严重
核心区别:纯问答是"输出",Agent 是"行动"
纯问答:幻觉 = 用户读到错误信息 → 用户自行判断,损失可控。
Agent:幻觉 = 错误的行动被执行 → 产生不可逆的真实后果。
1. 从"信息污染"升级为"行动污染"
纯问答:幻觉 → 错误答案展示给用户 → 用户判断(可拦截) Agent: 幻觉 → 错误计划/错误工具调用 → 执行真实操作 → 实际后果Agent 会把幻觉直接转化为动作:
- 幻觉出一个"文件路径" → 真实读写该文件
- 幻觉出一个"API 调用" → 真实发起请求
- 幻觉出一个"数据库查询" → 真实操作数据
2. 错误会被放大和传播(级联效应)
Agent 是多步循环,前一步的幻觉会作为后续步骤的"事实"输入:
- 第 1 步幻觉出错误参数 → 第 2 步基于错误结果继续 → 第 3 步雪崩
- 单步错误在单轮问答中是一次性损失,在 Agent 中是复利式放大
3. 后果不可逆
| 场景 | 后果可逆性 |
|---|---|
| 纯问答回答错 | 可纠正(重新问一次) |
| Agent 删了文件 | 数据永久丢失 |
| Agent 执行了转账/下单 | 真实交易发生 |
| Agent 提交了错误代码到仓库 | 污染代码库 |
| Agent 发送了错误邮件 | 已送达收件人 |
4. 信任与安全风险
- 用户基于对 Agent 的"自动化信任"放手,不逐步核对
- 幻觉若涉及安全边界(权限、敏感操作),可能触发越权或数据泄露
- 恶意用户可诱导 Agent 产生幻觉(幻觉注入攻击)
5. 难以事后追责
- 多步自动执行中,很难定位是哪一步、哪个幻觉导致了最终错误
- 行动已发生,"解释"无法挽回实际损失
三、Agent 场景下缓解幻觉的工程手段
| 手段 | 说明 |
|---|---|
| 工具结果回传校验 | 用真实工具返回值(而非模型自述)作为下一步依据 |
| 确定性验证 | 代码跑测试、SQL 执行检查、数据断言 |
| RAG 接地 | 答案必须基于检索到的真实文档,降低自由发挥 |
| 关键操作人工确认 | 删除、支付、提交等高危动作加人工卡点 |
| 多模型交叉/自洽性检查 | 多次采样看是否一致,不一致则标记 |
| 限制自主权限 | 沙箱隔离、最小权限、操作白名单 |
| 置信度/不确定表达 | 让模型在不确定时声明,而非硬答 |
| 可回滚设计 | 操作支持撤销、事务、备份 |
四、总结
幻觉是 LLM 以自信语气输出错误内容的固有缺陷。
在纯问答中,幻觉只是"说错话",用户可拦截;在 Agent 场景中,幻觉会被转化为真实行动,产生不可逆后果、在多步循环中级联放大、且难以事后追责——这正是 Agent 安全工程的核心挑战。
因此 Agent 的设计原则是**“不信任模型自述,只信真实反馈”**:用工具返回值、确定性验证、人工确认、沙箱隔离等手段,把幻觉的影响从"行动层"压回到"建议层"。