RAG 答案引用如何设计?
简化版
RAG 引用要让用户能定位并核验答案,而不只是文末列链接。检索片段应带稳定 source_id、文档版本、页码/段落和权限;生成器按“事实声明—证据 ID”输出,后端验证 ID 确实在上下文、证据支持声明且用户仍有权限,再渲染为可点击引用。无证据的事实应标注不确定或不回答。
详细版
引用粒度以 claim 为中心:一句包含两个独立事实时分别绑定证据;通用过渡无需滥引。模型不要生成任意 URL,只能选择系统提供的 citation ID。文档更新后引用必须固定版本或内容哈希,链接展示时再映射当前可访问位置,防止“引用漂移”。
评测分 citation validity、completeness 和 entailment:ID 合法、应引用声明有覆盖、证据真正蕴含声明。可用 NLI/Judge 初筛并人工复核,还要测试相互冲突、证据不足和权限撤销。引用正确不等于答案正确,答案正确也不等于所有声明已被证据支持,两组指标需分别报告。
带ID证据 -> 生成 claim+[source_id] -> ID白名单 -> 支持性校验 -> 权限复核 -> UI深链
完整版教学
一、引用解决哪三个问题
第一是可验证,用户可查看依据;第二是可调试,工程师能区分检索与生成错误;第三是责任边界,答案明确来自哪个版本资料。仅列“参考:公司官网”无法定位具体事实,也不能证明该页面支持这句话。
引用不应被当成装饰。模型可能给正确链接却编造链接中没有的结论,这叫 citation correctness 失败。因此系统必须检查声明与证据关系。
二、先给证据稳定身份
每个 chunk 需要 document_id、version/content_hash、chunk_id、页码/标题路径和可选字符偏移。模型只看到短 citation ID,例如 S1、S2,避免复制长 URL 出错。后端维护 ID 到真实资源的映射。
{
"citation_id": "S2",
"document_id": "policy-17",
"version": "sha256:...",
"page": 12,
"section": "退款条件"
}
记忆钩子:引用必须同时回答“哪份文档、哪个版本、哪一处内容”,否则资料一更新,旧答案就失去证据。
三、Claim 级引用为什么更准确
段落末尾放一个引用,读者不知道它支持段内哪句话。一句有“期限 30 天且手续费 5%”两个事实,可能分别来自不同条款。可先让模型输出结构化 claims,每条带 citation_ids,再渲染自然语言。
| Claim | 证据 | 评价 |
|---|---|---|
| 期限为30天 | S1明确写30天 | 支持 |
| 手续费5% | S2写部分品类5% | 需带条件 |
| 所有人都可退款 | 无证据 | 不支持 |
原子化也便于 NLI/人工评测。不要把五个事实塞进一个超长句后挂多个模糊引用。
四、如何约束模型不伪造引用
Prompt 告诉模型只能从 [S1,S2...] 选择,Structured Output 用 enum 限制 ID。后端拒绝未提供 ID,并检查引用片段是否属于本次请求、当前用户可见。模型输出 URL 时不要直接展示,防钓鱼和权限绕过。
约束语法只能保证 ID 存在,不能保证支持性。还需把 claim 与对应 chunk 送入规则、NLI 或 Judge 做 entailment 检查;高风险结论失败时重新生成或拒答。
五、完整性与精确性如何权衡
每句话都引用会让页面难读,并把通用常识也绑定到文档;引用太少又无法核验。先定义哪些 claim 必须引用:数字、日期、政策、产品事实、用户数据和争议结论。纯衔接和明确推理过程可不引用,但应区分事实与推断。
Citation precision 可看已给引用中真正支持的比例,recall/completeness 看应引用事实中被覆盖的比例。10 个事实里 8 个需引用,只覆盖 6 个,则 completeness 75%;给了 7 个引用,其中 1 个不支持,则 precision 约 85.7%。
六、冲突证据如何引用
资料冲突时不能只引用模型喜欢的一条。回答应说明版本、日期和适用范围,分别引用两边,并按业务规则判断权威性;若无法确定,明确不确定。检索层提供 metadata,生成层才有条件比较。
旧政策 S1 与新政策 S2 冲突,若 S2 生效日期更晚且来源权威,可写“自某日按 S2 执行;此前 S1 规则不同”。这比删除 S1 更可解释,也能让用户理解变化。
七、权限与链接展示
用户能看到答案时,不代表永远能打开原文。渲染引用前再次校验 ACL,链接使用受控路由而非泄露存储 URL。权限撤销后,缓存答案和引用也要失效;否则引用系统会成为文档存在性侧信道。
页面定位可用 PDF 页码、HTML anchor 或高亮范围,但底层版本必须固定。若原文已删除,UI 显示“证据版本不可访问”,而不是悄悄跳到当前不同内容。
八、常见误区与追问
- 误区:答案带链接就有可追溯性。 链接必须定位到支持具体 claim 的版本化片段。
- 误区:引用合法 ID 就代表内容支持。 还需 entailment 检查,合法性只是第一层。
- 误区:引用越多越可信。 无关或堆叠引用会降低精确性和可读性。
- 追问:如何防模型伪造 URL? 只允许选择后端提供的 ID,由服务端映射和渲染链接。
- 追问:文档更新后怎么办? 引用绑定版本/哈希,新旧答案各指向当时证据。
- 追问:推理结论怎么引用? 引用所有前提,并明确标注结论是推断而非原文直接陈述。
九、加强记忆
RAG 引用可记成“稳 ID、细 claim、验三层、锁版本、查权限”:证据先有稳定身份,事实按原子声明绑定;验证 ID 合法、覆盖完整和语义支持;版本化防漂移,展示前复查权限。引用的目标是让每个重要事实可点击、可证明、可复现,而不是给答案加几个看起来权威的脚注。