RAG-Retrieval
统一微调+推理+蒸馏的 RAG 检索全链路工具箱,支持 Embedding/ColBERT/ReRanker 三大架构
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
统一微调+推理+蒸馏的 RAG 检索全链路工具箱,支持 Embedding/ColBERT/ReRanker 三大架构
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你精心搭建了一套 RAG 系统,接入了私有知识库,LLM 也调到了最新版本。用户一问「我们公司的年假政策是什么」,系统返回的却是一堆不相关的合同条款——排序结果排在最前面的,是一段完全没有回答问题的内容。
这背后的问题,往往不在 LLM,而在检索层。RAG 的效果天花板,取决于检索模块能否在海量文档中找到真正相关的那一小批候选项。一旦检索失败,后续的排序(ReRanker)再强也无济于事,因为可供排序的候选项本身就已经偏离了正确答案。
如何高效微调 Embedding 模型?如何训练自己的 ReRanker?如何把效果最好的大模型蒸馏到轻量模型中,在精度和速度之间取得平衡?这些是每一个构建生产级 RAG 系统的人都会遇到的真实挑战。RAG-Retrieval 正是为解决这些问题而生的开源框架。
RAG-Retrieval 由苏州大学 NLP 团队(NovaSearch-Team / NLPJCL)开发和维护,核心作者署名为「A grass in the car」。项目诞生于 2024 年 3 月,聚焦于 RAG 检索链路的全流程工程化实现。
RAG(检索增强生成)是当前 LLM 应用的主流范式,而检索质量直接决定整个系统的上限。传统的做法是直接用开源预训练 Embedding 模型,但这些模型的领域适配性往往不足——专业术语、特定业务场景下的语义差异,通用模型未必能很好地捕捉。这催生了对检索模型微调工具的强烈需求。RAG-Retrieval 的核心价值,就是把 Embedding 微调、迟交互模型(ColBERT)训练、重排序(Reranker)微调这三条技术路线,整合到同一个代码框架中,降低研究和工程落地的门槛。
该项目在 GitHub 上积累了超过 1100 颗星,被近 90 个项目 fork,累计发布 5 个版本(当前稳定版 0.2.2),并已在 PyPI 正式发布 rag-retrieval pip 包。
RAG-Retrieval 的代码组织围绕三个核心阶段展开:训练(Train)、推理(Infer)、蒸馏(Distill)。
训练模块按模型类型分为三个子目录:
rag_retrieval/train/embedding/ —— Embedding 模型微调。Embedding 是 RAG 检索的基石,将文本映射为高维向量,相似语义的内容在向量空间中彼此接近。该目录支持基于 BERT 或 LLM 的 embedding 模型微调,配备完整的训练脚本 train_embedding.py 和数据处理模块 data.py。特别值得一提的是,项目实现了 MRL(Multi-Resolution Latent)损失函数,这是一种先进的 Embedding 训练方法,允许将输出向量维度灵活缩减而不损失太多精度,对于需要在边缘设备部署的场景尤为有价值。
rag_retrieval/train/reranker/ —— 重排序模型微调。ReRanker 位于检索后端,负责对候选文档进行精细化排序,是提升 Top-K 检索精度的关键。该目录支持 BERT-based 和 LLM-based 两种 Reranker 的训练,数据来源通过 data.py 管理,核心模型架构分别在 model_bert.py(轻量方案)和 model_llm.py(高精度方案)中实现,损失函数定义在 ranking_loss.py。项目特别支持通过 LLM 偏好监督来微调 RAG 检索器,相关方法发表于知乎专栏。
rag_retrieval/train/colbert/ —— ColBERT 迟交互模型训练。ColBERT(Contextualized Late Interaction over BERT)是斯坦福提出的新型检索架构,通过「查询编码 + 文档编码 -> 延迟交互」的范式,在保持高精度的同时大幅提升推理速度。该目录实现了完整的 ColBERT 训练流程,区别于传统 bi-encoder 的全交互方式,ColBERT 在编码阶段独立处理查询和文档,仅在最后阶段进行轻量交互,兼顾了效率与精度。
推理模块是项目最具实用价值的部分,提供了统一的 Reranker() 工厂函数,通过 rag_retrieval/reranker.py 中的调度逻辑,根据传入的模型名称自动路由到对应的推理实现。支持的模型类型分为三种:
CorssEncoderRanker(交叉编码器):将查询和文档对拼接后联合编码,精度高但每次推理需处理整个文档对。适用于 BGE-Reranker 系列、BCE-Reranker 等主流开源重排序模型。
ColBERTRanker(迟交互编码器):独立编码查询和文档,最后阶段执行向量点积交互。代表实现为 BGE-M3 模型。
LLMRanker(LLM 重排序):直接使用 LLM(如 BGE-Reranker-V2-Gemma、BGE-Reranker-V2-MiniCPM-Layerwise)作为排序模型,精度最高但计算开销也最大。
rag_retrieval/infer/reranker_models/utils.py 提供了推理层的公共工具函数,result.py 定义了排序结果的数据结构,整体推理接口简洁清晰,用户只需一行 Reranker(model_name="bge-reranker-v2-m3") 即可加载任意支持的模型进行推理。
蒸馏是将大模型知识迁移到小模型的核心技术。项目在 examples/ 目录下提供了多个蒸馏实战示例:
RAG-Retrieval 提供两种安装路径:
仅推理(推荐大多数用户):通过 pip 直接安装预编译的 Python 包,无需 GPU,适合快速接入现有 RAG 系统。
pip install rag-retrieval
训练(含完整源码):通过 git clone 拉取仓库,安装为可编辑模式,可访问全部训练代码和示例。
git clone https://github.com/NovaSearch-Team/RAG-Retrieval.git
cd RAG-Retrieval
pip install -e .
训练阶段需要 GPU 支持,推荐 NVIDIA GPU(CUDA 11.8+),显存需求因模型规模而异:Embedding 训练建议 6GB+ 显存,LLM-based Reranker 训练需要更大显存。推理阶段可在 CPU 上运行,但速度较慢,有 GPU 可显著加速。
项目目前不支持 Docker 部署,没有提供 Dockerfile 或 docker-compose.yml,适合有 Python 环境的研究者和开发者直接使用。训练脚本提供了 DeepSpeed 和 FSDP(Fully Sharded Data Parallel)两种分布式训练策略的配置,在 config/ 目录下有对应的 YAML 配置文件,支持多卡微调大规模模型。
项目团队不仅维护工程代码,也在持续输出学术研究成果。2025 年 5 月发布的 Myopic Trap 研究,系统分析了 RAG 全链路中的位置偏置问题——即检索结果中靠前或靠后的文档对最终答案质量的系统性影响。研究团队在 SQuAD-PosQ 和 FineWeb-PosQ 两个精心设计的基准数据集上,对 BM25、稠密向量模型、ColBERT-style 模型和各类 ReRanker 进行了全面评估,揭示了位置偏置在不同模型间的差异化表现,为优化 RAG 流水线提供了实证依据。
优势方面:代码结构简单清晰,模块边界明确,修改和扩展的门槛较低;支持丰富的模型类型,从轻量 BERT 到大规模 LLM 均有覆盖;提供了从训练到推理的完整闭环,无需在多个工具之间切换;配套文档较为完整,包含中英文双语文档。
局限性方面:不支持开箱即用的 Web UI 或 API 服务,需要自行封装为服务;缺少 Docker 支持,生产环境部署需要自行处理依赖和版本兼容;推理模块目前仅聚焦于 ReRanker,暂不支持纯 Embedding 模型的推理(仅通过 pip 包提供);ColBERTRanker 在 AVAILABLE_RANKERS 中被注释掉了,活跃可用的推理类型为 CrossEncoder 和 LLMRanker 两种。
RAG-Retrieval 体现了当前 RAG 技术发展的重要趋势——从「能用」走向「用好」。通用 LLM 的普及让开发者能在短时间内搭建基础 RAG 系统,但真正投入生产后,检索质量成为制约系统效果的核心瓶颈。Embedding 微调和 ReRanker 训练,正是解决这一瓶颈的必经之路。
该项目将原本分散在论文、代码仓库和个人博客中的检索模型训练技巧,整合为一个统一框架,显著降低了研究者和工程师的接入成本。随着多模态 RAG、长上下文窗口 RAG 等新场景的涌现,检索模型的重要性只会继续上升。RAG-Retrieval 作为目前为数不多的中文社区主导的 RAG 检索全链路框架,在学术研究和工程落地之间架设了桥梁,值得关注。