RAG 答案引用评测:有引用不等于引用正确
RAG 答案引用评测:有引用不等于引用正确
一、引用是 RAG 的信任入口
RAG 系统常用引用来提升可信度:答案后面附上文档片段、链接或段落编号。问题是,有引用不等于引用正确。模型可能引用了相关但不支持结论的段落,也可能把多个来源混在一起,生成看似有证据的回答。
因此,RAG 评测不能只看答案是否流畅,还要评估引用是否真正支撑结论。引用是用户验证答案的入口,如果入口错了,系统可信度会下降得很快。实际上,用户遇到来源错误时,对系统的信任度下降远超生成不流畅——前者涉及对系统真实性的怀疑,后者只是对表达质量的抱怨。
二、评测要拆成检索和生成
flowchart TD A[用户问题] --> B[检索结果] B --> C[答案生成] C --> D[引用对齐评测] B --> E[召回评测]检索阶段要看是否召回了正确证据,生成阶段要看答案是否基于证据。两者不能混在一起。检索错了,生成再好也难救;检索对了,生成仍可能乱用证据。分开评测的另一个好处是责任归属:召回指标归检索团队,引用对齐指标归生成团队。混在一起,两个环节互相甩锅,问题永远修不到根上。
引用评测可以逐句检查。每个事实断言都应该能映射到至少一个证据片段。无法映射的断言,要标记为无来源。
三、引用样本要标注支持关系
type CitationEvalCase = { question: string answerSentence: string citedDocId: string support: "supports" | "contradicts" | "irrelevant" | "partial" note: string }这个标注比简单打分更细。partial很重要,因为很多引用只支持部分结论。比如文档说“支持导出 CSV”,模型回答“支持导出 CSV 和 Excel”,引用就只能支持一半。
rag_citation_gate: min_support_rate: 0.9 max_irrelevant_rate: 0.05 block_contradiction: true sentence_level_check: true自动评测可以先做初筛,再抽样人工复核。引用评测完全自动化很难,但没有评测更危险。
四、引用展示也影响可信度
引用不要只放在答案末尾。更好的方式是让关键句子旁边有可点击来源,用户能直接看到证据段落。证据段落也要高亮相关句子,减少用户自己翻找的成本。
还要处理无证据回答。如果检索结果不足,系统应该明确说明无法从资料中确认,而不是强行生成带引用的答案。承认不知道,比伪造可信更专业。
引用评测还要检查“引用粒度”。引用整篇文档虽然看起来有来源,但用户仍然找不到支撑句。更好的粒度是段落、表格行或标题下的小节。全篇引用虽然来源明确但用户找不到支撑句,逐句引用精度高但标注和维护成本大。可以按场景分层:FAQ 类用段落,技术文档用标题下小节,法律文件保留完整上下文。粒度太细也会丢上下文,所以要根据文档类型调整。
type CitationSpan = { docId: string section: string startOffset: number endOffset: number quotedFact: string }对于多来源答案,还要检查来源之间是否冲突。模型可能从旧文档和新文档各取一句,生成一个内部矛盾的结论。评测时可以加入版本字段,要求答案优先使用最新且权威的来源。
citation_display: show_section_title: true highlight_supporting_span: true prefer_latest_version: true warn_conflicting_sources: true线上监控也能反映引用质量。用户频繁点击引用后仍然追问、或者对答案点踩,可能说明引用没有真正解决问题。这些行为应回流到引用评测样本中。
五、总结
RAG 答案引用评测要检查引用是否支持具体结论,区分支持、矛盾、无关和部分支持。
引用不是装饰。它必须能让用户沿着证据回到事实来源。