文档→知识库一条龙:Docling 接上 LlamaIndex 与 LangChain,RAG 管线 10 分钟打通
文档→知识库一条龙Docling 接上 LlamaIndex 与 LangChainRAG 管线 10 分钟打通【免费下载链接】doclingGet your documents ready for gen AI项目地址: https://gitcode.com/GitHub_Trending/do/docling做 RAG 最耗时、最劝退的环节往往不是向量库调优也不是提示词工程而是文档进得来、结构出得去。PDF 里嵌套的表格被硬生生切成文本碎片、扫描件识别出来的文字乱序、Word 里的标题层级在 Markdown 导出后荡然无存——这些脏数据直接决定了检索召回的天花板。IBM 开源的 Docling 之所以能在短时间内收获数万 Star正是因为它把文档解析这件脏活累活做成了可编程、可插拔、可入链的标准件一次解析同时产出带语义标签与空间坐标的结构化对象、无损 JSON 与规整 Markdown再通过官方加载器平滑接入 LlamaIndex、LangChain 等框架。这篇文章从源码与官方示例出发讲清楚三件事如何用 Docling 产出AI 就绪的 Markdown/JSON、加载器在两个框架里的正确接法以及一个 10 分钟可跑通的可检索知识库样例。为什么解析层决定了 RAG 的下限先看一个反直觉的事实大部分 RAG 失败不是模型不行而是分块之前文档就已经坏了。传统 PDF 文本抽取得到的是按阅读顺序打乱的 token 流表格单元与行列关系丢失标题与正文的从属关系被压平。而 Docling 的思路是先把所有格式统一翻译成一种结构化中间表示DoclingDocument再基于它做导出与分块。在仓库中docling/datamodel/document.py 承载了ConversionResult与输入校验逻辑docling/document_converter.py 则是总入口——它按格式注册了 30 余种 backendPDF、DOCX、PPTX、XLSX、HTML、EPUB、Apple Pages/Numbers/Keynote、WAV/MP3、WebVTT、Box Notes、EML/MSG、图片、LaTeX、DocLang 乃至 USPTO/JATS/XBRL 等专用 XML schema见 docling/datamodel/base_models.py 中的InputFormat枚举。PDF 走StandardPdfPipeline布局分析 表格结构识别 阅读顺序 OCROffice 类格式走SimplePipeline直接读原生 XML图片与扫描件则叠上 OCR 与可选 VLM 理解。这一统一中间表示 按格式路由的架构可以用仓库内的处理流程图直观看到DoclingDocument本身是 pydantic 模型把内容项texts、tables、pictures、key_value_items与内容结构body正文树、furniture页眉页脚、groups容器分门别类所有条目通过 JSON 指针挂接父子关系阅读顺序就是body树的遍历顺序详见 docs/concepts/docling_document.md。也就是说解析结果天然自带标题层级、表格结构、图片位置与出处信息——这些正是后面分块与向量化最值钱的元数据。一次解析Markdown / JSON 双形态导出Docling 的导出 API 非常薄核心就一句话result.document之后想导出什么形态由你选。仓库 docs/examples/minimal.py 给出了最简用法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())export_to_markdown()输出的不是裸文本而是保留标题层级、表格栅格、列表结构与代码块语义的 Markdown——这直接决定了后续MarkdownHeaderTextSplitter能否按章节切出高质量分块。需要无损保留时则走export_to_dict()可再序列化为 JSON/YAMLDoclingDocument中的坐标、出处、父子指针全部原样保留适合需要精确定位或做文档原生 grounding 的场景。批量场景下docs/examples/batch_convert.py 演示了convert_all()配合save_as_json / save_as_html / save_as_markdown / save_as_doctags等辅助方法一次导出多形态产物并显式处理SUCCESS / PARTIAL_SUCCESS / FAILURE三种转换状态docs/examples/run_with_formats.py 则展示了如何用allowed_formats白名单与format_options按格式覆盖 pipeline/backend——比如 PDF 指定StandardPdfPipeline PyPdfiumDocumentBackendDOCX 指定SimplePipeline。对文档→知识库流水线而言推荐的生产姿势是先导出无损 JSON 留档再导出 Markdown 供分块检索一次转换两处消费。分块别忘了 Docling 原生 chunker导出 Markdown 后接通用文本分割器只是玩法之一。Docling 的另一条路是直接基于DoclingDocument原生分块由 docling/chunking/init.py 导出的HybridChunker、HierarchicalChunker实现。二者的差别见 docs/concepts/chunking.mdHierarchicalChunker按文档元素逐一成块自动挂接标题、图注等上下文元数据HybridChunker在层级分块之上叠加token 感知精修——先对超限块拆分再把同标题、同图注下的过小相邻块合并merge_peers默认开启并支持repeat_table_header让跨块的表格每块都携带表头上下文。用法的关键细节是真正喂给 embedding 的是contextualize(chunk)的返回值而非chunk.text裸文本。以 docs/examples/hybrid_chunking.ipynb 为例一个关于 IBM 的条目在contextualize()后会补上所在章节标题1910s–1950s作为前缀from docling.chunking import HybridChunker chunker HybridChunker() chunk_iter chunker.chunk(dl_docdoc) for chunk in chunk_iter: embed_text chunker.contextualize(chunk) # 标题/上下文已注入这种文档结构感知 tokenizer 对齐 embedding 模型的分块方式是 Docling 在 RAG 场景里对比朴素文本切割的核心竞争力。接入 LlamaIndexDoclingReader 与两种导出路线LlamaIndex 侧由官方扩展llama-index-readers-docling与llama-index-node-parser-docling提供组件说明见 docs/integrations/llamaindex.mddocs/examples/rag_llamaindex.ipynb 给出了两条路线路线一Markdown 导出 通用解析器最轻量from llama_index.core import StorageContext, VectorStoreIndex from llama_index.core.node_parser import MarkdownNodeParser from llama_index.readers.docling import DoclingReader from llama_index.vector_stores.milvus import MilvusVectorStore reader DoclingReader() # 默认导出 Markdown node_parser MarkdownNodeParser() # 按 Markdown 标题切 node index VectorStoreIndex.from_documents( documentsreader.load_data(SOURCE), transformations[node_parser], storage_contextStorageContext.from_defaults(vector_storevector_store), embed_modelEMBED_MODEL, )路线二JSON 无损导出 DoclingNodeParser检索命中时能拿到文档级 groundingfrom llama_index.node_parser.docling import DoclingNodeParser reader DoclingReader(export_typeDoclingReader.ExportType.JSON) node_parser DoclingNodeParser() index VectorStoreIndex.from_documents( documentsreader.load_data(SOURCE), transformations[node_parser], storage_contextStorageContext.from_defaults(vector_storevector_store), embed_modelEMBED_MODEL, )注意两条路线查出来的source_nodes元数据差异路线一只有Header_2这类标题信息路线二的doc_items里则带着page_no、bbox边界框与headings数组——这就是文档原生 grounding答案不只告诉你在哪一页还精确到页内坐标。若想把 DoclingReader 混入既有目录扫描管线只需把它注册为SimpleDirectoryReader的file_extractordir_reader SimpleDirectoryReader( input_dirtmp_dir_path, file_extractor{.pdf: reader}, # PDF 交给 Docling 处理 )接入 LangChainDoclingLoader 的两种导出模式LangChain 侧对应官方扩展langchain-docling见 docs/integrations/langchain.mddocs/examples/rag_langchain.ipynb 展示了DoclingLoader的两种ExportTypeExportType.MARKDOWN每个输入文档导出为一条独立的 LangChain Document之后交给MarkdownHeaderTextSplitter自行切分ExportType.DOC_CHUNKS默认加载器内部直接调用 Docling 原生 chunker把每条 chunk 作为一条 LangChain Document 输出分块逻辑与 tokenizer 对齐。from langchain_docling import DoclingLoader from langchain_docling.loader import ExportType from docling.chunking import HybridChunker from docling_core.transforms.chunker.tokenizer.huggingface import HuggingFaceTokenizer from transformers import AutoTokenizer tokenizer HuggingFaceTokenizer( tokenizerAutoTokenizer.from_pretrained(EMBED_MODEL_ID) # 与 embedding 模型同款分词器 ) loader DoclingLoader( file_pathFILE_PATH, # 本地路径或 URL 列表 export_typeExportType.DOC_CHUNKS, chunkerHybridChunker(tokenizertokenizer), ) docs loader.load() # 每条即一个 chunk 的 LangChain Document随后无论是MarkdownHeaderTextSplitter二次切分MARKDOWN 模式还是直接把docs当作splitsDOC_CHUNKS 模式下游都是标准的 LangChain 套路。官方示例把Milvus.from_documents(...)与create_retrieval_chain(retriever, question_answer_chain)一接端到端问答就通了。10 分钟跑通一个可检索知识库的完整链路最后把两条官方路线浓缩成一个文档→知识库最小闭环。以下组合均来自仓库内可复现的官方示例LLM 可换成任意本地或远程推理端点向量库也可替换为其他 Milvus/FAISS 兼容实现# 1) 解析一次转换双形态留档 from docling.document_converter import DocumentConverter converter DocumentConverter() result converter.convert(https://arxiv.org/pdf/2408.09869) doc_json result.document.export_to_dict() # 无损 JSON供归档/调试 markdown result.document.export_to_markdown() # 结构化 Markdown供检索 # 2) 分块原生 chunker 注入文档结构上下文 from docling.chunking import HybridChunker from docling_core.transforms.chunker.tokenizer.huggingface import HuggingFaceTokenizer from transformers import AutoTokenizer chunker HybridChunker( tokenizerHuggingFaceTokenizer( tokenizerAutoTokenizer.from_pretrained(sentence-transformers/all-MiniLM-L6-v2) ) ) chunks [chunker.contextualize(c) for c in chunker.chunk(dl_docresult.document)] # 3) 入库embedding 向量存储LangChain 侧等价代码见 rag_langchain.ipynb from langchain_huggingface.embeddings import HuggingFaceEmbeddings from langchain_milvus import Milvus from langchain_core.documents import Document docs [Document(page_contentt) for t in chunks] vectorstore Milvus.from_documents( documentsdocs, embeddingHuggingFaceEmbeddings(model_namesentence-transformers/all-MiniLM-L6-v2), collection_namedocling_demo, connection_args{uri: docling.db}, # 本地轻量部署无需单独起服务 drop_oldTrue, ) # 4) 检索问答 retriever vectorstore.as_retriever(search_kwargs{k: 3})跑完这套流程后提问 Which are the main AI models in Docling?两条官方示例给出的答案都指向同一事实Docling 随包发布布局分析模型页面元素目标检测与 TableFormer表格结构识别两个模型——且命中的检索源都带着headings如 3.2 AI models与页码/坐标元数据。这就是结构化解析的价值答案可溯源到章节与版面位置而不是一段来源不明的文本碎片。小结从仓库源码与官方示例可以得出一个清晰的工程结论Docling 并不只是格式转换器而是一套把文档解析、结构化表示、感知型分块与框架集成串起来的完整管线基座。接入 LlamaIndex 时按需选 Markdown 轻量路线或 JSON 无损路线接入 LangChain 时用DoclingLoader的DOC_CHUNKS模式省去手工分块想要更高召回质量则务必使用contextualize()注入文档结构的 embedding 文本。把这四步固化下来文档→知识库从接文件到可问答确实可以在十分钟内打通——而后续要做的就是在解析质量与分块策略上持续打磨了。【免费下载链接】doclingGet your documents ready for gen AI项目地址: https://gitcode.com/GitHub_Trending/do/docling创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理与TaoToken统一Key通道

【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理与TaoToken统一Key通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 19:04:47 阅读更多 →
把 Atria Dawn 塞进 Codex CLI:config.toml 怎么写、400 报错怎么解,别再卡在 “not multimodal“

把 Atria Dawn 塞进 Codex CLI:config.toml 怎么写、400 报错怎么解,别再卡在 “not multimodal“

把 Atria Dawn 塞进 Codex CLI:config.toml 怎么写、400 报错怎么解,别再卡在 "not multimodal" 【免费下载链接】Atria-Dawn-Preview 项目地址: https://ai.gitcode.com/InternLM/Atria-Dawn-Preview Atria Dawn Preview 发布后&…

2026/10/10 19:04:47 阅读更多 →
发布三个月热度“零增长“:MiniMax Music 3 为什么没能复制 Suno 的刷屏神话?

发布三个月热度“零增长“:MiniMax Music 3 为什么没能复制 Suno 的刷屏神话?

发布三个月热度"零增长":MiniMax Music 3 为什么没能复制 Suno 的刷屏神话? 【免费下载链接】MiniMax-Music3 项目地址: https://ai.gitcode.com/MiniMax-AI/MiniMax-Music3 2025 年 9 月,MiniMax 在开源社区投下一枚重磅炸…

2026/10/10 19:04:47 阅读更多 →

最新新闻

单点工具还是全家桶:supervision 与 SAHI、ByteTrack、OpenCV 的边界之争

单点工具还是全家桶:supervision 与 SAHI、ByteTrack、OpenCV 的边界之争

单点工具还是全家桶:supervision 与 SAHI、ByteTrack、OpenCV 的边界之争 【免费下载链接】supervision We write your reusable computer vision tools. 💜 项目地址: https://gitcode.com/GitHub_Trending/su/supervision 计算机视觉开发者长期…

2026/10/10 19:50:17 阅读更多 →
考虑柔性负荷的综合能源系统低碳经济调度方法

考虑柔性负荷的综合能源系统低碳经济调度方法

考虑柔性负荷的综合能源系统低碳经济调度探索做综合能源系统调度的人,多少都有过这种体会:光伏、风电一上来,源侧的不确定性还能靠预测和备用扛一扛,真正让人头疼的其实是荷侧——负荷曲线硬邦邦地摆在那儿,燃气轮机跟…

2026/10/10 19:50:17 阅读更多 →
CNN人脸识别从原理到实战:特征向量提取与训练避坑指南

CNN人脸识别从原理到实战:特征向量提取与训练避坑指南

简介:提供一套基于CNN卷积神经网络的人脸识别完整实现代码,源自深度学习教程中的经典示例,适合正在学习计算机视觉与深度学习的开发者、研究人员及高校学生。资源采用Python编写,包含训练与使用两个核心脚本,可直接运行…

2026/10/10 19:50:17 阅读更多 →
线程同步进阶:条件变量、生产者消费者模型与线程池实战

线程同步进阶:条件变量、生产者消费者模型与线程池实战

我在最早写多线程程序的时候,曾经特别想当然地以为「给共享变量加上互斥锁,程序就安全了」。结果联调测试的时候,数据确实不乱了,但业务节奏全乱了:某个线程等的数据明明已经被另一个线程准备好了,它却还在…

2026/10/10 19:50:17 阅读更多 →
官方演示 vs 社区复刻:同一个 VoiceBox,谁更值得装进项目

官方演示 vs 社区复刻:同一个 VoiceBox,谁更值得装进项目

官方演示 vs 社区复刻:同一个 VoiceBox,谁更值得装进项目 【免费下载链接】voicebox The open-source AI voice studio. Clone, dictate, create. 项目地址: https://gitcode.com/GitHub_Trending/voicebox1/voicebox "VoiceBox"这个名…

2026/10/10 19:49:17 阅读更多 →
风光火储一次调频与二次调频Simulink仿真建模详解

风光火储一次调频与二次调频Simulink仿真建模详解

收到不少做电气仿真的人私信,问得最多的就是风光火储一次调频和二次调频的仿真模型该怎么搭。这确实是块硬骨头——题目看起来挺简单,可是真要在Simulink里把风机、储能、火电、水电、电动汽车这几个参与方放在同一个频率控制框架下,让一次调…

2026/10/10 19:49:17 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →