当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > RAG 检索结果如何按置信度分层:上下文截断与引用保留

RAG 检索结果如何按置信度分层:上下文截断与引用保留

来源:17golang原创 2026-08-29 16:39:16 0浏览 收藏

RAG 问答里最容易被误用的数字,是检索结果旁边那个相似度分数。分数高,只能说明 query_embedding 和 document_embedding 在当前模型、索引和数据分布下更接近,并不等于这段文字足以支撑完整答案。更稳的做法是把结果分成高、中、低三层:高层进入回答上下文,中层先补充关键词或重排,低层只记录不喂给模型。

把 similarity_score 当作排序信号,而不是事实置信度;真正决定能否回答的,是分数、来源完整度、上下文预算和引用覆盖率一起通过检查。

要点速览
  • 先用固定测试集校准阈值,再决定高、中、低三层的边界。
  • 高分片段也要检查标题、版本和来源字段,缺来源不能直接进入答案。
  • 上下文截断应按预算和引用覆盖率执行,不能简单取 topK 全量拼接。
  • 线上监控至少区分召回命中、引用覆盖和最终拒答三类指标。

先把相似度分数放回它该在的位置

假设一次查询返回 8 个片段,最高分为 0.86,第二名为 0.84。这个结果只回答了“哪些片段在向量空间更近”,没有回答“片段是否包含问题所需的条件”。例如用户问某个 SDK 的超时默认值,片段可能都来自旧版本说明;分数很漂亮,答案仍然会错。

OpenAI 的 Embedding FAQ 说明,归一化向量可以用点积更快地计算余弦相似度,且两种距离的排序一致。这个事实适合用来解释排序,不适合凭经验直接设定“0.8 就可信”。阈值必须和自己的查询集、切块方式、模型版本一起测。

分层示例规则后续动作
高similarity_score ≥ 0.82 且有来源进入上下文,保留引用
中0.70 ≤ similarity_score 补做关键词过滤或重排
低similarity_score 不进入回答,记录拒答原因

用一组固定问题校准高、中、低三层

不要先看线上偶然案例再倒推阈值。准备一组带标准答案和来源的 query,例如“退款申请需要哪些字段”“哪个版本引入这个参数”,每个问题标出真正支持答案的文档片段。然后固定 embedding 模型、切块规则和 topK,记录每条结果的 similarity_score、是否命中支持片段、是否有 source_url。

可以先用下面的最小规则做离线统计:

def classify_hit(item):
    if item["similarity_score"] >= 0.82 and item.get("source_url"):
        return "high"
    if item["similarity_score"] >= 0.70:
        return "middle"
    return "low"

for item in retrieved:
    item["confidence_layer"] = classify_hit(item)

这里的 high 不是“答案正确”,而是“值得进入下一道上下文检查”。离线评估时分别计算 Recall@K、带来源片段的命中率和最终拒答率。只优化最高分,可能让 Recall@K 上升,却把过期文档一并送进回答。

RAG 检索分层示意:query_embedding 经过向量检索得到 similarity_score,再分为 high、middle、low

上下文预算决定哪些片段真正留下

通过第一层筛选后,还不能把所有高分片段直接拼成 prompt。先按文档来源、版本和引用编号去重,再从高层开始装入 context_budget;当一个片段和已选内容重复时,宁可让出位置给能覆盖新条件的中层片段。

selected = []
used_tokens = 0
for item in ranked:
    if item["confidence_layer"] == "low":
        continue
    if used_tokens + item["tokens"] > context_budget:
        continue
    selected.append(item)
    used_tokens += item["tokens"]

实际系统还应加一个“引用覆盖”检查:回答草稿中的每个关键结论,都要能映射到 selected 中的 source_url 和 chunk_id。若预算只够两段,而问题包含“适用版本”和“例外条件”两个要求,就优先保留分别覆盖这两个条件的片段,而不是机械地保留分数最高的两段。

第二个容易忽略的边界是截断位置。把长文档从尾部硬切掉,可能正好丢失“限制条件”;更稳的切法是保留标题、版本字段、正文命中句和相邻一小段,并在 chunk 元数据中保留原文序号,方便回答时生成引用。

RAG 上下文预算示意:high 与 middle 结果经过 context_budget 筛选并保留 source_url 引用

一次可复现的结果对比怎么做

用同一批测试问题跑两组策略:A 组直接取 topK,B 组先分层、去重、按 context_budget 选择。输出不要只比较模型回答是否“看起来像对的”,至少保存三个字段:是否命中标准片段、引用是否覆盖关键结论、没有足够证据时是否拒答。

示例结果可以这样记录:A 组 Recall@5 为 0.86、引用覆盖率为 0.61;B 组 Recall@5 为 0.83、引用覆盖率为 0.79。这个对比说明 B 组少带了一些候选,但证据链更完整,不代表它在所有语料上都更好。正式上线前要按产品自己的问题分布重新测量。

如果 B 组的拒答率突然升高,先看阈值和来源字段是否过严,再看切块是否把版本信息拆散。这里别急着扩大 topK;更多片段会增加上下文噪声,也可能把旧版本答案带进来。

常见问题:分数、阈值和引用怎么判断

相似度达到 0.8 就能直接回答吗?

不能。0.8 只是当前模型和数据集中的排序信号,必须结合来源、版本和问题条件验证。

高分片段没有链接怎么办?

可以作为内部候选,但不应支撑需要对外解释的关键结论;优先寻找有 source_url 的同主题片段,找不到就让系统明确说明证据不足。

为什么 topK 越大,回答反而更乱?

候选越多,重复内容、旧版本和互相冲突的条件也越容易进入上下文。应按预算、来源去重和引用覆盖率筛选,而不是只扩大 K。

把检索质量控制落到线上指标

上线后保留每次检索的阈值配置、模型版本、topK、入选 chunk_id 和引用覆盖结果。每天抽样看低分拒答与高分错误各自占比;如果高分错误上升,通常要检查文档新鲜度和元数据过滤,而不是先调低阈值。

最后,给检索链留一个明确的停止条件:没有足够来源、关键条件未覆盖或上下文预算无法容纳必要证据时,返回“当前资料不足以确认”,并记录触发原因。对 RAG 来说,能解释为什么不答,往往比用一段高分但过期的内容填满上下文更可靠。

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
视觉语言模型 OCR 结果为什么会漂移:图片裁切、坐标归一化与结构化校验视觉语言模型 OCR 结果为什么会漂移:图片裁切、坐标归一化与结构化校验
上一篇
视觉语言模型 OCR 结果为什么会漂移:图片裁切、坐标归一化与结构化校验
Go os.Rename 跨文件系统为什么失败:临时文件提交与回退复制策略
下一篇
Go os.Rename 跨文件系统为什么失败:临时文件提交与回退复制策略
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    463次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    526次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    543次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    492次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    311次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议 和 隐私政策
返回登录
  • 重置密码