feat: 添加 Docling Serve 服务,更新 docker-compose 配置以支持内容提取功能
This commit is contained in:
@@ -1,10 +1,11 @@
|
|||||||
# AI Stack
|
# AI Stack
|
||||||
|
|
||||||
这个项目用 Docker Compose 组合了三个服务:
|
这个项目用 Docker Compose 组合了以下主要服务:
|
||||||
|
|
||||||
- LiteLLM:作为统一的模型代理层,对外提供 OpenAI 兼容接口
|
- LiteLLM:作为统一的模型代理层,对外提供 OpenAI 兼容接口
|
||||||
- Open WebUI:作为 Web 端聊天界面,直接连接 LiteLLM
|
- Open WebUI:作为 Web 端聊天界面,直接连接 LiteLLM
|
||||||
- Jupyter:作为 Open WebUI Code Interpreter 的 Python 执行环境,用于生成 Excel 等文件
|
- Jupyter:作为 Open WebUI Code Interpreter 的 Python 执行环境,用于生成 Excel 等文件
|
||||||
|
- Docling Serve:作为 Open WebUI 的内容提取引擎,负责文档 OCR、版面和表格解析
|
||||||
|
|
||||||
当前仓库的核心目标,是基于 Gemini 系列模型快速搭一套可本地运行的 AI 网关与聊天界面。
|
当前仓库的核心目标,是基于 Gemini 系列模型快速搭一套可本地运行的 AI 网关与聊天界面。
|
||||||
|
|
||||||
@@ -60,6 +61,24 @@ Jupyter 只在 Docker 内网中提供给 Open WebUI 使用,不暴露到宿主
|
|||||||
请使用 Code Interpreter 生成一个 Excel 文件,包含以下字段:姓名、部门、金额,并提供下载链接。
|
请使用 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 模型别名:
|
LiteLLM 当前已配置以下 Gemini 模型别名:
|
||||||
|
|||||||
@@ -36,6 +36,23 @@ services:
|
|||||||
--port 4000
|
--port 4000
|
||||||
restart: unless-stopped
|
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:
|
jupyter:
|
||||||
image: quay.io/jupyter/datascience-notebook:latest
|
image: quay.io/jupyter/datascience-notebook:latest
|
||||||
container_name: ai-chat-jupyter
|
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_BASE_URL=http://cli-proxy-api:8317/v1
|
||||||
- IMAGES_EDIT_OPENAI_API_KEY=${CLIPROXY_API_KEY}
|
- 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
|
- ENABLE_WEB_SEARCH=true
|
||||||
- WEB_SEARCH_ENGINE=ddgs
|
- WEB_SEARCH_ENGINE=ddgs
|
||||||
@@ -109,10 +131,12 @@ services:
|
|||||||
depends_on:
|
depends_on:
|
||||||
- litellm
|
- litellm
|
||||||
- cli-proxy-api
|
- cli-proxy-api
|
||||||
|
- docling-serve
|
||||||
- jupyter
|
- jupyter
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
open-webui:
|
open-webui:
|
||||||
|
docling-data:
|
||||||
jupyter-work:
|
jupyter-work:
|
||||||
open-terminal:
|
open-terminal:
|
||||||
|
|||||||
@@ -50,6 +50,23 @@ services:
|
|||||||
--port 4000
|
--port 4000
|
||||||
restart: unless-stopped
|
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:
|
jupyter:
|
||||||
image: quay.io/jupyter/datascience-notebook:latest
|
image: quay.io/jupyter/datascience-notebook:latest
|
||||||
container_name: ai-chat-jupyter
|
container_name: ai-chat-jupyter
|
||||||
@@ -105,14 +122,20 @@ services:
|
|||||||
- CODE_EXECUTION_JUPYTER_AUTH=token
|
- CODE_EXECUTION_JUPYTER_AUTH=token
|
||||||
- CODE_EXECUTION_JUPYTER_AUTH_TOKEN=${JUPYTER_TOKEN}
|
- CODE_EXECUTION_JUPYTER_AUTH_TOKEN=${JUPYTER_TOKEN}
|
||||||
- CODE_EXECUTION_JUPYTER_TIMEOUT=120
|
- 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:
|
volumes:
|
||||||
- open-webui:/app/backend/data
|
- open-webui:/app/backend/data
|
||||||
depends_on:
|
depends_on:
|
||||||
- litellm
|
- litellm
|
||||||
- cli-proxy-api
|
- cli-proxy-api
|
||||||
|
- docling-serve
|
||||||
- jupyter
|
- jupyter
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
open-webui:
|
open-webui:
|
||||||
|
docling-data:
|
||||||
jupyter-work:
|
jupyter-work:
|
||||||
|
|||||||
Reference in New Issue
Block a user