Loading...

文章背景图

Docling:IBM 开源文档解析工具包,把 PDF/DOCX/PPTX 转成 RAG 友好的 Markdown/JSON|部署与使用全指南

2026-10-27
0
- 字
- 分钟
|

Docling:IBM 开源文档解析工具包,把 PDF/DOCX/PPTX 转成 RAG 友好的 Markdown/JSON|部署与使用全指南

本文基于 docling v2.142.1(2026-10-23 发布)撰写,docling-serve 部分基于 v1.21.0 文档。Docling 目前 GitHub star 数约 6.96 万,由 IBM Research Zurich 发起、LF AI & Data 基金会托管,是当前文档解析(Document AI)领域最活跃的开源项目之一。

Docling 处理流程主视觉

Docling 是 IBM 开源的文档理解与解析工具包:它把 PDF、Word、PPT、Excel、HTML、图片、音频、视频等几十种格式解析成统一的结构化表示(DoclingDocument),并可无损导出为 Markdown、JSON、HTML、DocTags 等格式。它内置版面分析、表格结构识别、OCR、公式与代码识别等 AI 模型,专为 RAG(检索增强生成)与 LLM 应用准备高质量语料,是搭建企业知识库前的"文档清洗车间"。

一、项目介绍与适用场景

1.1 Docling 是什么

Docling 的核心是一套 Python 库 + CLI 工具。它读取原始文档后:

  1. 用 PDF 解析后端(docling-parse / pypdfium2)提取文本、字体、坐标等原始信息;

  2. 用 AI 模型做版面分析(layout analysis),识别段落、标题、表格、图片、公式、代码块;

  3. 用 TableFormer 模型还原表格结构,用 OCR 引擎识别扫描件文字;

  4. 输出统一的 DoclingDocument(无损 JSON),再序列化成 Markdown、HTML、chunks(分块)等目标格式。

所有处理默认在本地完成,敏感数据不出网,也支持气隙(air-gapped)环境。

Docling 架构图

1.2 适用人群

人群

典型用法

RAG / 知识库工程师

把企业 PDF 手册、合同、论文批量转成 Markdown/JSON 喂给向量库

LLM 应用开发者

通过 LlamaIndex / LangChain 集成,把文档转换嵌入 Agent 流程

数据工程师

用 docling-serve 搭建文档转换 REST 服务,批量 ETL

科研人员

提取论文中的表格、公式、图片

Agent 开发者

通过 MCP server 让 Claude 等客户端直接调用文档转换能力

1.3 不适合的场景

  • 只需要简单提取纯文本、且不关心版面与表格结构——用 pypdf 更轻量;

  • 需要手写体高精度识别——Docling 的 OCR 引擎对手写体支持有限;

  • 没有任何模型运行资源且无法联网下载模型——首次运行必须下载模型 artifacts;

  • 需要"所见即所得"地把 PDF 原样转成排版一致的 Word——Docling 目标是结构化,不是版面复刻。

二、核心功能逐条拆解

  1. 多格式解析:支持 PDF、DOCX、PPTX、XLSX、HTML、EPUB、ODF(.odt/.ods/.odp)、Apple Pages/Numbers/Keynote、图片(PNG/JPEG/TIFF 等)、EML/MSG 邮件、LaTeX、纯文本,以及通过 ASR 支持音频(WAV/MP3)和视频(MP4/MOV/MKV 等)。

  2. 高级 PDF 理解:识别页面版面、阅读顺序、表格结构、代码、公式,并对图片做分类。

  3. 统一文档表示:所有格式解析后得到 DoclingDocument,可用 export_to_markdown()、export_to_dict() 等方法无损导出。

  4. 多种导出格式:Markdown、HTML、纯文本、DocTags、DocLang、WebVTT、无损 JSON/YAML,以及面向 RAG 的 chunks(HybridChunker/HierarchicalChunker 分块)。

  5. OCR 支持:内置 EasyOCR、RapidOCR、Tesseract/Tesserocr、ocrmac 等引擎,可识别扫描件与图片中的多语言文字。

  6. VLM 视觉模型管线:可用 GraniteDocling(258M 参数)、SmolDocling、GOT-OCR、Qwen-VL、Gemma 等视觉语言模型直接"看图说话"式解析 PDF。

  7. 音频/视频转写:通过 Whisper、Granite Speech 等 ASR 模型把音视频转成带时间戳的 WebVTT 文本。

  8. 本地化与离线运行:模型 artifacts 可预先下载到指定目录(--artifacts-path),运行时不联网,适合涉密环境。

  9. docling-serve API 服务:官方提供基于 FastAPI 的 REST 服务,暴露 /v1/convert/source 等端点,并自带 Web UI。

  10. MCP server:作为 Model Context Protocol 服务器,让任何支持 MCP 的 AI 客户端调用文档转换。

  11. 生态集成:官方提供 LangChain、LlamaIndex、Haystack、CrewAI 等框架的官方集成包。

  12. 置信度评估:对每个解析结果输出 confidence scores(置信度分数),方便抽样质检。

Docling 生态图

三、全套官方链接

资源

地址

GitHub 仓库

https://github.com/docling-project/docling

官方文档

https://docling-project.github.io/docling/

CLI 参考

https://docling-project.github.io/docling/reference/cli/

安装指南

https://docling-project.github.io/docling/getting_started/installation/

docling-serve 仓库

https://github.com/docling-project/docling-serve

示例代码(Examples)

https://docling-project.github.io/docling/examples/

PyPI 包

https://pypi.org/project/docling/

MCP 文档

https://docling-project.github.io/docling/usage/mcp/

技术报告(arXiv)

https://arxiv.org/abs/2408.09869

GitHub Discussions

https://github.com/docling-project/docling/discussions

Discord 社区

https://docling.ai/discord

License

MIT(模型使用许可以各模型原始包为准)

四、硬件与环境前置要求

项目

要求

操作系统

Linux、macOS、Windows(x86_64 与 arm64 均可)

Python 版本

3.10 及以上(v2.70.0 起不再支持 Python 3.9)

包管理器

pip / uv / Poetry 皆可

CPU

建议 4 核以上;--num-threads 默认 4

内存

建议 8 GB 起步,长文档/大表格建议 16 GB+

GPU(可选)

支持 CUDA(NVIDIA)、MPS(Apple Silicon)、XPU(Intel);纯 CPU 也能跑,速度慢

磁盘

安装约 2~3 GB;模型 artifacts 首次下载约 1~2 GB(含 layout/tableformer/OCR 模型)

网络

首次运行需从 HuggingFace 下载模型;离线环境需预下载 artifacts 并配置镜像

账号

无需任何账号;如用 HuggingFace 上的受限模型才需要 token

五、多平台部署步骤

5.1 Windows / macOS / Linux 通用:pip 安装

推荐使用虚拟环境:

python3 -m venv ~/venvs/docling
source ~/venvs/docling/bin/activate   # Windows: ~/venvs/docling/Scripts/activate
pip install docling
docling --version

Windows(PowerShell):

python -m venv $env:USERPROFILE\venvs\docling
.\$env:USERPROFILE\venvs\docling\Scripts\Activate.ps1
pip install docling

5.2 uv 安装(官方推荐的高速方案)

# 安装 uv 后,用 uvx 直接试用,无需建环境
uvx --from docling docling https://arxiv.org/pdf/2206.01062

# 或在项目中作为依赖安装
uv add docling
uv run docling --version

5.3 验证安装:第一次转换

docling https://arxiv.org/pdf/2206.01062

首次运行会自动从 HuggingFace 下载模型到本地缓存(Linux 默认 ~/.cache/docling / ~/.cache/huggingface),随后在当前目录生成同名 .md 文件。

5.4 模型下载与离线 artifacts

预下载全部模型到指定目录,供离线/气隙环境使用:

docling-tools models download ./docling-models
# 也可下载指定的 HuggingFace 仓库:
docling-tools models download-hf-repo ./docling-models ibm-granite/granite-docling-258M

国内网络可用 HuggingFace 镜像加速:

export HF_ENDPOINT=https://hf-mirror.com
docling-tools models download ./docling-models

离线运行时通过 --artifacts-path 指向该目录:

docling --artifacts-path ./docling-models --device cpu report.pdf

也可以用环境变量(以官方文档为准):DOCLING_ARTIFACTS_PATH=/path/to/models。

5.5 Docker 部署 docling-serve(官方 API 服务)

官方提供 docling-serve 容器镜像,发布在 quay.io 与 ghcr.io:

镜像 tag

说明

架构

docling-serve:latest

全功能基础镜像

amd64, arm64

docling-serve-cpu:latest

仅 CPU(PyTorch CPU 版)

amd64, arm64

docling-serve-cu128:<版本号>

CUDA 12.8 构建(无 latest 标签,必须带版本号)

amd64

docling-serve-cu130:<版本号>

CUDA 13.0 构建(同上)

amd64, arm64

启动(启用 Web UI):

docker run -d --name docling-serve \
  -p 5001:5001 \
  -e DOCLING_SERVE_ENABLE_UI=1 \
  quay.io/docling-project/docling-serve

启动后访问:

  • API:http://127.0.0.1:5001

  • 交互式 API 文档:http://127.0.0.1:5001/docs

  • UI playground:http://127.0.0.1:5001/ui

5.6 pip 部署 docling-serve

pip install docling-serve
docling-serve run --enable-ui

5.7 源码安装 docling 主库(开发模式)

git clone https://github.com/docling-project/docling.git
cd docling
uv sync            # 或 pip install -e .
uv run docling --version

官方未提供 docling 单库的官方 Docker 镜像;容器化场景请使用 docling-serve 镜像,或自行基于 python 基础镜像 pip install docling 打包。

六、配置文件全部参数解释

Docling 不依赖传统配置文件,主要通过 CLI 参数 / Python options 对象 / 环境变量 配置。以下为 docling convert 的核心参数(完整列表以 docling convert --help 与官方 CLI reference 为准):

参数

默认值

说明

--from

全部格式

限定接受的输入格式,可重复

--to

md

输出格式:md、json、yaml、html、text、doctags、vtt、chunks、latex 等,可重复

--pipeline

standard

处理管线:legacy / standard / native / vlm / asr

--vlm-model

granite_docling

VLM 预设:granite_docling、smoldocling、got_ocr、qwen、gemma_12b 等

--ocr / --no-ocr

开启

是否对位图内容执行 OCR

--ocr-mode

default

OCR 作用范围:full_page(整页强制)、layout_regions 等

--ocr-engine

auto

OCR 引擎:easyocr、rapidocr、tesseract、tesserocr、ocrmac 等

--ocr-lang

引擎默认

OCR 语言,如 --ocr-lang iso:zh-Hans

--tables / --no-tables

开启

是否启用表格结构模型

--table-mode

accurate

表格结构模型模式:fast(快)/ accurate(准)

--pdf-backend

docling_parse

PDF 解析后端:docling_parse、pypdfium2 等

--pdf-password

空

加密 PDF 的密码

--page-range

全部

页码范围,如 1-4

--artifacts-path

默认缓存

模型 artifacts 目录(离线核心参数)

--device

auto

加速设备:auto / cpu / cuda / mps / xpu

--num-threads

4

模型推理线程数

--page-batch-size

4

每批处理的页数(影响内存占用)

--image-export-mode

embedded

图片导出方式:placeholder / embedded(base64)/ referenced(PNG 文件)

--output

当前目录

输出目录

--output-file

无

指定单文件输出路径(需单输入单格式)

--document-timeout

无

单文档处理超时(秒)

--enrich-formula

关闭

启用公式识别富化模型

--enrich-code

关闭

启用代码识别富化模型

--enrich-picture-description

关闭

启用图片描述生成模型

--enrich-chart-extraction

关闭

启用柱状/饼/折线图数据提取

--fail-on

failure

退出码策略:failure / partial / never

--verbose / -v

0

日志级别,-vv 为 debug

常用环境变量:

环境变量

说明

HF_ENDPOINT

HuggingFace 镜像地址(如 https://hf-mirror.com)

HF_HOME / HF_HUB_CACHE

HuggingFace 模型缓存目录

DOCLING_ARTIFACTS_PATH

模型 artifacts 目录(等价 --artifacts-path)

DOCLING_SERVE_ENABLE_UI

docling-serve 启用 Web UI(设为 1)

DOCLING_SERVE_API_KEY

docling-serve 的 API Key

带注释的常用组合示例:

# 离线 + CPU + 中文 OCR + 快速表格,输出 Markdown 和 JSON
docling convert report.pdf \
  --artifacts-path ./docling-models \      # 离线模型目录
  --device cpu \                            # 强制 CPU
  --ocr-engine rapidocr \                   # 选 OCR 引擎
  --ocr-lang iso:zh-Hans \                  # 简体中文
  --table-mode fast \                       # 表格用快速模式
  --to md --to json \                       # 双格式输出
  --output ./out                            # 输出目录

七、启动、后台常驻、开机自启、改端口

7.1 前台启动 docling-serve

docling-serve run --enable-ui

7.2 systemd 常驻(Linux)

# /etc/systemd/system/docling-serve.service
[Unit]
Description=Docling Serve API
After=network.target

[Service]
User=docling
WorkingDirectory=/opt/docling
Environment="DOCLING_SERVE_ENABLE_UI=1"
Environment="DOCLING_ARTIFACTS_PATH=/opt/docling/models"
ExecStart=/opt/docling/venv/bin/docling-serve run
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now docling-serve

7.3 Docker Compose 自启

services:
  docling-serve:
    image: quay.io/docling-project/docling-serve:latest
    ports:
      - "5001:5001"
    environment:
      - DOCLING_SERVE_ENABLE_UI=1
    restart: unless-stopped

7.4 Windows 计划任务 / NSSM

# 用 NSSM 把 docling-serve 注册为 Windows 服务
nssm install DoclingServe C:\docling\venv\Scripts\docling-serve.exe run
nssm set DoclingServe AppEnvironmentExtra DOCLING_SERVE_ENABLE_UI=1
nssm start DoclingServe

7.5 改端口与反向代理

docling-serve run --help   # 查看端口相关参数(以官方帮助为准,默认 5001)

Nginx 反向代理示例:

location /docling/ {
    proxy_pass http://127.0.0.1:5001/;
    proxy_set_header Host $host;
    client_max_body_size 200m;
}

八、功能实操教程

8.1 CLI:PDF 转 Markdown + JSON

docling convert paper.pdf --to md --to json --output ./out
# 输出:./out/paper.md 与 ./out/paper.json

8.2 CLI:强制整页 OCR(扫描件)

docling convert scan.pdf --ocr --ocr-mode full_page --to md

8.3 CLI:VLM 管线(GraniteDocling)

docling convert --pipeline vlm --vlm-model granite_docling https://arxiv.org/pdf/2206.01062

8.4 Python API:DocumentConverter 基本用法

from docling.document_converter import DocumentConverter

source = "https://arxiv.org/pdf/2408.09869"  # 本地路径或 URL
converter = DocumentConverter()
result = converter.convert(source)
print(result.document.export_to_markdown())
print(result.document.export_to_dict())   # DoclingDocument 无损 JSON

8.5 Python API:提取表格

from docling.document_converter import DocumentConverter

conv = DocumentConverter()
doc = conv.convert("report.pdf").document
for table in doc.tables:
    df = table.export_to_dataframe()   # 导出为 pandas DataFrame
    print(df.head())

8.6 RAG 分块(chunks 输出)

docling convert handbook.pdf --to chunks --chunks-type hybrid --output ./chunks

8.7 docling-serve REST API 调用

同步转换:

curl -X 'POST' 'http://localhost:5001/v1/convert/source' \
  -H 'Content-Type: application/json' \
  -d '{"sources": [{"kind": "http", "url": "https://arxiv.org/pdf/2501.17887"}]}'

异步转换(返回任务 ID,可轮询结果):

curl -X POST "http://localhost:5001/v1/convert/source/async" \
  -H "Content-Type: application/json" \
  -d '{"http_sources": [{"url": "https://arxiv.org/pdf/2501.17887"}]}'

8.8 LlamaIndex / LangChain 集成

pip install docling-llamaindex       # LlamaIndex 官方集成
pip install langchain-docling        # LangChain 官方集成
# LlamaIndex 示例(RAG)
from docling_llamaindex.docling_reader import DoclingReader
from llama_index.core import SimpleDirectoryReader

reader = DoclingReader()
loader = SimpleDirectoryReader(
    input_dir="./docs", file_extractor={".pdf": reader}
)
documents = loader.load_data()
# LangChain 示例
from langchain_docling import DoclingLoader

loader = DoclingLoader(file_path="./docs/manual.pdf", export_type="md")
docs = loader.load()

8.9 MCP 集成

Docling 提供 MCP server(详见官方 MCP 文档),可在支持 MCP 的客户端中把本地文档转换作为工具暴露;也可通过 DOCLING_CONVERSION_MODE=remote 指向 docling-serve 远程转换。具体安装命令以 https://docling-project.github.io/docling/usage/mcp/ 为准。

九、全套报错故障排查

现象

原因

解决

模型下载超时/失败

国内访问 HuggingFace 不稳定

设置 HF_ENDPOINT=https://hf-mirror.com 或预下载 artifacts 后用 --artifacts-path

SSL: CERTIFICATE_VERIFY_FAILED

代理/自签证书

配置 REQUESTS_CA_BUNDLE 指向企业证书;勿长期关闭校验

No module named docling

未激活虚拟环境/装错 Python

pip show docling 确认安装位置,激活对应 venv

Python 3.9 报版本错误

v2.70.0 起不支持 3.9

升级到 Python 3.10+

内存 OOM(Killed / OOMKilled)

大 PDF、--page-batch-size 过大

降低 --page-batch-size(如 1)、限制 --page-range 分批、增加内存

GPU 未被使用

CUDA/驱动不匹配

确认 nvidia-smi 正常、安装匹配的 torch CUDA 版;显式 --device cuda

Apple Silicon 很慢

默认走 CPU

--device mps 启用 Metal 加速

加密 PDF 报错

文档有密码

用 --pdf-password '密码' 传入

OCR 识别中文乱码/为空

语言未配置

--ocr-engine rapidocr --ocr-lang iso:zh-Hans,或 tesseract 装中文语言包

输出 Markdown 无图片

导出模式为 placeholder

--image-export-mode referenced(导出 PNG 文件)或 embedded(base64)

docling-serve 拉取镜像失败

CUDA tag 用了 latest

-cu128/-cu130 镜像无 latest,必须写明确版本号如 v1.18.0

/v1/convert/source 返回 401

服务端启用鉴权

请求头携带 DOCLING_SERVE_API_KEY 对应的 API Key

CLI docling file.pdf 报子命令错误

v2.x 新 CLI 结构

新版用 docling convert file.pdf;docling --help 查看子命令

表格识别错乱

fast 模式精度不足

--table-mode accurate(默认即为 accurate,勿误设 fast)

批量转换中途失败全部退出

默认策略

用 --fail-on never 跳过失败文档继续处理

处理卡死在某一文档

单文档无超时

设置 --document-timeout 300

气隙环境启动时仍尝试联网

artifacts 未指定

用 --artifacts-path 指向预下载目录

十、升级、回滚与卸载

10.1 版本查看与升级

docling --version
pip install -U docling docling-serve   # 升级到最新
pip install docling==2.142.1           # 锁定指定版本

10.2 Docker 升级与回滚

docker pull quay.io/docling-project/docling-serve:latest
docker stop docling-serve && docker rm docling-serve
docker run -d --name docling-serve -p 5001:5001 \
  -e DOCLING_SERVE_ENABLE_UI=1 quay.io/docling-project/docling-serve

# 回滚:改用旧版本 tag
docker run -d --name docling-serve -p 5001:5001 \
  quay.io/docling-project/docling-serve:<旧版本tag>

10.3 卸载清理清单

pip uninstall docling docling-serve
rm -rf ~/.cache/docling ~/.cache/huggingface   # 模型缓存
rm -rf ~/venvs/docling                          # 虚拟环境
docker rm -f docling-serve                      # 容器
docker rmi quay.io/docling-project/docling-serve # 镜像

十一、商用许可与合规风险提示

  • 代码许可:Docling 代码库采用 MIT License,商用友好,可闭源集成,只需保留版权声明。

  • 模型许可:MIT 仅覆盖代码;各 AI 模型(layout、TableFormer、OCR、GraniteDocling 等)有独立许可,使用前需查看对应模型仓库的许可条款。

  • 商标:Docling 名称与 Logo 归项目方所有,二次分发时不要暗示官方背书。

  • 无云费用:Docling 本地运行不产生 API 费用;若使用其官方托管服务(managed service)则以官方定价为准。

  • 数据隐私:默认本地处理、数据不出网;但模型下载、--enable-remote-services、VLM 远程预设等会出网——涉密环境务必离线化并关闭远程服务。

  • 生产风险:文档解析结果需抽样质检(可利用 confidence scores);处理不可信来源的 PDF 时,建议在隔离环境运行,防范恶意构造的文档文件。

附录:命令速查

# 安装
pip install docling                       # 基础安装
uvx --from docling docling <文件>          # 免安装试用
pip install docling-serve                 # API 服务

# 模型
docling-tools models download ./models    # 预下载 artifacts
export HF_ENDPOINT=https://hf-mirror.com  # HF 镜像

# 常用转换
docling convert a.pdf --to md             # PDF → Markdown
docling convert a.pdf --to md --to json --output out/
docling convert scan.pdf --ocr --ocr-mode full_page
docling convert --pipeline vlm --vlm-model granite_docling a.pdf
docling convert a.pdf --to chunks         # RAG 分块
docling convert --page-range 1-4 --table-mode accurate a.pdf

# 服务
docling-serve run --enable-ui             # 前台启动(端口 5001)
curl -X POST localhost:5001/v1/convert/source \
  -H 'Content-Type: application/json' \
  -d '{"sources":[{"kind":"http","url":"https://example.com/a.pdf"}]}'

# 排错
docling convert a.pdf -v                  # info 日志
docling convert a.pdf -vv                 # debug 日志
docling convert a.pdf --device cpu --num-threads 2

评论交流

文章目录