MinerU 是上海人工智能实验室开源的一站式文档解析工具,基于视觉语言模型(VLM)架构,能够将 PDF、图片、Word、PPT、Excel 等任意格式的文档转换为结构化的 Markdown 输出。最新版本 MinerU2.5-Pro 仅用 **1.2B 参数**即在 OmniDocBench v1.6 基准上取得 **95.69 分**,大幅超越 GPT-4o、Qwen2.5-VL-72B 等数十倍参数规模的模型,稳居当前文档解析榜首。
MinerU 的核心能力包括:
MinerU 生态包含六大模块:CLI 命令行工具、SDK 多语言开发包、API 云端服务、RAG 知识检索、MCP 协议支持,以及 SKILL 跨语言知识 API。其中 RAG 模块与主流 LLM 框架深度集成,LangChain 正是其核心合作伙伴。
LangChain 是构建 LLM 应用最流行的开源框架之一,全球安装量超过 2500 万次。它提供标准化的接口和组件,让开发者能够灵活组合 LLM、向量存储和数据源,快速搭建 RAG(检索增强生成)系统。
langchain-mineru 是 MinerU 官方维护的 LangChain 文档加载器(Document Loader)。它将 MinerU 的高精度文档解析能力桥接到 LangChain 生态——只需一行代码,即可将 PDF、DOC、PPT、图片等复杂文档转换为 LangChain 的 Document 对象,并无缝衔接后续的 Text Splitter、Embedding 和 Vector Store 流程。
**核心优势**:
lazy\_load 流式加载接口pip install langchain-minerupython -c "from langchain\_mineru import MinerULoader; print('OK')"from langchain\_mineru import MinerULoader
loader = MinerULoader(source="demo.pdf")
docs = loader.load()
print(docs[0].page\_content[:500])
print(docs[0].metadata)默认 mode="flash",无需 API Token,直接可用。
| 特性 | Flash(默认) | Precision |
|:---|:---|:---|
| 身份认证 | 免登录 | 需 API Token |
| 速度 | 极速 | 标准 |
| 文件大小上限 | 10 MB | 200 MB |
| 页数上限 | 20 页 | 600 页 |
| 支持格式 | PDF、图片、DOCX、PPTX、XLS、XLSX | PDF、图片、DOC、DOCX、PPT、PPTX、HTML |
注意:当前集成输出格式为 Markdown。如需图片/JSON/DOCX/HTML/LaTeX 等多元输出,请使用 MinerU Python SDK。
Token 可在 MinerU API 管理平台 免费申请。提供两种 Token 配置方式:
**方式一:环境变量(推荐)**
export MINERU\_TOKEN="your-token"之后初始化 Loader 时无需传入 token 参数:
loader = MinerULoader(source="demo.pdf", mode="precision")**方式二:构造时显式传入**
loader = MinerULoader(source="demo.pdf", mode="precision", token="your-token")当 split\_pages=True 时,每页 PDF 解析为一个独立的 Document,适合需要 page-level 检索粒度的 RAG 场景:
from langchain\_mineru import MinerULoader
loader = MinerULoader(
source="/path/to/demo.pdf",
split\_pages=True,
)
docs = loader.load()
for doc in docs:
print(f"第 {doc.metadata['page']} 页: {doc.page\_content[:200]}")from langchain\_mineru import MinerULoader
loader = MinerULoader(
source="/path/to/demo.pdf",
mode="precision",
token="your-token",
pages="1-5", # 只解析 1-5 页
split\_pages=True,
language="en",
timeout=300,
)
docs = loader.load()
for doc in docs:
print(f"Page {doc.metadata['page']}: {doc.page\_content[:200]}")from langchain\_mineru import MinerULoader
loader = MinerULoader(
source=[
"/path/to/demo\_a.pdf",
"/path/to/demo\_b.pdf",
"https://cdn-mineru.openxlab.org.cn/demo/example.pdf",
],
)
docs = loader.load()
for doc in docs:
print(doc.metadata["source"], "-", doc.page\_content[:100])from langchain\_mineru import MinerULoader
from langchain\_text\_splitters import RecursiveCharacterTextSplitter
from langchain\_openai import OpenAIEmbeddings
from langchain\_community.vectorstores import FAISS
# 1. 加载文档
loader = MinerULoader(source="demo.pdf", mode="flash")
docs = loader.load()
# 2. 文本切分
splitter = RecursiveCharacterTextSplitter(chunk\_size=1200, chunk\_overlap=200)
chunks = splitter.split\_documents(docs)
# 3. 向量存储
vs = FAISS.from\_documents(chunks, OpenAIEmbeddings())
# 4. 检索
results = vs.similarity\_search("这个文档的核心配置步骤是什么?", k=3)
for r in results:
print(r.page\_content[:200])import os
from langchain\_mineru import MinerULoader
from langchain\_text\_splitters import RecursiveCharacterTextSplitter
from langchain\_openai import OpenAIEmbeddings
from langchain\_community.vectorstores import FAISS
os.environ["MINERU\_TOKEN"] = "your-token" # 或在初始化时传入 token 参数
# 1. 加载文档
loader = MinerULoader(
source="manual.pdf",
mode="precision",
)
docs = loader.load()
# 2. 文本切分
splitter = RecursiveCharacterTextSplitter(chunk\_size=1200, chunk\_overlap=200)
chunks = splitter.split\_documents(docs)
# 3. 向量存储
vs = FAISS.from\_documents(chunks, OpenAIEmbeddings())
# 4. 检索
results = vs.similarity\_search("这个文档怎么配置 OCR?", k=3)
for r in results:
print(r.page\_content[:200])| 参数 | 类型 | 默认值 | 说明 |
|:---|:---|:---|:---|
| source | str \| list[str] | 必填 | 本地文件路径或 URL,支持单个或列表 |
| mode | str | "flash" | 解析模式:"flash"(快速免 Token)或 "precision"(精准需 Token) |
| token | str \| None | None | MinerU API Token。precision 模式必填,也可通过 MINERU\_TOKEN 环境变量提供 |
| language | str | "ch" | 文档语言代码,如 "ch"(中文)、"en"(英文) |
| pages | str \| None | None | 页码范围,如 "1-5",仅对 PDF 有效 |
| timeout | int | 1200 | 单文件最大等待时间(秒) |
| split\_pages | bool | False | PDF 是否按页拆分为独立 Document |
| ocr | bool | False | 是否强制启用 OCR |
| formula | bool | True | 是否启用公式识别 |
| table | bool | True | 是否启用表格识别 |
每个返回的 Document 包含以下 metadata 字段:
{
"source": "report.pdf", # 原始输入路径或 URL
"loader": "mineru",
"output\_format": "markdown",
"mode": "flash", # flash / precision
"language": "ch",
"pages": None,
"split\_pages": True,
"filename": "report.pdf", # MinerU 返回的文件名
"page": 1, # 仅 split\_pages=True 时存在
"page\_source": "report.pdf", # 仅 split\_pages=True 时存在
}| 模式 | 支持格式 |
|:---|:---|
| Precision | PDF、图片、DOC、DOCX、PPT、PPTX、HTML |
| Flash | PDF、图片、DOCX、PPTX、XLS、XLSX |
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。