MinerU + LangChain 实战:从 PDF 解析到 AI 问答全流程

张开发
2026/4/21 1:22:14 15 分钟阅读

分享文章

MinerU + LangChain 实战:从 PDF 解析到 AI 问答全流程
适用场景RAG 系统构建、文档智能问答、大模型语料预处理、企业知识库搭建技术栈MinerU v3.x LangChain ChromaDB OpenAI难度⭐⭐☆ 中级一、问题RAG 系统的隐形瓶颈很多人搭 RAG 系统时把大量精力放在向量检索调优、prompt 工程上却忽略了一个更基础的问题文档解析质量。真实场景里待处理的文档往往是这样的学术论文双栏排版 大量数学公式 嵌套表格财务报告复杂表格 图表 多级标题技术手册代码块 混排图文 交叉引用用 LangChain 自带的PyPDFLoader读这类文档常见的结果是表格内容被读成乱序文字片段 公式变成f(x) ∫...这类破碎字符 双栏文档的阅读顺序全乱 扫描件直接变成空内容向量化的是垃圾检索到的也是垃圾。准确率低不是检索模型的问题是数据管道在最上游就断了。二、MinerU 是什么基本信息机构上海人工智能实验室 OpenDataLab开源协议AGPL-3.0GitHubgithub.com/opendatalab/MinerUGitHub Stars60k截至 2026 年 4 月当前版本v3.x / MinerU2.5 模型背景MinerU 起源于 InternLM 大模型预训练项目。在构建训练语料时团队发现学术论文、技术文档等 PDF 的解析质量直接影响预训练数据质量因此专门开发了这套工具后来作为独立项目开源。三、技术架构为什么比传统方案准确传统 PDF 解析工具PyMuPDF、PDFMiner、Tesseract的路径是PDF → 提取文字流 → 拼接 → 输出文字提取是对的但结构关系全丢了——哪个文字属于哪个表格哪行是标题哪段是正文工具不知道。MinerU 的路径不同关键在 VLM 后端MinerU2.5 是 1.2B 参数的视觉语言模型在OmniDocBench基准测试上的准确率超过多个 72B 级别的通用大模型。小参数量 专项训练在文档解析这个具体任务上做到了精准。四、支持能力内容类型输出格式说明普通文本Markdown保留标题层级、段落、列表、阅读顺序表格HTML结构完整支持跨页表格合并数学公式LaTeX行内 / 块级公式均支持图片保存链接提取图片文件 生成文字描述扫描件 / 图片 PDFMarkdown自动走 OCR支持 109 种语言旋转版面Markdown支持最高 270° 旋转表格识别支持输入格式PDF、Word (.docx)、PowerPoint (.pptx)、图片 (JPG/PNG)、网页五、快速开始5.1 申请 Token免费云端 API 无需本地部署Token 在官方平台免费申请mineru.net/apiManage/token申请后设置环境变量exportMINERU_TOKENyour-token-here单文件限制200MB / 200 页。批量处理最多 200 个文件/次。支持异步任务轮询大文件不阻塞主流程。5.2 安装依赖pipinstalllangchain-mineru langchain-openai langchain-community chromadb验证安装python-cfrom langchain_mineru import MinerULoader; print(OK)六、完整代码PDF → LangChain 问答importos from langchain_mineruimportMinerULoader from langchain.text_splitterimportMarkdownHeaderTextSplitter from langchain_community.vectorstoresimportChroma from langchain_openaiimportOpenAIEmbeddings, ChatOpenAI from langchain.chainsimportRetrievalQA from langchain.schemaimportDocument# ── Step 1: 文档解析 ──────────────────────────────────────# modeprecision → VLM 精度模式需 Token精度高# modespeed → pipeline 模式速度快适合简单文档# Token 自动从环境变量 MINERU_TOKEN 读取无需显式传入loaderMinerULoader(sourceyour_document.pdf,modeprecision)docsloader.load()print(f[1/4] 解析完成共 {len(docs)} 个文档块)# ── Step 2: 分块 ──────────────────────────────────────────# MinerU 输出 Markdown 标题层级完整按标题切块语义更好# 比按字符数切块能保留完整的论证段落splitterMarkdownHeaderTextSplitter(headers_to_split_on[(#,section),(##,subsection),(###,subsubsection),])chunks[]fordocindocs: splitssplitter.split_text(doc.page_content)forsinsplits: chunks.append(Document(page_contents.page_content,metadata{**doc.metadata, **s.metadata}))print(f[2/4] 分块完成共 {len(chunks)} 块)# ── Step 3: 向量化 持久化存储 ───────────────────────────embeddingsOpenAIEmbeddings()# 可替换为本地 embedding 模型vectorstoreChroma.from_documents(documentschunks,embeddingembeddings,persist_directory./chroma_db# 持久化下次直接加载)print(f[3/4] 向量库构建完成)# ── Step 4: 构建问答链 ────────────────────────────────────llmChatOpenAI(modelgpt-4o,temperature0)qa_chainRetrievalQA.from_chain_type(llmllm,chain_typestuff,retrievervectorstore.as_retriever(search_typemmr,# MMR 去重避免检索重复片段search_kwargs{k:6,fetch_k:20}),return_source_documentsTrue)print(f[4/4] 问答链就绪\n)# ── Step 5: 测试问答 ──────────────────────────────────────questions[这份文档的核心内容是什么,文档中提到了哪些关键数据或结论,有哪些值得注意的限制条件]forqinquestions: resultqa_chain({query:q})print(fQ: {q})print(fA: {result[result]})sources[d.metadata.get(source,unknown)fordinresult[source_documents][:2]]print(f来源章节: {sources}\n{-*60})七、MinerU 生态产品形态产品链接说明在线 Demomineru.net/OpenSourceTools/Extractor文档/网页解析在线体验无需安装在线 API 文档mineru.net/apiManage/docsRESTful API支持文档/网页解析Token 免费申请桌面客户端mineru.net/client免费桌面应用支持 Windows / macOS / LinuxHugging Face Demohuggingface.co/spaces/opendatalab/MinerU无需安装在线试用完整功能SDK# Pythonpipinstallmineru-open-sdk# Gogo get github.com/opendatalab/MinerU-Ecosystem/sdk/golatest# TypeScript / Node.jsnpminstallmineru-open-sdkSDK 仓库github.com/opendatalab/MinerU-EcosystemAI 框架集成集成组件安装 / 链接说明LangChainpip install langchain-mineru官方 Document Loader接入 LangChain RAG 流程LlamaIndexpip install llama-index-readers-mineru官方 Reader接入 LlamaIndex 知识库索引MCP Servernpm install mineru-mcp在 Claude / Cursor 中直接调用 MinerU 解析n8n 节点npm install n8n-nodes-mineru在 n8n 自动化工作流中集成文档解析能力低代码 / 应用平台集成平台链接说明Difymarketplace.dify.ai/plugins/langgenius/mineru官方插件文档检索与增强生成Cozecoze.cn/store/plugin/7527957359730360354官方插件在 Coze 平台进行文档解析FastGPTopendatalab.github.io/.../FastGPT在 FastGPT 中集成 MinerU提升信息抽取能力RagFlowopendatalab.github.io/.../RagFlow在 RagFlow 中使用 MinerU 进行文档解析和数据结构化Cherry Studioopendatalab.github.io/.../Cherry_StudioCherry Studio 集成提供文档处理选项八、相关链接GitHubgithub.com/opendatalab/MinerUToken 申请免费mineru.net/apiManage/token官方生态仓库github.com/opendatalab/MinerU-Ecosystem在线体验mineru.net/OpenSourceTools/ExtractorOmniDocBench 评测github.com/opendatalab/OmniDocBench版本说明本文基于 MinerU v3.x、langchain-mineru 最新版本编写。Token 免费申请策略和 API 限额以官方文档为准。

更多文章