引用溯源怎么实现?怎么防模型「标了引用却胡编」?

Q2-24生成可信度常见引用溯源citation幻觉控制阈值兜底说不知道

谁在问:toB 场景面试官(法务、金融、医疗、企业知识库)

口语化问法

  • 你们的答案带出处吗?怎么做的?
  • 模型标的引用是准的吗?会不会张冠李戴?
  • 知识库里没有答案的时候,系统会怎么回答?

考察意图

toB 场景的硬需求题。引用溯源是 RAG 相对微调的核心优势之一,但很多人只做到「让模型输出引用编号」就以为完事了——模型标错引用是高频现象。面试官想看:① 你知不知道引用需要后处理校验;② 「说不知道」你是靠 prompt 还是靠阈值(靠 prompt 是不够的);③ 有没有意识到错误答案在某些场景比没有答案更危险。

参考答案

图 2 · 60 分与 90 分差在哪:代价、演进、怎么验证

60

60 分答案(及格线)

引用溯源:给送进 prompt 的每个 chunk 编号,要求模型在答案的每句话后标注引用编号;前端把编号渲染成可点击的出处链接,展示原文片段、来源文件和页码。chunk 的元数据(文件名、标题路径、页码、更新时间)在建索引时就要存好。

说不知道:prompt 里明确要求「材料中没有相关信息时,回答不知道,不要编造」。

90

90 分答案(有生产经验的回答)

补三层,每层都是 60 分答案的漏洞:

① 引用必须做后处理校验。模型标错引用是常见现象——它可能标了编号但那句话其实来自另一个 chunk,甚至来自它自己的先验知识。做法:拿答案里的每句声明去和它标注的 chunk 做一次归属校验(用轻量模型或文本重叠/蕴含判断),校验不通过就降级——去掉该引用并标注「此处出处不明确」,或者整体重新生成。「有引用」和「引用是对的」是两件事。

② 「说不知道」不能只靠 prompt。更有效的是在检索层设分数阈值:最高相关性分数低于阈值时,根本不进生成,直接走兜底话术。理由很简单——材料都摆在上下文里了,再强的 prompt 也压不住模型「凑合答一个」的倾向;而阈值兜底是确定性的。阈值靠评测集里那类「知识库没有答案」的问题来调(见 Q2-15)。

③ 分场景决定容错姿态。闲聊型产品可以宽松,但在法务、医疗、金融场景,错误答案比没有答案危险得多——用户会照着错误答案去操作。这类场景应该把阈值调高、宁可多说几次不知道,并且明确展示「以下内容依据 X 文件第 Y 条」让用户自己能核。

再补一个实现细节:引用粒度要选好。整段引用最容易实现但用户不好核对;逐句引用体验最好但模型标注负担重、出错率高。折中是按论点分段引用——一个论点一个引用,兼顾可核性和准确率。

追问链

图 1 · 五层追问树:面试官会往哪儿挖
从「有引用」挖到「引用是对的」,再挖到你敢向法务承诺什么

  1. 怎么校验模型标的引用是对的?

    期望把答案拆成声明(claim),逐条与被引的 chunk 做蕴含判断 —— 轻量 NLI 模型、文本重叠度或小模型判官。这就是 faithfulness 的算法,区别只在这里在线做、用于拦截,评测时离线做、用于打分
    信号能把它和 faithfulness 联系起来 → 知识是打通的
  2. 分数阈值怎么定?定高了会怎样?

    期望用评测集调,两批样本各测一边:「有答案」的别被误杀、「无答案」的要拦住 —— 精确率与召回率的经典权衡,取决于业务对「答错」和「答不出」的容忍度。且分数不可直接比较(见 Q2-10),混合检索下阈值要落在融合排序或重排分
    信号指出「分数不可比、阈值要基于 rerank 分」→ 非常专业
  3. 模型说「不知道」,但用户觉得知识库里明明有,怎么办?

    期望这是阈值误杀 —— 检索失败被兜底话术掩盖了。所以被拦截的 query 必须记日志、定期回捞,这批数据是检索优化的金矿;某类 query 频繁被拦说明这类检索有缺口(分词、缺 BM25),要回去修检索而不是调低阈值
    信号想到「拦截日志要回捞」→ 有闭环意识;只说「调低阈值」→ 治标
  4. 多个 chunk 支持同一句话,引用怎么标?

    期望一句话允许标多个引用,展示时按相关性排序、默认只展开最相关的一条,其余折叠。重点是去重:同一份文档的相邻 chunk 合并成一条出处 —— 否则用户点开五个引用发现是同一页,体验很差
    信号能想到「同源合并」→ 做过前端展示的实际打磨
  5. 法务客户说「引用必须 100% 准确,否则不能上线」,你怎么回应?

    期望不承诺 100%,换成可验证的保障,按拦截顺序摆:① 校验不通过的内容不输出,宁可降级 → ② 强制展示原文片段让用户一眼可核 → ③ 给可量化的引用准确率与评测报告 → ④ 高风险场景加人工复核 → ⑤ 完整审计日志。再挑明定位:辅助检索工具,不是法律意见的出具者
    信号拍胸脯说「能做到 100%」→ 对技术边界无知或不负责任;给出「降级 + 可核 + 可量化 + 人工兜底」→ 扛得住 toB 交付
面试官在这题上要的是承诺边界:第 1 层考「你知不知道模型会标错引用」,第 5 层考「面对绝对化要求敢不敢用可验证的保障换掉空头承诺」;第 2、3 层考阈值兜底这条确定性防线。

评分要点

  1. 知道引用需要 chunk 编号 + 元数据(来源、页码、标题路径)
  2. 知道模型会标错引用,需要后处理校验
  3. 知道「说不知道」不能只靠 prompt,要有检索分数阈值兜底
  4. 知道阈值要用评测集调,且涉及误杀权衡
  5. 加分:意识到某些场景「答错比不答更危险」
  6. 加分:能把引用校验和 faithfulness 指标联系起来
  7. 加分:知道被拦截的 query 要回捞分析
  8. 加分:面对 100% 准确率要求能给出诚实且可验证的方案

常见错误

「让模型在答案里标出处就行了」——完全不知道会标错。
「说不知道」只靠 prompt 一句话约束。
完全不谈阈值误杀的代价。
认为引用做了就等于消除了幻觉——引用是让幻觉可被发现,不是让它不发生
面对客户的绝对化要求直接承诺 100%。

关联学习