mcpField
D
docling.rs

docling.rs

本地服务
github.com生产力121今天更新

关于 docling.rs

docling.rs 是面向 Agent、开发者和 RAG 工作流的 Rust 文档转换项目。它处理 PDF、Office 文件、HTML、扫描件和音频等,并通过命令行、库和服务器输出 Markdown 等格式,同时保留文档结构。

主要功能

  1. 01转换为 Markdown、JSON、HTML 等格式
  2. 02分析 PDF 版面、表格并执行 OCR
  3. 03处理 Office 文件、HTML、扫描件和音频
  4. 04通过命令行、库、浏览器或 HTTP 服务运行
  5. 05向 AI Agent 提供转换工具

适用场景

  1. 01将扫描 PDF 转为结构化文本
  2. 02为 RAG 工作流准备文档和分块
  3. 03为 AI Agent 提供文档转换工具

MCP 相关

`docling-rs mcp` 命令可运行供 AI Agent 使用的 MCP 服务,并提供 `convert_to_markdown` 和 `convert` 工具,支持 Markdown、JSON、分块及其他输出。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"docling-project-docling-rs": {
"command": "uvx",
"args": [
"docling-rs-mcp"
],
"env": {
"DOCLING_RS_CACHE_DIR": "<DOCLING_RS_CACHE_DIR>",
"DOCLING_RS_OCR_LANG": "<DOCLING_RS_OCR_LANG>"
}
}
}
}
启动命令uvx docling-rs-mcp
需要配置的环境变量
DOCLING_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypidocling-rs-mcp2.53.3
ocighcr.io/docling-project/docling-rs:2.53.3

工具

3

收录的工具列表 · 更新于 今天

参数类型必填说明
tostring否输出格式:md(默认)、json(docling 的 DoclingDocument)、 html、text、latex、chunks(JSON 格式的 RAG 分块记录)、vtt、pandoc (Pandoc 的 JSON AST)。
uristring是文档:http: 或 https: URL、file: URI、data: URI,或 路径(相对路径将相对于服务端根目录解析)。
imagesstring否md/html/pandoc 输出中的图片:占位符(默认)或嵌入式(data: URI)。
optionsobject否转换选项,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 — 一只鸭子把文档送进绞肉机

CI 在线浏览器演示 MIT 许可证 crates.io 版本 PyPI 版本 npm 版本 GitHub 发布版本 crates.io 下载量 PyPI 月下载量 npm 月下载量

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 iWorkVisio、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 可显示相关消息。

## 与 Microsoft MarkItDown 的符合性

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 s0.44 s1102 / 14 ms0.93 / 1.000.81 / 1.000.78 / 1.00
PPTX(8)0.30 s0.02 s974 / 6 ms0.81 / 0.970.62 / 1.000.86 / 1.00
XLSX(14)0.87 s0.15 s849 / 7 ms0.60 / 0.950.78 / 0.98— ¹
HTML(32)0.34 s0.05 s900 / 6 ms0.98 / 1.000.89 / 1.000.96 / 1.00
CSV(9)0.04 s0.01 s900 / 4 ms1.00 / 1.000.78 / 1.00—
EPUB(1)0.06 s0.01 s897 / 10 ms0.99 / 1.00—1.00 / 1.00
PDF(18),完整布局 + 表格 + OCR7.6 s38.4 s984 / 830 ms0.63 / 0.9970.31 / 0.940.00 / 0.91
PDF(18),仅文本层(--text-layer-only)7.6 s0.5 s—0.63 / 0.970.31 / 0.000.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),完整布局 + 表格 + OCR1312 s41 s22.0 s / 1.0 s10.5 GB / 3.1 GB0.93 / 0.9970.41 / 0.940.66 / 0.91
PDF(18),仅文本层(--text-layer-only)1312 s0.44 s—— / 79 MB0.93 / 0.970.41 / 0.000.66 / 0.00
DOCX(38)654 s(1 个失败)0.56 s23.4 s / 15 ms8.6 GB / 41 MB0.89 / 1.000.57 / 1.000.73 / 1.00
PPTX(8)3.4 s(3 个失败)0.02 s21.8 s / 9 ms2.6 GB / 20 MB0.49 / 0.970.41 / 1.000.43 / 1.00
XLSX(14)164 s(2 个失败)0.24 s22.8 s / 10 ms12.9 GB / 53 MB0.64 / 0.950.57 / 0.98— ¹
HTML(32)1514 s0.06 s29 min ² / 8 ms8.8 GB / 21 MB0.94 / 1.000.50 / 1.000.84 / 1.00
EPUB(1)10.5 s0.02 s60.7 s / 13 ms6.8 GB / 19 MB0.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),完整布局 + 表格 + OCR22.3 s123 s(+ 67 s 模型加载)44.0 s3.6 s / 6.5 s / 1.2 s1.4 GB / 4.6 GB / 3.1 GB0.87 / 0.74 / 0.9970.28 / 0.44 / 0.940.57 / 0.58 / 0.91
PDF(18),仅文本层(--text-layer-only)22.3 s—0.69 s— / — / —— / — / 80 MB0.87 / — / 0.970.28 / — / 0.000.57 / — / 0.00
DOCX(38)6.36 s仅 flash0.59 s2355 ms / — / 15 ms179 MB / — / 41 MB0.97 / — / 1.000.82 / — / 1.000.96 / — / 1.00
PPTX(8)0.21 s(1 个失败)仅 flash0.05 s2199 ms / — / 9 ms122 MB / — / 20 MB0.79 / — / 0.970.91 / — / 1.001.00 / — / 1.00
XLSX(14)0.68 s仅 flash0.19 s978 ms / — / 14 ms140 MB / — / 55 MB0.83 / — / 0.950.77 / — / 0.98— ¹
HTML(32)0.89 s仅 flash0.10 s2015 ms / — / 10 ms157 MB / — / 21 MB0.94 / — / 1.000.81 / — / 1.000.96 / — / 1.00
EPUB(1)0.09 s仅 flash0.02 s1909 ms / — / 16 ms99 MB / — / 19 MB1.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;✅ 全部 = 每个文件均匹配):

格式文件数MarkdownJSON格式文件数MarkdownJSON
DOCX38✅ 全部✅ 全部iWork Pages1✅ 全部✅ 全部
HTML32✅ 全部31iWork Keynote5✅ 全部✅ 全部
PPTX8✅ 全部✅ 全部EBCDIC3✅ 全部✅ 全部
XLSX1413 ²13 ²JATS7✅ 全部✅ 全部
ODF7✅ 全部✅ 全部DocLang15✅ 全部✅ 全部
CSV9✅ 全部6AsciiDoc5✅ 全部✅ 全部
Markdown11✅ 全部6USPTO9✅ 全部✅ 全部
DeepSeek-OCR Markdown3✅ 全部不适用EPUB1✅ 全部✅ 全部
WebVTT4✅ 全部✅ 全部LaTeX8✅ 全部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

一个引擎,多个入口,处处使用相同的选项和输出。

你使用……使用安装
Rustdocling cratecargo add docling
shell / CI 作业docling-rs CLI,包含批处理模式发布版二进制文件 · cargo install docling-cli · ghcr.io/docling-project/docling-rs
任何支持 HTTP 的程序docling-serve,OpenAPI 3.1ghcr.io/docling-project/docling-rs-serve · cargo install docling-serve
Node.js / Bun / Electrondocling.rs,一个 N-API 插件npm i docling.rs(docling.rs-cuda)
Pythondocling-rs:docling、MarkItDown、Marker 和 MinerU 的 APIpip install docling-rs(docling-rs-cuda)
LangChain / LlamaIndexDoclingLoader(langchain-docling 的 API) · DoclingReader(llama-index-readers-docling 的 API)pip install langchain-docling-rs · pip install llama-index-readers-docling-rs
浏览器 / Tauri / PWAdocling.rs-wasm,完全在客户端运行npm i docling.rs-wasm
C、C++、C#、Go、Java、Swift、Zigdocling-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-core DoclingDocument、MarkItDown 的 API,以及 LangChain 和 AutoGen 集成。
  • C ABI — docling-ffi:为 C、C++、C#/.NET、Go、Java、Swift 和 Zig 提供一个库和一个 docling.h,每个已发布版本都包含预构建版本。

在容器中部署

镜像说明
ghcr.io/docling-project/docling-rs-serveHTTP API,模型已内置(linux/amd64、linux/arm64)
ghcr.io/docling-project/docling-rsCLI,入口点为 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 保持一致。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。