← RAG 检索增强

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

高频 中等 上下文组装、引用与拒答 · 第 3 / 4 问 更新于 2026/09/30
RAG无答案检测拒答置信度校准
本题落地项目AI Agentic 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 和澄清成为正式输出,系统才有能力诚实停下。

项目实战落地

项目里怎么做的

两个项目都把「资料里没有」落在检索阈值和兜底话术上,检索结果为空时不调用大模型:

  • 《AI Agentic RAG高级企业知识库平台》的阈值按分数量纲分成余弦相似度阈值和重排相关分阈值两档;结果被过滤空时,走问答应用上配置的兜底话术(默认「知识库中未找到相关内容。」),这条消息的结束原因记为「没有召回」,方便事后统计。
  • 《AI企业知识库》默认只保留余弦相似度不低于 0.2 的片段;一条都不剩时,直接返回「知识库中没有检索到足够相关的资料,建议补充知识文档或降低相似度阈值后再试。」生成阶段的 Prompt 也要求资料不足时明确说明。

《AI Agent电商平台导购与运营增长系统》的商品知识问答把阈值定在余弦相似度 0.5:检索取前 3 条切片,低于 0.5 的先滤掉;一条都不剩时不调用大模型,直接回复「没有找到和这个问题相关的商品资料,无法基于资料作答」,并提示先去商品知识库维护资料,链路轨迹里记下「无相关切片,未调用大模型」。有资料时,系统提示词还要求模型「如果资料中没有相关信息,直接说明资料未覆盖,不要编造」。

为什么这样取舍

  • 检索为空时不调模型。 这时候调模型,只会得到一段基于参数记忆编出来的回答,既费钱又误导用户。
  • 兜底话术按问答应用配置。 不同业务的口径不一样,客服场景可能要引导用户转人工,内部知识库可能只需要提示补充文档。

分数量纲和阈值为什么要分两档,见「混合检索里向量分、BM25 分、RRF 分和重排分量纲不同,阈值应该怎么设?」。

面试官还会追问

  • 阈值把正确的结果也砍光了,项目里怎么让人一眼看出是阈值的问题,而不是知识库没切分、没向量化?
  • 用户点踩「答非所问」的回答,怎么变成下一轮效果评测的用例?

学完《AI Agentic RAG高级企业知识库平台》,上面这些追问你都会迎刃而解。

本题落地项目地狱锤炼AI Agentic RAG高级企业知识库平台基于企业知识库、PGVector 向量检索、Agentic RAG、FastAPI + LangGraph、Function Calling,实现向量 + BM25 混合检索与 RRF 融合、Rerank 重排、HyDE 与多查询改写、父子分块召回、LangGraph 状态图自适应检索、Agent 执行时间线和 LLM-as-judge 四指标评测,覆盖从基础 RAG 到高级 RAG 调优的完整闭环。FastAPILangChainLangGraphRAGPGVector源码+SQL喂饭学习教程配套面试文档环境安装文档项目运行文档 学习这个项目 也可以学AI企业知识库登峰造极 查看项目 也可以学AI Agent电商平台导购与运营增长系统地狱锤炼 查看项目