大模型幻觉治理:五层防护体系与量化方法
幻觉不能被消除,但可以被压到可测量的水平。这篇给出一套能落地的防护栈。
幻觉是什么,为什么必然存在
LLM 幻觉 = 生成的文本听起来可信,但事实错误或无依据。
这不是"系统故障",而是语言模型工作方式的必然结果。模型不像数据库那样"知道"知识,它预测的是训练统计上最可能的下一个 token。当提示词问到训练数据覆盖不足的内容时,模型会生成"听起来最合理"的答案。
那个答案通常是对的。有时候不是。
常见的幻觉场景
场景 | 表现 |
|---|
法律咨询 | 引用不存在的判例或法条 | 代码生成 | 编造不存在的函数、类、库名 | 报告生成 | 提供错误的统计数据或日期 | 业务系统 | 编造联系人、地址、电话 | 人物检索 | 混淆名字相似的人或公司的事实 |
四种幻觉类型类型 | 定义 | 例子 |
|---|
事实捏造 | 模型发明不存在的事实 | 编造的统计数字 | 虚构来源 | 编造的引用 | 不存在的论文、法条 | 混淆 | 信息合并错误 | 张冠李戴、日期搞混 | 过度自信 | 把不确定说成确定 | 虚假精确、缺失限定条件 | 逻辑错误 | 推理本身出错 | 无效结论、循环论证 |
2026 年的现实:变好了,但没有归零需要说清楚事实: 但"零幻觉"没有到来。任何声称完全消除的说法都应视为演示话术,而非架构事实。 运营层面的真问题不是"AI 会不会幻觉",而是"在我们的任务上,它多久编造一次,以及怎么被抓住"。 第一层:Grounding(最有效的单一手段)把模型锚定在特定文档或数据上,要求它据此作答。 用户问题
↓
检索最相关的文档片段(向量检索)
↓
片段 + 问题 + 指令「仅基于以下文档回答」→ 模型
↓
验证输出包含引用/来源
RAG 在"回答我们知识库里的问题"这类应用中通常能降低 60-80% 的幻觉。 但它不能完全消除——模型仍可能以未被授权的方式"解读"文档。这就需要后续几层。 注意一个关键点:grounding 的效果完全取决于检索质量。检索差的 RAG 加一个流畅的模型,仍然产出自信的胡话。 所以"降低幻觉"的幕后真相往往是"修好了检索器"。 第二层:自我一致性与多模型投票Self-consistency:问同一个问题多次(或问几个不同的模型),比较答案。 结果 | 解读 |
|---|
答案一致 | 高置信度 | 答案分歧 | 该主题不确定的信号 |
实用变体:同时问三个不同的模型。若三者返回同一个数字、日期、事实——大概率正确。若有分歧,升级到人或更贵的模型。 这个模式与模型分层路由结合,能同时实现降本 + 提可信度。 第三层:评估流水线没有评估流水线的 LLM 生产部署,等于没有测试的代码。 RAG 四指标指标 | 含义 | 合格线 | 低分意味着 |
|---|
Faithfulness | 回答是否源于提供的文档 | ≥ 0.90 | 幻觉 | Answer Relevancy | 回答是否切题 | ≥ 0.85 | 生成质量差 | Context Precision | 检索到的内容有多少有用 | ≥ 0.80 | 检索质量差 | Context Recall | 必要内容是否都被检索到 | ≥ 0.80 | 漏了文档 |
推荐的评估工具工具 | 强项 | 许可 |
|---|
Arize Phoenix | 50+ 预置评估指标,RAG 评估最强,本地不到一分钟跑完 | Elastic License 2.0(源码可见,若要转售服务需注意) | DeepEval | 集成进 Python 测试套件,可直接断言 | Apache-2.0,免费 | Braintrust | CI/CD 质量门禁,能在合并前阻断回归 | 按处理数据计费 |
每个新的 LLM 应用都应该有一组 50-500 道已知正确答案的评估题。忠实度跌破 90% 就阻断部署。 第四层:护栏与输出校验在把输出交给用户之前做规则校验。 校验类型 | 做法 | 能抓到什么 |
|---|
Schema 校验 | 输出必须符合 JSON Schema / Pydantic | 编造的字段(机械可检测) | 禁用模式 | 检测阻断不可接受模式 | 未脱敏 PII、越界财务数据、有害内容 | 引用强制 | 每个事实主张必须有来源 | 无来源的回答直接拒绝 | 数值范围校验 | 价格 > 0、日期 ≤ 今天、百分比在 0-100 | 明显荒谬的数字 | 交叉引用检查 | 与事实库比对 | 编造的引用 |
一个精妙的设计:如果模型无法输出假的案例 ID(因为该字段必须匹配数据库查询结果),一整类失败模式就消失了。 工具:Guardrails AI、NeMo Guardrails、Instructor。自研往往更简单也更便宜。 第五层:人在回路高风险场景(法律、医疗、财务、HR 决策)这一层是必需的。 模式 | 做法 |
|---|
起草 + 审阅 | AI 生成初稿,人工验证通过后发送 | 置信度阈值 | 低置信度自动升级给人 | 随机抽样 QA | 无论置信度如何,5-10% 的人工抽检,建立长期基线 | 反馈闭环 | 用户可以标记错误答案,纳入改进 |
随机抽检这一条最容易被跳过,也最有价值——它是发现系统性偏差的唯一可靠手段。 关键的产品设计:允许说"不知道"这是被严重低估的一条,但它其实最有效。 如果系统在"不确定"时受罚,它就一定会猜。 产品和提示词设计应该让弃答成为合法选项: 只基于提供的来源回答。
如果来源不足,明确说明缺少什么。
不要编造引用。
这三个句子对幻觉率的下降,往往超过调模型本身。 Agent 场景:风险升级了Agent 让问题更严重,因为错误会变成行动。 | 后果 |
|---|
Chatbot 编造了一条政策 | 用户浪费时间 | Agent 编造了一笔已完成的退款 | 产生清理工作和信任损害 |
设计 Agent 循环时要有显式状态: 尝试了什么
工具返回了什么
什么还未确认
什么需要审批
Narration 不是证据,工具输出才是。 什么不能可靠地"阻止"幻觉无效做法 | 为什么无效 |
|---|
要求模型"要准确"(无来源) | 没有约束力 | 往提示词里多加形容词 | 无约束力 | 假设更大模型就不需要流程 | 更大模型也会自信地错 | 把思维链文本当作真相证明 | 推理文本不是事实依据 | 一次性人工抽检、无持续测量 | 无法发现趋势 |
这些可能在边际上有帮助,但它们不是控制系统。 一个实用的防护栈对于大多数团队,合理的栈是这样: 1. 权威文档/事实系统作为唯一真相源
2. 检索或直接工具读取
3. 回答约束在来源之内
4. 尽可能用结构化输出
5. 高风险字段自动校验
6. 不可逆步骤人工审批
7. 失败记录与复盘
这就是把幻觉从"不断惊喜"变成"可管理的运营风险"的方式。 用风险等级指导投入场景 | 风险 | 需要什么 |
|---|
创意写作 | 低 | 最小验证 | 内部文档问答 | 中 | 抽样检查 | 面向客户的内容 | 高 | 来源要求 | 法律/医疗 | 极高 | 专家审查 | | | |
| 金融决策 | 极高 | 多重验证 |
|---|
把同等强度的验证用在所有场景,是资源浪费;用在高风险场景不足,是事故。
怎么跟利益相关方谈这件事
避免两个极端:
❌ "模型会撒谎,什么都不能信"
❌ "新版本不幻觉了"
更好的表述:
模型生成通顺的语言。我们的系统设计决定了无依据的主张以多高的频率抵达用户或业务系统。
这把讨论锚定在流程、测量和风险上,而不是神话上。
证明你的改动有效
测量前、测量后,用同一个评估集。
1. 在固定测试集上打分(faithfulness + answer relevancy)
2. 应用改动
3. 重新打分
如果 faithfulness 上升而 answer relevancy 没下降,改动就是有效的。
没有留出的评估集和指标,你在猜测。凭感觉的提示词改动很容易用一个失败模式换另一个,只有可重复的分数才能抓住。
一句务必记住的话:你没测量的幻觉修复,是一个穿着白大褂的猜测。
参考资料
RAGAS 官方文档 — https://docs.ragas.io/
Arize Phoenix — https://github.com/Arize-ai/phoenix
DeepEval — https://github.com/confident-ai/deepeval
Guardrails AI — https://github.com/guardrails-ai/guardrails
Liu et al., *Evaluating Correctness and Faithfulness of Instruction-Following Models* — https://arxiv.org/abs/2404.14393