核心要点

  • 检索阶段就保留每个片段的来源元数据:文档名、页码/章节、URL、片段 id

  • 给每个片段编号后拼进 prompt,要求模型「只依据这些片段作答,并在句末标注引用编号 [1][2]」

  • 前端把编号渲染成可点击链接,回链到原文对应位置

  • 答不出时要求模型明说「未在资料中找到」,而不是编造;可加引用核查防张冠李戴

标准回答

第一步:检索时带上「身份证」

切块入库时就给每个 chunk 存元数据:来源文档、页码或章节、URL、唯一片段 id。检索返回的不只是文本,还要带这些来源信息,否则后面无从溯源。

第二步:编号 + 约束生成

把检索到的片段编上号([1][2][3])拼进 prompt,并明确指令:「只根据以下编号片段回答,每个论断在句末标注它来自哪个编号;资料里没有的内容不要编。」这样模型输出就自带 [1] 这样的引用标记。

第三步:渲染回链

前端解析输出里的 [1],映射到对应片段的来源,渲染成可点击的脚注或卡片,用户点一下就能跳到原文核对。

第四步:防幻觉与核查

  • 检索没命中相关内容时,强约束模型回「未在知识库中找到相关信息」,宁可不答也别瞎编。
  • 做引用核查:抽样或自动校验「这句话是否真的能由它标注的片段支撑」,防止张冠李戴——引用编号对了但内容对不上。

常见误区

⚠️ 常见踩坑

只在 prompt 里说「请给出处」却没在检索阶段保留来源元数据,模型只能编一个看似合理的引用;或引用编号标注了但内容与片段对不上(张冠李戴),需要做引用-内容对齐核查。

追问

追问 1模型标了引用,但引用内容其实不支撑那句话,怎么办?

这是「引用幻觉」。可加一道核查:把「论断+被引用片段」交给模型或规则判断片段是否真支撑该论断(类似 faithfulness 校验),不支撑就标记或撤回该引用。生产中对高可信场景(医疗、法律)建议必做这道核查。

追问 2检索回来的内容互相矛盾时怎么处理?

让模型在回答里呈现分歧而非强行二选一:说明「来源 [1] 称…,来源 [2] 称…」并都给出处,把判断权交给用户;或按来源权威性/时间新旧排序优先采信较新/更权威的,并标注依据,避免悄悄抹掉冲突。

延伸学习

与本题相关的知识库文章、术语、工具与行业资讯。