MLC Bakery项目旨在提供一个标准化的后端服务,用于追踪和管理机器学习训练流程中的关键资产(如数据集、模型)及其之间的关系(谱系/Provenance)。

主要功能点

  • 资源管理: 托管和组织数据集、训练模型、活动、代理等ML资产。
  • 谱系追踪: 记录和查询资产之间的输入/输出关系,构建可追溯的ML流程图。
  • API服务: 提供RESTful API接口用于资产的创建、读取、更新、删除和查询。
  • MCP服务: 通过Model Context Protocol (MCP) 暴露部分核心功能,允许兼容的LLM客户端以结构化方式访问ML资产信息、调用特定工具(如数据集搜索、预览URL获取)、并利用Prompt模板进行交互。

安装步骤

MLC Bakery基于Python和PostgreSQL构建,推荐使用 'uv' 和 Docker Compose 进行开发和部署。

  1. 克隆仓库:
    git clone https://github.com/jettyio/mlcbakery.git
    cd mlcbakery
  2. 安装依赖: 'uv' 会根据 'pyproject.toml' 自动创建虚拟环境。
    uv pip install -e .[dev,webclient]
  3. 配置数据库: 创建 '.env' 文件并设置 'DATABASE_URL' 连接到你的PostgreSQL数据库。
    cp .env.example .env
    # 编辑 .env 文件,设置 DATABASE_URL
    (确保你的PostgreSQL服务器正在运行,数据库已创建且用户具有权限)
  4. 运行数据库迁移: 应用最新的数据库架构。
    uv run alembic upgrade heads
  5. 启动REST API服务: 运行主要的FastAPI应用。
    uv run uvicorn mlcbakery.main:app --reload --host 0.0.0.0 --port 8000
    API 文档将在 'http://localhost:8000/docs' 提供。
  6. 启动MCP服务器 (独立组件,通过SSE通信):
    uv run uvicorn mcp_server.main:starlette_app --reload --host 0.0.0.0 --port 8080
  7. 使用Docker Compose启动所有服务 (推荐生产或集成): 需要先创建 Docker network 和配置 'ADMIN_AUTH_TOKEN'。
    docker network create caddy-network # 如果不存在
    # 编辑 .env 文件,设置 ADMIN_AUTH_TOKEN
    docker-compose up --build -d
    docker-compose exec api alembic upgrade head # 容器启动后运行数据库迁移
    服务将通过Caddy反向代理暴露。

服务器配置 (for MCP Client)

MCP客户端连接此MCP服务器时,需要以下配置信息。这些信息通常以JSON格式提供给MCP客户端应用程序。

{
  "server name": "MLC-Bakery-MPC",
  "transport": {
     "type": "sse", 
     "url": "http://localhost:8080/sse" 
     // 如果通过Docker Compose并在Caddy代理后,URL可能需要调整,
     // 例如: "http://mcp.localhost/sse" (取决于Caddy配置)
  },
  "capabilities": {
     "resources": ["config://app", "bake://collections/{pattern}"],
     "tools": [
        "datasets/", 
        "datasets-preview-url/{collection}/{dataset}", 
        "search-datasets/{query}", 
        "help", 
        "dataset/{collection}/{dataset}/mlcroissant"
     ],
     "prompts": ["debug_error"]
  }
  // 注意:command 和 args 字段主要用于客户端需要启动服务器进程的情况 (如 StdIO),
  // 对于这种通过Uvicorn/Starlette运行的持久化SSE服务器,客户端只需要transport和capabilities信息。
}

参数注释:

  • 'server name': MCP服务器在协议握手阶段报告的名称,用于客户端识别。
  • 'transport': 定义客户端与MCP服务器通信的传输协议。
    • 'type': 协议类型,本服务器实现了 'sse' (Server-Sent Events)。
    • 'url': 服务器监听的端点URL。
  • 'capabilities': MCP服务器向客户端声明其提供的功能。
    • 'resources': 客户端可以通过 'getResource' 请求获取的上下文资源标识符列表。
    • 'tools': 客户端可以通过 'callTool' 请求调用的外部功能标识符列表。
    • 'prompts': 客户端可以获取或运行的Prompt模板名称列表。

基本使用方法

用户主要通过其RESTful API(默认端口 8000)进行ML资产的创建、查询和管理。例如,可以使用HTTP POST请求创建新的数据集或模型,使用GET请求获取资产信息。

LLM客户端可以通过配置上述JSON信息,连接到MCP服务器(默认端口 8080)。连接成功后,LLM可以利用MCP协议与服务器交互:

  • 通过 'getResource' 请求获取如 'config://app' 或 'bake://collections/{pattern}' 等资源,获取配置信息或搜索集合列表。
  • 通过 'callTool' 请求调用如 'search-datasets/{query}' 工具进行数据集搜索,或调用 'datasets-preview-url/{collection}/{dataset}' 获取数据集预览的下载链接。
  • 通过 'getPrompt' 请求获取如 'debug_error' 等Prompt模板内容,用于指导LLM的交互行为。

该架构将核心ML资产管理功能通过REST API暴露,并在此之上构建MCP层,为LLM客户端提供更结构化和协议化的访问方式。

信息

分类

AI与计算