Skip to content

Commit 7f715a8

Browse files
authored
add mineru_saas_api for fastgpt (#5923)
* add pdf-mineru 添加了基于MinerU的PDF转Markdown接口服务,调用方式与pdf-marker一致,开箱即用。 * Rename Readme.md to README.md * Rename pdf_parser_mineru.py to main.py * mineru_saas_api for fastgpt 已有成熟本地部署方案,现提供使用mineru官方saas服务api的调用方法
1 parent cffe395 commit 7f715a8

File tree

8 files changed

+435
-325
lines changed

8 files changed

+435
-325
lines changed
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
__pycache__
2+
.pyc
3+
.pyo
4+
.pyd
5+
.Python
6+
env
7+
venv
8+
.venv
9+
pip-log.txt
10+
pip-delete-this-directory.txt
11+
.tox
12+
.coverage
13+
.coverage.
14+
.cache
15+
nosetests.xml
16+
coverage.xml
17+
.cover
18+
.log
19+
.git
20+
.mypy_cache
21+
.pytest_cache

plugins/model/pdf-mineru/.env

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
MINERU_TOKEN=官网申请的API 密钥
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# ---- 基础镜像 ----
2+
FROM python:3.12-slim
3+
4+
# ---- 工作目录 ----
5+
WORKDIR /app
6+
7+
# ---- 复制代码 ----
8+
COPY mineru_saas_api.py .
9+
COPY requirements.txt .
10+
11+
# ---- 安装依赖 ----
12+
RUN pip install --no-cache-dir -r requirements.txt
13+
14+
# ---- 环境变量(运行时注入)----
15+
ENV MINERU_TOKEN="YOUR_TOKEN_WILL_BE_INJECTED"
16+
17+
# ---- 暴露端口 ----
18+
EXPOSE 1234
19+
20+
# ---- 启动命令 ----
21+
CMD ["uvicorn", "mineru_saas_api:app", "--host", "0.0.0.0", "--port", "1234"]

plugins/model/pdf-mineru/README.md

Lines changed: 152 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,85 +1,194 @@
1-
# Readme
1+
# **MinerU SaaS Wrapper For Fastgpt 详细部署文档**
2+
**—— 为 FastGPT 提供稳定、高效、开箱即用的纯白嫖文档解析服务,转接服务用grok写的,文档也是,有不明白出问题了,`docker logs -f mineru-saas-wrapper` 查看日志,问他~**
23

3-
# 项目介绍
44
---
5-
本项目参照官方插件**pdf-marker,**基于MinertU实现了一个高效的 **PDF 转 Markdown 接口服务**,通过高性能的接口设计,快速将 PDF 文档转换为 Markdown 格式文本。
65

7-
- **简洁性:**项目无需修改代码,仅需调整文件路径即可使用,简单易用
8-
- **易用性:**通过提供简洁的 API,开发者只需发送 HTTP 请求即可完成 PDF 转换
9-
- **灵活性:**支持本地部署,便于快速上手和灵活集成
6+
> **适用人群**:FastGPT 开发者、后端工程师、DevOps、AI 应用集成者
7+
> **目标**:在 **5 分钟内**完成从零到生产可用的 MinerU saas服务api的文档解析服务部署
108
11-
# 配置推荐
9+
---
10+
11+
## 一、项目概述
1212

13-
配置及速率请参照[MinerU项目](https://github.com/opendatalab/MinerU/blob/master/README_zh-CN.md)官方介绍。
13+
| 项目 | 说明 |
14+
|------|------|
15+
| **名称** | MinerU SaaS Wrapper for FastGPT |
16+
| **框架** | FastAPI + Uvicorn |
17+
| **核心功能** | 接收文件 → 调用 MinerU 官方 SaaS API → 轮询结果 → 返回内嵌图片的 Markdown → fasgpt读取解析内容转为知识库 |
18+
| **部署方式** | Docker(推荐) / docker-compose |
19+
| **接口路径** | `POST /v2/parse/file` |
1420

15-
# 本地开发
21+
---
1622

17-
## 基本流程
23+
## 二、前置条件
24+
| **MinerU Token** |[https://mineru.net](https://mineru.net) 注册并获取 SaaS Token |
1825

19-
1、安装基本环境,主要参照官方文档[使用CPU及GPU](https://github.com/opendatalab/MinerU/blob/master/README_zh-CN.md#%E4%BD%BF%E7%94%A8GPU)运行MinerU的方式进行。具体如下,首先使用anaconda安装基础运行环境
26+
> **获取 Token 步骤**
27+
> 1. 登录 MinerU 官网
28+
> 2. 进入 **控制台 → API 密钥**
29+
> 3. 创建新密钥(建议命名 `fastgpt-wrapper`
30+
> 4. 复制完整 Token(以 `eyJ...` 开头)
31+
32+
---
33+
34+
## 三、目录结构说明
2035

2136
```bash
22-
conda create -n mineru python=3.10
23-
conda activate mineru
24-
pip install -U "magic-pdf[full]" --extra-index-url https://wheels.myhloli.com -i https://mirrors.aliyun.com/pypi/simple
37+
mineru-saas-wrapper/
38+
├── .dockerignore
39+
├── Dockerfile
40+
├── docker-compose.yml
41+
├── mineru_saas_api.py # 主服务逻辑
42+
├── requirements.txt # 依赖包
43+
├── .env # (可选)环境变量文件
44+
└── README.md
2545
```
2646

27-
2、[下载模型权重文件](https://github.com/opendatalab/MinerU/blob/master/docs/how_to_download_models_zh_cn.md)
47+
---
48+
49+
## 四、部署方式一:使用 `docker-compose`(推荐)
50+
51+
### 步骤 1:克隆项目
2852

2953
```bash
30-
pip install modelscope
31-
wget https://gcore.jsdelivr.net/gh/opendatalab/MinerU@master/scripts/download_models.py -O download_models.py
32-
python download_models.py
54+
mkdir mineru-saas-wrapper
55+
cd mineru-saas-wrapper
3356
```
3457

35-
python脚本会自动下载模型文件并配置好配置文件中的模型目录
58+
### 步骤 2:创建 `.env` 文件(推荐,防止 Token 泄露)
3659

37-
配置文件可以在用户目录中找到,文件名为`magic-pdf.json`
60+
```bash
61+
touch .env
62+
```
3863

39-
> windows的用户目录为 "C:\\Users\\用户名", linux用户目录为 "/home/用户名", macOS用户目录为 "/Users/用户名"
64+
编辑 `.env`
4065

41-
3、如果您的显卡显存大于等于 **8GB** ,可以进行以下流程,测试CUDA解析加速效果。默认为cpu模式,使用显卡的话需修改【用户目录】中配置文件magic-pdf.json中"device-mode"的值。
66+
```env
67+
MINERU_TOKEN=官网申请的API 密钥
68+
POLL_INTERVAL=3
69+
POLL_TIMEOUT=600
70+
PORT=1234
71+
```
4272

43-
```bash
44-
{
45-
"device-mode":"cuda"
46-
}
73+
### 步骤 3:修改 `docker-compose.yml`
74+
75+
```yaml
76+
services:
77+
mineru-saas-wrapper:
78+
build:
79+
context: .
80+
dockerfile: Dockerfile
81+
container_name: mineru-saas-wrapper
82+
restart: unless-stopped
83+
ports:
84+
- "1234:1234"
85+
env_file:
86+
- .env # 改为读取 .env 文件
87+
healthcheck:
88+
test: ["CMD", "curl", "-f", "http://localhost:1234/health"]
89+
interval: 30s
90+
timeout: 10s
91+
retries: 3
92+
start_period: 10s
93+
logging:
94+
driver: "json-file"
95+
options:
96+
max-size: "10m"
97+
max-file: "3"
4798
```
4899
49-
4、如需使用GPU加速,需额外再安装依赖。
100+
### 步骤 4:启动服务
50101
51102
```bash
52-
pip install --force-reinstall torch==2.3.1 torchvision==0.18.1 "numpy<2.0.0" --index-url https://download.pytorch.org/whl/cu118
103+
docker-compose up -d --build
53104
```
54105

106+
### 步骤 5:验证服务状态
107+
55108
```bash
56-
pip install paddlepaddle-gpu==2.6.1
109+
# 查看容器状态
110+
docker ps | grep mineru-saas-wrapper
111+
112+
# 查看健康检查
113+
curl http://localhost:1234/health
114+
# 预期输出:
115+
{"status":"healthy"}
57116
```
58117

59-
5、克隆一个FastGPT的项目文件
60118

61-
```
62-
git clone https://github.com/labring/FastGPT.git
63-
```
119+
## 五、接口测试
64120

65-
6、将主目录设置为 plugins/model 下的pdf-mineru文件夹
121+
### 1. 使用 `curl` 测试
66122

123+
```bash
124+
curl -X POST "http://localhost:1234/v2/parse/file" \
125+
-F "file=@./sample.pdf" | jq
67126
```
68-
cd /plugins/model/pdf-mineru/
127+
128+
### 2. 预期成功响应
129+
130+
```json
131+
{
132+
"success": true,
133+
"message": "",
134+
"markdown": "# 标题\n\n![](data:image/png;base64,iVBORw0KGgoAAA...) ...",
135+
"pages": 8
136+
}
69137
```
70138

71-
7、执行文件pdf_parser_mineru.py,启动服务
139+
### 查看详细日志
72140

73141
```bash
74-
python pdf_parser_mineru.py
142+
docker logs -f mineru-saas-wrapper
75143
```
76144

77-
# 访问示例
145+
关键日志关键词:
146+
- `Got upload url` → 上传成功
147+
- `Polling ... -> done` → 解析完成
148+
- `Parse finished, X pages` → 成功返回
149+
150+
---
78151

79-
仿照了**pdf-marker**的方式。
152+
## 九、FastGPT 集成指南
80153

81-
```bash
82-
curl --location --request POST "http://localhost:7231/v1/parse/file" \
83-
--header "Authorization: Bearer your_access_token" \
84-
--form "file=@./file/chinese_test.pdf"
154+
### 1. 在 FastGPT 中配置「文档解析」节点
155+
156+
| 字段 ||
157+
|------|---- |
158+
| **解析服务地址** | `http://your-server-ip:1234/v2/parse/file` |
159+
| **请求方式** | POST |
160+
| **文件字段名** | `file` |
161+
| **响应字段映射** | `markdown` → 内容,`pages` → 页数 |
162+
163+
### 2. FastGPT 示例配置(JSON)
164+
165+
```json
166+
// 已使用 json5 进行解析,会自动去掉注释,无需手动去除
167+
{
168+
"feConfigs": {
169+
"lafEnv": "https://laf.dev", // laf环境。 https://laf.run (杭州阿里云) ,或者私有化的laf环境。如果使用 Laf openapi 功能,需要最新版的 laf 。
170+
"mcpServerProxyEndpoint": "" // mcp server 代理地址,例如: http://localhost:3005
171+
},
172+
"systemEnv": {
173+
"datasetParseMaxProcess": 10, // 知识库文件解析最大线程数量
174+
"vectorMaxProcess": 10, // 向量处理线程数量
175+
"qaMaxProcess": 10, // 问答拆分线程数量
176+
"vlmMaxProcess": 10, // 图片理解模型最大处理进程
177+
"tokenWorkers": 30, // Token 计算线程保持数,会持续占用内存,不能设置太大。
178+
"hnswEfSearch": 100, // 向量搜索参数,仅对 PG 和 OB 生效。越大,搜索越精确,但是速度越慢。设置为100,有99%+精度。
179+
"hnswMaxScanTuples": 100000, // 向量搜索最大扫描数据量,仅对 PG生效。
180+
"customPdfParse": {
181+
"url": "http://your-server-ip:1234/v2/parse/file", // 自定义 PDF 解析服务地址
182+
"key": "", // 自定义 PDF 解析服务密钥
183+
"doc2xKey": "", // doc2x 服务密钥
184+
"price": 0 // PDF 解析服务价格
185+
}
186+
}
187+
}
85188
```
189+
---
190+
191+
**部署完成!**
192+
现在你的 FastGPT 已拥有强大的 **MinerU 文档解析能力**,支持 PDF + 图片 → 完美 Markdown 内嵌渲染。
193+
194+
> 如有问题,欢迎提交 Issue 或查看日志排查。祝你解析愉快!
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
services:
2+
mineru-saas-wrapper:
3+
build:
4+
context: .
5+
dockerfile: Dockerfile
6+
container_name: mineru-saas-wrapper
7+
restart: unless-stopped
8+
ports:
9+
- "1234:1234"
10+
environment:
11+
# 你的 MinerU SaaS API Token(必须)
12+
- MINERU_TOKEN=eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFM1MTIifQ.eyJqdGkiOiIzODcwOTM0MyIsInJvbCI6IlJPTEVfUkVHSVNURVIiLCJpc3MiOiJPcGVuWExhYiIsImlhdCI6MTc2Mjc2MTEzMywiY2xpZW50SWQiOiJsa3pkeDU3bnZ5MjJqa3BxOXgydyIsInBob25lIjoiMTg1MjEzMzQ1MDEiLCJvcGVuSWQiOm51bGwsInV1aWQiOiI4OTI5YjgzNC05ZTY4LTRhOTctOTNiMi1hMGVkNDk5N2YzYmYiLCJlbWFpbCI6IiIsImV4cCI6MTc2Mzk3MDczM30.CadUrEtAc_B_04opSk4b5ykK60m-CbrXArZuhNGV35MKsX_SaWTbrMHd3ND309f9fgM10QTWHAszjP2Duamzwg
13+
14+
# 可选:自定义轮询间隔(秒)
15+
- POLL_INTERVAL=3
16+
17+
# 可选:最大等待时间(秒)
18+
- POLL_TIMEOUT=600
19+
20+
# 可选:如果你的网络在国外,可改为国内加速镜像源(可选)
21+
# - MINERU_BASE=https://mineru.net
22+
healthcheck:
23+
test: ["CMD", "curl", "-f", "http://localhost:1234/health"]
24+
interval: 30s
25+
timeout: 10s
26+
retries: 3
27+
start_period: 10s
28+
logging:
29+
driver: "json-file"
30+
options:
31+
max-size: "10m"
32+
max-file: "3"

0 commit comments

Comments
 (0)