当前位置: 首页 > ds >正文

实战指南:部署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模型IDallow_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 IDcache_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-apirestart: alwaysports:- "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),# 此处修改为 Truereturn_images: bool = Form(False),
    ):
    
  10. 重启mineRu容器

使用MineRu插件

  1. Dify配置

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

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

      services:# API serviceapi:image: langgenius/dify-api:1.4.1restart: 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: apiSENTRY_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_healthyredis: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模型解析使用即可,如需本地,保存图片本地使用

http://www.xdnf.cn/news/14525.html

相关文章:

  • 【RAG文档解析】深度剖析 PDF 解析的痛点与方案
  • springboot集成dubbo
  • LangChain调用本地modelscope下载的Deepseek大模型
  • Python打卡第54天
  • 13分钟讲解主流Linux发行版
  • origin绘制双Y轴柱状图、双Y轴柱状点线图和双Y轴点线图
  • Node.js验证码:从生成到验证的趣味之旅
  • 条件收敛的级数中项必须趋于 0,正负项抵消,但趋于 0 的速度不需要“足够快”
  • 【学习笔记】深入理解Java虚拟机学习笔记——第9章 类加载及执行子系统的案例与实战
  • 深度学习进化史:从神经元的诞生到万亿参数的觉醒
  • 掌握这些 Python 函数,让你的代码更简洁优雅
  • Git基本使用
  • npm install报错
  • Hudi 与 Hive 集成
  • https说明
  • RV1126+OPENCV对视频流单独进行视频膨胀/腐蚀操作
  • Spring AI 项目实战(八):Spring Boot + AI + DeepSeek 打造企业级智能文档分类系统
  • 40套精品大气黑金系列行业PPT模版分享
  • Web后端基础:数据库
  • 【JavaScript-Day 42】深入解析事件冒泡与捕获:掌握事件委托的精髓
  • 2、Java流程控制:编程界的“逻辑游乐场”
  • Leetcode 刷题记录 12 —— 二叉树第三弹
  • 六月十五号Leetcode
  • Apache Iceberg与Hive集成:非分区表篇
  • 【Redis】分布式锁
  • 我的项目管理之路-PMO
  • OpenSpeedy:让游戏体验“飞”起来的秘密武器
  • 基于CNN深度学习的小程序识别-视频介绍下自取
  • Android 修改了页面的xml布局,使用了databinding,这时候编译时需要用到apt吗
  • Node.js 中两种模块导出方式区别