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

MinerU web api部署

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

  1. 克隆 MinerU 的仓库

    shell 复制代码
    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,删掉所有旧代码,改成这个

    python 复制代码
    #!/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

    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

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

    py 复制代码
    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:

      yml 复制代码
      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:

      yml 复制代码
      # 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. 点击该插件详情,出现授权界面

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

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

编辑解析测试工作流

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

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

  3. 配置MineRu插件的解析节点

    注意:以上只有解析变量及其解析方法可以使用,其他都是官方API使用参数

    输出变量:

    text : 解析后的 Markdown 文本

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

    json:解析后的内容列表

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

    images: 从 PDF 中提取的图片

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

    py 复制代码
    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. 结束节点:结果存在文件下载地址

    ​​

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

相关推荐
2401_836235861 小时前
财务报表识别产品:从“数据搬运”到“智能决策”的技术革命
人工智能·科技·深度学习·ocr·生活
礼拜天没时间.2 小时前
深入Docker架构——C/S模式解析
linux·docker·容器·架构·centos
猫头虎2 小时前
如何使用Docker部署OpenClaw汉化中文版?
运维·人工智能·docker·容器·langchain·开源·aigc
会周易的程序员2 小时前
openplc runtimev4 Docker 部署
运维·c++·物联网·docker·容器·软件工程·iot
小Pawn爷2 小时前
1.Docker基础
运维·docker·容器
chinesegf3 小时前
清理docker残留镜像images
运维·docker·容器
小Pawn爷3 小时前
2.Docker的存储
运维·docker·容器
Jastep3 小时前
Dify本地化部署
ai·dify
tiantangzhixia4 小时前
Master PDF Linux 平台的 5.9.35 版本安装与自用
linux·pdf·master pdf
礼拜天没时间.4 小时前
自定义镜像制作——从Dockerfile到镜像
linux·docker·容器·centos·bash