企业级 AI 数据预处理平台后端,基于 FastAPI + LitServe 构建。
支持文档、图片、音频、视频等多模态数据处理,GPU 负载均衡,任务队列管理。
cd backend
pip install -r requirements.txt一键启动所有服务(推荐):
python start_all.py
# 启用 MCP 协议支持(用于 AI 助手调用)
python start_all.py --enable-mcp自定义配置启动:
python start_all.py --workers-per-device 2 --devices 0,1分别启动各服务:
# 1. 启动 API Server
python api_server.py
# 2. 启动 LitServe Workers
python litserve_worker.py --workers-per-device 2
# 3. 启动 Task Scheduler (可选)
python task_scheduler.py --enable-schedulerbackend/
├── api_server.py # FastAPI API 服务器
├── task_db.py # SQLite 数据库管理
├── litserve_worker.py # LitServe Worker Pool
├── task_scheduler.py # 任务调度器 (可选)
├── mcp_server.py # MCP 协议服务器 (可选)
├── start_all.py # 统一启动脚本
├── client_example.py # Python 客户端示例
├── requirements.txt # Python 依赖
├── README.md # 后端文档
└── MCP_GUIDE.md # MCP 协议详细指南
完整 API 文档: http://localhost:8000/docs
POST /api/v1/tasks/submit
参数:
- file: 文件 (必需)
- backend: pipeline | vlm-transformers | vllm-engine | paddleocr-vl (默认: pipeline)
- lang: ch | en | korean | japan (默认: ch)
- method: auto | txt | ocr (默认: auto)
- formula_enable: boolean (默认: true)
- table_enable: boolean (默认: true)
- priority: 0-100 (默认: 0)
返回:
{
"success": true,
"task_id": "uuid",
"status": "pending",
"message": "Task submitted successfully",
"file_name": "document.pdf",
"created_at": "2024-01-01T00:00:00"
}
GET /api/v1/tasks/{task_id}?upload_images=false
返回:
{
"success": true,
"task_id": "uuid",
"status": "completed",
"file_name": "document.pdf",
"backend": "pipeline",
"priority": 0,
"error_message": null,
"created_at": "2024-01-01T00:00:00",
"started_at": "2024-01-01T00:00:10",
"completed_at": "2024-01-01T00:01:00",
"worker_id": "tianshu-worker-1",
"retry_count": 0,
"data": {
"markdown_file": "document.md",
"content": "# Document\n\n...",
"images_uploaded": false,
"has_images": true
}
}
DELETE /api/v1/tasks/{task_id}
返回:
{
"success": true,
"message": "Task cancelled successfully"
}
GET /api/v1/queue/tasks?status=pending&limit=100
返回:
{
"success": true,
"count": 10,
"tasks": [...]
}
GET /api/v1/queue/stats
返回:
{
"success": true,
"stats": {
"pending": 5,
"processing": 2,
"completed": 100,
"failed": 3,
"cancelled": 1
},
"total": 111,
"timestamp": "2024-01-01T00:00:00"
}
POST /api/v1/admin/reset-stale?timeout_minutes=60
返回:
{
"success": true,
"reset_count": 2,
"message": "Reset tasks processing for more than 60 minutes"
}
POST /api/v1/admin/cleanup?days=7
返回:
{
"success": true,
"deleted_count": 50,
"message": "Cleaned up tasks older than 7 days"
}
GET /api/v1/health
返回:
{
"status": "healthy",
"timestamp": "2024-01-01T00:00:00",
"database": "connected",
"queue_stats": {...}
}
python start_all.py [选项]
选项:
--output-dir PATH 输出目录 (默认: /tmp/mineru_tianshu_output)
--api-port PORT API端口 (默认: 8000)
--worker-port PORT Worker端口 (默认: 9000)
--accelerator TYPE 加速器类型: auto/cuda/cpu/mps (默认: auto)
--workers-per-device N 每个GPU的worker数 (默认: 1)
--devices DEVICES 使用的GPU设备 (默认: auto)
--poll-interval SECONDS Worker拉取任务间隔 (默认: 0.5秒)
--enable-scheduler 启用可选的任务调度器
--monitor-interval SECONDS 调度器监控间隔 (默认: 300秒)
--cleanup-old-files-days N 清理N天前的结果文件 (默认: 7天)
--enable-mcp 启用 MCP 协议服务器
--mcp-port PORT MCP 服务器端口 (默认: 8001)# API Server 端口
export API_PORT=8000
# MCP Server 配置 (可选)
export MCP_PORT=8001
export MCP_HOST=0.0.0.0
export API_BASE_URL=http://localhost:8000
# MinIO 配置 (可选)
export MINIO_ENDPOINT="your-endpoint.com"
export MINIO_ACCESS_KEY="your-access-key"
export MINIO_SECRET_KEY="your-secret-key"
export MINIO_BUCKET="your-bucket"
# MinerU 显存配置
export MINERU_VIRTUAL_VRAM_SIZE=6项目使用 SQLite 数据库 (mineru_tianshu.db),自动创建,无需手动配置。
| 引擎 | 名称 | 特点 | 适用场景 |
|---|---|---|---|
pipeline |
MinerU Pipeline | 完整文档解析,支持表格、公式 | 通用文档处理 |
paddleocr-vl |
PaddleOCR-VL | 多语言 OCR,自动方向矫正 | 多语言文档 |
sensevoice |
SenseVoice | 音频转文字,说话人识别 | 音频处理 |
video |
Video Engine | 视频处理,关键帧 OCR | 视频分析 |
fasta |
FASTA Engine | 生物序列格式解析 | 生物信息学 |
genbank |
GenBank Engine | 基因序列格式解析 | 生物信息学 |
- Workers 持续循环拉取任务,无需调度器触发
- 默认 0.5 秒拉取间隔,响应速度极快
- 空闲时自动休眠,不占用 CPU 资源
- 使用
BEGIN IMMEDIATE和原子操作 - 防止任务重复处理
- 支持多 Worker 并发拉取
- MinerU: 完整文档解析,支持表格、公式等 (GPU 加速)
- PaddleOCR-VL: 高精度视觉语言模型 OCR (可选)
- MarkItDown: 处理 Office、HTML、文本等 (快速处理)
- 自动清理旧结果文件 (默认 7 天)
- 保留数据库记录供查询
- 可配置清理周期或禁用
from client_example import TianshuClient
import asyncio
async def main():
client = TianshuClient('http://localhost:8000')
async with aiohttp.ClientSession() as session:
# 提交任务
result = await client.submit_task(
session,
file_path='document.pdf',
backend='pipeline',
lang='ch',
formula_enable=True,
table_enable=True
)
task_id = result['task_id']
# 等待完成
final_status = await client.wait_for_task(session, task_id)
print(f"Task completed: {final_status}")
if __name__ == '__main__':
asyncio.run(main())
检查 GPU:
nvidia-smi检查依赖:
pip list | grep -E "(mineru|litserve|torch)"检查 Worker 是否运行:
# Windows
tasklist | findstr python
# Linux/Mac
ps aux | grep litserve_worker检查 Worker 健康状态:
curl -X POST http://localhost:9000/predict \
-H "Content-Type: application/json" \
-d '{"action":"health"}'减少 worker 数量:
python start_all.py --workers-per-device 1设置显存限制:
export MINERU_VIRTUAL_VRAM_SIZE=6
python start_all.pyModel Context Protocol (MCP) 是 Anthropic 推出的开放协议,让 AI 助手(如 Claude Desktop)可以直接调用外部工具和服务。
python start_all.py --enable-mcpMCP Server 将在 http://localhost:8001 启动,提供以下端点:
/sse- SSE 连接端点(MCP 客户端连接)/messages- POST 消息端点/health- 健康检查端点
- parse_document - 解析文档为 Markdown 格式
- get_task_status - 查询任务状态和结果
- list_tasks - 列出最近的任务
- get_queue_stats - 获取队列统计信息
完整的 MCP 配置和使用指南,请参考:
- MCP_GUIDE.md - MCP 详细指南
- 主 README - 快速配置指南
遵循 MinerU 主项目许可证