MinerU web api部署
MinerU 能够将包含图片、公式、表格等元素的多模态 PDF、PPT、DOCX 等文档转化为易于分析的 Markdown 格式。
克隆 MinerU 的仓库
git clone https://github.com/opendatalab/MinerU.git
cd 到 projects/web-api
cd projects/web-api
在可以科学上网的情况下可以直接运行
docker build -t mineru-api .
如果不能科学上网,使用 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 .
编写 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
如果没有 nvidia 的 runtime,先备份自己的 daemon.json 文件 (/etc/docker/),通过
yum install -y nvidia-docker2
安装,这个命令会生成一个新的 daemon.json 文件,覆盖掉原来旧的,安装后之后比较一下新旧两个 daemon 文件,合并在一起。启动
systemctl daemon-reload systemctl restart docker docker compose up -d
访问 localhost:8000/docs
进入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), ):
重启mineRu容器
使用MineRu插件
Dify配置
配置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 服务的默认端口)。设置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
重启Dify
- 进入 Dify 源码 docker目录
- 地址栏输入cmd,打开命令行
- 停止旧容器:
docker-compose down
- 重新构建(仅当 Dockerfile 或 build 参数变更时):
docker-compose build
- 启动服务:
docker-compose up -d
Dify插件市场安装MineRu插件,并打开插件目录
点击该插件详情,出现授权界面
Base URL配置为http://host.docker.internal:8920
令牌为空,服务类型选择本地部署,点击保存,显示已授权即可
编辑解析测试工作流
创建单轮工作流应用,设置基本信息
配置PDF文件下载地址的HTTP请求节点
配置MineRu插件的解析节点
注意:以上只有解析变量及其解析方法可以使用,其他都是官方API使用参数
输出变量:text : 解析后的 Markdown 文本
files: 额外的导出格式文件(html,docx,latex)
json:解析后的内容列表
full_zip_url: 仅限官方 API,完整解析结果的 zip URL
images: 从 PDF 中提取的图片
获取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': ""}
插件市场安装Markdown转换器插件,并使用
结束节点:结果存在文件下载地址
注意:dify保存文件存在过期时间,可能会导致md文件图片链接失效,建议,给予LLM模型解析使用即可,如需本地,保存图片本地使用