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 是 IBM 开源的文档理解与解析工具包:它把 PDF、Word、PPT、Excel、HTML、图片、音频、视频等几十种格式解析成统一的结构化表示(DoclingDocument),并可无损导出为 Markdown、JSON、HTML、DocTags 等格式。它内置版面分析、表格结构识别、OCR、公式与代码识别等 AI 模型,专为 RAG(检索增强生成)与 LLM 应用准备高质量语料,是搭建企业知识库前的"文档清洗车间"。
一、项目介绍与适用场景
1.1 Docling 是什么
Docling 的核心是一套 Python 库 + CLI 工具。它读取原始文档后:
用 PDF 解析后端(docling-parse / pypdfium2)提取文本、字体、坐标等原始信息;
用 AI 模型做版面分析(layout analysis),识别段落、标题、表格、图片、公式、代码块;
用 TableFormer 模型还原表格结构,用 OCR 引擎识别扫描件文字;
输出统一的
DoclingDocument(无损 JSON),再序列化成 Markdown、HTML、chunks(分块)等目标格式。
所有处理默认在本地完成,敏感数据不出网,也支持气隙(air-gapped)环境。

1.2 适用人群
1.3 不适合的场景
只需要简单提取纯文本、且不关心版面与表格结构——用
pypdf更轻量;需要手写体高精度识别——Docling 的 OCR 引擎对手写体支持有限;
没有任何模型运行资源且无法联网下载模型——首次运行必须下载模型 artifacts;
需要"所见即所得"地把 PDF 原样转成排版一致的 Word——Docling 目标是结构化,不是版面复刻。
二、核心功能逐条拆解
多格式解析:支持 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 等)。
高级 PDF 理解:识别页面版面、阅读顺序、表格结构、代码、公式,并对图片做分类。
统一文档表示:所有格式解析后得到
DoclingDocument,可用export_to_markdown()、export_to_dict()等方法无损导出。多种导出格式:Markdown、HTML、纯文本、DocTags、DocLang、WebVTT、无损 JSON/YAML,以及面向 RAG 的
chunks(HybridChunker/HierarchicalChunker 分块)。OCR 支持:内置 EasyOCR、RapidOCR、Tesseract/Tesserocr、ocrmac 等引擎,可识别扫描件与图片中的多语言文字。
VLM 视觉模型管线:可用 GraniteDocling(258M 参数)、SmolDocling、GOT-OCR、Qwen-VL、Gemma 等视觉语言模型直接"看图说话"式解析 PDF。
音频/视频转写:通过 Whisper、Granite Speech 等 ASR 模型把音视频转成带时间戳的 WebVTT 文本。
本地化与离线运行:模型 artifacts 可预先下载到指定目录(
--artifacts-path),运行时不联网,适合涉密环境。docling-serve API 服务:官方提供基于 FastAPI 的 REST 服务,暴露
/v1/convert/source等端点,并自带 Web UI。MCP server:作为 Model Context Protocol 服务器,让任何支持 MCP 的 AI 客户端调用文档转换。
生态集成:官方提供 LangChain、LlamaIndex、Haystack、CrewAI 等框架的官方集成包。
置信度评估:对每个解析结果输出 confidence scores(置信度分数),方便抽样质检。

三、全套官方链接
四、硬件与环境前置要求
五、多平台部署步骤
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:
启动(启用 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/docsUI 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 为准):
常用环境变量:
带注释的常用组合示例:
# 离线 + 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/ 为准。
九、全套报错故障排查
十、升级、回滚与卸载
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