实战指南:部署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.pswp.cn/pingmian/84997.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/84997.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

向量外积与秩1矩阵的关系

向量外积与秩1矩阵的关系 flyfish 向量外积是构造秩1矩阵的基本工具&#xff0c;其本质是用两组向量的线性组合刻画矩阵的行和列相关性&#xff1b;任意秩1矩阵必可表示为外积&#xff0c;而低秩矩阵&#xff08;秩 k k k&#xff09;可分解为 k k k 个外积矩阵的和&#x…

设计模式-创建型模式(详解)

创建型模式 单例模式 一个类只允许创建一个对象&#xff0c;称为单例。 单例体现&#xff1a;配置类、连接池、全局计数器、id生成器、日志对象。 懒汉式 (线程不安全) 单例&#xff1a;【不可用】 用到该单例对象的时候再创建。但存在很大问题&#xff0c;单线程下这段代…

什么是BI?有哪些应用场景

BI&#xff08;Business Intelligence&#xff0c;商业智能&#xff09;是通过技术手段对海量业务数据进行采集、整合、分析和可视化的过程&#xff0c;旨在帮助企业从数据中获取洞察&#xff0c;支持决策。其核心是通过工具&#xff08;如Quick BI&#xff09;将原始数据转化为…

从零开始:使用Vite和Vue.js搭建一个空项目

进入node.js官网 https://nodejs.org/zh-cn 下载node.js 点击进行安装&#xff0c; 完成之后&#xff0c;按住shift鼠标右键&#xff0c;打开powershell窗口 输入node -v &#xff0c;出现版本号就是成功了 node -v 接下来&#xff0c;打开设置&#xff0c;搜索开发者设置&…

Redis 核心数据类型及典型使用场景详解

在日常开发中&#xff0c;Redis 不仅是缓存利器&#xff0c;更是一套高性能的数据结构服务。你是否真的了解 Redis 提供的五种核心数据类型&#xff1f;它们各自的底层结构和适用场景又有哪些差异&#xff1f;本篇博客将深入解析 Redis 的数据类型及其典型应用&#xff0c;助你…

threejs webVR获取相机正前方向量

通常获取相机正前方可以使用camera.getWorldDirection(new Vector3()) 函数来得到&#xff0c;但是在threejs0.139.2版本中进入VR后使用上面函数获取的数据是固定不变的&#xff0c;不管是否旋转了头盔&#xff0c;经过一番研究发现必须使用renderer.xr.getCamera() 此函数获取…

华为OD-2024年E卷-字符统计及重排[100分] -- python

问题描述&#xff1a; 给出一个仅包含字母的字符串&#xff0c;不包含空格&#xff0c;统计字符串中各个字母(区分大小写)出现的次数&#xff0c;并按照字母出现次数从大到小的顺序输出各个字母及其出现次数。如果次数相同&#xff0c;按照自然顺序进行排序&#xff0c;且小写…

MCP(模型上下文协议)协议和Http协议对比

MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;和 HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是两种定位完全不同的协议&#xff0c;主要区别如下&#xff1a; 1. 核心定位 HTTP 通用网络通信协议&am…

C++打印乘法口诀表

int main()​​&#xff1a; 这是C 程序的入口点。每个C 程序都必须有一个 main 函数&#xff0c;程序从这里开始执行。 ​​外层 for 循环​​&#xff1a; for (int i 1; i < 10; i) { int i 1&#xff1a;定义并初始化循环变量 i 为 1。这里的 i 代表乘法表中的行…

RoGBAG 与 MCAP

RoGBAG 和 MCAP 都是机器人领域常用的二进制数据格式&#xff0c;用于存储传感器数据、控制命令和状态信息。两者主要区别在于&#xff1a; RoGBAG&#xff1a;ROS 1/2 的标准日志格式&#xff0c;采用 LZF/LZ4 压缩&#xff0c;适合中小型数据集 MCAP&#xff1a;新一代机器人…

Ubuntu 空间占用情况排查常用命令

查看当前目录总大小及子目录占用详情 du -sh * | sort -hr ​​du​​&#xff1a;磁盘使用统计命令​​-s​​&#xff1a;显示每个参数的总计&#xff08;不递归子目录&#xff09;​​-h​​&#xff1a;以人类可读格式&#xff08;KB/MB/GB&#xff09;显示​​*​​&…

C语言编译优化实战与技巧

一.概述 1.C语言编译优化介绍 C语言编译优化是提升程序性能的核心手段&#xff0c;涉及从源代码到机器码的多层次转换&#xff0c;下面从优化级别、常用技术、内存管理、指令调度等多个维度详细介绍。 2.编译器优化等级&#xff08;GCC/Clang&#xff09; 二.常用优化技术 1…

Seq2Seq理解

Seq2Seq理解 写在前面&#xff1a;学习Seq2Seq由于前面底子没打好导致理解起来非常困难&#xff0c;今天索性全部搞懂逻辑部分&#xff0c;后续我会把所学的一些算法全部以理解代码的形式发布出来&#xff0c;课程代码内容全部来自李沐老师的视频&#xff0c;再次感谢&#xf…

旅游规划智能体之ReAct Agent实战

引言 本文将系统性地介绍如何运用ReAct框架构建旅游规划智能体&#xff0c;通过LangChain的create_react_agent方法实现智能决策和多步骤任务处理。ReAct框架作为现代AI Agent开发的核心技术之一&#xff0c;为构建具备复杂推理能力的智能系统提供了重要的理论基础和实践指导。…

组合模式深度解析:Java设计模式实战指南与树形结构处理架构设计

组合模式深度解析&#xff1a;Java设计模式实战指南与树形结构处理架构设计 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用…

PHP设计模式实战:领域驱动设计与六边形架构

在前三篇关于电子商务系统、API服务和微服务架构的基础上,我们将深入探讨如何运用领域驱动设计(DDD)和六边形架构(Hexagonal Architecture)构建更加清晰、可维护的业务系统。随着业务复杂度增加,传统的分层架构往往难以清晰地表达业务逻辑,而DDD提供了一套方法论来解决这一问…

为什么在1080p的屏幕下,通常观看4K视频要比1080p的视频来的清晰?

一、分辨率与像素密度的底层逻辑 4K与1080p的像素差异 4K分辨率通常为38402160&#xff08;约830万像素&#xff09;&#xff0c;而1080p为19201080&#xff08;约207万像素&#xff09;&#xff0c;4K像素数量是1080p的4倍。当4K视频在1080p屏幕上播放时&#xff0c;需要将4倍…

C++ Json-Rpc框架 项目逻辑设计

Server • RpcServer&#xff1a;rpc功能模块与⽹络通信部分结合 RpcServer分为两部分 1.提供函数调用服务的服务端 2.提供服务注册的客户端 对内提供好rpc服务的路由关系管理map<method,服务描述对象>&#xff0c;以及rpc请求消息的分发处理函数。给Dispatcher提供onRpc…

Agent开发相关工具

LangChain LangChain LangGraph LangGraph LangSmith GraphRAG RAGFlow what-is-graphrag Dify n8n vLLM Model Context Protocol AutoGen CodeMirror Milvus Chroma

进程管理(一)

一. 进程的基本信息 1.1 进程的概念、组成及信息 1.1.1 概念 进程的概念与程序相对&#xff0c;程序是静态的而进程是动态的&#xff0c;一个程序执行多次会有多个不同的进程 1.1.2 组成 PCB&#xff08;程序控制块&#xff09;&#xff1a; 是一种保存下列信息的数据结构&…