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可以快速比对效果。

相关推荐
杨杨杨大侠11 小时前
实战案例:电商系统订单处理流程的技术实现
java·spring·github
杨杨杨大侠11 小时前
Atlas-Chain:一个灵活的Java责任链框架设计与实现
java·spring·github
数据智能老司机11 小时前
AI Agents 实战——GenAI 工作流的演进
llm·aigc·agent
数据智能老司机11 小时前
AI Agents 实战——AI Agents 的崛起
llm·aigc·agent
掘金安东尼12 小时前
什么是 OKLCH 颜色?
前端·javascript·github
杨杨杨大侠12 小时前
手搓责任链框架 6:高级应用
java·spring·github
绝无仅有12 小时前
Go语言面试之 select 机制与使用场景分析
后端·面试·github
绝无仅有13 小时前
Go语言面试:传值与传引用的区别及选择指南
后端·面试·github
深兰科技21 小时前
深兰科技AI问诊助手走访打浦桥街道社区卫生服务中心
人工智能·windows·github·postman·visual studio·深兰科技·ai问诊