feat: 添加 Docling Serve 服务,更新 docker-compose 配置以支持内容提取功能
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
# AI Stack
|
||||
|
||||
这个项目用 Docker Compose 组合了三个服务:
|
||||
这个项目用 Docker Compose 组合了以下主要服务:
|
||||
|
||||
- LiteLLM:作为统一的模型代理层,对外提供 OpenAI 兼容接口
|
||||
- Open WebUI:作为 Web 端聊天界面,直接连接 LiteLLM
|
||||
- Jupyter:作为 Open WebUI Code Interpreter 的 Python 执行环境,用于生成 Excel 等文件
|
||||
- Docling Serve:作为 Open WebUI 的内容提取引擎,负责文档 OCR、版面和表格解析
|
||||
|
||||
当前仓库的核心目标,是基于 Gemini 系列模型快速搭一套可本地运行的 AI 网关与聊天界面。
|
||||
|
||||
@@ -60,6 +61,24 @@ Jupyter 只在 Docker 内网中提供给 Open WebUI 使用,不暴露到宿主
|
||||
请使用 Code Interpreter 生成一个 Excel 文件,包含以下字段:姓名、部门、金额,并提供下载链接。
|
||||
```
|
||||
|
||||
### 4. Docling Serve
|
||||
|
||||
Docling Serve 使用 CPU 镜像运行,只在宿主机回环地址暴露 5001 端口,Open WebUI 通过 Docker 内部地址
|
||||
`http://docling-serve:5001` 调用它。默认启用 OCR、`dlparse_v4` PDF 后端和准确表格解析,模型文件保存在
|
||||
`docling-data` 卷中,避免容器重建后重复下载。
|
||||
|
||||
本地编排启动后可访问 <http://127.0.0.1:5001/ui>,线上编排使用 <http://127.0.0.1:18014/ui>。Open WebUI
|
||||
与 Docling 位于同一 Docker 网络,服务间调用始终使用 `http://docling-serve:5001`,不能填写宿主机映射端口。
|
||||
上传测试文档并确认能够返回 Markdown。首次处理文档时可能需要下载模型,耗时和内存占用会明显高于后续请求。
|
||||
|
||||
Open WebUI 的文档设置属于持久化配置。全新数据卷会读取 Compose 中的 Docling 环境变量;如果实例已经运行过,
|
||||
数据库里的旧设置可能覆盖环境变量。此时进入 `设置 → 管理员设置 → 工具 → 文档`,将内容提取引擎设为
|
||||
`Docling`,服务地址设为 `http://docling-serve:5001`,参数设为:
|
||||
|
||||
```json
|
||||
{"do_ocr": true, "pdf_backend": "dlparse_v4", "table_mode": "accurate"}
|
||||
```
|
||||
|
||||
## 已配置模型
|
||||
|
||||
LiteLLM 当前已配置以下 Gemini 模型别名:
|
||||
|
||||
@@ -36,6 +36,23 @@ services:
|
||||
--port 4000
|
||||
restart: unless-stopped
|
||||
|
||||
docling-serve:
|
||||
image: quay.io/docling-project/docling-serve:latest
|
||||
container_name: docling-serve
|
||||
pull_policy: always
|
||||
ports:
|
||||
- '127.0.0.1:18014:5001'
|
||||
environment:
|
||||
- DOCLING_SERVE_ENABLE_UI=true
|
||||
- DOCLING_SERVE_MAX_SYNC_WAIT=600
|
||||
- DOCLING_SERVE_ENG_LOC_NUM_WORKERS=2
|
||||
- UVICORN_WORKERS=1
|
||||
- OMP_NUM_THREADS=4
|
||||
- MKL_NUM_THREADS=4
|
||||
volumes:
|
||||
- docling-data:/app/data
|
||||
restart: unless-stopped
|
||||
|
||||
jupyter:
|
||||
image: quay.io/jupyter/datascience-notebook:latest
|
||||
container_name: ai-chat-jupyter
|
||||
@@ -98,6 +115,11 @@ services:
|
||||
- IMAGES_EDIT_OPENAI_API_BASE_URL=http://cli-proxy-api:8317/v1
|
||||
- IMAGES_EDIT_OPENAI_API_KEY=${CLIPROXY_API_KEY}
|
||||
|
||||
- CONTENT_EXTRACTION_ENGINE=docling
|
||||
- DOCLING_SERVER_URL=http://docling-serve:5001
|
||||
- >-
|
||||
DOCLING_PARAMS={"do_ocr":true,"pdf_backend":"dlparse_v4","table_mode":"accurate"}
|
||||
|
||||
# --- 以下是新增的网页搜索相关环境变量 ---
|
||||
- ENABLE_WEB_SEARCH=true
|
||||
- WEB_SEARCH_ENGINE=ddgs
|
||||
@@ -109,10 +131,12 @@ services:
|
||||
depends_on:
|
||||
- litellm
|
||||
- cli-proxy-api
|
||||
- docling-serve
|
||||
- jupyter
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
open-webui:
|
||||
docling-data:
|
||||
jupyter-work:
|
||||
open-terminal:
|
||||
|
||||
@@ -50,6 +50,23 @@ services:
|
||||
--port 4000
|
||||
restart: unless-stopped
|
||||
|
||||
docling-serve:
|
||||
image: quay.io/docling-project/docling-serve:latest
|
||||
container_name: docling-serve
|
||||
pull_policy: always
|
||||
ports:
|
||||
- '127.0.0.1:5001:5001'
|
||||
environment:
|
||||
- DOCLING_SERVE_ENABLE_UI=true
|
||||
- DOCLING_SERVE_MAX_SYNC_WAIT=600
|
||||
- DOCLING_SERVE_ENG_LOC_NUM_WORKERS=2
|
||||
- UVICORN_WORKERS=1
|
||||
- OMP_NUM_THREADS=4
|
||||
- MKL_NUM_THREADS=4
|
||||
volumes:
|
||||
- docling-data:/app/data
|
||||
restart: unless-stopped
|
||||
|
||||
jupyter:
|
||||
image: quay.io/jupyter/datascience-notebook:latest
|
||||
container_name: ai-chat-jupyter
|
||||
@@ -105,14 +122,20 @@ services:
|
||||
- CODE_EXECUTION_JUPYTER_AUTH=token
|
||||
- CODE_EXECUTION_JUPYTER_AUTH_TOKEN=${JUPYTER_TOKEN}
|
||||
- CODE_EXECUTION_JUPYTER_TIMEOUT=120
|
||||
- CONTENT_EXTRACTION_ENGINE=docling
|
||||
- DOCLING_SERVER_URL=http://docling-serve:5001
|
||||
- >-
|
||||
DOCLING_PARAMS={"do_ocr":true,"pdf_backend":"dlparse_v4","table_mode":"accurate"}
|
||||
volumes:
|
||||
- open-webui:/app/backend/data
|
||||
depends_on:
|
||||
- litellm
|
||||
- cli-proxy-api
|
||||
- docling-serve
|
||||
- jupyter
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
open-webui:
|
||||
docling-data:
|
||||
jupyter-work:
|
||||
|
||||
Reference in New Issue
Block a user