当前位置:首页 > 文章列表 > 科技周边 > 人工智能 > 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推荐
  • ljg-skills -
    ljg-skills
    ljg-skills 是李继刚开源的 AI 技能与提示词集合,面向大模型使用者整理了一批可复用的 prompt、角色设定和任务技能模板,适合用于学习提示词设计、搭建个人 AI 工作流和沉淀团队常用智能体能力。
    5425次使用
  • MELO音乐 - AI 音乐生成平台,支持多模态创作能力
    MELO音乐
    MELO音乐是一站式AI视频与音乐制作助手,对标suno, udio的高品质体验。提供伴奏生成、原创写词、无损导出、哼唱识曲、混音变声等全套音频与短视频编辑工具。无论是流行Kpop、电音说唱、民谣古风、摇滚儿歌还是商用轻音乐,MELO为你免费谱曲,轻松做同款!
    4911次使用
  • UniScribe - AI 免费在线音视频转文字平台
    UniScribe
    UniScribe 是一款 AI 音视频转文字与内容整理工具,支持上传音频、视频文件或粘贴 YouTube 链接,自动生成转写文本、摘要、思维导图和关键问题,并支持多格式导出,适合会议记录、课程学习、访谈整理和内容创作复盘。
    4834次使用
  • 剧云 - 免费 AI 智能中文剧本创作平台
    剧云
    剧云是专业中文剧本创作平台,安全稳定运行十余年,集成AI编剧、剧本医生审核、人物小传、剧情关系图、大纲编写、多人协作、Word导入导出、版权管控功能,数据安全防护,轻松高效创作剧本。
    5097次使用
  • 万象有声 - AI 一站式有声内容创作平台
    万象有声
    万象有声,一个专为有声创作者打造的新一代智能有声内容创作平台。平台提供专业的智能拆章、智能画本编辑、AI配音、AI生成音效、后期制作、智能对轨、智能审听等有声创作全流程工具,可以帮助创作者高效、低成本创作出引人入胜的有声作品。立即体验,让有声书制作更简单!
    5056次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码