实战指南:部署MinerU多模态文档解析API与Dify深度集成(实现解析PDF/JPG/PNG)

发布于:2025-06-16 ⋅ 阅读:(13) ⋅ 点赞:(0)

MinerU web api部署

MinerU 能够将包含图片、公式、表格等元素的多模态 PDF、PPT、DOCX 等文档转化为易于分析的 Markdown 格式。

  1. 克隆 MinerU 的仓库

    git clone https://github.com/opendatalab/MinerU.git
    
  2. cd 到 projects/web-api

    cd projects/web-api
    
  3. 在可以科学上网的情况下可以直接运行

    docker build -t mineru-api .
    
  4. 如果不能科学上网,使用 modelscope

    修改改 requirement.txt,添加 modelscope==1.25.0

    修改 download_models.py,删掉所有旧代码,改成这个

    #!/usr/bin/env python
    import os
    from modelscope.hub.snapshot_download import snapshot_download
    
    # 配置模型下载路径(Windows路径示例:r'C:\MinerU')
    MAIN_MODEL_DIR = "/opt/"
    os.makedirs(MAIN_MODEL_DIR, exist_ok=True)
    
    if __name__ == "__main__":
        # PDF-Extract-Kit的模型下载(需替换为ModelScope对应ID)
        pdf_extract_patterns = [
            "models/Layout/YOLO/**",
            "models/MFD/YOLO/**",
            "models/MFR/unimernet_hf_small_2503/**",
            "models/OCR/paddleocr_torch/**",
        ]
        pdf_model_path = snapshot_download(
            'opendatalab/PDF-Extract-Kit-1.0',  # ModelScope模型ID
            allow_patterns=pdf_extract_patterns,
            cache_dir=os.path.join(MAIN_MODEL_DIR, "models"),
            revision='master'  # 指定模型版本
        )
    
        # LayoutReader模型下载(需替换为ModelScope对应模型)
        layout_model_path = snapshot_download(
            'ppaanngggg/layoutreader',  # 替换为实际ModelScope ID
            cache_dir=os.path.join(MAIN_MODEL_DIR, "layoutreader"),
            allow_patterns=["*.json", "*.safetensors"]
        )
    
        print(f"主模型目录:{pdf_model_path}")
        print(f"布局模型目录:{layout_model_path}")
    

    再运行 docker build -t mineru-api .

  5. 编写 docker-compose.yml

    services:
      mineru-api:
        image: mineru-api
        restart: always
        ports:
          - "8920:8920"
        stdin_open: true   # 对应 -i 参数
        tty: true          # 对应 -t 参数
        runtime: nvidia    # 使用 NVIDIA 容器运行时
        environment:
          - NVIDIA_VISIBLE_DEVICES=all  # 允许访问所有 GPU
    
  6. 如果没有 nvidia 的 runtime,先备份自己的 daemon.json 文件 (/etc/docker/),通过 yum install -y nvidia-docker2​ 安装,这个命令会生成一个新的 daemon.json 文件,覆盖掉原来旧的,安装后之后比较一下新旧两个 daemon 文件,合并在一起。

  7. 启动

    systemctl daemon-reload
    systemctl restart docker
    docker compose up -d
    
  8. 访问 localhost:8000/docs
    MineRu FastAPI

  9. 进入mineru容器目录,编写app.py,保证images字段的正常输出

    async def file_parse(
        file: UploadFile = None,
        file_path: str = Form(None),
        parse_method: str = Form("auto"),
        is_json_md_dump: bool = Form(False),
        output_dir: str = Form("output"),
        return_layout: bool = Form(False),
        return_info: bool = Form(False),
        return_content_list: bool = Form(False),
    	# 此处修改为 True
        return_images: bool = Form(False),
    ):
    
  10. 重启mineRu容器

使用MineRu插件

  1. Dify配置

    1. 配置http://api:5001,端口地址暴露给宿主机

      docker-compose.yaml:文本搜索services:

      services:
        # API service
        api:
          image: langgenius/dify-api:1.4.1
          restart: always
          # 添加以下端口映射 ↓
          ports:
            - "5001:5001"  # 将API 5001 端口映射到宿主机的 5001 端口
          environment:
            # Use the shared environment variables.
            <<: *shared-api-worker-env
            # Startup mode, 'api' starts the API server.
            MODE: api
            SENTRY_DSN: ${API_SENTRY_DSN:-}
            SENTRY_TRACES_SAMPLE_RATE: ${API_SENTRY_TRACES_SAMPLE_RATE:-1.0}
            SENTRY_PROFILES_SAMPLE_RATE: ${API_SENTRY_PROFILES_SAMPLE_RATE:-1.0}
            PLUGIN_REMOTE_INSTALL_HOST: ${EXPOSE_PLUGIN_DEBUGGING_HOST:-localhost}
            PLUGIN_REMOTE_INSTALL_PORT: ${EXPOSE_PLUGIN_DEBUGGING_PORT:-5003}
            PLUGIN_MAX_PACKAGE_SIZE: ${PLUGIN_MAX_PACKAGE_SIZE:-52428800}
            INNER_API_KEY_FOR_PLUGIN: ${PLUGIN_DIFY_INNER_API_KEY:-QaHbTe77CtuXmsfyhR7+vRjI/+XbV1AaFy691iy+kGDv2Jvy0/eAh8Y1}
          depends_on:
            db:
              condition: service_healthy
            redis:
              condition: service_started
      

      其他部署方式:FILES_URL 设置为 ‘http://Dify宿主机IP:5001’
      (如 http://192.168.1.100:5001,这里的 IP 通常是运行 Dify 的机器的 IP,即前文提到的 “本地 IP” 端口。5001 是 Dify API 服务的默认端口)。

    2. 设置Dify文件预览/下载地址:Files_URL

      .env:

      # File preview or download Url prefix.
      # used to display File preview or download Url to the front-end or as Multi-model inputs;
      # Url is signed and has expiration time.
      # Setting FILES_URL is required for file processing plugins.
      #   - For https://example.com, use FILES_URL=https://example.com
      #   - For http://example.com, use FILES_URL=http://example.com
      #   Recommendation: use a dedicated domain (e.g., https://upload.example.com).
      #   Alternatively, use http://<your-ip>:5001 or http://api:5001,
      #   ensuring port 5001 is externally accessible (see docker-compose.yaml).
      FILES_URL=http://api:5001
      
    3. 重启Dify

      1. 进入 Dify 源码 docker目录
      2. 地址栏输入cmd,打开命令行
      3. 停止旧容器:docker-compose down
      4. 重新构建(仅当 Dockerfile 或 build 参数变更时):docker-compose build
      5. 启动服务:docker-compose up -d
  2. Dify插件市场安装MineRu插件,并打开插件目录

  3. 点击该插件详情,出现授权界面
    Dify Mineru插件设置页面

    Base URL配置为http://host.docker.internal:8920

    令牌为空,服务类型选择本地部署,点击保存,显示已授权即可
    授权结果页面

编辑解析测试工作流

  1. 创建单轮工作流应用,设置基本信息

  2. 配置PDF文件下载地址的HTTP请求节点
    http请求节点

  3. 配置MineRu插件的解析节点
    插件配置
    注意:以上只有解析变量及其解析方法可以使用,其他都是官方API使用参数
    输出变量:

    text : 解析后的 Markdown 文本

    files: 额外的导出格式文件(html,docx,latex)

    json:解析后的内容列表

    full_zip_url: 仅限官方 API,完整解析结果的 zip URL

    images: 从 PDF 中提取的图片

  4. 获取PDF文件第一个大标题作为文件名的代码执行节点
    代码执行

    import re
    def main(mdText: str) -> dict:
        match = re.search(r'^#\s+(.*)$', mdText, re.MULTILINE)
        if match:
            return {'result': match.group(1)}
        else:
            return {'result': ""}
    
  5. 插件市场安装Markdown转换器插件,并使用
    在这里插入图片描述

  6. 结束节点:结果存在文件下载地址
    在这里插入图片描述
    ​​
    Md文件1

‍注意:dify保存文件存在过期时间,可能会导致md文件图片链接失效,建议,给予LLM模型解析使用即可,如需本地,保存图片本地使用


网站公告

今日签到

点亮在社区的每一天
去签到