LLM 幻觉治理:从 Prompt 到 RAG 到评测

做 AI 面试产品时,用户最不能忍的就是面试官一本正经地胡说八道:编造候选人信息、乱给评价、发明不存在的岗位要求。幻觉是 LLM 的"天性",治理幻觉是系统工程——不是一句 Prompt 能解决的。

一、先理解幻觉从哪来

LLM 是"下一个 token 预测器",它天生会:

  1. 编造:不知道就"合理猜测"(知识截止后的事件、私有数据)
  2. 自信:编得还很像真的(流畅 = 可信的错觉)
  3. 跟随:上下文诱导(用户说"我记得你之前说…",模型顺着编)

治理目标不是"零幻觉"(做不到),是"幻觉不落地":错误信息到不了用户手里,或者用户能识别。

二、四层治理体系

第 1 层:Prompt 约束(最便宜,但最弱)

1
2
3
4
硬性规则:
1. 你只能基于【已知信息】回答,不知道就说"不知道"
2. 禁止编造候选人资料、数据、事实
3. 涉及具体数字/事实时,必须标注信息来源

效果有限但必要:能降低"主动编造"倾向,拦不住"自信地猜"。

第 2 层:RAG 兜底(给模型"事实源")

幻觉的根源之一是"没有依据"——把事实源喂给它:

/

关键:RAG 不是"增强",是事实约束——模型的答案必须能从检索结果里找到出处。

第 3 层:引用强制(让幻觉"现形")

1
2
3
回答规则:
- 每个事实性陈述必须带 [来源: xxx]
- 无法标来源的陈述,必须用"我认为/根据经验"弱化

原理:要求模型给来源,等于强制它"检查一遍自己说的有没有依据"——无法标来源的,模型会倾向于不输出(引用约束是幻觉治理性价比最高的手段)。

1
2
3
4
5
6
// 输出结构约束:事实和观点分离
{
  "facts": [{"content": "候选人 3 年 Go 经验", "source": "简历#工作经历"}],
  "opinions": [{"content": "候选人适合后端岗位", "reasoning": "..."}],
  "unknowns": ["候选人离职原因未知"]
}

第 4 层:评测闭环(量化 + 防回退)

没有评测,幻觉治理就是玄学。建评测集:

2 0 0 = + " + "

每次改动(Prompt/RAG/模型)跑一遍评测集,幻觉率上升就回滚

三、AI 面试的实战设计

面试产品最容易幻觉的两个点:候选人数据岗位要求

数据层:全部走 RAG + 权限

" [ : " N ]

流程层:三层 Prompt + 状态机(前文讲过)

  • System 强规则:“禁止臆测候选人能力”
  • User 每轮注入:“当前是第 3 题,基于简历中的 XX 段提问”
  • Assistant 预填:“基于简历中『3 年 Go 后端』经历,接下来问…”

输出层:结构化 + 校验

1
2
3
# 回答后校验
if answer 包含具体数字/日期 且 检索结果无对应  拦截重写
if answer 无任何来源标注  提示"请补充依据"

四、效果数据

指标 治理前 治理后
编造候选人信息 偶发 0(引用强制 + 数据校验)
流程越级 20% 0%
无依据自信回答 常见 降为 0(必须标来源)
用户投诉"面试官乱说" 周均 3+ 0

五、避坑清单

/ " P r " o m p " t 0 " % " 0 " " % f a c " t " " s " " < 1 %

总结

幻觉治理的完整认知:

  1. 四层体系:Prompt(弱)→ RAG(事实源)→ 引用强制(现形)→ 评测(闭环)
  2. 核心矛盾:LLM 天然会编,治理不是消灭它,是让编的到不了用户手里
  3. 引用强制 + 评测闭环是性价比最高的两板斧
  4. 幻觉率目标设 <1%,别设 0%(代价是过度保守)

治理幻觉的终点不是"模型不撒谎",是"撒谎的代价系统可见"。 有来源、可校验、能评测——谎言就失去了生存空间。