返回列表
工程 10 分钟阅读

Smarter Models Still Hallucinate: Evidence Gates for Production RAG Agents

更聪明的模型仍会幻觉。模型能力提升可以改善平均推理质量,却不会把概率生成器变成事实数据库,也不会自动建立业务答案的发布边界。 因此,生产系统不能把事实可靠性寄托在某个模型版本上;它必须假设任何模型都可能在证据不足时生成“…

  • LLM Grounding
  • RAG
  • Evidence Gate
  • Agent Runtime
  • 生产评测

一次真实的电商客服事故验证了这个判断:模型拿到一个区域名、一栋大厦名和几段关于自提的弱相关知识,便补齐了街道、门牌、楼层、营业时间与服务承诺。升级到更强模型后,关闭事实闸门的消融测试仍只通过 3/9。最终有效的修复不是继续换模型,也不是为地址、银行卡或品牌关系编写黑名单,而是建立一个单调用 Evidence Gate:让模型显式列出回答所需事实、直接证据和未决项,再由运行时只发布通过闸门的分支。

这项实践得到的核心经验是:模型升级提高能力上限,运行时证据契约决定事实底线。

1. Intelligence Is Not a Reliability Contract

“模型更聪明”与“答案有证据”是两个不同命题。

大模型擅长把不完整上下文组织成连贯答案。上下文越接近正确答案,它的补全往往越自然;但在高风险业务场景中,这恰恰构成危险。一个完全离谱的回答容易被发现,夹在真实区域、真实建筑物和合理服务流程之间的虚构细节却很难被识别。

模型升级通常可以带来更好的指令理解、更稳定的语言表达和更强的推理能力,但它无法独立回答三个运行时问题:

  1. 本轮哪些来源可以被视为事实证据?
  2. 这些证据是否支持完整业务命题,而不仅是主题相关?
  3. 证据不足时,哪一部分内容仍有资格发送给用户?

如果服务端没有定义这三个问题,系统实际上是在把“是否发布”交给模型的表达自信。智能水平再高,也不是可靠性契约。

2. The Case: Plausible Completeness Is the Dangerous Part

用户的真实意图很普通:线上购买后,能否到门店自提?

Agent 的回答却异常完整:它给出了街道、门牌、楼层、房号、营业时间、自提政策,甚至承诺到货后会通知用户。完整性制造了可信感,也放大了伤害——用户不会把它看成一次文本补全,而会把它当作商家的确定信息与服务承诺。

排查时,最终回答被拆成可独立验证的业务命题,并逐项反查 Instructions、Background、知识检索、工具输出与对话历史:

回答命题 Instructions Background RAG/工具 对话历史 归因
门店位于某区域、某大厦 部分相关 有部分线索 无直接支持 仅支持粗粒度位置
街道、门牌、楼层、房号 不受支持
营业时间 不受支持
商家支持用户所述自提流程 仅有其他物流/自提语境 错误归因
到货后一定通知 不受支持的业务承诺

最关键的运行时信号是:模型把证据标成了 “Instructions”。然而 Instructions 只说“基础信息以网站为准,不得擅自更改”,并未包含网站内容,也没有证明任何地址或服务政策。

这里存在一个非常容易被自然语言掩盖的边界:

  • “官网是权威来源”是来源治理规则
  • “官网明确写明地址为 X”才是事实证据
  • 前者规定应去哪里验证,不能替代后者完成验证。

事故的危险不在于模型什么都不知道,而在于它知道一部分,于是产生了“补完整”的冲动。

3. How Partial Truth Becomes a Complete Fabrication

这不是单点失误,而是一条稳定的错误链:

flowchart LR A["用户用上下文短句询问自提"] --> B["检索召回邻近主题:物流、自提柜、其他服务"] C["Background 只有区域与大厦等局部线索"] --> D["模型追求完整、可执行的客服回答"] B --> D A --> D D --> E["补齐地址细节、时间与服务承诺"] F["Instructions:以官网为准"] --> G["被误读为已经取得官网事实"] G --> E E --> H["模型自报 evidence = instructions"] H --> I["运行时相信标签并发布"]

四种机制在同一轮中叠加:

  1. 命题补全。 用户需要可执行答案,模型把“区域 + 大厦”补成邮寄级地址。
  2. 相关性替代蕴含。 检索内容谈到“自提”,不等于它证明“该商家支持当前自提流程”。
  3. 跨片段关系拼接。 不同片段分别出现主体、地点或服务概念,模型据此创造来源从未共同表达的关系。
  4. 证据标签自证。 模型声称证据来自 Instructions,运行时却没有检查该来源能否支持完整命题。

因此,RAG 已经返回内容并不代表回答已经 grounded。检索解决“把哪些材料送进上下文”,事实闸门解决“哪些命题有资格从上下文走向用户”。

4. Why the Obvious Fixes Fail

4.1 为每类敏感事实编写禁令

如果分别禁止补全地址、卡号、品牌关系、营业时间和业务承诺,Prompt 很快会演变成事故词典。已知类型被覆盖,下一种未知事实仍会穿透;大量具体词还会占据模型注意力,并把通用安全问题错误地变成客户特例。

正确的抽象不是“哪些词不能生成”,而是“什么条件满足后,事实才可以发布”。

4.2 再强调一次“不得幻觉”

“不要编造”仍是一条由概率模型解释的自然语言指令。只要“参考线索”与“充分证据”没有被区分,模型就可能认为自己的补全只是合理归纳,而不是编造。

原则必须被转换为可执行的回答协议,才能形成稳定边界。

4.3 只升级模型

更强模型能够降低部分错误,但不能根治幻觉。实际消融中,模型升级后关闭最终事实 Gate,只通过 3/9 个定向事实场景。这一结果不说明更强模型没有价值,而是说明模型能力不是充分条件:没有证据发布协议,模型仍会在部分事实和干扰上下文中越过边界。

4.4 增加第二个 reviewer

独立 reviewer 可以提供额外防线,但会增加一次串行模型调用;在客服链路中,这通常意味着明显的延迟与成本增长。如果 reviewer 看到的还是同一批模糊材料,它也可能重复第一次判断。

这次修复优先把审计放进同一次调用,并让运行时负责不可绕过的分支选择。这样保留语义判断能力,同时避免第二次模型往返。

5. The Design: A Single-Call Evidence Gate

新的回答协议要求模型在一次调用内完成六个逻辑阶段:

flowchart LR A["User + Instructions + Background + RAG/Tool"] --> B["Draft"] B --> C["Needed:回答所需的完整业务命题"] C --> D["Supported:可定位的直接证据"] D --> E["Unresolved:缺失或冲突项"] E --> F{"use_limitation_only"} F -- "false" --> G["content"] F -- "true" --> H["limitation"] G --> I["Runtime 只发布选中分支"] H --> I

结构化响应把模型判断与运行时控制拆开:

字段 模型负责什么 运行时负责什么
response_language 依据当前对话和配置确定回答语言 校验结构
draft 形成候选回答,暴露需要验证的主张 永不直接发布
evidence 列出所需命题、直接来源片段与未决项 校验字段完整性
use_limitation_only 在关键事实证据不足时打开闸门 决定唯一可发布分支
limitation 简洁说明当前无法确认的事实 闸门打开时发布
content 证据充分时的正常答案 闸门关闭时发布

这里没有使用地址、账号或品牌关键词参与判断。模型负责语义上的支持关系,程序负责协议验证、分支选择和失败语义。

若结构解析失败,系统重试或失败关闭;未完成事实审计的 draft 永远不能作为恢复内容直接发送。这个约束很重要:只要存在一条“解析失败后尽量返回原文”的旁路,事实闸门就只是一条建议,而不是发布边界。

6. Complete-Proposition Grounding

证据充分性不能停留在“来源相关”。一个业务命题通常至少包含主体、关系、客体和限定条件;证据必须覆盖用户真正依赖的那条完整关系。

Publishable(c) eT : Entails(e,c) Complete(e,c)
c 是待发布命题,T 是本轮可信来源集合;主题相关但关系不完整的片段不能使命题成立。

例如:

  • “某大厦位于中环”不能支持“该品牌门店位于该大厦某层某室”;
  • “知识库描述一种自提服务”不能支持“该商家向当前用户提供这种服务”;
  • “官网应作为准确信息来源”不能支持“官网已经给出了当前答案”;
  • 多个来源各自真实,也不能被拼接成它们从未明确表达的业务关系。

如果关键命题无法得到直接支持,模型可以在工具可用时查询一次知识;仍无证据则只说明无法确认,不再补充未经支持的建议、替代流程或下一步承诺。

限制回答不是失败,而是证据边界在用户界面的诚实呈现。与此同时,测试必须包含证据充分时的正常回答,防止系统退化为“安全但无用”的一律拒答器。

7. Validation Beyond the Incident Sentence

回归矩阵没有只重复事故中的地址问法,而是按事实关系和证据状态组合场景:

  • 地址与联系方式;
  • 支付账号与转账信息;
  • 品牌、主体和合作关系;
  • 服务能力、履约条件和业务承诺;
  • 上下文或 Instructions 缺失;
  • 知识库缺失、无关、错误或相互冲突;
  • 证据完整时必须正常回答的正向案例;
  • 多语言、语言切换、会话流程与常规工具行为。
验证层 结果 能够说明什么
仅升级模型、关闭最终事实 Gate 3/9 更强模型仍会越过事实边界
最终事实场景矩阵 60/60 拒答与正向回答均被覆盖
历史案例回放 28/28 既有问题没有回潮
多语言矩阵 11/11 中文、英文、西语、切换、限制与正常回答
语言优先级重复测试 20/20 检查概率性波动
定向单元/集成测试 235/235 覆盖协议解析和分支选择
Agent 非 E2E 回归 1312 通过,4 跳过 检查常规能力
预发完整 E2E 37/37 场景,49/49 轮 请求与内容审计均通过

3/9 的消融集与 60/60 的最终扩展矩阵规模不同,不能被解读为严格的同集效应量对比;它能证明的是:切换更强模型后,缺少事实 Gate 的系统仍然存在可重复失败。若需要比较各组件贡献,应在相同数据集、采样参数和重复次数下继续做成对消融。

8. Cost, Latency, and Operational Stability

该方案没有增加第二次模型调用。预计每轮增加:

  • 固定 Prompt:约 500–700 输入 tokens;
  • 私有 draft、evidence 与 Gate:约 150–300 输出 tokens;
  • 合计:约 850–1300 tokens,约为预发平均单轮用量的 6%–10%。

预发 49 轮样本中,端到端延迟 p50 为 10.42 秒、p95 为 17.67 秒、最大 18.20 秒;Pod 无重启、无 5xx。上线初始观察窗口中,已完成对话 p50 为 7.17 秒、p95 为 16.30 秒、最大 18.07 秒。

这些数据只描述已观测流量窗口,不能外推为所有负载下的性能保证;但它说明该方案没有产生第二次串行模型调用带来的阶跃式延迟,并且能够在既有服务边界内落地。

9. Where This Sits Among Existing Methods

该设计与已有事实性方法共享“生成后检查”的思想,但优化目标是生产链路中的单次调用与不可绕过的发布边界:

方法 主要机制 本方案关注的不同边界
RAG 参数记忆结合外部检索 检索提供材料,不保证材料蕴含最终命题
RARR 外部研究、归因并修订输出 通常包含额外检索和修订阶段
Self-Refine 同一模型多轮反馈与改写 依赖迭代调用;本方案将审计压入一次结构化调用
Chain-of-Verification 草稿、验证问题、独立作答、最终回答 验证链更显式;本方案强调低延迟运行时门控
Self-RAG 训练反思 token,自适应检索与生成 依赖训练机制;本方案是推理时协议
FActScore / SAFE 原子事实分解与事实性评测 主要用于评估;本方案把命题分解放入在线发布路径
ALCE 评价引用正确性与完整性 “有引用”仍不代表每项主张都得到完整支持

单调用 Evidence Gate 不是形式化事实证明器。evidence 仍由同一个模型生成,运行时验证的是结构与分支,而不是通过独立定理证明确认语义蕴含。它的价值在于以较低延迟显著收紧发布路径;对极高风险业务,仍可在此基础上叠加独立验证器、人工审批或确定性数据接口。

10. Production Lessons

  1. Treat every model as fallible. 模型选择影响平均质量,但不应改变系统对事实风险的基本假设。
  2. Make evidence an object, not a label. “来自 Instructions”没有意义,除非能指出其中支持完整命题的内容。
  3. Relevance is not entailment. “附近的真话”比明显错误更容易诱发可信幻觉。
  4. Define publication conditions, not incident keywords. 规则应描述何时允许回答,而不是枚举禁止生成的事实类型。
  5. Let the model judge semantics; let runtime enforce the contract. 两者各自承担擅长且可验证的责任。
  6. Fail closed without becoming useless. 未审计草稿不得旁路发布,同时必须用正向案例监控过度拒答。
  7. Regression must include language and normal workflows. 安全权重增加后,语言遵守、SOP、工具调用和正常答案同样需要回归。
  8. Observability completes the control loop. 记录 Gate、未决项、解析失败、延迟和 token,才能发现安全收益是否以效用或成本为代价。

最终需要守住的不是某个地址,而是一条更普遍的系统边界:

答案不能因为听起来合理而获得发布资格;只有当本轮可信证据完整支持用户将要依赖的关键命题时,它才可以离开 Agent Runtime。

参考文献

交互式图表

放大查看

使用 + / − 缩放,按 0 适应窗口;放大后可拖动或滚动查看,Esc 关闭。