← 返回题目列表

RAG 如何判断“资料中没有答案”?

高频 中等 第 6 / 29 题 更新于 2026/09/18
RAG无答案检测拒答置信度校准

简化版

不能只用最高向量相似度判断无答案,因为“主题相关”不等于“证据可回答”。应组合检索覆盖、reranker/entailment 支持度、答案 claim 的引用校验和业务规则,训练或提示模型输出明确的 insufficient_evidence。阈值在有答案/无答案混合集上校准,并同时控制乱答率与过度拒答率。

详细版

流程先判断查询是否可检索及过滤是否合理,再对 Top-k 做 answerability 评分:是否包含所需实体、关系、时间和完整条件。生成后把答案拆成 claims,若关键 claim 无证据蕴含就拒答或只回答可支持部分。多条弱相关证据不能通过“投票”变成强证据。

评测构造三类负例:库中完全无主题、主题相关但缺答案、存在旧/冲突资料无法确定;同时保留邻近可回答正例。用 selective accuracy、coverage、无答案 Recall、误拒率和 risk-coverage 曲线选阈值。高风险领域宁可低 coverage,普通客服则可请求澄清或转人工。

检索 -> 可回答性验证 -> 生成候选 -> Claim支持校验
             |                 |
           不足--------------> insufficient_evidence / 部分回答

完整版教学

一、无答案不是“检索分低”

文档可能与问题高度相关,却没有所问字段。问“保修是否包含电池”,召回保修概览,全文没有电池条款;向量分数很高,答案仍未知。相反,精确编号文档语义分数不高,却直接包含答案。

因此相似度只能做一个特征。真正要判断的是证据是否蕴含回答所需的主张,即 answerability,而不是 topical relevance。

二、无答案有不同类型

完全无主题时可直接提示资料库不覆盖;主题相关但字段缺失需要说明缺什么;多份资料冲突则是不确定;权限过滤导致不可见时不能透露存在性,只能返回无权限/无法访问。不同状态需要不同产品动作。

类型表现建议输出
库外问题无相关文档不覆盖该主题
证据缺字段有相关文档但不可回答缺少具体信息
证据冲突多版本无法判定列冲突并升级
权限不足可能有但不可见denied,不泄露细节
问题含糊多种解释请求澄清

记忆钩子:RAG 的拒答不是“我不会”,而是“在当前权限和证据中,无法证明这个结论”。

三、检索侧有哪些信号

可用最高/均值 rerank 分、Top1 与 Top2 margin、结果来源多样性、实体匹配和关键槽位覆盖。绝对阈值会随模型和领域变化,必须校准。多个近重复弱结果不应被数量误导,可先按文档簇去重。

features = [top_score, score_margin, entity_coverage,
            required_slot_coverage, source_authority]

轻量分类器或规则将这些特征转为 answerability 候选,但最终还要看生成 claim 的支持性。

四、生成前如何验证证据充分

将问题拆成必须回答的槽位或子问题,例如“谁、在何时、允许什么条件”。对候选证据做 entailment/QA 验证,确认每个关键槽位有直接 span。表格和多跳问题可能需要组合多个片段,验证器应允许可解释的证据链。

若只找到退款期限,却没有适用品类,可以回答“期限是 14 天”但不能断言某商品一定适用。支持部分回答时输出 partial 和 missing_fields,调用方决定是否接受。

五、生成后 Claim 校验为何必要

即使生成前证据看似充分,模型仍可能添加未支持修饰词或数字。把答案拆成原子 claims,逐条与引用片段判断 entailed/contradicted/not_found。关键 claim 有一个 not_found,就重写、删除或整体拒答。

例如答案有 4 个事实,3 个直接支持,1 个是模型推断。若该推断不影响主答案,可标注“推测”;若它是金额或资格结论,则必须拒答。规则由风险等级定义,不用一个统一平均支持率。

六、阈值如何校准

准备有答案与无答案混合验证集,覆盖邻近边界。扫描阈值 τ,计算 coverage(系统愿意回答的比例)和 selective accuracy(已回答部分准确率)。提高 τ 通常降低 coverage、提高准确率,形成 risk-coverage 曲线。

假设 τ=0.5 时回答 90% 请求,已答准确 85%;τ=0.8 时回答 60%,准确 97%。医疗或财务可能选择后者,普通知识助手可选择中间并提供澄清。阈值需按语言、任务和版本分别校准。

七、怎样构造真正困难的负例

随机放完全无关文档太容易,模型学会看关键词。Hard negative 应与主题高度相关但缺关键关系,或把正确答案替换为不同时间/产品版本。还要加入问题前提错误、证据冲突和只有部分答案的样本。

对每个可回答题可生成反事实负例:删除唯一答案句,保留其他上下文;或把关键实体换成同类实体。这样测试模型是否真的依赖证据,而不是凭领域常识猜。

八、常见误区与追问

  • 误区:Top1 相似度低于 0.7 就无答案。 分数跨模型/领域不可比,且相关性不等于可回答性。
  • 误区:召回多篇相关资料就应该回答。 多条弱证据不会自动蕴含缺失事实。
  • 误区:提高拒答率就更安全。 过度拒答会伤可用性,要看 risk-coverage。
  • 追问:无答案时输出什么? 稳定状态码、已确认部分、缺失字段和下一步,不要编造空泛解释。
  • 追问:如何区分无答案与检索失败? 用 oracle 真值证据实验;库中有真值但未召回属于检索失败。
  • 追问:冲突资料算有答案吗? 若无法按权威/时间解决,应标不确定而非选择一个。

九、加强记忆

无答案检测可记成“相关不等于可答,分数不等于证据”。先验证问题所需槽位是否被候选覆盖,再校验生成 claims 与引用的蕴含关系;用困难负例和 risk-coverage 曲线按风险选阈值。让 insufficient_evidence、partial 和澄清成为正式输出,系统才有能力诚实停下。