详细解释
LLM Hallucination Detection(幻觉检测 / 事实核查) 一句话定义:LLM 天生会编(幻觉率在开放域生成里约 5% 至 20%),你不能指望它自己说「我编了」——所以必须在答案吐给用户之前,加一个独立的核查层,把生成的答案和「已知真实信息源(RAG 召回文档 / 企业知识库 / 外部权威数据库)」逐句、逐事实点比对,标记出不一致的地方并做拦截/修正。很多团队做 RAG 上线后翻车,就是因为他们觉得「给了上下文 LLM 就不会瞎编」——实测即使有 Top-10 chunk 作为上下文,LLM 仍然会在 8% 至 15% 的回答里掺杂上下文里没有的假信息,幻觉检测就是最后一道防线。
幻觉分两类:(1) 内在幻觉(Intrinsic / Contextual Hallucination)——生成的内容和给定的 RAG 上下文不一致(上下文写「张三是 CTO」,回答写「张三是 CEO」),这个是 100% 可以自动化检测的,也是 RAG 场景下最主要的问题;(2) 外在幻觉(Extrinsic / Factual Hallucination)——生成的内容和上下文一致但和真实世界事实不一致(上下文是一份假的 PDF 文档,LLM 照着 PDF 念了,但 PDF 本身就是错的),这个很难自动检测,通常要靠外部权威知识库或人工复核。
唯元智创 控制台的 Guardrails 模块内置了「三档幻觉检测开关」:低档(轻量 NLI 分类器,20ms,¥0.0003,适合 FAQ)、中档(LLM-as-Judge 逐句判,150ms,¥0.003,适合绝大多数场景)、高档(三模型交叉验证 + 外部知识图谱核验,500ms,¥0.02,适合金融医疗等高风险)。打开后自动在网关层拦截,幻觉标记 >0.2 的回答要么自动重写要么拒绝输出,不会流到用户端。
主流幻觉检测技术方案对比(2025 年工程落地推荐)
| 方案 | 技术原理 | 延迟 | 单次成本 | 准确率(内在幻觉) | 准确率(外在幻觉) | 推荐场景 |
|---|---|---|---|---|---|---|
| ① NLI 分类器(Natural Language Inference) | 小型 Transformer(BERT/DeBERTa 300M 参数)专门在「前提-假设」对上二分类训练:输入=(召回文档所有 chunk 拼接=前提,生成答案=假设),输出=蕴含/中立/矛盾三分类 | 20-50ms | ¥0.0001 至 ¥0.0005 | 82% 至 88% | 几乎为 0 | FAQ、聊天机器人等低风险场景 |
| ② LLM-as-Judge 逐句 + Rubric | 把生成答案按句号/换行切分成 N 个事实句,每一句单独送给 LLM(GPT-4o-mini 级别),配合固定 Rubric 判「是否有上下文支撑 / 支撑来源是哪段」,最后统计无支撑句子占比 | 100-300ms | ¥0.002 至 ¥0.008 | 92% 至 97% | 30% 至 40%(Rubric 里加「常识核对」可提升) | 90% 企业生产场景默认选这个 |
| ③ 检索增强式核查(SelfCheckGPT 风格) | 把生成答案再拆成 N 句,每一句反过来作为查询去知识库重新检索,如果检索回来的 Top-3 文档和这句话相似度 <0.6 就标为幻觉 | 300-800ms(多次检索) | ¥0.005 至 ¥0.02(含多次检索) | 88% 至 93% | 50% 至 60%(外部知识被重新检索到) | 没有 RAG 上下文的纯开放域生成场景 |
| ④ 多模型交叉投票 | 同一个问题 + 相同上下文,让 3 个不同厂商/不同架构的模型独立生成答案,三者一致的事实点=真,不一致=标疑 | 1-3s(三倍生成) | ¥0.03 至 ¥0.1(三倍成本) | 95% 至 98% | 60% 至 70%(依赖三个模型的多样性) | 金融、医疗、法律等合规要求极高的场景 |
| ⑤ 结构化事实抽取 + 知识图谱对齐 | 从生成答案中抽取出(实体, 关系, 值)三元组,去企业知识图谱 / Wikidata / 内部数据库里逐条验证存在性 | 400ms-2s(含数据库查询) | ¥0.01 至 ¥0.05 | 90%+(对结构化事实) | 70%+(如果图谱覆盖率够) | 有成熟知识图谱的企业,只核查数值类、实体类事实 |
幻觉检测落地的三个工程铁则(别踩)
铁则 1:不要只做「整段答案打一个分」,必须做「原子事实级」的细粒度标注。整段打分的问题是——100 字答案里只有 10 字是编的,整体分数可能是 0.9(看起来没毛病),但就是这 10 字假信息导致客诉。正确做法:先把答案切分成「原子事实单元」(NLP 工具或 LLM 输出 JSON 列表,每个事实带 start/end 字符偏移),每个事实单元单独核查,最终输出必须是「每一句话对应的:状态(已验证/矛盾/无资料) + 证据来源(是哪段召回 chunk 的哪句话支撑的)」。用户端 UI 上,已验证的句子打绿勾,无资料的句子标黄(「以下内容未在知识库中找到引用」),矛盾的句子打红叉直接拦截不输出。
铁则 2:检测拦截后不要直接报错,必须走「自动修正 → 降级 → 人工」三级兜底链路。90% 的团队第一次上线幻觉检测时的做法是「幻觉率超阈值 → 给用户返回 ‘抱歉我无法回答这个问题’」——用户体验极差。正确的三级兜底:(1) 自动修正级:检测到哪句是幻觉,把这句删掉,同时把「该句对应的原始问题 + 更全的召回 chunk(Top-20 而不是 Top-10) + 提示 ‘请只根据上下文回答,禁止额外信息’」喂回生成模型,重新生成只针对该句的替换内容,替换后再过一次检测,通过就输出;(2) 降级级:自动修正失败两次,把答案中已验证的部分先返回给用户,标红一句「以下部分正在人工复核,10 分钟内更新」,同时自动创建人工工单;(3) 人工级:连续 3 次修正都失败且属于高风险请求(金融医疗建议等),直接转人工坐席,不吐自动答案。这一套下来,幻觉检测上线对用户可用率的影响从 -15% 降到 -1% 以内。
铁则 3:检测模型和生成模型必须解耦,最好不要用同一厂商同一系列。用 GPT-4o 生成再用 GPT-4o 检测等于「自己查自己的作业」,相关性偏差会让检测准确率掉 5% 至 10%——生成模型编了一个假事实,因为是同一个模型的知识分布,检测模型可能会「觉得合理」就放过了。最佳实践:生成用强模型(如 GPT-4o / Claude Opus,追求创造力和质量),检测用不同厂商的小模型(如 Anthropic Claude Haiku 做 Judge,或者开源 Qwen2.5-7B 微调 NLI 任务),两套链路完全独立,检测准确率最稳定。