UltraRAG:一个基于MCP协议,完全模块化的RAG框架

终于看到有人把RAG做成MCP了,不是单一的组件,而是整个RAG的核心组件都做成了MCP Server。只需要编写几十行yaml文件,就可以自动编排出复杂的RAG工作流,对于科研人员来说可以专注于核心算法的开发,而无需浪费时间在重复的代码构建中。项目地址:github.com/OpenBMB/Ult...

简介

UltraRAG 的核心思想是将一个完整的 RAG 流程拆解为一系列独立的、可互相通信的MCP Server,从而根据实际需要进行增删。以下是RAG中的一些核心模块:

  • servers/retriever: 负责从知识库中检索相关文档。

  • servers/reranker: 负责对检索到的文档进行重新排序,提升相关性。

  • servers/generation: 负责基于处理后的信息生成最终答案。

  • servers/corpus: 管理和索引知识语料。

  • servers/evaluation: 提供评估 RAG 效果。

这种架构将 RAG的每个关键组件解耦,使其可以独立开发、优化、部署和扩展。开发者不再受限于单一的、固化的 RAG流程,而是可以像搭乐高积木一样,自由组合这些服务,构建出满足特定需求的、强大的 RAG 应用。

核心特性

1. 微服务化架构

  • 高可扩展性:每个组件都可以根据负载独立进行水平扩展。

  • 技术异构性:允许开发者使用自己熟悉的技术栈来实现每个服务。例如,使用基于 Python 的向量数据库服务作为Retriever,同时使用一个以JS编写的高性能 API 来处理生成任务。

  • 独立开发与部署:团队可以并行开发和迭代不同的 RAG 组件,互不干扰。

2. 声明式工作流

UltraRAG 的精髓在于其工作流的定义方式。用户无需编写复杂的编排代码,而是通过一个简单的 YAML 文件来定义一个 RAG管道。把代码量从几百上千行变成十几行配置文件的定义,从而提升开发效率。

我们来看一个基础的 RAG 流程定义(类似 examples/rag.yaml):

bash 复制代码
# Vanilla RAG demo

# MCP Server
servers:
  benchmark: servers/benchmark
  retriever: servers/retriever
  prompt: servers/prompt
  generation: servers/generation
  evaluation: servers/evaluation
  custom: servers/custom

# MCP Client Pipeline
pipeline:
- benchmark.get_data
- retriever.retriever_deploy_search
- prompt.qa_rag_boxed
- generation.generate
- custom.output_extract_from_boxed
- evaluation.evaluate

这个 YAML 清晰地定义了:

  • servers: 参与工作流的服务节点。

  • pipeline: 数据如何在这些节点间流转。

3. 高度可扩展性

项目 servers/custom 目录的存在表明,添加一个全新的自定义组件非常简单。你只需要:

  • 编写你的服务逻辑。

  • 将其封装成一个符合 UltraRAG 接口的 FastAPI 或 gRPC 服务。

  • 在 YAML 文件中引用它。

使用方法

使用方法也非常简单。

1. 环境准备与安装

首先,克隆项目并安装必要的依赖。项目使用了 pyproject.toml,推荐使用uv进行相关模块的管理和安装。

bash 复制代码
git clone https://github.com/OpenBMB/UltraRAG.git
cd UltraRAG
uv venv
source .venv/bin/activate
uv sync

2. 编写Pipeline文件

yaml 复制代码
# 官方的examples/sayhello.yaml示例

servers:
  sayhello: servers/sayhello

pipeline:
  - sayhello.greet

该Pipeline文件包含两个核心部分:

servers:声明当前流程所使用的所有组件。

pipeline:定义 Server 中各功能函数的调用顺序。

3. 编译配置文件

在编写好Pipeline工作流文件后,需要把参数动态编译到配置文件中。UltraRAG提供了快捷的build 指令,用于自动完成这一过程:系统会读取各个 Server 的parameter.yaml,解析本次流程涉及的所有参数项,并将其统一汇总生成到一个配置文件中。

bash 复制代码
ultrarag build examples/sayhello.yaml

执行完build命令后将获得一个自动生成的参数配置文件,路径位于parameters下,基本格式如下:

yaml 复制代码
sayhello:
  name: UltraRAG 2.0  # 你可以在这里修改为你想传入的名称

4. 运行

bash 复制代码
ultrarag run examples/sayhello.yaml

结论

UltraRAG作为一个RAG框架,比较适合RAG科研人员使用,可以快速实验各种复杂的 RAG 策略,而无需重写大量代码,只需修改 YAML 文件,而且内置的17 个主流科研 Benchmark可以快速比对效果。

相关推荐
研究点啥好呢4 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
无限进步_5 小时前
【C++】电话号码的字母组合:从有限处理到通用解法
开发语言·c++·ide·windows·git·github·visual studio
MicrosoftReactor6 小时前
技术速递|使用 Copilot SDK 构建 AI 驱动的 GitHub Issue 分类系统
人工智能·github·copilot
AI成长日志6 小时前
【GitHub开源项目专栏】AI推理优化框架深度解析(上):vLLM架构设计与核心实现
人工智能·开源·github
CV-deeplearning6 小时前
【开源】字节跳动开源 DeerFlow 2.0:一站式 SuperAgent 开发框架,GitHub 星标 5.9 万!
开源·github·deerflow·deerflow 2.0·superagent
熊猫钓鱼>_>6 小时前
从“流程固化“到“意图驱动“:大模型调智能体调Skill架构深度解析
ai·架构·大模型·llm·agent·skill·openclaw
Freak嵌入式7 小时前
MicroPython LVGL基础知识和概念:显示与多屏管理
开发语言·python·github·php·gui·lvgl·micropython
无问芯穹8 小时前
探路智能体落地“最后一公里”:复现Cursor在线强化学习,RLinf-Online团队详解技术实现路径及背后思考
agent·强化学习·rlinf
zandy10118 小时前
【全新 3.0版本】openclaw github installation guide
github·openclaw·installation
Freak嵌入式8 小时前
MicroPython LVGL基础知识和概念:时序与动态效果
开发语言·python·github·php·gui·lvgl·micropython