想象一家米其林后厨。你点了一道“松鼠桂鱼”,采购员(检索模块)从食材库(知识库)里买回一条鲜鱼和糖醋汁,厨师长(大模型)照着菜谱做菜。正常情况下,这道菜色香味俱全,端上桌时还附带食材小票(引用来源),宾客可以查证。但这家厨房有个头疼的问题:厨师长偶尔会“发挥过度”——明明只买了鲤鱼,他硬说用的是东星斑;菜谱上只说“少许糖”,他凭空加了三勺盐;更糟的是食材不够时,他干脆不写了,直接编一道“水晶肘子”端上来。这就是大模型在 RAG 场景下的“幻觉”:编造检索结果中不存在的事实、断章取义、过度推理。 RAG 系统的“事实校验”质检体系,就是在这家后厨里设立的一整套防线:出锅前自我尝菜(自我校验)、派两个采购员分头买料对照(多路检索交叉验证)、每道菜强制挂采购小票(引用溯源)、规定“没有食材必须写明沽清”(防幻觉提示词),再由质检员按打分表抽查(检测评估指标)。这篇要讲的,就是这套质检体系每个环节如何工作、如何落地。

岗位关联

对 AI 从业者:幻觉是 RAG 落地高敏行业时的头号风险。掌握分型、校验与溯源这套组合拳,是从“跑通 Demo”进阶到“敢上生产环境”的分水岭。

目录
  1. 可视化演示
  2. 幻觉成因分类
  3. 自我校验机制
  4. 多路检索验证
  5. 引用溯源对齐
  6. 防幻觉提示策略
  7. 检测评估指标
  8. 工程落地实践
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示RAG幻觉三大类型、多路检索交叉验证与引用溯源对齐流程,切换模式观察如何科学检测和缓解大模型幻觉问题。

本节配有交互动效(进入视口后自动加载,约 3KB)。

RAG幻觉三大类型 断章取义:截取检索片段脱离上下文,导致语义扭曲 过度推理:超出检索内容做无依据的推断和延伸 Type: {Truncation, OverInfer, Fabrication} 分类幻觉类型是设计针对性检测策略的基础

幻觉成因分类

后厨里最怕的不是菜难做,而是厨师长“自由发挥”。菜谱明明写着“少许糖”,他心情一好倒进半罐;锅里的鱼只够清蒸,他偏要加剁椒;最麻烦的是菜谱缺了一页,他怕客人等,干脆按印象编了一道“家传秘方”。客人吃到的,就成了没有依据的“幻觉菜”。

在 RAG 系统里,菜谱就是检索模块从知识库捞回来的文档片段,厨师长就是大模型。系统把片段拼进提示词,让模型“基于材料回答”。可材料只是被“看见”,不代表被“服从”——模型可能只揪住一句话不放,可能从材料里推出材料没有的结论,甚至直接无中生有。要治理幻觉,第一步是给幻觉“分型”,就像厨师先分清是刀工、火候还是原料的问题。

业界把 RAG 幻觉归纳为四类。断章取义:模型抽取文档中孤立片段,脱离上下文导致原意被歪曲,典型是只引用“低盐饮食有益”却忽略“需遵医嘱”;过度推理:从材料中的相关性推出因果性、从样本推出全称结论;编造事实:输出中出现的实体、数字、条文明明在检索结果里不存在,也叫外来幻觉;上下文丢失:检索召回不足或切片过碎,模型在证据缺失的情况下硬着头皮作答。

所以质检体系的第一道工序不是“抓”,而是“分诊”。看到客人投诉菜不对,先问是哪一类:是火候过度(过度推理)、理解偏差(断章取义)、凭空捏造(编造),还是压根没进到货(上下文丢失)。分型不同,后面的校验手段完全不同。

自我校验机制

分完型,厨师长开始学着“出锅前自己尝一口”。他给自己立规矩:每道菜装盘前,对照菜谱逐一核对步骤——这一步有依据吗?那一味料是菜谱上写的吗?没有依据的,立刻挑出来。

这对应 RAG 里的自我校验(self-verification)。流程是:让模型把生成答案拆解成若干个原子主张(claim,即不可再分的事实陈述),再逐条回到检索上下文里找证据。每条主张要么找到支撑,要么被标记为“高风险主张”。这一步的关键是“拆”——把一段话拆成最小可验证单元,才能精确知道哪句站得住、哪句在裸奔。

实现上有两种主流做法:一是 LLM-as-judge,用独立的裁判提示词扮演事实警察,逐句判断主张是否被材料蕴含;二是用自然语言推理(NLI)模型打分。以 NLI 为例,模型同时编码主张与证据,输出蕴含、矛盾、中立三个类别的概率,用支持概率衡量一句主张的可靠程度:

自我校验相当于第一道自检线:成本低、速度快,但和厨师长自己尝菜一样,只能拦住“明显翻车”。尝不出来时,还得靠后面的双人采购(多路检索验证)和质检员(评估指标)来把关。

Support(c,d)=σ(uc⊤ud)\text{Support}(c, d) = \sigma(\mathbf{u}_c^\top \mathbf{u}_d)
这个公式说的是:把一句话和一段证据分别变成向量,算它们的相似度,再用 sigmoid 压成 0~1 的概率,就是“这句话有没有被这段证据撑住”的置信分数。
  1. 主张向量把待验证的原子主张 c 输入文本嵌入模型,得到稠密向量,语义相近的句子在向量空间里距离更近。
    uc=Embed(c)\mathbf{u}_c = \text{Embed}(c)
  2. 证据向量把检索到的候选证据片段 d 同样编码成向量。
    ud=Embed(d)\mathbf{u}_d = \text{Embed}(d)
  3. 语义点积两个向量做内积,值越大说明主张与证据的语义重合度越高。
    sim(c,d)=uc⊤ud\text{sim}(c, d) = \mathbf{u}_c^\top \mathbf{u}_d
  4. 概率映射用 sigmoid 函数把点积结果压到 0 到 1 之间,作为“该主张被证据支持”的概率。
    σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}

多路检索验证

为了不让厨师长一个人说了算,后厨引入“双采购制”:两位采购员各自按清单去不同的市场进货,回来当面对账。同一样食材两边都买到了,才敢写进菜单;只有一家买到,就要标注“来源待确认”。

对应到 RAG,就是多路检索交叉验证。系统用多个异构检索通道同时召回——稀疏的 BM25 关键词检索、稠密的向量语义检索、再叠加查询改写或多种召回策略——形成一个“证据矩阵”。对答案中的每个主张,统计它在几路证据里出现:多路共同命中,说明证据扎实;只有一路命中,可能是偶然噪声,需要降权或剔除。

交叉验证的数学表达很直观:假设有 K 路检索通道,每条通道对主张 c 给出一个支持分 s_k(c),当分数超过阈值 τ 时记该路命中,把所有通道的平均命中率作为证据一致性分数:

双采购制不能保证每次都对——两家市场可能同时缺货或同时被误导——但它能极大过滤“单点噪声”。多路证据互相印证后,模型才敢把结论写进答案,这也是对付“巧言令色”的最朴素武器:让几张嘴说同一件事。

Agreement(c)=1K∑k=1K1[sk(c)≥τ]\text{Agreement}(c) = \frac{1}{K} \sum_{k=1}^{K} \mathbb{1}\left[s_k(c) \geq \tau\right]
一句话解释:K 路证据里,有多少路“盖章”说这主张靠谱?盖章比例就是证据一致性。
  1. 通道枚举K 代表 K 路独立检索通道,比如一路 BM25、一路向量检索、一路查询改写后的检索。
    k∈{1,2,…,K}k \in \{1, 2, \dots, K\}
  2. 单路判定第 k 路给主张 c 打出的支持分 s_k(c),超过阈值 τ 时记 1,否则记 0。
    1[sk(c)≥τ]∈{0,1}\mathbb{1}\left[s_k(c) \geq \tau\right] \in \{0, 1\}
  3. 平均投票把 K 路的 0/1 结果求平均,得到证据一致性分数,越接近 1 说明越多通道证实该主张。
    1K∑k=1K1[sk(c)≥τ]\frac{1}{K}\sum_{k=1}^{K} \mathbb{1}\left[s_k(c) \geq \tau\right]

引用溯源对齐

这家餐厅还有一条规矩:每道菜上桌,必须挂食材小票编号。宾客按编号能查到采购记录:这条鱼是哪天进的、哪个供应商送的。如果小票编号编得对不上任何进货单,或者小票写着“白菜”盘子里却是“萝卜”,这道菜立刻退货。

这就是引用溯源(attribution)。RAG 系统要求模型生成答案时,为每条关键陈述显式标注来源编号,编号对应检索返回的某个片段。但这只是“形式合规”——模型完全可能编一个不存在的编号,或者把 A 片段的内容安到 B 片段头上。所以必须再做一步对齐校验:把编号对应的原文片段拉出来,与这句主张做语义比对,确认“票货一致”。

对齐校验的质量用两个指标量化:引用精确率,衡量模型标出的引用里有多少真正支撑了对应陈述;引用召回率,衡量所有需要证据支撑的陈述里,有多少被模型正确标出了引用:

小票制度的威力在于“可回溯”:一旦宾客(或质检员)对某句话存疑,顺着编号就能翻到原始材料。对不上的引用在端上前就被拦截,幻觉也就无处遁形——这是让模型承担“举证责任”的设计。

CitPrec=NsuppNcite,CitRec=NsuppNneed\text{CitPrec} = \frac{N_{\text{supp}}}{N_{\text{cite}}}, \qquad \text{CitRec} = \frac{N_{\text{supp}}}{N_{\text{need}}}
精确率回答“引用的东西靠不靠谱”,召回率回答“该引的东西漏没漏”,两者一起看,引用质量才不会有盲区。
  1. 需要证据的陈述N_need 统计答案中所有“必须有依据才可靠的陈述”数量,比如涉及具体数字、日期、法条的主张。
    Nneed=∣{必须引用才算可靠的陈述}∣N_{\text{need}} = |\{\text{必须引用才算可靠的陈述}\}|
  2. 实际引用的陈述N_cite 统计模型生成时真正给出引用编号的陈述数量。
    Ncite=∣{模型标注了引用的陈述}∣N_{\text{cite}} = |\{\text{模型标注了引用的陈述}\}|
  3. 票货一致的陈述N_supp 统计那些“标注了引用、且引用片段经对齐校验真实支持该陈述”的数量。
    Nsupp=∣{引用被验证为真实支持的陈述}∣N_{\text{supp}} = |\{\text{引用被验证为真实支持的陈述}\}|
  4. 两个比率精确率看“引用的东西靠不靠谱”,召回率看“该引的东西漏没漏”,两者结合才是完整的溯源画像。
    CitPrec=NsuppNcite,CitRec=NsuppNneed\text{CitPrec} = \frac{N_{\text{supp}}}{N_{\text{cite}}}, \quad \text{CitRec} = \frac{N_{\text{supp}}}{N_{\text{need}}}

防幻觉提示策略

后厨墙上挂着一块白板,写着三条铁律:缺货就写明“沽清”,不许拿相似食材顶替;菜谱没写的步骤不许自行发挥;每道菜必须写清楚用了哪几号食材。

对应到 RAG,这就是防幻觉提示策略——把纪律写进指令,在生成前就约束行为。常用的提示有三条:一,只依据给定材料回答,不得使用内部知识补充;二,每条关键陈述必须附引用编号;三,材料中没有依据时,直接回答“资料不足,无法确认”。第三条最重要,它给了模型“认怂权”,从源头掐断编造冲动。

除了提示词,还要配检索兜底(fallback):首轮检索的相关度低于阈值时,不急着让模型硬答,而是触发二次检索——改写查询、扩大召回范围、换个检索器再试。仍找不到足够证据,就输出拒答。用门控逻辑表示就是:

提示词不是魔法咒语,它的本质是把“不许犯错”变成“宁可少答”。就像白板铁律一样,厨师有权利说“这道菜今天做不了”,但不能骗客人说“我们就是这么做地道的”——模型的“沽清”,是用户最需要的诚实。

Answer={Refuse(q),max⁡d∈DRel(q,d)<τGenerate(q,D),otherwise\text{Answer} = \begin{cases} \text{Refuse}(q), & \max_{d \in \mathcal{D}} \text{Rel}(q, d) < \tau \\ \text{Generate}(q, \mathcal{D}), & \text{otherwise} \end{cases}
这段分情况讨论的意思是:材料够充分就结合材料作答,材料不够就老实拒答,绝不在证据真空里硬编。
  1. 相关度计算Rel(q, d) 表示问题 q 与检索片段 d 的相关度,通常由 embedding 相似度或重排序模型给出。
    Rel(q,d)=score(q,d)\text{Rel}(q, d) = \text{score}(q, d)
  2. 取最高分max 表示在所有检索片段中挑相关度最高的那个,作为“材料是否够用”的判断依据。
    max⁡d∈DRel(q,d)\max_{d \in \mathcal{D}} \text{Rel}(q, d)
  3. 门控分支最高分仍低于阈值 τ 时输出拒答 Refuse(q);否则交给生成器 Generate(q, D) 结合材料作答。
    {Refuse(q),max⁡Rel<τGenerate(q,D),otherwise\begin{cases} \text{Refuse}(q), & \max \text{Rel} < \tau \\ \text{Generate}(q, \mathcal{D}), & \text{otherwise} \end{cases}

检测评估指标

光靠口头规矩不够,后厨引入了质检打分表。质检员每周随机抽一百道菜盲测,按固定量表记录:这道菜严格按食材小票做了吗?摆了盘却找不到依据的工序有几处?打分表把“感觉”变成数字,月度趋势一目了然。

对应到 RAG,指标中最核心的是忠实度(faithfulness),它回答的问题是:答案里有多少内容是检索上下文真正撑起来的?计算时先把答案拆成原子主张,逐一判断是否被上下文支持,然后统计占比:

忠实度之外,还有一组配套指标:答案相关性衡量回答是否切题,上下文相关性衡量检索回来的材料是否跟问题有关,引用准确率衡量溯源可靠性,幻觉拦截率衡量校验器的生产力。评测时要建一个覆盖典型问题与边界问题的黄金集(golden set),定期跑批量,观察均值与 P95,知识库一更新就回归一遍。

打分表不是为了扣厨师奖金,而是让后厨知道哪类菜最容易翻车:如果本周“断章取义”类投诉上升,就该检查食材切片是不是太碎了(检索切片过大/过小);如果“编造”类上升,就该想想是不是该重新培训厨师(调 prompt)。指标是预警灯,不是绩优表。

Faithfulness=NsupportedNclaims\text{Faithfulness} = \frac{N_{\text{supported}}}{N_{\text{claims}}}
忠实度就是“句句有据”的比例:答案拆成十句话,八句能在检索材料里找到出处,忠实度就是 0.8。
  1. 原子主张集合答案先被拆成 n 条互不重叠的原子陈述,作为忠实度计数的分母来源。
    {c1,c2,…,cn}\{c_1, c_2, \dots, c_n\}
  2. 支持计数用 NLI 模型或裁判 prompt 逐条判断,统计被检索上下文支持的陈述数。
    Nsupported=∑i=1n1[supp(ci)=1]N_{\text{supported}} = \sum_{i=1}^{n} \mathbb{1}[\text{supp}(c_i) = 1]
  3. 求比例支持数除以总陈述数,得到的 0~1 分值就是忠实度,1 表示句句有据。
    Faithfulness=Nsupportedn\text{Faithfulness} = \frac{N_{\text{supported}}}{n}

工程落地实践

把整套质检体系装进真实运营,后厨做的第一件事不是开会喊口号,而是先把“质检”变成流程的一部分:晨会看投诉报表、采购对账、出菜抽查,一环扣一环。

RAG 工程落地同样讲究体系化。上线前,先建 200~500 条的评测集,覆盖真实问题分布、含 5% 以上的边界情形(材料缺失、问题模糊、多义术语),跑通基线。上线后,对每条回答实时计算忠实度与引用精确率,记录幻觉率走势;超过阈值的回答降级处理——标黄提示、附上“仅供参考”或直接转人工。

更关键的是反馈闭环:线上发现的高风险 bad case 回流到评测集,定期复盘是哪类幻觉——检索没召回?提示词约束不够?还是知识库本身过时?然后对应修正:更新知识库、调检索参数、改写 prompt,再跑回归评测,通过后才允许上线。高敏场景(医疗、法律、金融)还要加上人工抽检复核(human-in-the-loop),把阈值调得更严。

后厨最难的不是做出一道好菜,而是天天稳定地做出好菜。RAG 同理——幻觉检测与事实校验不是上线前的“一次性补丁”,而是持续运转的质量体系:分型、自检、交叉、溯源、提示、评估、复盘,七道工序缺一不可,最终形成闭环。

AI 应用场景

医疗病历问答校验

阶段:生成后校验

解决的问题:病历问答中,模型编造药物禁忌会直接危害患者。传统人工逐条核对病历耗时巨大;AI 在生成后自动把结论拆成主张,与检索到的病历、药典逐条比对,无依据的结论直接标红并转人工复核。

具体案例:医生问“患者目前用药是否与华法林冲突?”,系统检索患者既往用药记录与药品说明书,校验器发现答案中“可同时服用”一句在检索材料中无出处,立即改答“材料不足,建议咨询临床药师”。

金融研报引用溯源

阶段:引用对齐

解决的问题:投研助手引用财务报表数据时,张冠李戴或伪造编号会带来合规风险。传统做法靠分析师翻原文核对;AI 强制答案每条数据带来源编号,再用引用精确率自动对齐原文,对不上的引用直接标错。

具体案例:助手回答“公司 Q3 营收同比增长 23%”,溯源校验发现该数字出自 Q2 财报,判定为错误引用并拦截,避免错误数据进入研报。

法律条文多路交叉验证

阶段:检索后验证

解决的问题:法律问答中不同法条相互交叉引用,单路检索容易遗漏条款上下文。传统只凭记忆答复风险高;AI 用多路检索交叉验证,只有多路证据一致的条文才允许被引用。

具体案例:用户问“合同无效的法定情形”,系统分别用关键词检索和语义检索召回《民法典》相关条文,交叉验证后只输出两路共同命中的第 144、146、153 条,避免模型把相邻条文混在一起。

Python 演示

python56 行
# -*- coding: utf-8 -*-"""RAG 幻觉检测与事实校验演示: 拆解主张 -> 证据比对 -> 忠实度打分"""import re  def extract_claims(answer):    """把回答拆成句子级原子主张"""    return [s.strip() for s in re.split(r"[。!?!?]", answer) if len(s.strip()) > 2]  def tokenize(text):    """用二元词组近似切分中文"""    return {text[i:i + 2] for i in range(len(text) - 1)}  def is_supported(claim, contexts, threshold=0.2):    """判断单个主张是否被任一检索片段支持"""    claim_set = tokenize(claim)    if not claim_set:        return False    for ctx in contexts:        ctx_set = tokenize(ctx)        union = claim_set | ctx_set        jaccard = len(claim_set & ctx_set) / max(len(union), 1)        if jaccard >= threshold:            return True    return False  def verify_answer(answer, contexts):    """事实校验主流程: 拆主张 -> 逐条核对 -> 计算忠实度"""    claims = extract_claims(answer)    details = [(c, is_supported(c, contexts)) for c in claims]    supported = sum(1 for _, ok in details if ok)    faithfulness = supported / len(details) if details else 0.0    return faithfulness, details  def demo():    contexts = [        "RAG先从知识库检索与问题相关的文档片段,"        "再把片段拼进提示词,让大模型基于材料生成回答。"        "研究显示,即便使用RAG,大模型仍可能出现与材料不符的幻觉。"    ]    ok_answer = "RAG会先从知识库检索文档,再让模型基于材料生成回答。"    bad_answer = "RAG系统完全不会产生幻觉,模型从不编造任何内容。"    for answer in (ok_answer, bad_answer):        score, details = verify_answer(answer, contexts)        print("回答:", answer)        print("忠实度: %.2f" % score)        for claim, ok in details:            print("  - %s -> [%s]" % (claim, "有依据" if ok else "无依据"))  if __name__ == "__main__":    demo()
目的:演示一套最小的 RAG 事实校验流水线——把回答拆成原子主张,逐条与检索片段做相似度比对,最后输出忠实度分数,判断回答是否存在幻觉。
  1. claims = [s.strip() for s in re.split(r"[。!?!?]", answer) if len(s.strip()) > 2]把整段回答切成一句句“原子主张”,这是校验的最小单位
  2. claim_set & ctx_set求主张与证据片段的重叠二元词,近似衡量“这句话在材料里有没有着落”
  3. jaccard = len(claim_set & ctx_set) / max(len(union), 1)Jaccard 相似度,重叠越多说明越有依据
  4. faithfulness = supported / len(details) if details else 0.0忠实度等于有依据主张数除以总主张数,对应正文的评估指标公式
  5. if __name__ == "__main__":保证脚本可直接运行,也方便被其他模块引用

常见误区

误区我一直以为只要把知识库接进大模型,模型就会老老实实照着材料回答,RAG 之后幻觉就彻底消失了。

正解RAG 只是把材料塞进提示词,并不能保证模型句句服从。材料不完整、检索召回偏、模型“自由发挥”时,幻觉仍会出现。就像把菜谱放在厨师面前,他照样可能手一抖多加三勺盐。因此需要校验层兜底,而不是默认 RAG 安全。

为何常见:RAG 的输出看起来有出处、有引用,给人一种“已经查过资料”的错觉,容易忽略生成环节本身的不确定性。

误区我经常在 prompt 末尾加一句“请确认你的回答是否准确”,以为模型自我检查就能筛掉幻觉。

正解模型自己确认时往往会把原本的错误说得更自信,这叫自我强化。可靠的自我校验必须“让证据说话”:把答案拆成主张,逐条回到检索上下文中找依据,由独立的 NLI 模型或裁判 prompt 判定,而不是让同一个模型凭感觉复读。

为何常见:大模型对话能力太像人类“想了一下再改口”,让人误以为它真的在反思,其实它只是在流畅地续写。

误区只要模型的答案每句话后面都跟着【1】【2】这样的引用编号,我就觉得可以放心上线。

正解编号可能是模型编出来的幻觉引用——编号指向的片段根本不存在,或者张冠李戴。必须做引用溯源对齐:把编号对应的原文片段拉出来,和该句主张做一致性比对,统计引用精确率和召回率,才能判断引用是否真实可信。

为何常见:人类看到数字和编号天然觉得“有据可查”,而模型恰好擅长生成看起来规范的编号格式。

误区我做多路检索就是多接几个搜索引擎,把返回的结果全塞进 prompt,文档越多答案越可靠。

正解多路检索的价值在于“交叉验证”:多个异构通道(稀疏+稠密+查询改写)独立召回,只有多方共同命中的证据才可信。文档堆得越多反而稀释注意力,还可能引入互相矛盾的噪声,需要一致性投票和置信度加权处理冲突。

为何常见:“多就是好”的直觉,让人忽略了检索后验证环节才是多路召回真正发挥价值的地方。

误区我看评测面板上忠实度 0.95,就觉得系统回答非常安全,可以直接上线。

正解忠实度只衡量“答案是否基于检索材料”,不衡量材料本身是否正确、是否切题。如果知识库里本身就是过期或错误的信息,忠实度再高也是在传播错误。还需要结合答案相关性、上下文相关性、引用准确率等指标一起看。

为何常见:单一数字指标容易带来确定感,而真实世界的质检需要多维度交叉,避免“一道菜按坏菜谱做得很认真”。

面试题

Q1. RAG 流程中“检索”环节的主要作用是什么?

单选题 · easy

  • A.让大模型生成更长的输出文本
  • B.从知识库中召回相关文档片段← 正确答案
  • C.对模型的生成结果做重新排序
  • D.直接压缩模型的参数量大小

答案:B。RAG 的检索环节负责从知识库召回与问题相关的文档片段,相当于后厨的采购员去买菜。A 是生成环节的职责,C 是重排序模块,D 与检索无关。选 B——没有采购员,厨师再厉害也没米下锅。

Q2. 按幻觉成因分类,“断章取义”型幻觉通常指什么?

单选题 · easy

  • A.模型完全遗忘了检索文档标题
  • B.截取孤立片段并歪曲文档原意← 正确答案
  • C.把检索到的英文文档做了翻译
  • D.检索模块返回了空文档结果

答案:B。断章取义指模型只截取检索片段中的孤立语句、脱离上下文作答,导致原意被歪曲。好比只看到菜谱上写着“加少许盐”就把半罐盐倒进锅里。A 属于细节遗漏,C 是翻译行为,D 是召回失败,均不符合定义,因此选 B。

Q3. 自我校验中把答案拆成“主张”(claim)的目的是什么?

单选题 · mid

  • A.让答案在结构上显得更加有条理
  • B.逐条审核陈述是否具备检索依据← 正确答案
  • C.通过压缩文本减少生成字数
  • D.优化检索模块的响应速度

答案:B。把答案拆成原子主张,是为了让证据比对有最小审查单元,逐句定位哪句没有依据。A 是附带效果而非目的,C 与校验无关,D 是检索侧优化。就像质检员一粒一粒挑米,而不是整锅看完说“还行”,所以选 B。

Q4. 多路检索交叉验证的核心思想是什么?

单选题 · mid

  • A.多路独立证据互相印证降低误判← 正确答案
  • B.换用参数规模更大的底座模型
  • C.把知识库冗余备份成多份保存
  • D.要求用户反复输入同一种问题

答案:A。交叉验证的核心是用多个独立检索通道的证据互相印证,降低单路噪声带来的误判。B 换大模型不能保证更忠实,C 备份知识库不改变内容质量,D 让用户重复提问既不友好也不可靠。好比两位采购员分头去两家市场对账,选 A。

Q5. 引用溯源中“引用精确率”衡量的是什么?

单选题 · mid

  • A.引用片段中真正支持答案的比例← 正确答案
  • B.回答中引用符号出现的次数
  • C.知识库文档条目的总数量
  • D.检索模块平均消耗的时间

答案:A。引用精确率衡量模型给出的引用中真正支持对应陈述的比例,即“引用了的东西靠不靠谱”。B 统计符号数量没有意义,C、D 与校验无关。就像查采购小票:写了的编号里有多少真能对得上进货单,因此选 A。

Q6. 多路检索中证据出现冲突时正确的做法是什么?

单选题 · hard

  • A.以时间上最早返回的一路为准
  • B.用一致性投票与置信度加权综合← 正确答案
  • C.直接把冲突证据从知识库中删除
  • D.让模型自由发挥不再参考任何证据

答案:B。证据冲突时应综合所有通道,用一致性投票与置信度加权判断。A“先到先得”不科学,C 删除冲突证据会丢失信息,D 放弃证据正是幻觉源头。如同采购对不上账时查市场均价做第三方佐证,而不是轻信先回来的人,故选 B。

Q7. 防幻觉提示词中“资料不足则拒答”的本质是什么?

单选题 · mid

  • A.无依据时明确拒答而不是凭空编造← 正确答案
  • B.无论什么情况都拒绝回答用户
  • C.把全部答案都写得模棱两可不表态
  • D.只输出检索原文而不做任何加工

答案:A。“资料不足则拒答”的本质是让模型在无依据时明确承认不知道,宁可少答也不编造。B 把拒答扩大为全部拒绝是矫枉过正,C 模棱两可损害可用性,D 只回原文无法完成推理型问答。像菜单写明“沽清”而不是硬上替代菜,所以选 A。

Q8. RAG 幻觉的主要成因包括哪些?

多选题 · mid

  • A.对检索文档内容进行断章取义← 正确答案
  • B.超出材料范围进行过度推理← 正确答案
  • C.知识库压缩导致存储空间溢出
  • D.编造检索结果中不存在的事实← 正确答案

答案:ABD。断章取义、过度推理、编造事实是幻觉的三大主要成因;C“存储溢出”是工程故障而非模型行为层面的幻觉。区分成因才能对症下药——先分清是食材不对、火候过头还是厨子乱编,故选 A、B、D。

Q9. 下列哪些属于事实校验阶段常用的技术手段?

多选题 · mid

  • A.把答案拆解成原子级主张← 正确答案
  • B.用自然语言推理判断证据关系← 正确答案
  • C.对生成 Token 做随机采样
  • D.计算引用片段与主张的一致性← 正确答案

答案:ABD。事实校验的常用手段包括把答案拆成原子主张、用 NLI 判断主张与证据关系、计算引用片段与主张的一致性;C 的随机采样是生成阶段的解码策略,与校验无关。校验层做的是“回头查账”,不是“掷骰子”,故选 A、B、D。

Q10. 关于忠实度与答案正确性的关系,下列说法正确的是?

多选题 · extreme

  • A.忠实度高说明答案一定完全正确
  • B.忠实度只度量答案是否基于材料← 正确答案
  • C.材料错误时高忠实度仍会误导← 正确答案
  • D.需结合相关性与上下文性综合评估← 正确答案

答案:BCD。忠实度只衡量答案是否被检索材料支持,不判断材料本身对错;材料错误时高忠实度同样误导用户,故 A 错、B 和 C 对。要综合答案相关性、上下文相关性等指标评估,D 对。就像一道菜完全按坏菜谱做,依然是一道坏菜,故选 B、C、D。