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

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模型解析使用即可,如需本地,保存图片本地使用

<think>好的,我需要帮助用户了解如何在Dify部署MinerU。首先,我需要回顾用户提供的引用内容,找到相关的信息。根据引用[2],用户已经安装了MinerU,并且成功将PDF转换为Markdown,这对于Dify的知识库构建很重要。引用[4]提到MinerU的功能,包括处理PDF和转换为LaTeX,这可能Dify的知识库集成有关。 用户的问题是如何在Dify部署或配置MinerU。从引用[2]中,用户已经通过Docker安装了MinerU,并进行了PDF转换测试。可能需要将MinerU处理后的Markdown文件导入Dify的知识库。引用[1]提到Dify使用BGE-M3作为嵌入模型,可能涉及知识库的配置步骤。 步骤可能包括:1. 使用MinerU处理PDF生成Markdown;2. 将这些文件上传到Dify的知识库;3. 配置Dify使用正确的嵌入模型。需要确保文件路径正确,并且Dify能访问处理后的文件。另外,引用[5]提到Docker拉取镜像的问题,可能需要确认CUDA版本或使用特定标签的镜像以避免错误。 总结步骤:安装MinerU,转换PDF,将输出导入Dify知识库,配置嵌入模型,处理可能的Docker问题。需要检查Dify文档是否有直接集成MinerU的方法,或者是否需要手动上传生成的文件。</think>### Dify平台部署MinerU的配置方法 #### 1. MinerUDify的集成逻辑 MinerU作为PDF预处理工具,其输出结果需要手动导入Dify知识库系统。核心流程为: - **PDF预处理**:使用MinerUPDF转换为带LaTeX公式的Markdown文件[^4] - **文件导入**:将生成的结构化文件上传至Dify知识库 - **向量化处理**:Dify自动调用已配置的BGE-M3嵌入模型进行向量化[^1] #### 2. 具体操作步骤 **(1) MinerU环境部署** ```bash # Windows WSL环境下构建Docker镜像 docker build -t mineru:latest . # 运行容器时需挂载GPU(确保已安装CUDA 11.8+[^3]) docker run --rm -it --gpus=all mineru:latest /bin/bash ``` **(2) 文件转换操作** ```bash # 在容器内执行转换命令(需提前用docker cp导入PDF) magic-pdf -p test.pdf -o output_dir -m auto ``` 转换后的Markdown文件将包含: $$ E = mc^2 $$ 等LaTeX公式,保持数学表达式结构化[^4] **(3) Dify知识库配置 1. 登录Dify控制台 2. 创建新知识库 -> 选择"文件上传"类型 3. 上传MinerU输出的Markdown文件夹 4. 验证索引状态(确保BGE-M3模型已正常加载[^1]) #### 3. 常见问题处理 - **CUDA版本冲突**:需匹配NVIDIA驱动版本,推荐使用`nvidia/cuda:11.8.0-base`等明确版本标签[^5] - **路径权限问题**:WSL环境下需确保`/mnt`目录挂载权限正确 - **公式渲染异常**:检查DifyMarkdown解析器是否支持LaTeX语法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yumuing blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值