跳到主要内容

MarkItDown — 微软开源的文件转 Markdown 利器

· 阅读需 5 分钟
一介布衣
全栈开发者

做 LLM 应用的人大概都遇到过同一个头疼问题:用户丢过来一个 PDF、一个 Word、一张截图、一段录音,然后问你"能不能帮我总结一下?"

每种格式都要找对应的解析库,PDF 用 PyMuPDF、Word 用 python-docx、Excel 用 openpyxl、图片还得上 Tesseract OCR……写完一堆胶水代码,发现提取出来的文本结构全丢了——标题变普通段落、表格变乱码、链接直接蒸发。

微软开源的 MarkItDown 就是来解决这个问题的。

一句话概括

MarkItDown 是一个 Python 工具,把各种文件格式统一转成结构化的 Markdown 文本。

PDF → Markdown,Word → Markdown,Excel → Markdown(表格保留),图片 → Markdown(OCR + EXIF),音频 → Markdown(语音转文字),甚至 YouTube 链接 → Markdown(字幕)。

一行命令搞定:

markitdown report.pdf -o report.md

支持哪些格式?

格式说明
PDF提取文本,保留结构
Word (.docx)标题、列表、表格都保留
Excel (.xlsx / .xls)表格转 Markdown 表格
PowerPoint (.pptx)每页内容提取
图片OCR 提取文字 + EXIF 元数据
音频 (.wav / .mp3)语音转文字
HTML转 Markdown
CSV / JSON / XML结构化转义
ZIP解压后递归处理内部文件
YouTube URL提取字幕
EPUB电子书文本

为什么是 Markdown?

官方 README 里有一段解释得很好:

Markdown 极度接近纯文本,但保留了重要的文档结构(标题、列表、表格、链接等)。主流 LLM 原生"说"Markdown,而且 Markdown 的 token 效率很高。

简单说:LLM 吃 Markdown 最香。 纯文本丢了结构,HTML 太臃肿,Markdown 刚刚好。

快速上手

安装

pip install 'markitdown[all]'

[all] 会装所有可选依赖。如果你只需要处理部分格式,可以按需安装:

pip install 'markitdown[pdf, docx, xlsx]'

命令行用法

# 基本用法
markitdown report.pdf > report.md

# 指定输出文件
markitdown report.pdf -o report.md

# 管道输入
cat report.pdf | markitdown

Python API

from markitdown import MarkItDown

md = MarkItDown()
result = md.convert("report.docx")
print(result.text_content)

处理 Excel 文件,表格会自动转成 Markdown 格式:

result = md.convert("data.xlsx")
# 输出:
# | 姓名 | 部门 | 薪资 |
# |------|------|------|
# | 张三 | 技术 | 20k |

用 LLM 描述图片

给图片加 llm_client,可以用 GPT-4o 等模型生成图片描述:

from markitdown import MarkItDown
from openai import OpenAI

md = MarkItDown(llm_client=OpenAI(), llm_model="gpt-4o")
result = md.convert("screenshot.jpg")
print(result.text_content)
# 输出:[Image: A screenshot showing a dashboard with charts...]

进阶玩法

OCR 插件

官方提供了 markitdown-ocr 插件,用 LLM Vision 从 PDF/Word/PPT/Excel 的嵌入图片中提取文字:

pip install markitdown-ocr
pip install openai
from markitdown import MarkItDown
from openai import OpenAI

md = MarkItDown(enable_plugins=True, llm_client=OpenAI(), llm_model="gpt-4o")
result = md.convert("scanned.pdf") # 扫描件 PDF 也能处理

Azure Document Intelligence

如果文档质量差(扫描件、复杂排版),可以用 Azure 的文档智能服务:

markitdown report.pdf -o report.md -d -e "<document_intelligence_endpoint>"

云端分析,质量更高,但需要 Azure 账号和 API 调用费用。

Azure Content Understanding

更强大的云端方案,支持音视频、结构化字段提取(发票金额、合同条款等),输出带 YAML front matter:

md = MarkItDown(cu_endpoint="<endpoint>", cu_analyzer_id="my-invoice-analyzer")
result = md.convert("invoice.pdf")
# 输出包含:
# ---
# fields:
# VendorName: CONTOSO LTD.
# InvoiceDate: '2019-11-15'
# ---

Docker 运行

不想装 Python 依赖?用 Docker:

docker build -t markitdown:latest .
docker run --rm -i markitdown:latest < report.pdf > output.md

在 LLM 工作流中的位置

MarkItDown 的定位很清晰——格式转换层

用户文件 (PDF/Word/Excel/图片/音频)

MarkItDown ← 统一转成 Markdown

LLM / RAG / 知识库

典型场景:

  1. RAG 管道预处理:用户上传各种文件,MarkItDown 统一转 Markdown 后存入向量数据库
  2. 知识库构建:把公司文档库批量转 Markdown,给 LLM 做检索增强
  3. 批量文档分析:100 份合同 PDF → 100 份 Markdown → LLM 批量审查
  4. Hermes Agent 集成:让 Hermes 具备处理 Office/PDF 文件的能力

跟 textract 对比

官方说 MarkItDown 最接近 textract,但核心区别在于:

  • textract:目标是提取纯文本,结构基本丢失
  • MarkItDown:目标是保留文档结构(标题层级、列表、表格、链接),输出 Markdown

如果你的下游是 LLM,MarkItDown 的结构化输出明显更有价值。

注意事项

  • 设计给 LLM 消费,不是给人看的:输出质量足够 readable,但别指望完美排版
  • 安全提示:MarkItDown 以当前进程权限执行 I/O,处理不可信文件要注意
  • Python 3.10+:需要较新的 Python 版本
  • 推荐虚拟环境:避免依赖冲突

总结

MarkItDown 是那种"用了就回不去"的工具。以前要写一堆格式解析胶水代码,现在 pip install + 一行命令搞定。

如果你在做 LLM 应用、RAG 系统、或者只是经常需要把各种文件丢给 AI 处理,MarkItDown 值得加到工具链里。

项目地址https://github.com/microsoft/markitdown

安装pip install 'markitdown[all]'

一句话:把任何文件变成 LLM 能吃的 Markdown。