关于 docling.rs
docling.rs 是面向 Agent、开发者和 RAG 工作流的 Rust 文档转换项目。它处理 PDF、Office 文件、HTML、扫描件和音频等,并通过命令行、库和服务器输出 Markdown 等格式,同时保留文档结构。
主要功能
- 01转换为 Markdown、JSON、HTML 等格式
- 02分析 PDF 版面、表格并执行 OCR
- 03处理 Office 文件、HTML、扫描件和音频
- 04通过命令行、库、浏览器或 HTTP 服务运行
- 05向 AI Agent 提供转换工具
适用场景
- 01将扫描 PDF 转为结构化文本
- 02为 RAG 工作流准备文档和分块
- 03为 AI Agent 提供文档转换工具
MCP 相关
`docling-rs mcp` 命令可运行供 AI Agent 使用的 MCP 服务,并提供 `convert_to_markdown` 和 `convert` 工具,支持 Markdown、JSON、分块及其他输出。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx docling-rs-mcpDOCLING_RS_CACHE_DIRWhere `docling-rs-mcp --download-models` puts the PDF/image models and the server finds them (default ~/.cache/docling.rs).DOCLING_RS_OCR_LANGOCR language for scans: en (default), ch, or a BCP-47 tag.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
3收录的工具列表 · 更新于 今天
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| to | string | 否 | 输出格式:md(默认)、json(docling 的 DoclingDocument)、 html、text、latex、chunks(JSON 格式的 RAG 分块记录)、vtt、pandoc (Pandoc 的 JSON AST)。 |
| uri | string | 是 | 文档:http: 或 https: URL、file: URI、data: URI,或 路径(相对路径将相对于服务端根目录解析)。 |
| images | string | 否 | md/html/pandoc 输出中的图片:占位符(默认)或嵌入式(data: URI)。 |
| options | object | 否 | 转换选项,docling.rs 的共享选项集(docs/OPTIONS.md),例如 {"pages": "1-5"}、{"text_layer_only": true}(数字 PDF,速度最快)、 {"ocr_lang": "ch"}、{"force_full_page_ocr": true}、 {"do_picture_ocr": true}(对 Office 文件中的图片进行 OCR)、 {"password": "…"}、{"compact_tables": false}。也可以像表单发送的那样, 将值作为文本提供("true"、"1.5")。 |
详细介绍
docling.rs
docling.rs 可将 PDF、Office 文档、HTML、扫描件和音频等文档转换为 Markdown、docling JSON 及其他适合大模型或 RAG 工作流读取的格式。它是 IBM docling 的 Rust 移植版:通过一个静态二进制文件,逐字节生成相同的输出。无需 Python,也无需 PyTorch。
从 PDF 中提取文本很容易。要保留其结构——按顺序排列的标题、作为表格呈现的表格、可读取的扫描页面——则需要版面分析、表格识别和 OCR。docling 配备了这些模型,也有与之配套的 Python 技术栈。docling.rs 通过单个二进制文件运行相同的模型:PDF 处理速度比 Python docling 快 4.3 倍,内存占用不到一半;Office 和 HTML 快 20–60 倍;表格也能完好保留——单元格召回率为 0.94,而 MarkItDown 为 0.31(数据,方法)。
从 MarkItDown 迁移?
运行 pip install docling-rs,替换一处导入——
from docling_rs.markitdown import MarkItDown——即可保留其 API 和支持转换的所有格式,同时使用真正的版面分析、表格处理和 OCR:指南,并排实测。
从 Marker 迁移?
运行 pip install docling-rs,替换导入语句——
from docling_rs.marker.converters.pdf import PdfConverter——即可保留其 API:create_model_dict、text_from_rendered、JSON 块树、分块,以及 marker_single 的命令行和输出布局;同时由 docling 的版面分析、TableFormer 和 OCR 提供支持,无需 PyTorch 或推理服务:指南,并排实测。
来自 MinerU?
pip install docling-rs,替换导入语句 —
from docling_rs.mineru.parser import parse — 并继续使用 MinerU 4 的 SDK:
ParseResult、markdown()、Middle JSON、Content Lists 和 Structured
Content,以及 save() 的布局和 mineru-kit parse;底层则使用 docling 的布局分析、TableFormer 和 OCR,无需 DocVortex 或 llama.cpp:
指南、并排实测。
安装
# CLI + models (Linux x64/arm64/s390x + macOS arm64 prebuilt; builds from source elsewhere)
curl -fsSL https://raw.githubusercontent.com/docling-project/docling.rs/master/scripts/install/install.sh | bash
docling-rs example.pdf # Markdown on stdout
# or from crates.io; --cli puts the models where the installed binary looks
cargo install docling-cli
curl -fsSL https://raw.githubusercontent.com/docling-project/docling.rs/master/scripts/install/download_dependencies.sh | sh -s -- --cli
pip install docling-rs # Python — drop-in for docling's, MarkItDown's, Marker's and MinerU's APIs
npm install docling.rs # Node.js / Bun
cargo add docling # Rust library
# containers, models baked in (-cuda variants for NVIDIA)
docker run --rm -v "$PWD:/data" ghcr.io/docling-project/docling-rs paper.pdf
docker run -p 127.0.0.1:5001:5001 ghcr.io/docling-project/docling-rs-serve
Office、HTML、Markdown 和电子邮件无需模型。PDF、图像和音频需要 ONNX 模型(布局、OCR、TableFormer、Whisper;不到 1 GB):install.sh、
--cli 和容器会一并提供这些模型;使用 pip 时,运行一次
python -c "import docling_rs; docling_rs.download_models()";使用 npm
或检出代码时,在进行转换的位置运行
download_dependencies.sh(详情)。Windows:docs/WINDOWS.md。
▶ 在浏览器中试用 — 以 wasm 运行转换器,包含 OCR;所有数据都留在你的设备上。
使用
docling-rs report.pdf > report.md # Markdown (streamed page by page)
docling-rs report.pdf --to json # docling JSON; also html, text, latex, dclx, chunks, images
docling-rs --input ./docs --output ./out # a directory tree; --jobs N in parallel
docling-rs https://example.com/paper.pdf # URLs, data: URIs and stdin (`-`) too
docling-rs https://www.youtube.com/watch?v=ID # a YouTube video: title, description, caption transcript (--to vtt keeps the timing)
docling-rs --help # every flag: OCR, page ranges, images, enrichment, redaction …
from docling_rs import DocumentConverter # was: from docling.document_converter import …
doc = DocumentConverter().convert("report.pdf").document
print(doc.export_to_markdown())
import { convertFileAsync } from 'docling.rs'
const { content } = await convertFileAsync('report.pdf', { to: 'markdown' })
use docling::{DocumentConverter, SourceDocument};
let result = DocumentConverter::new().convert(SourceDocument::from_file("report.pdf")?)?;
println!("{}", result.document.export_to_markdown());
curl -F [email protected] 'localhost:5001/v1/convert?to=md' # the server; OpenAPI at /openapi.yaml
所有界面使用相同的选项和输出 — docs/OPTIONS.md 中列出了每个选项。
亮点
- 源自 Python docling:
from docling_rs import DocumentConverter;result.document是真正的DoclingDocument(迁移说明)。 - 支持 docling 的所有格式,以及一些它不支持的格式 — 见 状态下的表格,每种格式都经过实时 docling 验证 (兼容性)。
- 支持 docling 的所有输出格式: Markdown(docling 的格式或更严格的方言)、 docling JSON、HTML、纯文本、DocLang、LaTeX、Pandoc AST(→ 通过 pandoc 转换为 DOCX、EPUB、 Typst……)、WebVTT 字幕、RAG 分块和页面图像 (输出格式)。
- 支持多种语言: 通过一个 C 头文件即可从 Rust、Python、Node.js / Bun、浏览器(wasm, 完全在客户端运行)、C、C++、C#、Go、Java 和 Swift 调用,也支持任意 HTTP 客户端和 shell (集成 — 在你的语言中使用 docling.rs)。
- 可直接替代 docling-serve 的服务: Open WebUI 将其用作 Docling
内容提取引擎 — 将 Docling Server URL 指向
http://<host>:5001— n8n、Dify 和 LangChain 客户端也可原样使用 (docling-rs serve, Open WebUI 配置)。 - AI Agent(MCP):
docling-rs mcp为 Claude Desktop、Claude Code、 Cursor 或 VS Code 提供 MarkItDown 的convert_to_markdown工具,以及可用于 JSON、分块等内容的convert— 可运行uvx docling-rs-mcp,或claude mcp add docling -- docling-rs mcp(MCP 服务)。 - LangChain:
pip install "docling-rs[langchain]"— 在 Rust 引擎上运行 langchain-docling 的DoclingLoader,只需替换一处导入 (详情)。 - AutoGen:
pip install "docling-rs[autogen]"—DoclingIndexer会将带有页面信息的分块填入 任意 AutoGen 记忆,DoclingConvertTool可让 Agent 读取文档 (详情)。 - 自定义格式: 为 docling.rs 无法读取的格式注册后端 — 或者按你自己的方式读取它支持的格式 —
可通过 Rust、Python(
@docling_rs.register_backend(extensions=["rtf2"]),以及 MarkItDown 的register_converter和插件)或 Node.js 实现,且优先于内置格式 (可插拔后端)。 - RAG:
docling-rag— 使用 REST API 和 Web UI 进行分块、嵌入和搜索 (RAG 子系统)。 - 在你的环境中运行: Linux x64 / arm64 / s390x、macOS(Apple Silicon)和 Windows 提供预编译版本 (CLI、wheels、npm);Intel Mac 可从源码构建;提供 amd64 和 arm64 容器;支持 NVIDIA CUDA 和 TensorRT、DirectML(预编译的 Windows CLI)、CoreML 和 WebGPU(在浏览器中运行)作为可选 加速器(默认关闭)(GPU, IBM Z)。
使用 Claude Code 和 TENET(极简 AI 驱动开发框架)开发。
状态
docling 流水线中的所有格式都能转换,此外还支持一些 docling 不支持的格式。对于没有扩展名或扩展名未知的文件、标准输入、上传的文件或 data: URL,会根据内容识别类型(InputFormat::detect、docling_rs.detect_format、detectFormat:压缩包、OLE 文件、PDF、图像、音频和视频、iWork、XML、JSON、笔记本、邮件等)。如果文件无法按其扩展名处理,则会根据内容检查,并在发出警告后按其实际格式转换。
| 类别 | 格式 |
|---|---|
| 文本与标记 | Markdown、AsciiDoc、HTML、MHTML、LaTeX(多文件 arXiv 项目、数学公式、表格);纯文本和源代码(.py、.yaml、.log 等——任何文本文件,作为代码块或段落处理)、通用 JSON / JSON Lines 和 XML(保留为代码块);RSS / Atom / RDF 订阅源(.rss、.atom、.rdf 或不带扩展名的 .xml:订阅源标题、每个条目的标题、日期和正文);Jupyter 笔记本(.ipynb:Markdown 单元格、使用内核语言的代码单元格,以及按需输出) |
| 文字处理 | DOCX、Word 97–2004 .doc(以及 Word 6/95、1.x/2.0)、ODT、OpenOffice / StarWriter、AbiWord、WordPerfect、MS Works、EPUB、RTF |
| 演示文稿 | PPTX、PowerPoint 97–2003、ODP、OpenOffice / StarImpress |
| 电子表格 | XLSX、XLSB、Excel 97–2004、ODS、CSV / TSV、dBase、DIF、SYLK、Lotus 1-2-3、Quattro Pro、MS Works |
| 图表 · Apple iWork | Visio、SVG · Pages、Numbers、Keynote |
| PDF 与图像 | PDF(布局、TableFormer、OCR)、PNG、JPEG、TIFF、BMP、WebP、GIF、HEIC(需选择启用)、METS/GBS 扫描件、DjVu |
| XML · docling 原生格式 | JATS、USPTO、XBRL、DocLang · docling JSON、DocTags、DCLX |
| 邮件 · 字幕 · 大型机 | .eml、Outlook .msg · WebVTT · 通过 COBOL 复制手册处理 EBCDIC 记录 |
| 音频 · 视频 | WAV、MP3、M4A、AAC、OGG、FLAC;MP4、AVI、MOV、MKV、WebM、MPEG——使用本地 Whisper 或 Parakeet,并从视频提取场景帧;YouTube 观看页面 URL——视频标题、描述和字幕转录文本(以定时条目形式呈现,--asr-lang 用于选择语言) |
每种扩展名及各后端的处理方式:
docs/MIGRATION.md。
安装 ffmpeg(可选——仅用于视频帧采样)
任何位于 PATH 上的 ffmpeg ≥ 4.x 版本均可使用;docling.rs 会调用该二进制文件并解析其输出,因此无需开发头文件或库。
- Debian/Ubuntu:
sudo apt-get install ffmpeg - Fedora:
sudo dnf install ffmpeg-free(或从 RPM Fusion 安装ffmpeg) - Alpine:
apk add ffmpeg - macOS:
brew install ffmpeg - Windows:
winget install ffmpeg(或choco install ffmpeg,或scoop install ffmpeg)。从下载的 zip 安装 (gyan.dev / BtbN)也可行——可以 将解压后的bin\文件夹添加到PATH,也可以完全不设置PATH,而将DOCLING_FFMPEG指向 exe:set DOCLING_FFMPEG=C:\tools\ffmpeg\bin\ffmpeg.exe
使用 ffmpeg -version 检查。DOCLING_FFMPEG 会在任何操作系统上覆盖所用的二进制文件;docling-rs-serve Docker 镜像已预装 ffmpeg。
精简的仅解码构建(--disable-everything --enable-…)也可用(#853);docling.rs 只需要:file 协议;容器对应的解复用器(mp4/mov/m4v 使用 mov,mkv/webm 使用 matroska,以及 avi、mpeg);轨道对应的视频解码器(h264、hevc、vp8、vp9、av1、mpeg4、mpeg2video 等)及其解析器;select、metadata、fps、scale、showinfo 滤镜;png 和 wrapped_avframe 编码器;image2 和 null 封装器。不会使用音频组件——转录文本由 Rust 解码——场景扫描也只映射视频流。如果缺少组件,ffmpeg 会导致场景扫描失败(Encoder not found、Invalid argument),视频仍会仅转换为转录文本;DOCLING_RS_DEBUG=1 可显示相关消息。
MarkItDown 会将同类文档转换为供大模型使用的 Markdown。以下为并排测量结果——MarkItDown 0.1.8
(markitdown[all])和 docling.rs 2.33.0(发布构建),使用 4 vCPU,不使用 GPU——在本仓库的测试语料以及 MarkItDown 自带的 OCR 测试集上进行测试
(scripts/conformance/markitdown_compare.py):
| 语料(文件数) | MarkItDown,预热后 | docling.rs,预热后 | 冷启动 CLI 调用,MarkItDown / docling.rs | 单词 F1 | 表格单元格召回率 | 标题召回率 |
|---|---|---|---|---|---|---|
| DOCX(38) | 4.22 s | 0.44 s | 1102 / 14 ms | 0.93 / 1.00 | 0.81 / 1.00 | 0.78 / 1.00 |
| PPTX(8) | 0.30 s | 0.02 s | 974 / 6 ms | 0.81 / 0.97 | 0.62 / 1.00 | 0.86 / 1.00 |
| XLSX(14) | 0.87 s | 0.15 s | 849 / 7 ms | 0.60 / 0.95 | 0.78 / 0.98 | — ¹ |
| HTML(32) | 0.34 s | 0.05 s | 900 / 6 ms | 0.98 / 1.00 | 0.89 / 1.00 | 0.96 / 1.00 |
| CSV(9) | 0.04 s | 0.01 s | 900 / 4 ms | 1.00 / 1.00 | 0.78 / 1.00 | — |
| EPUB(1) | 0.06 s | 0.01 s | 897 / 10 ms | 0.99 / 1.00 | — | 1.00 / 1.00 |
| PDF(18),完整布局 + 表格 + OCR | 7.6 s | 38.4 s | 984 / 830 ms | 0.63 / 0.997 | 0.31 / 0.94 | 0.00 / 0.91 |
PDF(18),仅文本层(--text-layer-only) | 7.6 s | 0.5 s | — | 0.63 / 0.97 | 0.31 / 0.00 | 0.00 / 0.00 |
准确度以 Python docling 的真实标注为基准,因此从设计上就对
docling.rs 更有利;耗时则不受此影响。对于图像中的文字(MarkItDown 自带的 OCR 测试集),docling.rs 的本地
OCR 识别准确度为 1.00,而 MarkItDown 在不使用大模型时为 0.00–0.33。方法、注意事项和完整的
OCR 比较结果:docs/MARKITDOWN.md。
与 Marker 的一致性对比
Marker(datalab 的 marker-pdf)
使用布局模型和 OCR,将 PDF 以及通过 PDF 渲染处理的 Office 文件转换为供 LLM 使用的 Markdown。我们在本仓库的测试语料上进行了并排测量(scripts/conformance/marker_compare.py):Marker 2.0.0(marker-pdf[full],CPU 默认的 fast 模式,OCR 使用 llama.cpp)和 docling.rs 2.46.2(发布构建),均运行于 4 个 vCPU、无 GPU 的环境:
| 语料(文件数) | Marker,预热后 | docling.rs,预热后 | CLI 冷启动调用,Marker / docling.rs | 峰值 RSS,Marker(客户端 + 服务)/ docling.rs | 单词 F1 | 表格单元格召回率 | 标题召回率 |
|---|---|---|---|---|---|---|---|
| PDF(18),完整布局 + 表格 + OCR | 1312 s | 41 s | 22.0 s / 1.0 s | 10.5 GB / 3.1 GB | 0.93 / 0.997 | 0.41 / 0.94 | 0.66 / 0.91 |
PDF(18),仅文本层(--text-layer-only) | 1312 s | 0.44 s | — | — / 79 MB | 0.93 / 0.97 | 0.41 / 0.00 | 0.66 / 0.00 |
| DOCX(38) | 654 s(1 个失败) | 0.56 s | 23.4 s / 15 ms | 8.6 GB / 41 MB | 0.89 / 1.00 | 0.57 / 1.00 | 0.73 / 1.00 |
| PPTX(8) | 3.4 s(3 个失败) | 0.02 s | 21.8 s / 9 ms | 2.6 GB / 20 MB | 0.49 / 0.97 | 0.41 / 1.00 | 0.43 / 1.00 |
| XLSX(14) | 164 s(2 个失败) | 0.24 s | 22.8 s / 10 ms | 12.9 GB / 53 MB | 0.64 / 0.95 | 0.57 / 0.98 | — ¹ |
| HTML(32) | 1514 s | 0.06 s | 29 min ² / 8 ms | 8.8 GB / 21 MB | 0.94 / 1.00 | 0.50 / 1.00 | 0.84 / 1.00 |
| EPUB(1) | 10.5 s | 0.02 s | 60.7 s / 13 ms | 6.8 GB / 19 MB | 0.98 / 1.00 | — | 1.00 / 1.00 |
失败的文件得分为 0。¹ 只有一个 XLSX 标注数据包含标题。 ² 对 Marker 而言,中位数 HTML 文件需要 OCR:冷启动调用会先启动其 llama.cpp 服务并加载 1.2 GB 的 OCR 模型。
准确率以 Python docling 的标注数据为基准,因此这种设计本身更有利于 docling.rs;耗时和内存则不受此影响。
Marker 会先将 Office 文件、HTML 和 EPUB 渲染为 PDF,再对渲染结果运行视觉模型;在 CPU 上,每个经文本检查标记的页面都会经过运行在 llama.cpp 服务中的 1.2 GB 视觉语言 OCR 模型,而 pip install marker-pdf 不会安装该模型(缺少它时,4 个 PDF、9 个 DOCX、10 个 HTML 文件和该 EPUB 会直接失败)。峰值 RSS 统计包含 Marker 的客户端及其推理服务。Marker 的 balanced 模式(其公开基准测试所用模式)需要 GPU。方法、注意事项和 API 对照表见:
docs/MARKER.md.
与 MinerU 的一致性
MinerU(OpenDataLab)分四个档位将 PDF、图像和 Office 文件转换为供大模型使用的 Markdown 和 JSON:flash(文本层,不使用模型)、basic(ONNX 布局/表格/OCR 模型)、standard 和 advanced(通过 llama.cpp 调用视觉语言模型)。
在本仓库的测试语料上进行并排测量(scripts/conformance/mineru_compare.py):MinerU 4.0.12 和 docling.rs 2.46.2(release 构建),4 个 vCPU,无 GPU:
| 语料(文件数) | MinerU flash,热运行 | MinerU basic,热运行 | docling.rs,热运行 | CLI 冷启动调用,MinerU flash / basic / docling.rs | 峰值 RSS,MinerU flash / basic / docling.rs | 单词 F1(flash / basic / docling.rs) | 表格单元格召回率 | 标题召回率 |
|---|---|---|---|---|---|---|---|---|
| PDF(18),完整布局 + 表格 + OCR | 22.3 s | 123 s(+ 67 s 模型加载) | 44.0 s | 3.6 s / 6.5 s / 1.2 s | 1.4 GB / 4.6 GB / 3.1 GB | 0.87 / 0.74 / 0.997 | 0.28 / 0.44 / 0.94 | 0.57 / 0.58 / 0.91 |
PDF(18),仅文本层(--text-layer-only) | 22.3 s | — | 0.69 s | — / — / — | — / — / 80 MB | 0.87 / — / 0.97 | 0.28 / — / 0.00 | 0.57 / — / 0.00 |
| DOCX(38) | 6.36 s | 仅 flash | 0.59 s | 2355 ms / — / 15 ms | 179 MB / — / 41 MB | 0.97 / — / 1.00 | 0.82 / — / 1.00 | 0.96 / — / 1.00 |
| PPTX(8) | 0.21 s(1 个失败) | 仅 flash | 0.05 s | 2199 ms / — / 9 ms | 122 MB / — / 20 MB | 0.79 / — / 0.97 | 0.91 / — / 1.00 | 1.00 / — / 1.00 |
| XLSX(14) | 0.68 s | 仅 flash | 0.19 s | 978 ms / — / 14 ms | 140 MB / — / 55 MB | 0.83 / — / 0.95 | 0.77 / — / 0.98 | — ¹ |
| HTML(32) | 0.89 s | 仅 flash | 0.10 s | 2015 ms / — / 10 ms | 157 MB / — / 21 MB | 0.94 / — / 1.00 | 0.81 / — / 1.00 | 0.96 / — / 1.00 |
| EPUB(1) | 0.09 s | 仅 flash | 0.02 s | 1909 ms / — / 16 ms | 99 MB / — / 19 MB | 1.00 / 1.00 | — | 1.00 / 1.00 |
失败的文件得分为 0。¹ 只有一个 XLSX 标注数据包含标题。
准确率根据 Python docling 的标注数据评分,因此从设计上更有利于 docling.rs;耗时和内存不受此影响。MinerU 仅以 flash 档位解析 Office 文件、HTML 和 EPUB;basic 是其 CPU 模型档位;其 standard 档位(通过 llama.cpp 调用 1.2 B 视觉语言模型)在这台 CPU 上处理一页耗时 138 s,因此未列入表中。方法、注意事项和 API 对照:
docs/MINERU.md。
与 Python docling 的一致性
每种声明式格式都会与实时库进行比对:Markdown 逐字节比较,JSON 进行结构比较(比较每个键和值,但不包括 origin/version 和重新编码后的图像字节)。最新一轮测试使用 docling 2.129.0(scripts/conformance/full_conformance.py;✅ 全部 = 每个文件均匹配):
| 格式 | 文件数 | Markdown | JSON | 格式 | 文件数 | Markdown | JSON |
|---|---|---|---|---|---|---|---|
| DOCX | 38 | ✅ 全部 | ✅ 全部 | iWork Pages | 1 | ✅ 全部 | ✅ 全部 |
| HTML | 32 | ✅ 全部 | 31 | iWork Keynote | 5 | ✅ 全部 | ✅ 全部 |
| PPTX | 8 | ✅ 全部 | ✅ 全部 | EBCDIC | 3 | ✅ 全部 | ✅ 全部 |
| XLSX | 14 | 13 ² | 13 ² | JATS | 7 | ✅ 全部 | ✅ 全部 |
| ODF | 7 | ✅ 全部 | ✅ 全部 | DocLang | 15 | ✅ 全部 | ✅ 全部 |
| CSV | 9 | ✅ 全部 | 6 | AsciiDoc | 5 | ✅ 全部 | ✅ 全部 |
| Markdown | 11 | ✅ 全部 | 6 | USPTO | 9 | ✅ 全部 | ✅ 全部 |
| DeepSeek-OCR Markdown | 3 | ✅ 全部 | 不适用 | EPUB | 1 | ✅ 全部 | ✅ 全部 |
| WebVTT | 4 | ✅ 全部 | ✅ 全部 | LaTeX | 8 | ✅ 全部 | 7 ¹ |
Email(.eml) | 2 | ✅ 全部 | ✅ 全部 |
¹ 1706.03762:一个 tabular 的单元格具有一致的 row_span/col_span,而上游只将跨度写入偏移量;PDF 图形不包含图像负载(上游使用 pypdfium2 渲染)。
² xlsx_02_sample_sales_data:20 个日期单元格按 docling PR #4628 的数字格式规则输出(#634),但已发布的 docling 尚未应用这些规则。
残余差异及对应的确切文件见:docs/MIGRATION.md。
PDF/图像处理流程由确定性的快照基线锁定,并与 docling 的基准真值进行评分,详见
docs/PDF_CONFORMANCE.md。
性能
通过已发布的 Python docling 和 Rust 发布版二进制文件,对每种格式各使用一个测试样例(scripts/test/performance.sh);比值为 docling ÷ docling.rs,因此数值越大,Rust 的优势越明显。
| 文件 | 大小 | 峰值内存比 | CPU 比值 | 预热后转换加速比 |
|---|---|---|---|---|
picture_classification.pdf(PDF) | 208 KB | 减少 6.5× | 0.8× | 10.6× |
docx_rich_tables_01.docx(DOCX) | 3.1 MB | 减少 39× | 1.2× | 19× |
wiki_duck.html(HTML) | 240 KB | 减少 57× | 1.3× | 47× |
elife-56337.nxml(JATS XML) | 180 KB | 减少 59× | 1.2× | 10× |
xlsx_04_inflated.xlsx(XLSX) | 168 KB | 减少 51× | 0.9× | 18× |
powerpoint_with_image.pptx(PPTX) | 80 KB | 减少 55× | 1.2× | 3.1× |
wiki.md(Markdown) | 8 KB | 减少 57× | 1.2× | 1.2× |
csv-comma.csv(CSV) | 4 KB | 减少 64× | 1.2× | 0.6× † |
† 转换一个 4 KB 的 CSV 只需数微秒,因此 Rust 自身的进程启动开销主导了该数值;端到端快 870×。
声明式格式占用几 MB,而 docling 占用约 750 MB(即使处理这些格式,它也会导入 torch),端到端耗时缩短 300–870×;PDF 峰值内存为 0.37 GB,而 docling 为 2.4 GB,端到端转换速度快 28.5×。耗时分布,以及经测量确认无效的优化措施,见:
docs/PDF_CONFORMANCE.md。
集成 — 在你的语言中使用 docling.rs
一个引擎,多个入口,处处使用相同的选项和输出。
| 你使用…… | 使用 | 安装 |
|---|---|---|
| Rust | docling crate | cargo add docling |
| shell / CI 作业 | docling-rs CLI,包含批处理模式 | 发布版二进制文件 · cargo install docling-cli · ghcr.io/docling-project/docling-rs |
| 任何支持 HTTP 的程序 | docling-serve,OpenAPI 3.1 | ghcr.io/docling-project/docling-rs-serve · cargo install docling-serve |
| Node.js / Bun / Electron | docling.rs,一个 N-API 插件 | npm i docling.rs(docling.rs-cuda) |
| Python | docling-rs:docling、MarkItDown、Marker 和 MinerU 的 API | pip install docling-rs(docling-rs-cuda) |
| LangChain / LlamaIndex | DoclingLoader(langchain-docling 的 API) · DoclingReader(llama-index-readers-docling 的 API) | pip install langchain-docling-rs · pip install llama-index-readers-docling-rs |
| 浏览器 / Tauri / PWA | docling.rs-wasm,完全在客户端运行 | npm i docling.rs-wasm |
| C、C++、C#、Go、Java、Swift、Zig | docling-ffi:一个 docling.h | 发布版归档文件 docling-ffi-<tag>-<target> |
已经在使用 Cargo 时选 Rust;脚本和批处理作业选 CLI; 多个服务共享一个已预热的工作流时选 serve;Node / Python 在进程内运行;文档不得离开用户的机器时选 wasm; 任何能调用 C 的程序都可使用 FFI。
Rust API
use docling::{DocumentConverter, SourceDocument};
let converter = DocumentConverter::new();
let result = converter.convert(SourceDocument::from_file("input.md")?)?;
println!("{}", result.document.export_to_markdown()); // Markdown
println!("{}", result.document.export_to_json()); // docling DoclingDocument JSON
每个转换选项都放在一个可序列化的结构体 docling::ConvertOptions 中,各入口的填充方式都相同(见 docs/OPTIONS.md)。
库指南介绍了输出格式、错误处理、分块、图像提取、流式处理、OCR、PDF 开关、远程 VLM 工作流以及注册自定义后端(#680)。
HTTP 转换 API — docling-rs serve
docling-serve 通过 HTTP 提供转换器,并在请求之间共享一个已预热的 PDF/图像工作流(重复的 PDF 会跳过模型加载)、支持流式 Markdown、批处理、ZIP 输入、异步作业、位于 GET / 的交互式测试表单,以及位于 GET /openapi.yaml 的 OpenAPI 3.1 描述。它还提供 Python docling-serve 的路由,因此 Open WebUI、n8n、Dify 和 LangChain 客户端无需修改即可使用。
docker run -p 127.0.0.1:5001:5001 ghcr.io/docling-project/docling-rs-serve
curl -F [email protected] localhost:5001/v1/convert # Markdown
curl -F [email protected] 'localhost:5001/v1/convert?to=json' # docling JSON
curl -F [email protected] -F [email protected] localhost:5001/v1/convert # a batch
请求选项、服务端标志、异步作业、docling-serve 路由和 Open WebUI 配置:crates/docling-serve/README.md;
容器和规格配置:docs/DEPLOYMENT.md。
MCP 服务 — docling-rs mcp
docling-rs mcp 是默认 docling-rs 二进制文件和镜像中的一个 Model Context Protocol 服务。Agent 可以使用 MarkItDown 的 convert_to_markdown(uri) 工具——名称和契约相同,因此只需更改命令,就能切换 markitdown-mcp 配置——此外还提供 convert(uri, to, options) 和 list_input_formats()。
{
"mcpServers": {
"docling": { "command": "docling-rs", "args": ["mcp", "--root", "/Users/me/Documents"] }
}
}
claude mcp add docling -- docling-rs mcp --root ~/Documents # Claude Code
uvx docling-rs-mcp --root ~/Documents # the same server from PyPI
本地读取仅限于 --root 指定的范围;URL 需要 --allow-url-fetch。该服务已列入官方 MCP 注册表和 Smithery。PyPI 启动器、Docker、Streamable HTTP(--http)、安全模型和内存行为:
crates/docling-cli/README.md。
RAG 子系统
crates/docling-rag 可将文档转换为分块,为其生成嵌入向量(使用 Ollama、Gemini 或本地 ONNX 模型),将其存储(使用 SQLite + sqlite-vec 或 PostgreSQL + pgvector)并进行搜索,支持混合检索、多查询检索和 HyDE 检索,还提供评估工具、REST API 和内置搜索 UI。
在浏览器中使用 — docling-wasm
声明式转换器和 PDF 文本层可编译为 WebAssembly:
npm i docling.rs-wasm,然后运行 convert(bytes, filename, to),即可完全在客户端完成转换——无需服务器,模块压缩后约为 3.4 MB,并可选择在浏览器中进行 OCR。
详情和演示页面:crates/docling-wasm。
Node.js、Python 和 C
- Node.js / Bun — npm 上的
docling.rs,预构建的 N-API 插件:支持同步和异步转换、流式处理、分块、ZIP 批处理,以及预热的Pipeline。 - Python — PyPI 上的
docling-rs(适用于 NVIDIA 的docling-rs-cuda):提供 docling 的DocumentConverter和真正的 docling-coreDoclingDocument、MarkItDown 的 API,以及 LangChain 和 AutoGen 集成。 - C ABI —
docling-ffi:为 C、C++、C#/.NET、Go、Java、Swift 和 Zig 提供一个库和一个docling.h,每个已发布版本都包含预构建版本。
在容器中部署
| 镜像 | 说明 |
|---|---|
ghcr.io/docling-project/docling-rs-serve | HTTP API,模型已内置(linux/amd64、linux/arm64) |
ghcr.io/docling-project/docling-rs | CLI,入口点为 docling-rs,工作目录为 /data |
…-serve-cuda · …-rs-cuda | 基于 CUDA 13 + cuDNN 9 的相同镜像(linux/amd64) |
Compose 文件(独立部署、Caddy TLS、CUDA)、环境变量、资源配置和可观测性:docs/DEPLOYMENT.md。
获取 ML 模型
PDF/图像处理流水线需要 ONNX 模型——RT-DETR 布局模型、PP-OCR 和 TableFormer;音频处理需要 Whisper。download_dependencies.sh 会从本仓库的
发布页面下载这些模型到 ./.models,所有使用入口都会在此查找模型(--cli 除外:它会在通过 cargo 安装的二进制文件旁查找):
scripts/install/download_dependencies.sh # from a checkout
curl -fsSL https://raw.githubusercontent.com/docling-project/docling.rs/master/scripts/install/download_dependencies.sh | sh # anywhere
所有资源和选项(ASR 预设、增强模型、用于 PII 脱敏的 NER、INT8、字体)、GPU 执行提供程序和环境变量覆盖项:docs/MODELS.md。适用于没有预构建 ONNX Runtime 的 IBM Z 和其他目标平台:docs/IBMZ.md。
贡献
欢迎提交 Bug 报告和拉取请求——请参阅 CONTRIBUTING.md,了解构建和测试命令、一致性工作流,以及提交更改时应遵循的约定。
许可证
MIT,与上游 docling 保持一致。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。