这是《LLM 应用开发 零基础实战指南》的独立章节版。本章从概念、实操和生产排查三个视角展开,代码块保留了原书可直接运行的版本。 幻觉指模型生成了看似合理但缺乏依据、与事实或业务规则冲突的内容。不能期待完全消除,但可以通过数据、检索、约束、校验和流程降低发生率和影响。
22.1 幻觉类型
| 类型 | 示例 | 治理 |
|---|---|---|
| 事实幻觉 | 编造不存在的政策 | RAG 与引用 |
| 来源幻觉 | 引用不存在的文档 | 引用校验 |
| 逻辑幻觉 | 推理链条跳跃 | 分步验证 |
| 数值幻觉 | 计算总额错误 | 程序计算 |
| 权限幻觉 | 假设用户可访问 | 服务端权限 |
| 指令幻觉 | 声称已完成操作 | 操作确认 |
| 时间幻觉 | 过期信息当现行 | 时间过滤 |
22.2 产生原因
- 训练目标奖励流畅表达,不保证事实正确;
- 上下文缺少关键信息;
- Prompt 要求强行回答;
- 检索结果无关或冲突;
- 文档版本过时;
- 问题超出系统边界;
- 输出格式要求诱导编造字段;
- 工具结果被误解;
- 用户诱导或注入。
22.3 预防策略
边界定义
-> 数据治理
-> 检索质量
-> Prompt 约束
-> 程序计算
-> 输出校验
-> 人工兜底
Prompt 示例:
只根据提供的资料回答。
如果资料不足,输出 information_insufficient。
不要猜测订单状态、价格和日期。
每个关键结论必须给出来源编号。
22.4 证据链
{
"answer": "标准订单可在签收后 7 天内申请退款。",
"claims": [
{
"text": "标准订单可在签收后 7 天内申请退款",
"source_chunk_id": "policy-v3#42",
"quote": "标准订单自签收之日起 7 天内可申请退货退款"
}
]
}
服务端校验:
- chunk ID 存在;
- chunk 在本次候选中;
- quote 与原文匹配;
- 用户有权限;
- claim 与 quote 相关;
- 文档当前有效。
22.5 RAG 降幻觉
| 环节 | 措施 |
|---|---|
| 解析 | 修复表格和标题 |
| 切块 | 保留完整条款 |
| 索引 | 版本和生效时间 |
| 检索 | 混合召回 |
| 重排 | 相关性精排 |
| 上下文 | 只保留相关资料 |
| 生成 | 要求引用 |
| 校验 | 引用真实性 |
资料不足时宁可拒答,也不要让模型补全。
22.6 结构化输出防幻觉
允许空值:
{
"contract_no": null,
"reason": "扫描件第一页缺失"
}
规则:
- 枚举必须固定;
- required 只包含必须可得字段;
- 不确定性转为
unknown; - 数值来自计算程序;
- 日期走解析器;
- 关键字段设置信或复核标记。
22.7 Agent 幻觉
Agent 更危险的幻觉是“声称已经执行”。
治理:
- 每个操作必须有执行回执;
- 工具失败不生成成功话术;
- 状态写库后再确认;
- 执行前后做前置校验;
- 关键动作可回滚;
- 保存 tool_call_id 与结果;
- 高危操作人工确认。
22.8 检测方法
| 方法 | 说明 |
|---|---|
| NLI 校验 | 判断答案是否被上下文蕴含 |
| 引用校验 | 检查 quote 是否存在 |
| 事实库比对 | 与数据库或规则比对 |
| 多次采样 | 检查答案稳定性 |
| 模型评审 | 找无依据断言 |
| 人工抽检 | 高风险场景 |
| 用户反馈 | 线上发现 |
示例规则:
def verify_amount(answer_amount, db_amount):
if answer_amount != db_amount:
raise ValueError("amount mismatch")
22.9 拒答设计
拒答不是失败,而是安全边界。
{
"status": "information_insufficient",
"answer": "当前资料无法确认该订单的退款资格,请补充订单号。",
"missing": ["order_id"],
"suggestion": "进入人工客服"
}
拒答要:
- 说明缺什么;
- 给下一步;
- 不泄露内部判断细节;
- 记录原因;
- 支持补充信息后继续。
22.10 监控指标
| 指标 | 说明 |
|---|---|
| hallucination rate | 人工抽检幻觉率 |
| unsupported claim rate | 无证据断言率 |
| citation failure rate | 引用校验失败率 |
| insufficient answer rate | 拒答率 |
| wrong numeric rate | 数值错误率 |
| stale answer rate | 过期答案率 |
| user correction rate | 用户纠正率 |
本章小结
幻觉治理是系统工程:明确回答边界,提供可靠上下文,允许不确定,要求证据,服务端校验关键事实,并为高风险动作保留人工兜底。目标是降低幻觉影响,而不是相信模型不会犯错。
思考题
- 为什么“请务必正确回答”不能防幻觉?
- 引用校验应检查哪些条件?
- 哪些数值不应由模型计算?
- Agent 声称已执行操作时如何验证?
- 拒答率上升一定是坏事吗?