“可溯源可验证”的价值最终需要透过具体的交互细节传递给用户——答案旁边标注的引用、可点击的链接。这个小节描述如何在 RAG 问答链路中,设计并实现可靠、易用的引用溯源与来源跳转功能。
1. 引用溯源的基本形态
在 RAG 系统中,引用溯源通常以 内联标注 + 来源列表 的方式呈现:
- 回答正文中,在每个依据知识库内容生成的句子或段落末尾,添加数字或标识(如
[1]、[2])。 - 回答下方列出对应的来源信息:文档标题、章节、更新日期,甚至匹配到的片段原文片段。
- 每条来源都可以做成可交互的跳转入口,点击后在新标签页或侧栏中打开原始文档的指定位置。
这种形式直观地告诉用户:这个结论依据的是哪份资料,你可以亲自核对。
2. 技术实现要点
从检索到前端展示,整个溯源链路需要统一规划:
(1)检索阶段保留元数据
在文档切片入库时,必须为每个 chunk 附带完整的溯源元数据,至少包括:
source_name:文档名称或编号section_title:章节标题(如有)page_number/chunk_index:在原始文档中的大致位置source_url或file_path:可用于跳转回原始文件的路径或链接timestamp:文档版本或最后更新时间
这些元数据会随向量一起存入数据库,检索时随结果一同返回。
(2)生成阶段要求模型按规范引用
在构造 LLM 的提示词时,需明确要求模型在回答中标注引用位置。典型的提示词模板可以这样写:
你是一名根据参考材料回答问题的助手。
请严格基于下方提供的资料片段回答用户的问题。
在回答中,若使用某段资料的信息,请在句末用方括号标注该资料的编号,如[1]、[2]。
不要编造参考资料中没有的内容。如果资料不足以回答问题,请明确说明。
参考资料:
[1] 来源:员工手册-年假政策,日期:2025-04-01
内容:年假天数由15天调整为18天,未休年假可按250%折现。
[2] 来源:福利政策修订通知,日期:2025-04-10
内容:上述调整自2025年5月1日起生效。
模型会依此生成类似:
从2025年5月1日起,年假天数增加到18天,未休年假可按250%折算薪资[1][2]。
(3)后处理拼装跳转信息
模型输出的 [1]、[2] 只是标记,需在后端或前端将其替换为实际可交互的元素。具体做法:
- 后端将检索返回的元数据(文档 ID、页码等)与模型输出的引用号对应起来,生成结构化答案,比如:
{
"answer": "从2025年5月1日起,年假天数增加到18天,未休年假可按250%折算薪资。",
"references": [
{ "index": 1, "doc_title": "员工手册-年假政策", "page": 14, "url": "/docs/employee-handbook.pdf#page=14" },
{ "index": 2, "doc_title": "福利政策修订通知", "page": 1, "url": "/docs/benefit-update-2025.pdf#page=1" }
]
}
- 前端渲染时,将正文中的
[1]渲染为可点击的角标,hover 显示标题,点击后通过url打开原始文档对应页面;底部也同时展示完整的参考文献列表,每一项均可点击跳转。
(4)确保跳转可用性
跳转目标的可用性直接影响用户信任:
- 对于 PDF 文档,可使用
#page=页码参数直接定位(需前端 PDF 查看器支持)。 - 对于网页型知识库(如 Confluence、语雀),直接链接到页面锚点。
- 对于私有网盘或内网文件,生成可直接访问的带认证链接。
- 若原始文档无法直接定位到段落级别,至少跳转到章节所在页面,减少用户手动查找的负担。
3. 一个交互示例
用户在知识库助手中提问:“笔记本保修期多长?”
系统返回:
X200 系列笔记本标准保修期为 2 年,电池保修 1 年[1]。
部分企业采购批次可享受额外 1 年延保[2]。
参考文献:
[1] 《X200产品手册》第8页(保修条款) [查看原文 →]
[2] 《企业客户服务协议》第3条(延保说明) [查看原文 →]
点击 [查看原文 →],在文档查看器中自动跳转到相关条款页面,用户几秒钟内即可完成核对。这种即时可验证的体验,远比一句孤零零的“答案仅供参考”更有说服力。
4. 实际落地建议
- 引用粒度不宜过细:通常以段落或要点为单位引用即可,每句话都加标注会让阅读体验变差。
- 来源数量控制:即使检索返回 10 个片段,最终回答引用的可能只是其中 2~3 个,不要强制要求模型引用所有资料,避免噪声。
- 处理多文档矛盾:当不同来源说法不一时,可以在提示词中要求模型同时呈现不同观点,并标注不同出处,供用户自行判断,而不是武断取舍。
- 跳转体验退化时的兜底:若原始文档链接失效或权限不足,至少保留明确的文档标题和页码,方便用户手动查找。
一个严谨的引用溯源与跳转机制,是 RAG 系统从“可用”迈向“可信”的关键一步。它让用户不再只是被动接受答案,而是可以主动验证,最终建立起对系统的持续信赖。