乐于分享
好东西不私藏

微软开源的文档转 Markdown 瑞士军刀 —— 一行命令把 PDF、Word、PPT、Excel、网页、音频、YouTube 全转成 LLM 友好的结构化 Markdown

微软开源的文档转 Markdown 瑞士军刀 —— 一行命令把 PDF、Word、PPT、Excel、网页、音频、YouTube 全转成 LLM 友好的结构化 Markdown

微软开源的文档转 Markdown 瑞士军刀 —— 一行命令把 PDF、Word、PPT、Excel、网页、音频、YouTube 全转成 LLM 友好的结构化 Markdown。135K Star,MIT 协议,零成本运行。

microsoftpythonMITmarkdownLLMRAGCLI

/ 概览

Stars

135,000

今日 +2,798 · Trending #2

Forks

9,200

社区活跃度极高

Language

Python

99.7% · v0.1.6

Open Issues

389

391 Open PRs · 309 commits

License

MIT

完全开源 · 可商用

Creator

Microsoft

AutoGen Team 出品

// 为什么需要它

先聊个真实的场景。我每天跑 GitHub AI 日报,素材来源千奇百怪:有的项目只有 README、有的是 PDF 论文、有的是 Word 技术报告、有的是网页博客、有的还带 YouTube 讲解视频。把这些东西全扒下来喂给 AI 做分析——光预处理就能耗掉一个上午。

做过 RAG 的人都知道这个痛点:要把非结构化文档塞进向量数据库,第一步永远是「转成纯文本」。这一步看起来简单,实际上鬼故事很多:PDF 转出来的文字顺序是乱的、Word 的表格被拆成了段落、Excel 公式全丢、PPT 的图片描述靠猜。

微软 AutoGen 团队搞的这个 markitdown,解决的就是这件事——而且解决的思路很聪明:不是生硬地把文档抽成 plain text,而是保留结构转成 Markdown。标题还是标题,表格还是表格,链接还是链接。LLM 天生就吃 Markdown 吃得很好,token 利用率也比 plain text 高得多。

“While the output is often reasonably readable, it is primarily intended for text analysis tools, not high-fidelity human-facing document conversion.” —— 项目 README 原话。不是给你做精美排版的,是给 AI 当饲料的。这个定位非常精准。

// 核心能力

markitdown 能处理的格式,按类别列一下:

类别
格式
原理
文档
PDF、Word(.docx)、PowerPoint(.pptx)、Epub
格式原生解析 + 可选 LLM 图片描述
电子表格
Excel(.xlsx, .xls)
OpenXML 解析,保留表格结构
图片
图片文件(含 EXIF 元数据 + OCR)
基础元数据提取,OCR 通过插件扩展
音频
WAV / MP3
EXIF 元数据 + 语音转录
网页
HTML
DOM 解析转 Markdown
数据
CSV、JSON、XML
结构化转表格化 Markdown
压缩包
ZIP
递归遍历,逐个文件转换
在线
YouTube URL
字幕转录提取

可以看到覆盖范围相当广——从办公文档到多媒体,从本地文件到远程 URL,基本把「需要喂给 LLM 的东西」一网打尽了。

对了,还支持插件系统。默认提供了 markitdown-ocr 插件,能调 LLM Vision 从嵌入图片里扒文本。第三方插件在 GitHub 搜 #markitdown-plugin 标签就能找到。

// 快速上手

安装

一行搞定:

# 安装全部可选依赖(推荐)pip install 'markitdown[all]'# 或者按需安装pip install 'markitdown[pdf, docx, pptx]'

前置要求:Python 3.10+。建议用 venv 隔离环境。

命令行用法

# 基本转换,输出到终端markitdown path-to-file.pdf# 指定输出文件markitdown path-to-file.pdf -o document.md# 管道输入cat path-to-file.pdf | markitdown
# 列出已安装的插件markitdown --list-plugins

Python API

frommarkitdownimportMarkItDown
# 基础用法md = MarkItDown()result = md.convert("test.xlsx")print(result.text_content)
# 配合 LLM 给 PPT 图片生成描述fromopenaiimportOpenAI
client = OpenAI()md = MarkItDown(llm_client=client, llm_model="gpt-4o")result = md.convert("example.jpg")print(result.text_content)

// 架构设计

markitdown 的架构其实不复杂,核心思路是格式检测 → 路由到对应转换器 → 输出结构化 Markdown

它是个 monorepo,核心包在 packages/markitdown,另外拆出了 markitdown-ocr 和 markitdown-sample-plugin 两个独立包。

几个设计点值得注意:

① 无 ML 依赖

基础转换全部走 XML/二进制解析,零 GPU,不需要模型。只在可选的 LLM 图片描述和 Azure 集成时才需要外部 AI 服务。这点在部署上非常友好——放服务器上跑不会吃显存。

② 插件默认禁用

第三方插件要手动 enable_plugins=True 才会加载,安全面先拦一道。

③ 四级 API 暴露面

convert() (最宽松)、convert_local() (仅本地文件)、convert_response() (HTTP 响应对象)、convert_stream() (自行管理流)。对服务端部署很重要。

④ LLM 注入模式

通过 llm_client / llm_model 参数注入任何 OpenAI 兼容客户端,不绑死某个模型。

// 处理流水线

📁

File Input

PDF/DOCX/PPTXXLSX/HTMLAudio/YouTube/ZIP

🔍

Format Detection

扩展名 +MIME 嗅探

⚙️

Converter Pipeline

原生解析 +可选 Plugin+ LLM 增强

📄

Markdown Output

结构化 · LLM 友好· Token 高效

convert() → Format Detection → Native Parser → Optional Plugin/LLM Enrichment → .text_content

// Azure 集成 — 把云端能力接进来

markitdown 虽然是本地优先,但也没把云端能力完全丢掉。它接了两个 Azure 服务:

服务
适用场景
关键能力
Azure Document Intelligence
扫描 PDF、复杂表格、多页文档
布局提取,结构保留更好
Azure Content Understanding
音频/视频处理、结构化字段提取
零配置自动路由,自定义分析器提取发票/合同字段

Content Understanding 是这里面比较有意思的一个——视频文件只有走它才能转。而且它支持自定义分析器,比如你搞了个发票分析器,传入 cu_analyzer_id 就能直接输出 YAML front matter 里的结构化字段:VendorName、InvoiceDate 这些。这块对企业用户来说挺实用的。

⚠️ 注意:这些都是按量计费的 Azure API 调用,不是免费的。基础转换还是纯本地计算。

// 竞品对比

文档转 Markdown 这个赛道说大不大说小不小,markitdown 的几个主要竞品各有侧重:

工具
Stars
核心定位
优势
劣势
microsoft/markitdown
135K
轻量 Office → Markdown
零 ML 依赖 · 免费 · MIT · 极简 pip 安装 · LLM 友好输出
不支持扫描 PDF · 复杂版式弱 · 82% F1 · 251MB 安装包
DS4SD/docling (IBM)
18K
GPU 加速文档理解
45 页/秒 · 88% F1 · MIT 开源 · DocLayNet 88.5% mAP
1GB+ 安装包 · 需 GPU · 单文件可能 60+ 分钟
Unstructured-IO/unstructured
12K
多格式管道
30+ 文件类型 · 内置分块/嵌入 · LangChain 兼容 · 88% 可靠性
表格提取 78% F1 · API $2K/月 · Apache 2.0
run-llama/llama_parse
24K
多模态 LLM 解析
92% F1 最高准确度 · 表格 100% 正确 · 手写/旋转扫描件支持
$0.10/页 · API only · $10K/月(10万页) · 需 12GB GPU
nhirschfeld/kreuzberg
NEW
极致轻量快速
71MB 安装 · 35+ 文件/秒 · 边缘计算友好 · 异步 API
生态新 · 社区小 · 75% 可靠性需微调 · 作者自建库

这里面有个关键点:markitdown 和 Docling/Unstructured 不是直接竞争关系,而是互补。markitdown 的优势在于「零门槛」——不需要 GPU,不需要 API Key,不需要模型下载,pip install 完就能跑。对于 80% 的场景(原生 Office 文档转 Markdown 喂 LLM),它是最快的选择。但对于那 20% 需要处理扫描件、手写笔记、复杂多栏布局的场景,Docling 或 LlamaParse 会更合适。

// 性能数据

基于 2025-2026 年多次独立 benchmark(94 文档 / 500 页混合文档)

文本提取准确度 (F1 Score)

LlamaParse

92%

Docling

88%

Unstructured

85%

MarkItDown

82%

Kreuzberg

75%(最佳配置)

处理速度 (页/秒)

Docling (GPU)

45 页/秒

Unstructured

35 页/秒

Kreuzberg (CPU)

35+ 文件/秒

MarkItDown (CPU)

8.3 页/秒

LlamaParse (API)

10 页/秒

// 博主观点

说实话,markitdown 是我见过最「省心」的文档预处理工具。不是说它最强——Docling 准确度更高,Unstructured 格式覆盖更广,LlamaParse 在复杂文档上是降维打击。

但 markitdown 强在你没得选的时候它就是唯一解:本地跑、免费、一行命令、不用 GPU。这三个条件凑一块的竞品几乎没有。你用 Docling 得搞 GPU,用 LlamaParse 得掏钱,用 Unstructured 部署也不轻——markitdown 的定位就是「把门槛降到最低」。

如果你是做 RAG 管道的,日常处理的文档以 Office 原生的为主(Word 写报告、PPT 做汇报、Excel 存数据),markitdown 基本能覆盖 80% 的需求。剩下 20% 需要用扫描 PDF 或者复杂排版的场景,再搭 Docling 或者 Azure Document Intelligence 就可以了。不是替代关系,是组合关系。

一个让我觉得可惜的点:389 个 Open Issues 积压不少。135K Star 的项目,issue 响应速度跟不上热度是个隐患。好在是微软官方维护,不用担心像个人项目那样突然弃坑。

// 参考链接

🔗 GitHub — microsoft/markitdown

🔗 PyPI — markitdown

🔗 Benchmark — 4 Python Text Extraction Libraries Compared

🔗 2026 AI Document Analysis Tools Comparison

🔗 MarkItDown Review — Honest Limits & Real Code

🔗 GitHub — DS4SD/docling (IBM)

🔗 GitHub — Unstructured-IO/unstructured

🔗 GitHub — nhirschfeld/kreuzberg

github-ai-review · 2026-06-01  |  HERMES TERMINAL