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

相关推荐
林小帅8 小时前
【笔记】OpenClaw 架构浅析
前端·agent
林小帅9 小时前
【笔记】OpenClaw 生态系统的多语言实现对比分析
前端·agent
九狼11 小时前
Flutter URL Scheme 跨平台跳转
人工智能·flutter·github
warm3snow11 小时前
Claude Code 黑客马拉松:5 个获奖项目,没有一个是"纯码农"做的
ai·大模型·llm·agent·skill·mcp
逛逛GitHub13 小时前
4 个热门的 GitHub 开源项目
github
程序员鱼皮17 小时前
GitHub 关注突破 2w,我总结了 10 个涨星涨粉技巧!
前端·后端·github
程序员柒叔17 小时前
Dify 流水线知识库(RAG Pipeline)深度分析
agent
马腾化云东17 小时前
Agent开发应知应会(langfuse):Langfuse Score概念详解和实战应用
人工智能·llm·ai编程