news 2026/8/30 11:10:48

Docling 文档解析:让 200 份 PDF 变 RAG 就绪只需 3 行代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docling 文档解析:让 200 份 PDF 变 RAG 就绪只需 3 行代码

Docling 文档解析:让 200 份 PDF 变 RAG 就绪只需 3 行代码

【免费下载链接】doclingGet your documents ready for gen AI项目地址: https://gitcode.com/GitHub_Trending/do/docling

当 200 份 PDF 要喂进 RAG,先确认 Docling 管哪一段

你的知识库里有 200 份 PDF——一半是原生文本,一半是扫描件,里面还有合并单元格、公式和图片。如果只想要能塞进向量库的文本,纯文本抽取工具不够用:表格被打散、阅读顺序丢失、结构全平铺。Docling 文档解析做的事,就是把 PDF、DOCX、HTML 甚至音频解析成统一的 DoclingDocument,再从这一份中间表示导出 Markdown、无损 JSON 或 RAG 分块,全程本地运行,文件不出机器。

适合不适合
需要保留结构的 PDF/Office/图像解析只想要无结构原文(有更轻的工具)
本地构建 RAG 语料、数据不能出内网在线实时 OCR 服务(这是本地批处理工具)
需要分块且带标题/页码元数据训练自研解析模型(模型可换不可训)

一条安装命令加 3 行代码,跑通第一次 PDF 转 Markdown

执行pip install docling装完;首次运行会自动下载版面与表格识别模型,所以第一次明显更慢,之后都快了。然后只需这几行:

from docling.document_converter import DocumentConverter source = "tests/data/pdf/sources/2206.01062.pdf" # 换成你自己的文件路径 converter = DocumentConverter() result = converter.convert(source) # 解析一次,得到统一中间表示 print(result.document.export_to_markdown()[:500]) # 立刻看到带标题层级的 Markdown

复制运行后,终端里会看到##开头的标题层级、表格行和图片占位——说明版面模型已经把页面上"哪块是标题、哪块是正文、哪块是表格"分好了,而不是按坐标顺序把字糊在一起。不写 Python 也行:docling convert report.pdf会在当前目录直接产出.md

DoclingDocument:解析一次,导出 Markdown、JSON 和 RAG 分块

Docling 和纯 OCR 工具的差异就藏在这个中间表示里。输入到输出的链路是:后端解析(docling-parse 抽取 PDF 文本层)→ 版面检测(标题/正文/表格/图片的边界框)→ 表格结构识别(还原行列网格)→ OCR 兜底(位图区域补文字)→ 按阅读顺序拼成一棵树。

第一个值得深挖的能力是"一份表示、多种导出"。导出的 JSON 不是文本转储,页码、边界框、表格单元格都在里面,适合存档和二次开发;同一份解析结果给人看的 Markdown 和给程序用的 JSON 可以各取所需。

# 同一份解析结果按用途导出,解析只做一次 result = converter.convert("report.pdf") result.document.save_as_markdown("report.md") # 给 RAG 或人读 result.document.save_as_markdown("report.txt", strict_text=True) # 纯文本,去掉全部标记 result.document.save_as_json("report.json") # 无损存档,含页码和坐标

第二个能力是理解结构的 RAG 分块。按字数切 Markdown 迟早把表格和列表切碎;HybridChunker 直接对 DoclingDocument 分块:先按文档层级切,再用你 embedding 模型的 tokenizer 校准长度——超长的拆、过短的合并,表格跨块时自动重复表头,行含义不丢。

from docling.chunking import HybridChunker # tokenizer 必须和 embedding 模型对齐,分块长度才有意义 chunker = HybridChunker( max_tokens=512, tokenizer="sentence-transformers/all-MiniLM-L6-v2", ) for chunk in chunker.chunk(dl_doc=result.document): # contextualize 会补上标题路径等上下文,输出可直接入向量库 print(chunker.contextualize(chunk)[:80])

不想写 Python 的话,docling convert --to chunks report.pdf直接出 JSONL,--chunks-type可在 hybrid 和 hierarchical 间切换。默认配置和常见调优的差异:

配置默认值调优预期收益
--num-threads4内存紧张时降 2批处理不再 OOM
--table-modeaccuratefast速度优先场景提速,精度略降
--ocr-modedefaultfull_page扫描件识别更完整
--page-batch-size42峰值内存下降
chunk max_tokens512(以官方文档为准)对齐 embedding 模型窗口分块贴合检索模型

高频报错速查:我们当时也踩过的 5 个坑

  • 现象:首次运行挂很久甚至超时。原因:在自动下载模型权重。解决:docling convert --artifacts-path ./models report.pdf,把模型指到预下载目录,之后秒级启动。
  • 现象:扫描版 PDF 出来的 Markdown 是空的。原因:页面没有文本层,默认 OCR 只处理位图区域。解决:docling convert --ocr-mode full_page scan.pdf
  • 现象:表格合并单元格识别错乱。原因:默认表格模型对这种版面不敏感。解决:docling convert --table-structure-engine docling_tableformer_v2 report.pdf
  • 现象:.doc.xls等老 Office 格式解析失败。原因:97-2004 的旧二进制格式需要 LibreOffice 中转。解决:装系统的 libreoffice 包即可。
  • 现象:HybridChunker 报 "Token indices sequence length" 警告。原因:模型没问题,这是已知的误报(官方 FAQ 确认过),可以无视。

接下来往哪走:分块调优、VLM 管道和更多格式

  • 想系统调分块策略,看 docs/concepts/chunking.md 和可运行的 docs/examples/hybrid_chunking.ipynb,源码在 docling/chunking/。
  • 想对复杂版面要更高精度,换 VLM 管道:docling convert --pipeline vlm --vlm-model smoldocling report.pdf,可选模型清单见 docs/usage/vision_models.md。
  • 手上是 USPTO 专利 XML、XBRL 财报这类特殊格式,查 docs/usage/supported_formats.md,仓库里每种格式都有独立 backend。

一句话定位:Docling 是把异构文档变成生成式 AI 可用结构数据的本地预处理层——解析一次,处处导出。

【免费下载链接】doclingGet your documents ready for gen AI项目地址: https://gitcode.com/GitHub_Trending/do/docling

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 11:06:51

旅行者1号FDS模拟器:探秘老式航天计算机的指令级仿真

旅行者 1 号上的 FDS 计算机模拟器,听起来像是一小撮航天爱好者的自嗨,但真正上手以后你会发现,它比跑一个大模型或者调一个视频渲染管线更能逼你理解“计算机到底是怎么工作的”。FDS 的全称是 Flight Data System,中文通常叫飞行…

作者头像 李华
网站建设 2026/8/30 11:06:46

S2-LP驱动外部PA:从14dBm到27dBm的射频设计实战

做无线数传项目时,S2-LP这颗sub-1GHz收发器用得挺多。它的优点大家都清楚:功耗低、协议栈灵活、灵敏度也不错,但有一个限制很现实——内置PA的输出能力上限不高,典型配置下也就14dBm上下。LAT1385这份应用笔记,讲的就是…

作者头像 李华
网站建设 2026/8/30 11:06:38

vLLM的C++实现:从PagedAttention到KV Cache管理实战

最近在整理大模型推理相关的内容时,很多朋友都问过同一个问题:“vLLM 有 C 版本吗?我看它底层好像用到了很多 C,能不能直接用 C 写一个?”这个问题其实藏着一个非常关键的技术认知:vLLM 表面上是一个 Pytho…

作者头像 李华
网站建设 2026/8/30 11:04:41

K3I-Core:从内核隔离到硬件级否决开关的安全架构解析

安全团队往往有一种错觉:把权限收得足够紧,系统就足够安全。但真正经历过内核级攻击的人会告诉你,用户态的权限控制只是第一道墙,墙后面还有一层更关键的东西——即使攻击者已经拿到 root 权限,甚至已经坐在内核态里&a…

作者头像 李华
网站建设 2026/8/30 11:03:27

大厂AI工程师被裁背后:可迁移的AI工程化能力才是护城河

“在亚马逊做 AI,然后被裁员。”这句标题在 2024 到 2025 年的大模型行业里,几乎成了一种时代样本。它之所以能引起共鸣,不是因为它讲述了一个人的遭遇,而是因为它把一个很残酷的事实摆到了所有 AI 工程师面前: 你服务…

作者头像 李华
网站建设 2026/8/30 11:01:44

在 Docker 容器中运行 Windows 完整指南:从零部署到调优

在 Docker 容器中运行 Windows 完整指南:从零部署到调优 【免费下载链接】windows Windows inside a Docker container. 项目地址: https://gitcode.com/GitHub_Trending/wi/windows 想在测试或兼容性场景里用 Windows,却不想再装一套虚拟化平台&…

作者头像 李华