幻觉治理
🎯 学习目标
- 区分虚构事实、虚构引用、工具参数错误等幻觉类型
- 实现「仅依据上下文」+ 引用片段的 RAG 回答 Prompt
- 设计证据不足时的拒答策略与日志指标
- 搭建最小幻觉 Eval 与人工复核流程
引言
Hallucination(幻觉) 指模型 流畅但错误 的输出:编造法条、假论文链接、错误的 API 参数、张冠李戴的人物关系。根因是 LLM 优化的是 plausibility(似然性) 而非 truth(真理)——它擅长补全像真的句子,不保证对应现实世界。
Prompt alone 无法消除幻觉。治理需要 RAG 锚定事实、强制引用、证据不足拒答、输出校验、Eval 量化、护栏过滤 的组合拳。本节用可运行代码演示 cite-or-abstain(引用或拒答) 模式与简单 faithfulness Eval,帮你建立可落地的 基础治理 框架——而非空洞「让 AI 更准确」口号。
章节正文
第 1 步:幻觉类型与产品风险
常见类型:
| 类型 | 示例 | 风险 |
|---|---|---|
| 虚构事实 | 编造不存在的政策条款 | 合规、法律 |
| 虚构引用 | 假 DOI、假 URL | 信任、学术 |
| 数值幻觉 | 财报数字错误 | 财务决策 |
| 工具/API 幻觉 | 调用不存在参数 | Agent 故障 |
| 张冠李戴 | 混淆 CEO 姓名 | 公关危机 |
认知:幻觉率 随 temperature 升高而上升;长上下文中间段 信息更易被忽略(lost in the middle)。关键业务 never 只信模型一句话。
第 2 步:RAG + 强制引用:cite-or-abstain Prompt
function buildGroundedPrompt(chunks, question) {
const context = chunks
.map((c, i) => `[${i + 1}] (${c.source})\n${c.text}`)
.join('\n\n')
return `## 规则
- 仅使用下方「资料」回答问题
- 每个事实后标注引用编号,如 [1]
- 若资料不足以回答,输出 exactly:INSUFFICIENT_EVIDENCE
## 资料
${context}
## 问题
${question}
## 回答格式
Markdown,含引用编号。
`
}
async function answerGrounded(client, chunks, question) {
const res = await client.chat.completions.create({
model: 'gpt-4o-mini',
messages: [{ role: 'user', content: buildGroundedPrompt(chunks, question) }],
temperature: 0.2,
})
return res.choices[0].message.content
}示例 chunks:
const chunks = [
{ source: 'policy.md#refund', text: '未开封商品 7 天内可退款。' },
]
// Q: 退款期限? → 应答含 [1]
// Q: 国际运费? → INSUFFICIENT_EVIDENCEUI 展示引用卡片,用户可点开原文——提高 trust 与 auditability。
第 3 步:拒答、Moderation 与输出校验
拒答(Abstention) 应 explicit、礼貌、可操作:
const ABSTAIN = 'INSUFFICIENT_EVIDENCE'
function handleAnswer(text) {
if (text.includes(ABSTAIN)) {
return {
type: 'abstain',
userMessage: '当前资料里没有找到可靠依据,建议联系人工客服或补充关键词。',
}
}
return { type: 'answer', text }
}Moderation API 或自建关键词 Guardrails 过滤输入输出违规内容——与幻觉正交但同属安全层。
输出校验(确定性代码):
function verifyCitations(answer, chunkCount) {
const refs = [...answer.matchAll(/\[(\d+)\]/g)].map((m) => Number(m[1]))
const invalid = refs.filter((n) => n < 1 || n > chunkCount)
return { ok: invalid.length === 0 && refs.length > 0, invalid }
}无引用或引用越界 → 拒绝展示 或触发 retry。数值类答案用 regex + 与 source 对照 是否 substring 一致。
第 4 步:最小 Faithfulness Eval 脚本
// eval/grounded_cases.jsonl
// {"question":"...","chunks":[...],"must_cite":[1],"must_abstain":false}
import fs from 'fs'
const cases = fs.readFileSync('eval/grounded_cases.jsonl', 'utf8').trim().split('\n').map(JSON.parse)
let metrics = { total: 0, abstain_ok: 0, cite_ok: 0 }
for (const c of cases) {
metrics.total++
const out = await answerGrounded(client, c.chunks, c.question)
if (c.must_abstain) {
if (out.includes('INSUFFICIENT_EVIDENCE')) metrics.abstain_ok++
} else {
const { ok } = verifyCitations(out, c.chunks.length)
const cites = c.must_cite.every((n) => out.includes(`[${n}]`))
if (ok && cites) metrics.cite_ok++
}
}
console.log(metrics)扩展:LLM-as-judge(另一模型评 groundedness)成本更高,适合 offline;online 用规则 + 抽样人工。
指标看板:幻觉投诉率、abstain 率、citation 校验失败率、retry 率。
第 5 步:组织流程:从 Demo 到可审计系统
技术栈组合(基础治理):
- RAG 提供 chunks(第 4 章)
- cite-or-abstain Prompt + 低温
- Citation 校验 + 数值对照
- Eval 集 每周跑 + 模型/Prompt 变更必跑
- 人工复核队列 存 bad case → 反哺 Eval 与 chunk 质量
- Disclaimer UI:「AI 辅助,重要决策请核实原文」
Agent 场景:工具调用前 JSON Schema 校验;工具返回再作为唯一事实源,禁止模型编造工具未返回的字段。
不能做的承诺:「零幻觉」——目标是 可测量、可降级、可审计。当证据弱时,拒答优于胡答。
// 统一治理 wrapper 示意
async function governedChat(client, { chunks, question }) {
if (!chunks?.length) {
return handleAnswer(ABSTAIN)
}
const raw = await answerGrounded(client, chunks, question)
const handled = handleAnswer(raw)
if (handled.type === 'abstain') return handled
const v = verifyCitations(handled.text, chunks.length)
if (!v.ok) return handleAnswer(ABSTAIN)
return handled
}动手练习
- 实现 buildGroundedPrompt + answerGrounded,测「资料有/无」两问,确认拒答触发。
- 写 verifyCitations,构造含 [99] 越界引用答案断言 ok:false。
- 添加 3 条 grounded_cases.jsonl 跑 Eval,记录 cite_ok 比例。
- 写一段产品免责声明与人工升级路径(何时转 ticket)。
常见问题
Q:RAG 就能消除幻觉吗?
不能。模型可能误读 chunk、混淆编号、或忽略 INSUFFICIENT 指令。引用校验与 Eval 仍必要。
Q:拒答太多用户不满怎么办?
优化检索 recall、扩充知识库、澄清式追问;监控 abstain 率平衡 trust 与 coverage。
Q:LLM-as-judge 可靠吗?
有 bias,适合 offline 趋势;关键合规仍以规则与人工为准。
本节小结
幻觉是 LLM 似然性目标的固有副产品,表现为虚构事实、引用与工具参数等。基础治理靠 RAG 锚定、cite-or-abstain、引用校验、拒答策略与 Faithfulness Eval 组合;Agent 需 Schema 校验工具链。目标不是零幻觉,而是可测、可审计、证据不足时宁可拒答。