评论区有读者追问了一个更深的问题“让 LLM 在回答里加 [1][2] 这种引用编号它经常标错或者漏标怎么办而且就算标了引用怎么验证引用的内容确实支持它的回答万一它编了一句话然后随便标了个 [1] 呢”这个问题问到了引用溯源的本质不是让 LLM 标个编号就够了而是要通过算法验证每句话确实有据可依。上周有个学员面京东就被追到了这个深度。面试官问他 RAG 系统怎么保证回答可信他说在 Prompt 里要求模型引用来源。面试官追问“模型标的引用你验证过吗遗漏率多少错标率多少如果模型编了一句知识库里没有的内容但标了个引用编号你怎么检测”引用标注和幻觉检测是 RAG 系统从能用到可信赖的最后一关。今天把这个环节从 Prompt 方案到后处理归因到 NLI 验证全部拆开讲。一、为什么 Prompt 标注不够最简单的引用方案是在 Prompt 里要求 LLM 标注来源请基于以下文档回答用户问题并在每句话后用[文档X]标注来源。文档1: ...文档2: ...这种方案在我们的测试中暴露了三个问题遗漏率 15%。LLM 经常忘记给某些句子标注来源尤其是回答较长的时候。错标率 8%。LLM 可能标注了错误的文档编号——明明信息来自文档 2 却标了 [1]。幻觉伪装。最危险的情况——LLM 编造了一句知识库里没有的内容但还标了个引用编号。用户看到有引用就信了其实那句话是编的。所以 Prompt 标注只是第一层防线还需要后处理来验证和补全。二、后处理式归因逐句找出处思路是先让 LLM 生成回答不管它标不标引用然后用算法逐句检查每句话来自哪个文档。def attribute_answer(answer, retrieved_docs): # 第一步把回答拆成句子 sentences split_sentences(answer) attributions [] for sent in sentences: best_doc None best_score 0 # 第二步计算该句与每个检索文档的语义相似度 for doc in retrieved_docs: score compute_similarity(sent, doc.content) if score best_score: best_score score best_doc doc # 第三步相似度超过阈值认为该句来自该文档 if best_score 0.75: attributions.append({ sentence: sent, source_doc_id: best_doc.id, source_section: best_doc.metadata[section_path], confidence: best_score }) else: # 相似度低——可能是LLM的推理也可能是幻觉 attributions.append({ sentence: sent, source_doc_id: None, confidence: 0, warning: unverified_claim }) return attributions但纯相似度还不够——两句话语义相似不代表一句话能从另一句推出来。意外险承保意外伤害和意外险不承保意外伤害语义相似度很高都在讲意外险和意外伤害但意思完全相反。三、NLI 验证不只是相似而是能推出NLINatural Language Inference自然语言推理模型可以判断两句话之间的逻辑关系——是蕴含entailment、矛盾contradiction还是无关neutral。def verify_entailment(sentence, document): 用NLI模型验证document能否推出sentence 返回: supported / contradicted / not_found nli_input { premise: document, # 前提检索到的文档 hypothesis: sentence # 假设回答中的句子 } result nli_model.predict(nli_input) # result: {entailment: 0.92, contradiction: 0.03, neutral: 0.05} if result[entailment] 0.7: returnsupported # 文档支持该句 ✓ elif result[contradiction] 0.5: returncontradicted # 文档与该句矛盾幻觉 else: returnnot_found # 文档中没有相关信息把相似度匹配和 NLI 验证结合起来第一步用语义相似度找到候选文档快用于缩小范围。第二步对候选文档用 NLI 验证蕴含关系准用于确认支持。第三步如果所有候选文档都不能支持该句——标记为未验证声明。def attribute_with_nli(answer, retrieved_docs): sentences split_sentences(answer) attributions [] for sent in sentences: candidates [] for doc in retrieved_docs: sim_score compute_similarity(sent, doc.content) if sim_score 0.6: # 相似度达标用NLI验证 entailment verify_entailment(sent, doc.content) if entailment supported: candidates.append({doc: doc, score: sim_score}) if candidates: best max(candidates, keylambda x: x[score]) attributions.append({ sentence: sent, source: best[doc].metadata, verified: True }) else: attributions.append({ sentence: sent, source: None, verified: False, warning: unverified_claim }) return attributions效果对比方案归因准确率幻觉检测率Prompt 标注82%无法检测相似度归因88%72%相似度 NLI94%87%加入 NLI 后归因准确率从 88% 提升到 94%更关键的是能检测出 87% 的幻觉——这些是纯相似度方案发现不了的。四、幻觉检测与处理检测出未验证声明之后怎么办不能简单地全部删除——有些可能是 LLM 的合理推理比如综合以上信息可以看出……不算幻觉。判断是否包含事实性陈述def contains_factual_claim(sentence): 事实性陈述通常包含数字、日期、专有名词、强断言 patterns [ r\d, # 数字 r第\d条, # 条款编号 r必须|应当|不得|禁止, # 强断言 r万元|%|天|年, # 单位 ] return any(re.search(p, sentence) for p in patterns)分级处理策略def handle_hallucination(answer, attributions): for attr in attributions: if attr[verified]: continue# 有据可依不处理 sent attr[sentence] if contains_factual_claim(sent): # 高危包含事实性陈述但没有证据支持 # 策略删除该句 answer answer.replace(sent, ) else: # 低危可能是推理性语句因此综上 # 策略保留但标记 answer answer.replace( sent, f{sent} ⚠️[该表述未在文档中找到直接依据] ) return answer五、引用信息的结构化输出最终返回给前端的不只是纯文本答案而是一个结构化的 JSON{ answer: 核辐射不在保障范围内。根据条款责任免除包括核辐射等。, citations: [ { sentence: 核辐射不在保障范围内。, source: { doc_title: XX意外险条款, section_path: 第3条 责任免除 (2), page_num: 5, original_text: 责任免除2核辐射、核爆炸…… }, confidence: 0.92 } ], unverified: []}前端拿到这个 JSON 就可以做交互式展示——每句话后面有可点击的引用标签点开可以看原文片段和来源页码。用户可以自己判断答案是否可信。六、面试怎么答引用溯源先讲为什么需要15 秒。“RAG 系统的答案必须可追溯——用户要知道信息来自哪个文档哪一页否则无法判断是否可信。在保险场景中这还是合规要求。”讲三层方案40 秒。“第一层在 Prompt 中要求 LLM 标注引用编号但遗漏率 15%、错标率 8%。第二层用后处理做逐句归因——把回答拆成句子每句话跟检索文档算语义相似度找出处。第三层用 NLI 模型验证蕴含关系——不只是’相似’而是验证文档’能推出’这句话。三层叠加归因准确率达到 94%。”讲幻觉检测20 秒。“NLI 验证发现’不被支持’的句子后判断是否包含事实性陈述。包含数字、条款编号、强断言的高危句直接删除推理性语句保留但标记警告。幻觉检测召回率 87%。”讲效果15 秒。“引用归因准确率从 Prompt 方案的 82% 提升到 94%幻觉检测率 87%返回结构化 JSON 支持前端交互式引用展示。”写在最后引用溯源和幻觉检测是 RAG 系统的最后一公里。前面所有的优化——文档解析、Chunk 切分、混合检索、Rerank 精排——都是为了让系统找到正确的信息。但找到正确信息只是及格线让用户相信这些信息来自可靠来源、让系统自动检测不可靠的内容——这才是满分。在保险、金融、法律、医疗这些高风险场景中一句没有出处的回答就是一个潜在的合规风险。“我的 RAG 系统不只是能回答问题还能告诉用户每句话的出处并且自动过滤没有依据的幻觉内容”——这句话说出来面试官会知道你对系统质量的要求跟业务需求是对齐的。这里给大家精心整理了一份全面的AI大模型学习资源包括AI大模型全套学习路线图从入门到实战、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等资料免费分享扫码免费领取全部内容1. 成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。这里我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。2. 大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF3. 大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。4. 2026行业报告行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。5. 大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。6. 大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。7. 资料领取全套内容免费抱走学 AI 不用再找第二份不管你是 0 基础想入门 AI 大模型还是有基础想冲刺大厂、了解行业趋势这份资料都能满足你现在只需按照提示操作就能免费领取扫码免费领取全部内容
京东面试官冷笑:“你的 RAG 系统给了答案但不告诉用户出处?用户怎么知道你没有在胡说八道?
评论区有读者追问了一个更深的问题“让 LLM 在回答里加 [1][2] 这种引用编号它经常标错或者漏标怎么办而且就算标了引用怎么验证引用的内容确实支持它的回答万一它编了一句话然后随便标了个 [1] 呢”这个问题问到了引用溯源的本质不是让 LLM 标个编号就够了而是要通过算法验证每句话确实有据可依。上周有个学员面京东就被追到了这个深度。面试官问他 RAG 系统怎么保证回答可信他说在 Prompt 里要求模型引用来源。面试官追问“模型标的引用你验证过吗遗漏率多少错标率多少如果模型编了一句知识库里没有的内容但标了个引用编号你怎么检测”引用标注和幻觉检测是 RAG 系统从能用到可信赖的最后一关。今天把这个环节从 Prompt 方案到后处理归因到 NLI 验证全部拆开讲。一、为什么 Prompt 标注不够最简单的引用方案是在 Prompt 里要求 LLM 标注来源请基于以下文档回答用户问题并在每句话后用[文档X]标注来源。文档1: ...文档2: ...这种方案在我们的测试中暴露了三个问题遗漏率 15%。LLM 经常忘记给某些句子标注来源尤其是回答较长的时候。错标率 8%。LLM 可能标注了错误的文档编号——明明信息来自文档 2 却标了 [1]。幻觉伪装。最危险的情况——LLM 编造了一句知识库里没有的内容但还标了个引用编号。用户看到有引用就信了其实那句话是编的。所以 Prompt 标注只是第一层防线还需要后处理来验证和补全。二、后处理式归因逐句找出处思路是先让 LLM 生成回答不管它标不标引用然后用算法逐句检查每句话来自哪个文档。def attribute_answer(answer, retrieved_docs): # 第一步把回答拆成句子 sentences split_sentences(answer) attributions [] for sent in sentences: best_doc None best_score 0 # 第二步计算该句与每个检索文档的语义相似度 for doc in retrieved_docs: score compute_similarity(sent, doc.content) if score best_score: best_score score best_doc doc # 第三步相似度超过阈值认为该句来自该文档 if best_score 0.75: attributions.append({ sentence: sent, source_doc_id: best_doc.id, source_section: best_doc.metadata[section_path], confidence: best_score }) else: # 相似度低——可能是LLM的推理也可能是幻觉 attributions.append({ sentence: sent, source_doc_id: None, confidence: 0, warning: unverified_claim }) return attributions但纯相似度还不够——两句话语义相似不代表一句话能从另一句推出来。意外险承保意外伤害和意外险不承保意外伤害语义相似度很高都在讲意外险和意外伤害但意思完全相反。三、NLI 验证不只是相似而是能推出NLINatural Language Inference自然语言推理模型可以判断两句话之间的逻辑关系——是蕴含entailment、矛盾contradiction还是无关neutral。def verify_entailment(sentence, document): 用NLI模型验证document能否推出sentence 返回: supported / contradicted / not_found nli_input { premise: document, # 前提检索到的文档 hypothesis: sentence # 假设回答中的句子 } result nli_model.predict(nli_input) # result: {entailment: 0.92, contradiction: 0.03, neutral: 0.05} if result[entailment] 0.7: returnsupported # 文档支持该句 ✓ elif result[contradiction] 0.5: returncontradicted # 文档与该句矛盾幻觉 else: returnnot_found # 文档中没有相关信息把相似度匹配和 NLI 验证结合起来第一步用语义相似度找到候选文档快用于缩小范围。第二步对候选文档用 NLI 验证蕴含关系准用于确认支持。第三步如果所有候选文档都不能支持该句——标记为未验证声明。def attribute_with_nli(answer, retrieved_docs): sentences split_sentences(answer) attributions [] for sent in sentences: candidates [] for doc in retrieved_docs: sim_score compute_similarity(sent, doc.content) if sim_score 0.6: # 相似度达标用NLI验证 entailment verify_entailment(sent, doc.content) if entailment supported: candidates.append({doc: doc, score: sim_score}) if candidates: best max(candidates, keylambda x: x[score]) attributions.append({ sentence: sent, source: best[doc].metadata, verified: True }) else: attributions.append({ sentence: sent, source: None, verified: False, warning: unverified_claim }) return attributions效果对比方案归因准确率幻觉检测率Prompt 标注82%无法检测相似度归因88%72%相似度 NLI94%87%加入 NLI 后归因准确率从 88% 提升到 94%更关键的是能检测出 87% 的幻觉——这些是纯相似度方案发现不了的。四、幻觉检测与处理检测出未验证声明之后怎么办不能简单地全部删除——有些可能是 LLM 的合理推理比如综合以上信息可以看出……不算幻觉。判断是否包含事实性陈述def contains_factual_claim(sentence): 事实性陈述通常包含数字、日期、专有名词、强断言 patterns [ r\d, # 数字 r第\d条, # 条款编号 r必须|应当|不得|禁止, # 强断言 r万元|%|天|年, # 单位 ] return any(re.search(p, sentence) for p in patterns)分级处理策略def handle_hallucination(answer, attributions): for attr in attributions: if attr[verified]: continue# 有据可依不处理 sent attr[sentence] if contains_factual_claim(sent): # 高危包含事实性陈述但没有证据支持 # 策略删除该句 answer answer.replace(sent, ) else: # 低危可能是推理性语句因此综上 # 策略保留但标记 answer answer.replace( sent, f{sent} ⚠️[该表述未在文档中找到直接依据] ) return answer五、引用信息的结构化输出最终返回给前端的不只是纯文本答案而是一个结构化的 JSON{ answer: 核辐射不在保障范围内。根据条款责任免除包括核辐射等。, citations: [ { sentence: 核辐射不在保障范围内。, source: { doc_title: XX意外险条款, section_path: 第3条 责任免除 (2), page_num: 5, original_text: 责任免除2核辐射、核爆炸…… }, confidence: 0.92 } ], unverified: []}前端拿到这个 JSON 就可以做交互式展示——每句话后面有可点击的引用标签点开可以看原文片段和来源页码。用户可以自己判断答案是否可信。六、面试怎么答引用溯源先讲为什么需要15 秒。“RAG 系统的答案必须可追溯——用户要知道信息来自哪个文档哪一页否则无法判断是否可信。在保险场景中这还是合规要求。”讲三层方案40 秒。“第一层在 Prompt 中要求 LLM 标注引用编号但遗漏率 15%、错标率 8%。第二层用后处理做逐句归因——把回答拆成句子每句话跟检索文档算语义相似度找出处。第三层用 NLI 模型验证蕴含关系——不只是’相似’而是验证文档’能推出’这句话。三层叠加归因准确率达到 94%。”讲幻觉检测20 秒。“NLI 验证发现’不被支持’的句子后判断是否包含事实性陈述。包含数字、条款编号、强断言的高危句直接删除推理性语句保留但标记警告。幻觉检测召回率 87%。”讲效果15 秒。“引用归因准确率从 Prompt 方案的 82% 提升到 94%幻觉检测率 87%返回结构化 JSON 支持前端交互式引用展示。”写在最后引用溯源和幻觉检测是 RAG 系统的最后一公里。前面所有的优化——文档解析、Chunk 切分、混合检索、Rerank 精排——都是为了让系统找到正确的信息。但找到正确信息只是及格线让用户相信这些信息来自可靠来源、让系统自动检测不可靠的内容——这才是满分。在保险、金融、法律、医疗这些高风险场景中一句没有出处的回答就是一个潜在的合规风险。“我的 RAG 系统不只是能回答问题还能告诉用户每句话的出处并且自动过滤没有依据的幻觉内容”——这句话说出来面试官会知道你对系统质量的要求跟业务需求是对齐的。这里给大家精心整理了一份全面的AI大模型学习资源包括AI大模型全套学习路线图从入门到实战、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等资料免费分享扫码免费领取全部内容1. 成长路线图学习规划要学习一门新的技术作为新手一定要先学习成长路线图方向不对努力白费。这里我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。2. 大模型经典PDF书籍书籍和学习文档资料是学习大模型过程中必不可少的我们精选了一系列深入探讨大模型技术的书籍和学习文档它们由领域内的顶尖专家撰写内容全面、深入、详尽为你学习大模型提供坚实的理论基础。书籍含电子版PDF3. 大模型视频教程对于很多自学或者没有基础的同学来说书籍这些纯文字类的学习教材会觉得比较晦涩难以理解因此我们提供了丰富的大模型视频教程以动态、形象的方式展示技术概念帮助你更快、更轻松地掌握核心知识。4. 2026行业报告行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估以了解哪些行业更适合引入大模型的技术和应用以及在哪些方面可以发挥大模型的优势。5. 大模型项目实战学以致用当你的理论知识积累到一定程度就需要通过项目实战在实际操作中检验和巩固你所学到的知识同时为你找工作和职业发展打下坚实的基础。6. 大模型面试题面试不仅是技术的较量更需要充分的准备。在你已经掌握了大模型技术之后就需要开始准备面试我们将提供精心整理的大模型面试题库涵盖当前面试中可能遇到的各种技术问题让你在面试中游刃有余。7. 资料领取全套内容免费抱走学 AI 不用再找第二份不管你是 0 基础想入门 AI 大模型还是有基础想冲刺大厂、了解行业趋势这份资料都能满足你现在只需按照提示操作就能免费领取扫码免费领取全部内容