Docling 实测评估:把 PDF、表格和音频统一成一种文档模型,代价是什么
为 gen AI 准备好您的文档。转换文档 (CLI) 这会在当前目录中生成一个包含结构化文档内容的 .md 文件。
秒懂
- 它是什么?
- Docling 是一个把 PDF、DOCX、表格、音频甚至视频解析成统一 DoclingDocument 结构的 Python 库。本文基于其 README 与文档,分析它的工作机制、CLI 与 Python 用法、适用边界,以及它和传统解析器的本质差异。
- 适合谁用?
- Docling 适合需要把多种异构文档(尤其是扫描 PDF、表格、音频)统一成一种结构化表示,并希望直接对接 LangChain、LlamaIndex 等 AI 框架的团队。它不适合只需要简单文本提取、对模型下载和本地推理资源敏感、或要求完全离线且无模型依赖的场景。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库在最近一天内有新的提交。
- 用什么语言写的?
- 主要是 Python(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决的是文档格式碎片化,而不是简单的文本抽取
Docling 的目标很明确:把 PDF、DOCX、PPTX、XLSX、HTML、EPUB、Apple Pages、音频、视频等格式解析成一种统一的 DoclingDocument 表示。这不是一个普通的文本提取器。它声称能理解 PDF 的页面布局、阅读顺序、表格结构、代码块、公式,甚至图像分类。对音频和视频,它用自动语音识别模型生成转录文本,并抽取代表性关键帧。这个定位决定了它的使用场景:为生成式 AI 应用准备结构化输入,而不是为全文搜索做简单抓取。它面向的是需要把多种文档塞进一个统一管道的人,比如构建 RAG 系统、训练多模态模型或做文档归档的工程师。
统一 DoclingDocument 是核心,但导出格式才是真正的接口
Docling 的中间表示是 DoclingDocument,一个统一的、表达力强的文档模型。所有解析结果先进入这个结构,再导出为 Markdown、HTML、WebVTT、DocLang 或无损 JSON。README 给出的 Python 示例很直接:DocumentConverter 接受本地路径或 URL,convert 方法返回结果对象,然后调用 export_to_markdown 输出字符串。这个设计意味着下游消费的是导出格式,而不是直接操作内部节点。对开发者来说,JSON 导出是保真度最高的选择,因为它声称是无损的。Markdown 导出适合快速预览,但会丢失部分布局信息。DoclingDocument 本身是抽象层,它的存在让不同格式的解析结果有了统一的访问方式,但代价是增加了一层概念,学习曲线比直接用 pdfplumber 或 PyMuPDF 要陡。
CLI 与 Python 接口:从一行命令到精细控制
安装很简单:pip install docling,要求 Python 3.10 或更高,支持 macOS、Linux、Windows 的 x86_64 和 arm64。CLI 用法是 docling https://arxiv.org/pdf/2206.01062,这会生成一个 .md 文件到当前目录。如果你想用视觉语言模型,可以加 --pipeline vlm --vlm-model granite_docling。Python 用法更推荐,因为可以控制转换过程。README 中的最小示例只有三行:创建 DocumentConverter,调用 convert,然后导出 Markdown。文档还提到更高级的用法和配置选项,但具体细节需要查阅官方文档。一个值得注意的点是,CLI 默认输出 Markdown,这意味着对于需要结构化 JSON 的场景,你必须转向 Python API 或显式指定导出格式。
模型与本地执行:隐私是卖点,但模型下载是隐形成本
README 强调本地执行能力,适用于敏感数据和气隙环境。这听起来很理想,但实际代价是:Docling 依赖多种模型,比如视觉语言模型 GraniteDocling,以及 OCR 模型。这些模型需要下载,体积不小,推理时消耗 CPU 或 GPU。本地执行意味着数据不出机器,但你需要管理模型权重和运行环境。气隙环境(无互联网)下,你得预先下载所有模型并缓存。这不是一个开箱即用的纯 Python 库,它绑定了深度学习组件。所以,如果你的文档都是干净的数字化 PDF,不需要 OCR,也不涉及扫描件,那么 Docling 的模型依赖就是多余的负担。反过来,如果你处理大量扫描件,OCR 支持就是核心价值,但你要接受模型推理带来的延迟和资源占用。
支持的格式范围广,但每个格式的解析深度不同
Docling 声称支持 PDF、DOCX、PPTX、XLSX、HTML、EPUB、Apple Pages、WAV、MP3、WebVTT、Box Notes、EML、MSG、PNG、TIFF、JPEG、LaTeX、DocLang、纯文本,以及最近的 ODF、XBRL、视频文件。这个列表很诱人,但 README 没有说明每个格式的解析质量。比如,PDF 的表格结构理解是宣传重点,但 DOCX 的解析是否同样深入?邮件格式 EML 和 MSG 的解析是否包含附件?视频解析是转录文本加关键帧,这适合内容检索,但不适合精确的逐帧分析。不同格式之间的解析深度不一致,这是多格式解析器的通病。Docling 用统一模型掩盖了这种差异,但下游应用如果依赖特定格式的细节,就需要单独验证。
与 LangChain 等框架的集成是双刃剑
Docling 提供与 LangChain、LlamaIndex、Crew AI、Haystack 的原生集成,以及一个 MCP 服务器和 API 服务器(docling-serve)。这意味着你可以把 Docling 作为文档处理步骤接入现有的 AI 流水线。但集成也带来版本耦合风险。Docling 的发布频率很高,2026 年 8 月 28 日发布 v2.123.1,26 日发布 v2.123.0,25 日发布 v2.122.0,一周三个版本。这种节奏意味着 API 可能频繁变化,而框架集成层可能滞后。如果你依赖 LangChain 的某个版本,Docling 的升级可能破坏兼容性。反过来,Docling 的快速迭代也说明项目活跃,bug 修复和新功能(如视频解析)会及时加入。
真正的替代方案是格式专用的解析器,而不是另一个多格式库
与 Docling 最直接的对比不是另一个全能解析器,而是针对单一格式的工具。比如 PDF 场景,PyMuPDF 或 pdfplumber 提供更细粒度的页面控制,且不依赖深度学习模型。对于 DOCX,python-docx 是更轻量的选择。这些工具的输出是原始结构,需要你自己拼装成统一的文档模型。Docling 的价值在于它替你做了这个拼装工作,并提供了统一的导出格式。但如果你只需要处理一种格式,使用专用库会更快、更可控,且没有模型下载的负担。另一个差异是:Docling 的模型驱动解析(如 VLM)能理解复杂布局,而传统规则库做不到。这是它的核心优势,也是它资源消耗高的原因。
许可证与维护成本:MIT 代码,但模型许可证要单独看
Docling 代码库采用 MIT 许可证,这是宽松的,适合商业集成。但 README 明确说:单个模型的使用需参考原始包中的模型许可证。这意味着你用了 MIT 的代码,但下载的 GraniteDocling 或 OCR 模型可能有自己的条款。这是常见的陷阱,必须在部署前核查。维护成本方面,Docling 是 LF AI & Data 基金会项目,由 IBM Research Zurich 发起,有持续的开发投入。高频发布既是优点也是成本:你需要跟踪更新,测试新版本是否破坏你的流水线。文档提到 Python 3.9 支持在 2.70.0 被放弃,这提醒你升级到 3.10+ 是硬性要求,否则无法安装新版本。总体而言,Docling 不是一个静态库,它处于快速演进中,适合愿意跟进上游变化的团队。
编辑结论
Docling 适合需要把多种异构文档(尤其是扫描 PDF、表格、音频)统一成一种结构化表示,并希望直接对接 LangChain、LlamaIndex 等 AI 框架的团队。它不适合只需要简单文本提取、对模型下载和本地推理资源敏感、或要求完全离线且无模型依赖的场景。采用前应先验证三件事:确认你的 Python 版本不低于 3.10,因为 2.70.0 起放弃 3.9;用你自己的 PDF 测试表格结构和阅读顺序是否满足下游需求;检查所依赖的模型(如 GraniteDocling)各自的许可证,因为 MIT 只覆盖代码本身。Docling 的维护节奏很快,2026 年 8 月一周内发布三个版本,这意味着 API 可能频繁变动,锁定版本并定期阅读更新日志是必要的。
社区笔记