当前位置: 首页 > news >正文

基于 Self-RAG 与列表级重排序的进阶 RAG 系统设计与实现

摘要:传统 RAG(Retrieval-Augmented Generation)采用"检索 → 拼接 → 生成"的固定流水线,存在检索冗余、上下文噪声大、生成盲目信任低质片段等问题。本文基于 Self-RAG(Asai et al., 2023)的"自省式检索"思想,结合列表级重排序(Listwise Rerank)与自适应阈值截断,设计了一套可落地的进阶 RAG 框架 Advanced-RAG。系统在 HotpotWikiQA 子集上的 EM / F1 较基线提升 7.2% / 5.8%,并在中文法务问答场景完成端到端验证。文中给出完整 Python 实现,含向量检索、重排序、自省判别器与生成模块。

1. 引言

RAG 已成为大模型落地最核心的范式之一,但工业实践里三个痛点长期没解决:

  1. 是否该检索?——简单问题不需要外部知识,硬塞反而稀释注意力;

  2. 检索回来的片段质量参差,Top-K 拼上下文等于把噪声也喂给 LLM;

  3. 生成阶段无反馈环,错了也不会回头再查。

Self-RAG 用「反思 token」(retrieve / relevant / supported / utility)让 LLM 在生成过程中自己决定查不查、查完判一判再决定要不要继续生成,论文在多个 QA 基准上超了 ChatGPT + 固定 RAG。但原论文实现依赖专有 API + 特定微调模型,中小团队难复现。

本文贡献:

  • 用 BGE-reranker-large 做列表级重排序替代 pointwise 打分,缓解 Top-K 截断的信息损失;

  • 用 轻量判别 Prompt 模拟 Self-RAG 的 [Retrieve][Relevant][Utility]决策,不微调也能跑;

  • 给出 async 流水线 + 缓存 的工程实现,QPS 可线性扩。


2. 相关工作(简述)

  • Naive RAG:Lewis et al., RAG (2020),检索 + 拼接 + Seq2Seq。

  • Self-RAG:Asai et al., 2023,引入 4 类反思 token,训练时做自适应检索。

  • Rerank 方向:RankGPT(Sun et al., 2023)用 LLM 做 listwise 重排;BGE-reranker 用 cross-encoder 在中文场景 SOTA。

  • Corrective RAG (CRAG):2024 年新工作,检索低置信时触发 Web 补查,与本文自省模块互补。


3. 系统设计

3.1 整体架构

User Query    │    ▼ [Self-Reflect: NeedRetrieve?] ──No──▶ Direct Generate    │ Yes    ▼ [Dense Retriever (BGE + FAISS)]  → K=20    │    ▼ [Listwise Rerank (BGE-reranker-large)] → K'=5    │    ▼ [Self-Reflect: IsRelevant?] ──No──▶ Rewrite Query + Re-retrieve    │ Yes    ▼ [Generate + [IsSupported] check]    │    ▼ Answer

3.2 关键设计点

① 自省判别器(零样本 Prompt 版)

不微调,用同一个 backbone LLM 做三档二分类:

反思点

Prompt 判定

阈值处理

[Retrieve]

「这个问题是否需要外部知识?」

<0.5 → 直答

[Relevant]

「以下片段与问题相关性 1-5」

<3 → 改写重查

[Utility]

「答案对用户的帮助程度 1-5」

生成后自评,可回滚

② Listwise Rerank

Pointwise reranker 对每个 (q, d) 独立打分,丢失片段间相对顺序信号。BGE-reranker 是 cross-encoder,把 (q, d) 拼一起过 transformer,列表级用 sorted(scores, descending)即可,推理成本可接受(K=20 → 5,rerank 一次 batch 搞定)。


4. 核心代码实现

4.1 依赖

# python 3.10+# pip install langchain faiss-cpu sentence-
http://www.jsqmd.com/news/1091014/

相关文章:

  • 从图形化到代码:基于ESP8266与米思齐的温室大棚控制逻辑深度解析
  • AI赋能Burp Suite:智能Web漏洞扫描与WAF绕过实战解析
  • “AI编程工具2026盘点:这5个工具让程序员效率翻倍“
  • TPA3128D2评估板设计解析:从D类功放原理到硬件实战配置
  • ESP8266 NodeMCU物联网实战速成(基于Arduino IDE)——从环境搭建到MQTT全链路开发
  • 统信UOS 1060右键菜单精修:从系统级到用户级的打开方式管理全攻略
  • 使用AWS Workload Credentials Provider在EKS中管理应用密钥的实践
  • 阿里云盘Refresh Token获取终极指南:3分钟扫码搞定自动化管理
  • TS泛型坑,编译懵!
  • 每日一题————2026-6-28 最长上升子序列加强版(线性DP版)
  • 世界模型、元宇宙、数字孪生、物理AI:它们是一回事吗?
  • AR 镀膜技术原理:为什么能减少反光?——悟赫德护景贴观复盾的抗反射实现
  • 第11天:进程基础内核认知:PCB与task_struct结构体解析
  • 企业官网的信息架构设计:从内容建模、导航到 URL 与内链
  • FreeRTOS源码详解(一)——申请和释放内存
  • MTEX工具箱:如何用5个关键功能解决材料科学家的晶体学分析难题
  • FreeRTOS源码详解(九)——Notification
  • Linux源码补充
  • 一线观察:激光焊接机器人自动上下料半年实录
  • 小红书SEO怎么做?关键词布局是第一步
  • AMD Ryzen处理器深度调试指南:5分钟掌握SMUDebugTool免费开源工具
  • [Android]appops
  • ❤️全景图鉴❤️武理计科:从C语言到毕业设计的四年技术栈演进
  • 2026沧州黄金回收白银回收铂金回收旧料回收怎么选?五家高实价铂金白银线下门店测评清单 + 联系方式
  • Claude Code强大是因为模型强还是agent实现细节?
  • 3分钟免费上手:可视化Kafka集群管理的完整解决方案
  • GlosSI:让Steam控制器支持所有Windows游戏的终极解决方案
  • 刮宫几天能洗澡洗头?刮宫术后洗护与科学子宫修护
  • League Akari 自动秒选终极指南:深度解析智能英雄选择系统架构与实战应用
  • 如何用3分钟掌握Calibre繁简中文转换插件:电子书阅读的终极语言解决方案