UltraRAG 2.0:用极简代码构建高性能检索增强生成系统

几十行代码,实现类 Search-o1 的复杂推理流程,专注科研创新,告别工程负担。

你是否曾在构建检索增强生成(RAG)系统时,被复杂的工程实现困扰?随着 RAG 系统从简单的“检索+生成”向融合自适应知识组织、多轮推理、动态检索的复杂知识系统演进,科研人员面临的工程挑战也日益加剧。传统方法需要大量代码实现流程控制、模块集成和实验评估,不仅耗时耗力,还容易引入错误。

现在,这一切有了新的解决方案——UltraRAG 2.0

什么是 UltraRAG 2.0?

UltraRAG 2.0(UR-2.0)是清华大学 THUNLP 实验室、东北大学 NEUIR 实验室、OpenBMB 与 AI9stars 联合推出的基于 Model Context Protocol (MCP) 架构设计的 RAG 框架。这一框架的革命性在于:只需编写 YAML 文件,就可以直接声明串行、循环、条件分支等复杂逻辑,极大降低了复杂 RAG 系统的技术门槛与学习成本。

想象一下,你能否用几十行代码实现类似 Search-o1 的多轮迭代检索生成流程?UltraRAG 2.0 让这成为可能。

核心亮点:为什么选择 UltraRAG 2.0?

🚀 低代码构建复杂 Pipeline

UltraRAG 2.0 原生支持串行、循环、条件分支等推理控制结构。你不需要编写复杂的程序逻辑,只需通过 YAML 文件声明执行流程,就能构建强大的迭代式 RAG 系统。

⚡ 快速复现与功能扩展

基于 MCP 架构,所有模块都被封装为独立、可复用的 Server:

  • 可按需自定义 Server 或直接复用现有模块
  • 每个 Server 的功能以函数级 Tool 注册,新增功能仅需添加一个函数
  • 支持调用外部 MCP Server,轻松扩展 Pipeline 能力与应用场景

📊 统一评测与对比

内置标准化评测流程与指标管理,开箱即用支持 17 个主流科研 Benchmark:

  • 持续集成最新基线
  • 提供 Leaderboard 结果
  • 方便进行系统性对比与优化实验

技术原理:MCP 架构与原生流程控制

在不同的 RAG 系统中,检索、生成等核心功能虽然相似,但由于实现策略各异,模块之间往往缺乏统一接口,难以跨项目复用。Model Context Protocol (MCP) 作为一种开放协议,规范了为大型语言模型(LLMs)提供上下文的标准方式,采用 Client–Server 架构,使遵循该协议的 Server 组件可以在不同系统间无缝复用。

UltraRAG 2.0 基于 MCP 架构,将 RAG 系统中的检索、生成、评测等核心功能抽象并封装为相互独立的 MCP Server,并通过标准化的函数级 Tool 接口实现调用。这种设计既保证了模块功能扩展的灵活性,又允许新模块以”热插拔”方式接入,无需对全局代码进行侵入式修改。

UltraRAG 架构图

复杂 RAG 推理框架的开发具有显著挑战,而 UltraRAG 2.0 之所以能在低代码条件下支持复杂系统构建,核心在于其底层对多结构 Pipeline 流程控制的原生支持。所有控制逻辑均可在 YAML 层完成定义与调度,覆盖复杂推理任务所需的多种流程表达方式。

在实际运行中,推理流程的调度由内置 Client 执行,其逻辑完全由用户编写的外部 Pipeline YAML 脚本描述,从而实现与底层实现的解耦。开发者可以像使用编程语言关键字一样调用 loop、step 等指令,以声明的方式快速构建多阶段推理流程。

安装指南:快速开始使用 UltraRAG 2.0

环境准备

使用 Conda 创建虚拟环境:

conda create -n ultrarag python=3.11
conda activate ultrarag

通过 git 克隆项目到本地或服务器:

git clone https://github.com/OpenBMB/UltraRAG.git
cd UltraRAG

依赖安装

我们推荐使用 uv 来进行包管理,提供更快、更可靠的 Python 依赖管理体验:

pip install uv
uv pip install -e .

如果你更习惯 pip,也可以直接运行:

pip install -e .

可选依赖安装

UR-2.0 支持丰富的 Server 组件,你可根据实际任务灵活安装所需依赖:

# 如需使用 faiss 进行向量索引:
# 需要根据自己的硬件环境,手动编译安装 CPU 或 GPU 版本的 FAISS:
# CPU版本:
uv pip install faiss-cpu
# GPU 版本(示例:CUDA 12.x)
uv pip install faiss-gpu-cu12

# 如需使用 infinity_emb 进行语料库编码和索引:
uv pip install -e ."[infinity_emb]"

# 如需使用 lancedb 向量数据库:
uv pip install -e ."[lancedb]"

# 如需使用 vLLM 服务部署模型:
uv pip install -e ."[vllm]"

# 如需使用语料库文档解析功能:
uv pip install -e ."[corpus]"

# 安装所有依赖(除 faiss)
uv pip install -e ."[all]"

验证安装

运行以下命令验证安装是否成功:

# 成功运行显示'Hello, UltraRAG 2.0!' 欢迎语
ultrarag run examples/sayhello.yaml

快速上手:三步构建你的第一个 RAG 系统

UltraRAG 2.0 的使用流程极为简单,只需三个步骤:

  1. 编译 Pipeline 文件生成参数配置
  2. 修改参数文件
  3. 运行 Pipeline 文件

我们提供了从入门到进阶的完整教学示例,欢迎访问教程文档快速上手 UltraRAG 2.0!

常用功能目录

以下是科研中常用功能的快速导航:

全面支持:数据集、语料库与基线方法

UltraRAG 2.0 开箱即用,内置支持当前 RAG 领域最常用的公开评测数据集、大规模语料库以及典型基线方法,方便科研人员快速复现与扩展实验。

支持的数据集

UltraRAG 2.0 支持多种类型的评测数据集,覆盖了 QA、多跳 QA、多项选择、长表单 QA、事实验证、对话和槽填充等任务类型:

任务类型 数据集名称 原始数据数量 评测采样数量
QA NQ 3,610 1,000
QA TriviaQA 11,313 1,000
QA PopQA 14,267 1,000
QA AmbigQA 2,002 1,000
QA MarcoQA 55,636 1,000
QA WebQuestions 2,032 1,000
Multi-hop QA HotpotQA 7,405 1,000
Multi-hop QA 2WikiMultiHopQA 12,576 1,000
Multi-hop QA Musique 2,417 1,000
Multi-hop QA Bamboogle 125 125
Multi-hop QA StrategyQA 2,290 1,000
Multiple-choice ARC 3,548 1,000
Multiple-choice MMLU 14,042 1,000
Long-form QA ASQA 948 948
Fact-verification FEVER 13,332 1,000
Dialogue WoW 3,054 1,000
Slot-filling T-REx 5,000 1,000

支持的语料库

语料库名称 文档数量
wiki-2018 21,015,324
wiki-2024 整理中,即将上线

完整的数据集可通过该链接访问与下载。你也可以参考数据格式说明,灵活地自定义并添加任意数据集或语料库。

支持的基线方法(持续更新)

UltraRAG 2.0 持续集成最新基线方法,方便研究者进行对比实验:

基线名称 脚本
Vanilla LLM examples/vanilla.yaml
Vanilla RAG examples/rag.yaml
IRCoT examples/IRCoT.yaml
IterRetGen examples/IterRetGen.yaml
RankCoT examples/RankCoT.yaml
R1-searcher examples/r1_searcher.yaml
Search-o1 examples/search_o1.yaml
Search-r1 examples/search_r1.yaml
WebNote examples/webnote.yaml

常见问题解答

UltraRAG 2.0 适合哪些用户?

UltraRAG 2.0 特别适合以下用户群体:

  • 科研人员:希望快速实现和验证新的 RAG 算法思路,而不想陷入工程细节
  • 学生和初学者:想要学习 RAG 技术但被复杂实现吓退的学习者
  • 工程师:需要快速原型验证和迭代 RAG 应用场景的开发人员

我需要多少编程经验才能使用 UltraRAG 2.0?

UltraRAG 2.0 的设计理念是降低使用门槛。即使你只有基本的 Python 和 YAML 知识,也能快速上手。框架通过声明式的方式让你关注于流程设计而非实现细节。

UltraRAG 2.0 的性能如何?

由于基于标准化的 MCP 架构,UltraRAG 2.0 在保持易用性的同时,不牺牲性能。模块化的设计允许每个组件独立优化,而且支持分布式部署,可以满足大规模应用的需求。

如何扩展 UltraRAG 2.0 的功能?

扩展功能非常简单:只需实现一个新的 MCP Server,注册相应的 Tool 函数,然后在 YAML 配置文件中调用即可。这种热插拔式的设计让功能扩展变得轻松且不会影响现有系统。

结语

UltraRAG 2.0 代表了 RAG 技术发展的一个新方向——通过标准化和模块化降低复杂系统的实现门槛。无论你是研究者、学生还是工程师,UltraRAG 2.0 都能帮助你更专注于算法创新和实验设计,而不是工程实现细节。

现在就开始使用 UltraRAG 2.0,体验用几十行代码构建高性能 RAG 系统的便捷吧!如果你有任何问题或建议,欢迎通过我们的社区渠道与我们联系。