终于看到有人把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可以快速比对效果。