3.1 解释过幻觉的成因:模型被训练来生成统计上最合理的续写,它内部没有一个可靠的「我不知道」信号。训练语料里几乎全是自信的陈述句,很少有人在写作时说「关于这个我不确定」。
所以「彻底消除幻觉」不是一个可交付的工程目标。可交付的目标有三个,且它们的优先级依次递减:
最有效的单一手段:要求模型的每个事实性陈述都标注它来自哪一段材料,并在输出后程序化校验这些引用是否真实存在、是否支持对应的论断。
它同时带来三重收益:① 引用要求本身会抑制编造——模型必须为每句话找到出处,找不到时更倾向于不说;② 引用让答案可被用户核对,把信任判断交还给人;③ 引用让 groundedness 可以自动评估(3.5)——这是可观测性的前提。
但要注意一个陷阱:模型会编造引用。它可能标注一个不存在的段落编号,或引用了真实段落却说了段落里没有的内容。因此引用必须被程序校验,而不是被信任——校验引用编号是否在召回集合内是零成本的,校验引用内容是否支持论断则可以用小模型或规则做。
这是本章最重要的判断,也是最容易被做反的地方。
让拒答真的能发生,需要三件事:① 在 prompt 中明确授权拒答并给出具体表述(「若材料中未提及,回答『提供的资料中未包含相关信息』」)——不明确授权时,模型的默认倾向是尽力回答;② 提供拒答的示例(few-shot 里要有拒答的样本,否则模型认为拒答不是合法输出);③ 把拒答率做成监控指标——它突然下降可能意味着模型开始编造,突然上升可能意味着检索坏了。
不要直接问模型「你有多确信」——模型对自己置信度的自我报告并不可靠,且容易被表述方式影响。更可用的信号来自外部:
检索侧信号(最实用,但不是天然置信度):召回结果的最高相似度、召回条数、rerank 分数可以参与拒答,却不能直接解释成「知识库里有/没有答案」。低分可能来自 query 改写、切分或 embedding 的领域偏移;高分也可能只是主题相近而不支持答案。阈值必须在与线上同领域、同检索配置的标注集上校准,并用 coverage(回答覆盖率)—selective error(已回答样本错误率)曲线选择;检索器、索引或流量分布变化后要重新校准。
一致性信号:对同一问题采样多次,看答案是否稳定。不一致 = 不可靠,这是一个相当稳健的启发式。代价是成本翻几倍,适合用在高价值或高风险的请求上。
校验信号:答案是否包含有效引用、是否可被规则验证(数字是否在材料中出现、日期是否合理)、是否与已知事实冲突。
拒答系统不能只监控「拒答率」。至少成对监控:coverage(多少请求获得回答)、selective error(已回答请求中有多少错误),并按语言、任务类别与知识库分片切片。只压低错误率可以靠拒答一切做到,只拉高覆盖率又会放进更多无据回答;产品要决定的是这条风险—覆盖曲线上的工作点。CONFLARE 展示了先构造可回答问题的校准集、再由目标错误率确定检索阈值的思路;SelectiveNet 则给出了 selective prediction 的 risk–coverage 框架。二者支持的是「要校准并衡量取舍」,不是某个通用分数阈值。
一条容易被忽略的产品原则:不确定性要传达给用户,而不只是用于内部决策。「以下信息来自 2023 年的文档,可能已更新」「我在资料中只找到部分相关内容」——这类表述把判断权交还给用户,成本极低,却能显著降低错误答案造成的实际损害。Air Canada 那个案例的核心教训正在于此:系统给出的信息会被用户当真,并据此行动。
事实经过:Jake Moffatt 因祖母去世需要购买机票,在 Air Canada 网站上与其聊天机器人交互。机器人告诉他,因家人去世而出行可以享受丧亲票价(bereavement fare)折扣,并可在事后申请。
这个回答是错误的。机器人回答中链接指向的官方页面上写明:丧亲政策不适用于旅行完成之后才提出的申请——也就是说,正确信息就在同一个网站上、就在那个链接里,而机器人给出了与之矛盾的说法。
Air Canada 的抗辩最值得记住:航司主张聊天机器人虽然在其网站上,但应被视为一个独立的实体,因此公司不对其不准确之处负责。法庭驳回了这一主张,认定 Air Canada 需要对其网站上的全部信息负责,无论这些信息来自静态页面还是聊天机器人。
三条工程含义:
① 幻觉是法律责任,不只是质量问题。「模型有时会出错」不是一个可以向用户或监管转移的免责条款。把幻觉的风险定价进产品设计,而不是当作技术缺陷来容忍。
② 与权威信息源不一致是最危险的一类幻觉。本案中正确答案就在同一网站上——这类矛盾比「模型不知道」更严重,因为它主动覆盖了正确信息。工程上的对策很直接:对政策、价格、条款这类有唯一权威来源的内容,应该走确定性的检索或规则,而不是让模型自由生成;至少要做输出与权威源的一致性校验。
③ 赔偿金额小,但先例意义大。812 加元对一家航司微不足道,真正的成本是它确立了「企业为其 AI 输出负责」这一预期。在做面向用户的、涉及政策/权益/价格的 AI 功能时,这应当直接影响你的拒答阈值与人工复核设计。
说明:本案信息取自公开的法庭裁决与公开报道。此处仅陈述公开可查的事实与其工程含义,不作法律建议——具体的合规要求请咨询法务。
结构化引用:用约束解码或 structured outputs 强制模型输出 {"answer": ..., "citations": [chunk_id, ...]} 的结构,然后程序校验每个 chunk_id 是否真的在本次召回集合里。这一步是零成本的,却能挡掉「编造引用编号」这一整类问题。
Groundedness 校验:用小模型逐句判断「这句话是否被引用的材料支持」。可用 RAGAS 等库的现成实现,但必须先用人工标注校准(6.4)。用小模型做这件事成本很低,适合全量在线跑。
检索分数阈值:可以把校准后的阈值做成生成前 gate,但必须锁定 embedding、索引、切分与 query 处理版本,用同领域标注集选择工作点。上线后同时监控 coverage 与已回答样本的 selective error,并对分布漂移告警;任何组件或领域变化都触发重校准。原始 cosine / rerank 分数没有跨模型、跨索引的通用语义。
一致性采样:对高风险请求采样多次比对答案一致性。成本高,只用在值得的地方(医疗、法律、金融、涉及金额的判断)。
面向用户的呈现:把引用做成可点击的原文跳转、把不确定性显式写出来、对超出知识范围的问题给出明确的转人工入口。这些产品层的设计对降低实际损害的作用,常常大于任何模型层的优化。
不可靠的原因:模型没有一个内在的、可校准的「我知道 vs 我不知道」表示。它被训练来生成合理的续写,而「我有 85% 的把握」这句话本身也只是一段被生成的文本——它更多反映了训练语料中类似语境下的表述习惯,而非模型内部的实际不确定性。此外这类自评容易被提问方式、上下文语气影响。
更可靠的是外部信号:
① 检索侧分数(最实用,但必须校准):最高相似度、rerank 分数不受生成模型自评影响,却会受 embedding、切分、索引与领域漂移影响。用同领域标注集画 coverage—selective error 曲线,再选择是否做成生成前 gate;不能把某个原始分数直接解释为「知识库无答案」。
② 一致性:同一问题采样多次,答案不稳定即不可靠。这是一个稳健的启发式,代价是成本翻倍,适合高风险请求。
③ 可程序校验的信号:引用编号是否真实存在于召回集合、答案中的数字/日期是否出现在材料中、输出是否通过 schema 校验。这类确定性检查最可靠,且几乎零成本。
通用原则:优先使用模型之外的、可程序判定的信号——它们不依赖模型的自我认知,也不会被同一个失效模式同时影响。
第一步:先归因,不要先改 prompt。拿失败案例,看召回的材料原文,判断落在哪一类(3.5 的归因矩阵):
情况 A:材料根本没召回到。模型面对空白或不相关的材料,只能靠参数化知识发挥。这是检索问题——改切分、加 BM25 混合检索、调 top-k(3.2、3.3)。此时无论怎么改 prompt 都治标不治本。
情况 B:材料召回了,但模型说了材料里没有的话。这是生成问题,按以下顺序修:① prompt 中明确要求仅依据材料回答,并授权拒答且给出具体表述;② 强制结构化引用并程序校验引用编号;③ 检查材料是否太长或关键内容位置靠中间(3.4);④ 检查召回材料之间是否互相矛盾——模型面对冲突材料时最容易自由发挥。
情况 C:材料本身就是错的或过时的。这是数据问题,RAG 会忠实地把错误答案讲得很有说服力。需要在索引层做时效性管理与冲突检测。
无论哪一类,都应补上的两道防线:
• 校准后的检索 gate——用同领域可回答/不可回答标注集选阈值,并在检索配置变化后重校准;原始最高相似度不能单独证明答案不存在。
• 成对监控——coverage 与已回答样本的 selective error 都是一等指标。只看拒答率无法区分「更安全」与「检索坏了」。
最后是产品层:把引用做成可点击跳转到原文。这既降低了错误的实际损害,也让用户能自行核对——比任何模型层优化都便宜。
第一句就要校正问题:幻觉不是一个能被「解决」的 bug,它是生成机制的固有产物——模型被训练来产出最合理的续写,内部没有可靠的「我不知道」信号。工程目标是让它可检测、可控、后果可承担,而不是让它消失。
然后给出三层措施:
① 让答案可核对——RAG 提供材料,强制结构化引用,并程序校验引用真实性(模型会编造引用编号)。引用同时抑制编造、便于用户核对、让 groundedness 可自动评估。
② 让模型在依据不足时拒答——明确授权拒答并给出具体表述、在 few-shot 里放拒答样例;检索分数只能在同领域标注集上校准后作为 gate,并同时监控 coverage 与 selective error,检索配置或流量漂移时重新校准。
③ 让错误后果可承担——高风险场景加人工复核、把不确定性传达给用户、对有唯一权威来源的内容(政策、价格、条款)走确定性检索或规则而非自由生成。
关键判断(这是最能体现水平的一点):两类错误的代价不对称——过度保守会立刻被抱怨、被发现;过度自信则悄无声息,用户拿到自信的错误答案可能永远不会反馈。所以默认应偏向保守一侧。而阈值的具体位置是业务决策(医疗法律金融偏保守,创意场景可偏激进),应由业务方而非工程师默认。
加分:引用 Moffatt v. Air Canada(2024)——法庭裁定企业须对其网站上的全部信息负责,无论来自静态页面还是聊天机器人,「聊天机器人是独立实体」的抗辩被驳回。这说明幻觉是法律责任而不仅是质量指标,应当直接影响拒答阈值与复核设计。