资讯动态

RAG评测95分陷阱:从多选题到严格评分的企业知识库实践

发布时间:2026/10/9 1:22:15 来源:尧图企业网站定制
开头部分预计这种情况会让人措手不及1. 药企语料的评测95 分是怎么骗人的1.1 多选题的天然容错选项本身就是提示词先交代一下背景。我们做的是一个面向药企内部研发团队的知识库问答系统语料主要来自脱敏后的药品说明书、临床研究总结报告、质量标准文档。验收阶段我拿着第一版测试报告去找负责人汇报RAG知识库问答多选题正确率 95 分效果很好。负责人很高兴当场就让产品经理拿几个真实业务问题去试用。结果产品经理回来后跟我反馈你说是 95 分为什么我问的几个问题它给出来的答案有一半左右感觉不太对我当时第一反应是你主观感受不准但冷静下来一查问题确实出在评测设计上整套验收测试里客观题占大头而多选题这种题型本身就自带容错光环。多选题为什么容易得分虚高核心原因是多选题把答案选项摆在了模型面前选项本身就成了提示词。模型在做选择题时不需要像自由问答那样真正组织出一段话它只需要判断哪个选项眼熟、哪个选项跟检索到的上下文更贴近。这跟人做选择题是一个道理——看到正确答案时会有一种再认感但你让这个人不看书空手把答案写出来他大概率写不全。在药企语料这个场景下这个效应更明显。药品说明书里的表述高度模板化适应症用法用量禁忌这些字段名是固定的选项里只要把正确字段名和文档里出现的原话放在一起模型靠关键词匹配就能选对。可一旦到了实际业务场景用户问的是开放问题模型面对的是一张白纸需要自己决定说哪些、怎么措辞、按什么顺序组织难度完全不同。我记得很清楚的一份测试报告里有一道题某药物与华法林联用时是否需要调整剂量A. 需要B. 不需要C. 视 INR 监测结果而定D. 仅对老年患者需要。模型检索到了文档里建议根据 INR 监测结果调整剂量这句话成功选了 C。这当然算对。但如果我们改成一个开放问法——请说明该药物与华法林联用时的剂量调整建议——模型需要自己输出需要监测 INR并根据 INR 结果调整剂量老年患者建议加强监测频率这一套完整表述出错的概率就大多了。宽口径评测里这道题照样能算对但实际上模型的生成能力远没有到能复述的水平。1.2 宽松评分隐藏的三个问题那 95 分到底怎么来的我把每次的评分口径翻了底朝天发现多选题评分本身就做得很宽松它掩盖了三类问题。第一检索失败但选项救场。多选题里正确答案的长相跟错误答案有明显差异模型即便没有检索到最相关的那一段也能靠这个词在文档里出现过这种模糊记忆排除掉明显错误的选项。也就是说检索侧明明被判了没命中推理侧还能蒙对。这导致检索召回率的问题根本没有暴露出来。第二答案要素缺失完全无法体现。选择型任务只需要输出选项序号模型不需要把适应症、用法用量、禁忌、注意事项这些字段逐一展开。而药企场景的正确答案往往是多要素的——这个药怎么用、什么时候吃、什么情况下不能用是三个完全独立的知识点。多选题只要选项集合对就默认模型全都会了但它到底会不会复述这些字段无人知晓。第三语义相近的错误表述不会被扣分。药企语料里不推荐和禁用、慎用和在医生指导下使用是含义完全不同的表述但在多选题的评分规则里只要模型选对了对应选项它怎么理解、怎么转述都没关系。宽松评分完全不看模型说出来的话是否严谨。这三类问题叠加在一起的结果就是95 分是一份看上去很美的报告但它测的是模型的辨认能力不是表达能力更不是应用于真实业务场景的能力。1.3 验收组没法直接喊停一份报告的信任危机这里有个更微妙的问题验收不是一个纯技术动作它涉及跟业务方、管理层的沟通。当你拿着一份多选题 95 分的报告去跟人汇报时对方的预期已经被拉高了。等产品经理真实试用发现不对劲再回头解释那是评测口径问题信任成本已经付出去了。我们那次就是典型的反面教材报告上写着 95 分但实际上线后的首月问题反馈工单里有 3 例是关于答案写得不完整没有提到禁忌人群的还有 1 例是AI 自己补充了文档里没有的说法。这些如果按严格口径评测都是扣分项。所以后来我们定了一个规矩任何 RAG 评测报告不能只附一个总分必须把宽口径分和窄口径分并列展示而且两者分差超过 5 个百分点时报告不允许直接进入审批流程必须先做差异分析。这条规矩就是从上面这次翻车里长出来的。2. 严格评分口径拆解10 分到底丢在哪2.1 我们的严格评分是怎么设计的既然要严格就必须先定义什么叫严格。我们内部复盘后把严格评分拆成了三个维度检索侧Top-3 召回率、段落命中率即正确答案对应的源文档片段是否出现在检索结果里生成侧答案完整率、事实一致性模型输出是否与检索到的源段落一致有没有知识库外的自由发挥综合侧幻觉率生成内容里包含源文档中完全不存在信息的比例生成侧的打分口径也做了调整。每道题不再是整体对错二元判断而是拆成字段打分。举例来说一道请说明该药的用法用量的题分成给药方式单次剂量给药频率特殊人群调整四个字段每个字段都要与源文档里的具体表述比对完全一致得 1 分部分一致得 0.5 分不一致或缺失得 0 分。最终严格评分 完全正确的题目×1 部分正确的题目×0.5折算成百分制。在这个口径下100 道题里有 70 道完全正确、30 道部分正确总得分就是 85 分。这个 85 分就是标题里那个数字的来源。有人会问为什么是 0.5 而不是 0因为我们考察的是知识库问答系统不是考试机器。模型能把主要答案说出来、只是漏了一个相对次要的字段这是可以在后续迭代中改进的给它一半的分比直接判零更能反映系统当前的真实水平。但如果只给通过/不通过两种结果85 这个数字就会变成是不是没过线的模糊信号所以我们在报告里会把完全正确率70%和部分正确率30%单独列出来——这一点很重要。2.2 逐类错误统计丢分不是均匀分布的严格评分跑完我们把错误样本全部捞出来做了归类发现那 30 道部分正确的题目和若干道完全错误的题目并不是均匀分布的。归纳下来就三类第一类检索到了但生成丢字段。占掉分问题的一半以上。模型确实检索到了包含全部答案的段落但输出时只挑了其中一部分。比如题目问请说明该药与某利尿剂合用的注意事项源文档里写了监测血钾、监测肾功能、避免与保钾利尿剂长期合用、出现乏力及时就医四条模型只输出前两条后面两条完全没提。第二类检索返回了错误段落模型将错就错。检索器把相关度不高的段落排上来了模型基于这段不相关内容生成了答案。有时答得看着挺顺但关键信息是错的。这类问题最能暴露宽口径 vs 窄口径的差异——多选题的选项给了模型纠错的机会自由问答没有。第三类检索完全失败模型开始编。这类问题占比最低大约每 100 题有 4 到 6 题但每一例都值得警惕。因为一旦模型开始编它编出来的话术往往相当专业看起来很像真的普通非技术同事根本分不清。这就是幻觉率在药企场景里尤其要单独统计的原因。2.3 一个典型案例从选对到复述不全拿一个具体的题目说明这两种评分口径的差距。我们语料里有一道题问某药治疗慢性心衰时起始剂量如何调整。多选题版本A. 从低剂量开始逐渐滴定至目标剂量B. 直接使用目标剂量C. 根据血压决定起始剂量D. 无需调整剂量。模型选了 A正确。严格评分版本同样是这个知识点问法改成请说明该药在慢性心衰患者中的起始剂量调整建议。模型给出的答案是应从小剂量开始根据血压和心率耐受情况逐步上调至标准维持剂量。这个答案看着没毛病但对照源文档里面明确写了起始剂量为目标剂量的 1/4每 2 周根据血压和心率调整 1 次直至达到目标剂量。模型少了起始剂量为目标剂量的 1/4这个精确数值也没提每 2 周这个时间间隔按字段规则给药方式字段部分正确具体数值字段缺失滴定周期字段缺失。最后这道题只拿到 0.5 分。这就是 95 和 85 之间最典型的差距多选告诉模型答案是那个意思严格评分要求模型把全部信息按原意复述出来。在药企这种不允许靠语感自由发挥的领域后者才是真正的验收标准。3. 药企专属语料给评测挖的三个坑3.1 同义改写陷阱内部叫法 vs 标准药典名行业知识库有一个通用 RAG 项目很少遇到的麻烦同一个实体在不同文档里有完全不同的叫法。比如企业内部培训材料管某类药物叫长效胰岛素类似物标准药典用的是甘精胰岛素注射液而研发周报里可能只写来得时。多选题对这类差异天然免疫因为选项已经把标准名和内部叫法都列出来了模型只要找到其中一个在文档里出现过就敢选。但自由问答场景下用户问XX 药和长效胰岛素一起用有没有禁忌模型检索甘精胰岛素注射液相关段落时如果只做了字面匹配很可能召回不到那份写了来得时的周报然后生成一个未找到相关文档的答案——这还算好的更危险的是它检索到一份相近的文档然后给出一个看似合理但实际错误的回答。针对这类问题我们把同义词表直接并入了评测集设计每一组同义词至少配两道题一道用标准名提问一道用内部叫法提问看两者得分有没有显著差异。如果标准名提问得分高、内部叫法提问得分低不用怀疑就是检索侧的实体归一化没做好。3.2 结构化答案与自由文本的错位药企语料还有一个特点标准答案往往是高度结构化的。药品说明书的禁忌一栏写法是分条列项1. 对本药任何成分过敏者禁用2. 严重肝功能不全者禁用3. 妊娠及哺乳期妇女禁用。RAG 模型天生擅长生成连贯的散文不擅长保证每条都列出来。如果模型把三条禁忌合成一段话说出来通过我的鲁棒理解它表达的语义可能全对但按字段级评分只要少一条就这题就部分正确甚至完全错误。这类结构化答案 vs 自由文本输出的错位也是宽松评分完全反映不出来的。多选题里三条禁忌对应三个选项模型全选就行它不需要证明自己知道第三条。只有改成请完整列出该药的禁忌人群这种开放问题模型才会暴露出只记住了前两条、第三条根本没进入生成序列的问题。3.3 长文档切块导致半对答案这是所有 RAG 项目都会遇到、但药企场景尤其致命的问题切块方式直接决定检索内容是否完整。我们的知识库里有一份临床研究报告关于药物相互作用的结论分散在药代动力学安全性分析注意事项三个章节里。固定长度切块后这三块内容被切进了不同的 chunk每个 chunk 都只含一部分答案。检索器把三个 chunk 都召回了当然没问题但如果 Top-3 里只召回两个模型生成的答案就必然缺一块。药企文档的章节结构非常规律规律到解析目录树、按章节和段落语义切块是更合理的选择而不是一刀切 512 token。我们在第一版用的就是固定长度切块后来严格评分一跑发现部分正确的样本里有相当一部分是因为答案被切散了。改成按章节语义切块再配合字段拼接后这类丢分明显减少。这也是我给所有做企业知识库 RAG 的人一个很重要的提醒评测分数低不一定是模型不行很可能是语料处理阶段就把答案切碎了后面再怎么调 Prompt 都补不回来。4. 一套可以抄走的 RAG 验收指标组合4.1 核心指标怎么选四个维度一个都不能少经历了这次95 分翻车事件我总结了一套适用于企业知识库尤其是专业领域知识库的 RAG 验收指标组合。四个维度检索质量、证据质量、生成质量、稳定性。维度指标计算口径我建议的参考值检索质量Recall3正确答案所在源段落是否出现在检索结果 Top-3 中≥ 90%检索质量段落命中率包含完整答案的段落是否被检索到≥ 85%证据质量源段落引用准确率生成时引用的段落是否真的支撑答案内容≥ 95%生成质量答案完整率按关键字段逐一比对完整命中的比例≥ 80%生成质量事实一致性生成内容与源段落语义一致由打分规则判定≥ 90%生成质量幻觉率生成内容中有多少信息在源文档中完全找不到≤ 5%稳定性重复测试口径同一测试集跑 3 次分数波动幅度≤ 2 分参考值不是拍脑袋定的它们是能用于实际业务的最低线。比如药企场景下答案完整率低于 80%意味着用户每问 5 个问题就有 1 个答案缺关键信息这在合规审查阶段是会被打回的。幻觉率 5% 听起来不高但放到一个日请求量上万的系统里就是每天几百条AI 自由发挥的内容流出必须要盯。4.2 评测集结构多选题只占 30%单纯的客观题不能不用但比例必须控制住。我推荐一个三七分的评测集结构30% 多选/判断题用来做整体趋势筛查尤其是回归测试时看系统有没有大的劣化40% 字段型问答题每道题背后有一个明确的标准答案结构拆成 3 到 5 个字段按字段核对给分30% 开放问答题不预设字段但配备打分 Rubric由评审人或 LLM 裁判按完全正确/部分正确/错误/幻觉四档打分这个结构最大的好处是多选题得分高的时候你可以再去看字段型问答题的得分如果前者高后者低说明模型能认不能写检索或者生成还有问题。如果两者都高再去看开放问答题——它考察的是综合表达能力。层层递进任何一个环节有问题都能定位到具体是哪一类能力缺失。4.3 验收报告必须写清的四件事一份合格的 RAG 验收报告我认为至少要包含四件事第一评测集样本量。100 道题和 1000 道题的可信度完全不同。我们内部的要求是核心评测集不少于 300 题并且标明来源分布避免评测集全是药品说明书、没有覆盖真实用户高频问题。第二评分口径。明确写了是多选题正确率还是字段级完整率两者不能混在一个总分里说。第三分维度子分数。总分 85 没有意义一定要能拆出检索 92、段落命中 88、完整率 83、幻觉率 6这样后续优化才有方向。第四典型错误样本。至少附 10 个错误案例包含问句、系统回复、检索到的源段落、评分结果。这一步看着费时间但它是让业务方信任评测结果最有效的手段——光有一个分数任何人都可以质疑附上真实案例质疑就变成了讨论。4.4 关于阈值到底卡多少阈值这块我多说一句。很多人喜欢直接抄参考值但参考值必须跟你的业务风险级别挂钩。如果是药企、医疗、金融这类合规要求高的场景答案完整率的参考值我建议直接拉高到 85%幻觉率压到 2% 以下。如果是内部文档问答、员工培训这类低风险场景可以把完整率放到 75%幻觉率放到 8% 以内——因为低风险场景追求的是大部分时候能用可以容忍偶尔的不完美。实测中我们发现一个规律刚开始做 RAG 的项目往往检索侧分数低、生成侧还算过得去优化完检索之后生成侧的幻觉问题会突然暴露出来——因为检索终于把相关文档召回了模型开始有内容可以发挥了。所以验收指标组合必须是全维度的单看任何一个分数都会误导你。5. 压分之后怎么定位问题二分法排查路径5.1 先给系统装上证据记录仪严格评分跑完你已经知道了分数但你还不知道问题出在哪一环。这时候最重要的一件事让系统在每次回答时把证据链存下来。证据链就是三个字段用户原始问题检索到的 Top-3 源段落包含段落 ID 和来源文档名模型最终生成的答案有了这份记录分析错误时就不用靠猜了。我们后来把这三样东西直接写进日志评测脚本跑一遍日志里就能按题目 ID 拉出完整链路。5.2 分组对照不到半小时就能定位方向拿到了证据链定位方法其实是个很朴素的二分法。把错误样本按检索段落里是否包含正确答案分成两组第一组检索段落里已经有正确答案但模型输出不对——问题出在生成侧或 Prompt 设计第二组检索段落里根本没有正确答案——问题出在检索侧跟模型生成能力无关我们实测下来85 分对应的错误样本里第一组和第二组的比例大约是 6:4。这个比例很重要如果你发现第二组占比特别高那就别急着调 Prompt先把切块策略和检索器搞明白反过来如果第一组占主导你去加大向量检索的召回量也是白费功夫。定位完大方向后再往下拆一层检索侧是切块切碎了答案还是嵌入模型语义理解不足还是 Top-K 太小生成侧是 Prompt 里没让模型逐条列出还是模型上下文里没有完整证据还是模型本身擅长自由发挥这几步走完问题基本就锁定了。整个过程不需要人工智能玄学就是一份日志加一张二分表。5.3 我们实际做的改进和结果按上面的排查路径我们做了三个改动第一切块策略从固定 512 字符改为按章节标题 按语义段落的混合切块同时给字段型文档做了结构化解析把适应症用法用量禁忌这些字段作为独立块存起来。效果是段落命中率从 88% 提升到 93%。第二检索从单一向量改为向量 关键词混合检索并在重排阶段加分给包含字段标题的段落。这个改动的最大收益是用户用内部叫法提问时关键词检索能兜住向量召回不到的专有名词。Recall3 从 92% 提升到 95% 左右。第三生成侧 Prompt 里明确加了两条硬约束只能使用检索提供的段落回答不得补充段落之外的信息和涉及多个要点时逐条列出。同时当检索段落字段不全时让模型在答案里显示当前检索结果未覆盖以下字段XXX而不是试图靠常识补全。这套组合拳打完严格评分从 85 分提升到 90 分左右其中幻觉率从 6% 降到了 2% 以下答案完整率从 83% 升到 89%。有意思的是多选题正确率依然稳定在 95 分附近几乎没有变化——这也印证了一个观点多选题这类宽口径评测对检索和生成质量的敏感度太低你改了那么多东西它在分数上根本看不出来。如果你验收时只看这一种指标那你永远无法从报告里发现系统真正的问题也无从判断优化的效果。最后分享一个我们内部现在仍在坚持的做法每次 RAG 版本迭代评测报告必须同时附上宽口径和窄口径两套数字并在注释里写明两套数字的差距原因。如果某次迭代让宽口径分数涨了 2 分、窄口径分数却跌了 3 分那就说明这次改动引入了新的生成质量问题不能直接上线。评测指标这种事本质上跟医生看病一个道理——化验单上每个指标单独看都有正常范围但医生永远要结合多个指标一起判断。RAG 验收也是一个道理任何只报一个分数的报告都值得打回去重新测。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑