目录
1 事由
Dify的Pdf文档处理器功能偏弱,需要解决Dify下处理Pdf文件识别问题,Dify插件市场亦有MinerU插件使用。
首先,MinerU插件和Ollama、LM Studio等不同,它不是本地化部署的模型类插件,而是工具类插件,插件市场的注释如下:
MinerU
0.2.0
MinerU是一款可以在本地部署的将FILES转化为机器可读格式的工具(如markdown、json),可以很方便地抽取为任意格式。MinerU诞生于书生-浦语的预训练过程中,我们将会集中精力解决科技文献中的符号转化问题,希望在大模型时代为科技发展做出贡献。https://github.com/opendatalab/MinerU
PS:官网的WebAPI本地化部署readme写的太简单了(MinerU/projects/web_api/README.md at master · opendatalab/MinerU · GitHub)
2 Dify使用MinerU API
先试着MinerU插件API功能,需要去MinerUMineru 智能数据提取https://mineru.net/apiManage/token官网申请API Key,这里填好信息后需要有一个审核过程,大概半天时间。插件设置授权如下:
这里设置需要查看Dify的插件官网文档,MinerU的官网文档好像没有提到
MinerU服务的Base URL*填https://mineru.net
令牌就是在MinerU官网上申请通过后创建API Token获得Key(要保存下来,一旦创建成功后就看不到Key信息,否则只有重新创建)
服务类型选MinerU的官方API
之后点保存就成功对插件进行了授权。
3 环境配置
Dify流程中使用MinerU还需要进行环境配置(FILES_URL):
为保证 MinerU 插件能够正常处理文件上传,需要在 Dify 中配置
FILES_URL
设置:
找到您的 Dify 部署目录并编辑
.env
文件。根据您的部署方法修改
FILES_URL
配置:
- Docker Compose 部署:将
FILES_URL
设置为http://api:5001
- 其他部署方法:将
FILES_URL
设置为http://DIFY_HOST_IP:5001
(例如,http://192.168.1.101:5001
,其中 IP 通常是运行 Dify 的机器)确认 Dify API 服务的
5001
端口对外暴露(查看docker-compose.yaml
文件中的端口映射)。保存
.env
文件后,重启 Dify 服务,配置才能生效:
在.env文件中定义FILES_URL(注释中有类似的意思)
# 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
保存.env文件后,重启 Dify 服务,配置才能生效:
docker compose down
docker compose up -d
需要注意的是,每次更新升级完dify后,.env文件需要同步更新,升级dify方式见:dify1.0.0版本以上添加ollama本地化模型报错或无反应(dify 1.3及以上版本需如何有效更新)_dify 1.3 ollama-CSDN博客因此都要记得修改FILES_URL参数。
环境更新配置好后,dify中设计个简单的Pdf识别流程,顺利通过:
4 MinerU本地化Doker部署
首先,下载MinerU代码Zip文件
或者执行:
git clone https://github.com/opendatalab/MinerU.git
进入MinerU文件夹下projects\web_api文件夹:
cd MinerU\projects\web_api
执行命令:
docker build -t mineru-api .
可能会出现:“ERROR: failed to solve: ubuntu:22.04: failed to resolve source metadata for docker.io/library/ubuntu:22.04” 报错,这里需要设置Docker的拉取镜像源。如果使用DockerDesk,在Settings中的Docker Engine中增加仓库镜像(mirrors)配置如下:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.registry.cyou/",
"https://docker-cf.registry.cyou/",
"https://dockercf.jsdelivr.fyi/",
"https://docker.jsdelivr.fyi/",
"https://dockertest.jsdelivr.fyi/",
"https://mirror.aliyuncs.com/",
"https://dockerproxy.com/",
"https://mirror.baidubce.com/",
"https://docker.m.daocloud.io/",
"https://docker.nju.edu.cn/",
"https://docker.mirrors.sjtug.sjtu.edu.cn/",
"https://docker.mirrors.ustc.edu.cn/",
"https://mirror.iscas.ac.cn/",
"https://docker.rainbond.cc/",
"https://jq794zz5.mirror.aliyuncs.com"
]
}
此次,再次运行上述docker build命令(这个命令会在当前目录下寻找名为Dockerfile文件,并根据其中的指令来构建镜像),就可以正常拉取镜像(Images)并建立容器了(注意这里镜像和上文镜像不同概念、参见英文):
powershell中可能的报错:
=> ERROR [build 5/5] RUN . /app/venv/bin/activate && ./download_models.py 0.3s
------
> [build 5/5] RUN . /app/venv/bin/activate && ./download_models.py:
0.270 /usr/bin/env: ‘python\r’: No such file or directory
0.270 /usr/bin/env: use -[v]S to pass options in shebang lines
------
Dockerfile:33
--------------------
32 | COPY download_models.py .
33 | >>> RUN . /app/venv/bin/activate && \
34 | >>> ./download_models.py
35 |
--------------------
ERROR: failed to solve: process "/bin/sh -c . /app/venv/bin/activate && ./download_models.py" did not complete successfully: exit code: 127
对应dockerdesktop报错:
# Download models
33
COPY download_models.py .
34
RUN . /app/venv/bin/activate && \
35
./download_models.py
/usr/bin/env: ‘python\r’: No such file or directory /usr/bin/env: use -[v]S to pass options in shebang lines
报错显示行尾符(CRLF vs LF)未彻底转换
错误信息中的 python\r
表明 download_models.py
的 Shebang 行中存在 Windows 的 CRLF 换行符(\r\n
),导致解释器路径被截断为 python\r
,而 Linux 仅识别 LF(\n
)。
问题的原因是Windows上的Git将行尾从Unix样式(LF)转换为Windows样式(CRLF)。
OK,用一文本编辑工具将download_models.py文件的换行符由CRLF调整为LF并存盘。(或者直接见本片最后一节“换行符”)
再次build:
docker build -t mineru-api .
快build完镜像:
建立的docker镜像如下:
编写docker-compose.yml
services:
mineru-api:
image: mineru-api
ports:
- "8000:8000"
stdin_open: true # 对应 -i 参数
tty: true # 对应 -t 参数
runtime: nvidia # 使用 NVIDIA 容器运行时
environment:
- NVIDIA_VISIBLE_DEVICES=all # 允许访问所有 GPU
启动
docker compose up -d
出现了/usr/bin/env: ‘bash\r’: No such file or directory的异常,
同样原因,还是换行符的问题。先将MinerU\projects\web_api下的文件全部调整为LF换行符,再重新build就OK,可以看到容器已经运行起来:
输入
http://localhost:8000/docs
看到MinerU界面
测试解析文件时候,可能出现报错
{ "error": "Must provide either file or file_path" }
继续查看docker中的logs:
RuntimeError: Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from http://www.nvidia.com/Download/index.aspx
INFO: 172.22.0.1:59268 - "POST /file_parse?parse_method=auto&return_layout=False&return_info=False&return_content_list=True&return_images=True HTTP/1.1" 500 Internal Server Error
INFO: 172.22.0.1:36166 - "POST /file_parse HTTP/1.1" 400 Bad Request
INFO: 172.22.0.1:43522 - "POST /file_parse HTTP/1.1" 400 Bad Request
系统中没有找到NVIDIA驱动程序。这可能是由于缺少NVIDIA GPU或尚未安装相应的驱动程序。
注:没有英伟达显卡无法安装 NVIDIA Container Toolkit。NVIDIA Container Toolkit 是用于在 Docker 容器中支持英伟达显卡的工具包,安装该工具包需要满足以下条件: x86_64 架构的 Linux 系统 已安装 Docker 英伟达 GPU 显卡 英伟达显卡驱动,版本大于等于 418.81.07。如果没有英伟达显卡,将无法利用 NVIDIA Container Toolkit 的功能,因为该工具包的核心目的是为了让容器能够利用英伟达显卡的 GPU 加速能力。
因此集显等目前可能只能纯CPU方式跑MinerU。同时关注下有没有用集显参与运算的可能,如Ollama 就有英特尔优化版(英特尔亚太研发提供魔搭社区),速度会快不少。
5 Dify使用本地部署的MinerU
-
进入 “Tools” -> “Plugin Market”,搜索 “MinerU” 插件并添加。
-
配置 MinerU 插件参数:
- 本地部署的 MinerU 服务的基本 URL:
http://YOUR_LOCAL_IP:8888
(例如,http://192.168.1.100:8888
) - Token:留空(本地部署不需要)
- 服务类型:选择“本地部署”
注意:确保 Dify 服务可以访问此基 URL。如:http://host.docker.internal:port
- 本地部署的 MinerU 服务的基本 URL:
-
保存配置。
6 换行符LF与 CRLF 格式
在本地化部署MinerU时遇到的换行符问题,最后要单列一节说说。
在 Windows 上使用 Git 时,默认情况下,Git 会自动将提交到仓库的换行符LF转换为 CRLF 格式,以便在 Windows 的文本编辑器中正确显示。为了确保docker build过程顺利,开始克隆使用Windows git就需要禁用这种自动转换行为,通过配置 Git 来实现。
全局配置:
如果想对所有仓库禁用自动换行符转换,可以使用以下命令:
git config --global core.autocrlf false
局部配置:
如果只想对某个特定的仓库禁用自动换行符转换,可以在该仓库目录下运行:
git config core.autocrlf false
查看当前配置:
可以通过以下命令查看当前的 core.autocrlf
配置:
git config --get core.autocrlf
如果禁止就会显示:
完整命令可以是
# 设置全局配置,禁用自动换行符转换
git config --global core.autocrlf false
# 克隆 MinerU 仓库
git clone https://github.com/opendatalab/MinerU.git
重置文件的换行符:
如果已经有一些文件被自动转换了换行符,可以使用以下命令来重置这些文件的换行符(待验证):
git add --renormalize .
git commit -m "Normalize line endings"