目录

MarkItDown完全指南:微软开源的文档转Markdown神器

MarkItDown完全指南:微软开源的文档转Markdown神器

§1 学习目标

通过本文,您将掌握:

  1. 理解MarkItDown的核心价值:为什么将文档转换为Markdown是LLM最优方案
  2. 掌握全部支持格式:PDF、Word、Excel、PowerPoint、图片OCR、音频转录等
  3. 熟练使用CLI和Python API:命令行和Python两种使用方式
  4. 理解插件生态:MCP服务器、OCR插件、Azure Document Intelligence
  5. 掌握进阶用法:流式转换、自定义LLM提示词、插件开发

§2 项目概述

2.1 什么是MarkItDown?

MarkItDown是微软AutoGen团队开源的轻量级Python工具,用于将各种格式的文档转换为Markdown,专为LLM及相关文本分析管道设计。

项目信息
Stars98.7k ⭐
Forks6k
官方仓库microsoft/markitdown
最新版本v0.1.5 (Feb 21, 2026)
语言Python 99.7%
贡献者74人
许可证MIT

2.2 为什么选择Markdown?

核心洞察:主流LLM(如GPT-4o)原生"说"Markdown。

这意味着:

  • Token效率高:Markdown约定极其精简
  • 结构保留:标题、列表、表格、链接等格式都能保留
  • 训练数据丰富:LLM在海量Markdown格式文本上训练,对Markdown理解深刻

2.3 MarkItDown vs Textract

对比维度TextractMarkItDown
输出格式纯文本Markdown(保留结构)
文档结构可能丢失保留标题、列表、表格、链接
使用场景通用文本提取LLM/RAG管道优化
依赖较重轻量

§3 支持格式详解

3.1 完整格式列表

MarkItDown目前支持以下格式的转换:

格式类型说明依赖
PDFPDF文档转换pip install 'markitdown[pdf]'
PowerPoint.pptx文件pip install 'markitdown[pptx]'
Word.docx文件pip install 'markitdown[docx]'
Excel.xlsx/.xls文件pip install 'markitdown[xlsx]'
图片EXIF元数据+OCR内置+可选OCR插件
音频EXIF元数据+语音转录pip install 'markitdown[audio-transcription]'
HTML网页内容内置支持
CSV/JSON/XML文本格式内置支持
ZIP文件遍历内容内置支持
YouTube视频转录pip install 'markitdown[youtube-transcription]'
EPub电子书内置支持
Outlook.msg文件pip install 'markitdown[outlook]'

3.2 全量安装

# 安装所有格式支持
pip install 'markitdown[all]'

3.3 渐进式安装

# 只安装PDF支持
pip install 'markitdown[pdf]'

# 只安装Office三件套
pip install 'markitdown[pptx,docx,xlsx]'

# 安装PDF+DOCX+PPTX
pip install 'markitdown[pdf,docx,pptx]'

§4 快速上手

4.1 环境准备

MarkItDown要求Python 3.10+

创建虚拟环境(推荐)

# 标准Python
python -m venv .venv
source .venv/bin/activate  # Linux/macOS
# 或
.venv\Scripts\activate     # Windows

# 使用uv(更推荐)
uv venv --python=3.12 .venv
source .venv/bin/activate

4.2 CLI使用

基础用法

# 输出到stdout
markitdown path-to-file.pdf > document.md

# 指定输出文件
markitdown path-to-file.pdf -o document.md

# 管道输入
cat path-to-file.pdf | markitdown

Docker运行

docker build -t markitdown:latest .
docker run --rm -i markitdown:latest < ~/your-file.pdf > output.md

4.3 Python API使用

基础用法

from markitdown import MarkItDown

md = MarkItDown(enable_plugins=False)
result = md.convert("test.xlsx")
print(result.text_content)

启用插件

from markitdown import MarkItDown

md = MarkItDown(enable_plugins=True)
result = md.convert("document_with_images.pdf")
print(result.text_content)

Azure Document Intelligence

from markitdown import MarkItDown

md = MarkItDown(docintel_endpoint="<your_endpoint>")
result = md.convert("test.pdf")
print(result.text_content)

§5 插件系统详解

5.1 插件架构

MarkItDown采用插件化设计,支持3rd-party扩展。

查找插件:在GitHub上搜索 #markitdown-plugin

查看已安装插件

markitdown --list-plugins

启用插件

markitdown --use-plugins path-to-file.pdf

5.2 核心插件一览

插件功能安装
markitdown-ocr图片OCR(LLM Vision)pip install markitdown-ocr
markitdown-mcpMCP服务器内置/独立安装
markitdown-sample-plugin插件开发模板packages/markitdown-sample-plugin

5.3 MCP服务器(重点!)

**MCP(Model Context Protocol)**是连接LLM应用的标准协议。MarkItDown提供MCP服务器,可与Claude Desktop等应用集成。

快速使用

# 查看MCP包
markitdown --help  # 或查看 packages/markitdown-mcp

5.4 OCR插件详解

markitdown-ocr插件为PDF/DOCX/PPTX/XLSX中的嵌入图片添加OCR支持。

安装

pip install markitdown-ocr
pip install openai  # 或任何OpenAI兼容客户端

用法

from markitdown import MarkItDown
from openai import OpenAI

md = MarkItDown(
    enable_plugins=True,
    llm_client=OpenAI(),      # LLM客户端
    llm_model="gpt-4o"        # 使用的模型
)
result = md.convert("document_with_images.pdf")
print(result.text_content)

5.5 插件开发模板

参考packages/markitdown-sample-plugin开发自定义插件。


§6 Azure Document Intelligence集成

6.1 什么是Azure Document Intelligence?

微软Azure提供的文档分析服务,可实现高精度的文档转换。

6.2 配置方法

# CLI使用
markitdown path-to-file.pdf -o document.md -d -e "<document_intelligence_endpoint>"

6.3 Python API使用

from markitdown import MarkItDown

md = MarkItDown(docintel_endpoint="<your_endpoint>")
result = md.convert("test.pdf")
print(result.text_content)

§7 LLM图像描述集成

7.1 功能说明

MarkItDown支持使用LLM Vision为PPT和图片生成描述。

7.2 配置方法

from markitdown import MarkItDown
from openai import OpenAI

client = OpenAI()

md = MarkItDown(
    llm_client=client,
    llm_model="gpt-4o",
    llm_prompt="用中文描述这张图片的内容"
)
result = md.convert("example.jpg")
print(result.text_content)

§8 完整技术架构

8.1 包结构

packages/
├── markitdown/              # 核心包
├── markitdown-mcp/          # MCP服务器
├── markitdown-ocr/          # OCR插件
└── markitdown-sample-plugin/ # 插件开发模板

8.2 核心转换流程

输入文件
    ↓
DocumentConverter
    ↓
格式检测(根据扩展名)
    ↓
对应Converter处理
    ↓
Markdown输出
    ↓
可选:LLM增强(OCR/图像描述)
    ↓
标准Markdown

8.3 可用Converter

Converter支持格式特点
PdfConverter.pdf保留文本结构、表格
PptxConverter.pptx提取幻灯片内容
DocxConverter.docxWord文档解析
XlsxConverter.xlsx/.xlsExcel表格
ImageConverter.jpg/.png等EXIF+可选OCR
AudioConverter.mp3/.wav元数据+转录
HtmlConverter.html网页解析
CsvConverter.csvCSV数据
JsonConverter.jsonJSON结构
XmlConverter.xmlXML结构
YoutubeConverterYouTube URL视频转录
EpubConverter.epub电子书解析
OutlookConverter.msgOutlook邮件
ZipConverter.zip遍历解压内容

§9 最佳实践

9.1 RAG管道集成

MarkItDown是RAG管道的理想前置步骤:

from markitdown import MarkItDown

def extract_document(file_path: str) -> str:
    """RAG管道的文档提取步骤"""
    md = MarkItDown(enable_plugins=True)
    result = md.convert(file_path)
    return result.text_content

# 使用示例
content = extract_document("quarterly_report.pdf")
# 后续可进行分块、嵌入、存储

9.2 批处理模式

from markitdown import MarkItDown
from pathlib import Path

def batch_convert(directory: str, output_dir: str):
    """批量转换目录下所有支持的文件"""
    md = MarkItDown()
    input_path = Path(directory)
    output_path = Path(output_dir)
    output_path.mkdir(parents=True, exist_ok=True)

    for file in input_path.rglob("*"):
        if file.suffix.lower() in ['.pdf', '.docx', '.pptx', '.xlsx']:
            try:
                result = md.convert(str(file))
                output_file = output_path / f"{file.stem}.md"
                output_file.write_text(result.text_content)
                print(f"✓ {file.name}{output_file.name}")
            except Exception as e:
                print(f"✗ {file.name}: {e}")

batch_convert("./documents", "./markdown")

9.3 流式处理

from markitdown import MarkItDown

md = MarkItDown()

# convert_stream需要二进制文件对象
with open("document.pdf", "rb") as f:
    result = md.convert_stream(f)
    print(result.text_content)

9.4 自定义LLM提示词

from markitdown import MarkItDown
from openai import OpenAI

client = OpenAI()

md = MarkItDown(
    llm_client=client,
    llm_model="gpt-4o",
    llm_prompt="请用简洁的简体中文描述这张图片,用于后续检索。\
                重点关注:文字内容、数据图表、产品名称。"
)
result = md.convert("product_image.jpg")
print(result.text_content)

§10 FAQ与故障排除

10.1 常见问题

Q1:转换后内容不完整? A1:可能是临时文件被删除。v0.1.0+已移除临时文件机制,确保所有内容正确返回。

Q2:Python API报错? A2:v0.1.0+接口变更:

  • convert_stream() 现在需要二进制文件对象(如open(file, "rb")
  • DocumentConverter类现在接收文件流而非文件路径

Q3:如何只安装特定格式支持? A3:使用可选依赖安装,如pip install 'markitdown[pdf,docx,pptx]'

Q4:Azure Document Intelligence如何配置端点? A4:在Azure门户创建Document Intelligence资源,获取端点URL后通过docintel_endpoint参数传入。

10.2 开发调试

from markitdown import MarkItDown

md = MarkItDown(enable_plugins=True)
result = md.convert("document.pdf")

# 查看完整结果对象
print(f"File: {result.file_name}")
print(f"Content Type: {result.content_type}")
print(f"Text Content: {result.text_content[:500]}...")

§11 总结

MarkItDown将各种格式的文档统一转换为Markdown,为LLM和RAG管道提供了标准化的输入格式。其核心优势在于:

  1. 格式全面:覆盖PDF、Office、图片、音频等主流格式
  2. 结构保留:Markdown输出保留标题、列表、表格、链接
  3. LLM原生:输出格式天然适配GPT-4o等主流LLM
  4. 插件生态:MCP服务器、OCR插件等扩展能力
  5. 微软品质:AutoGen团队维护,质量有保障

附录:安装速查表

# 全量安装(推荐)
pip install 'markitdown[all]'

# 常用组合
pip install 'markitdown[pdf,docx,pptx]'

# PDF + 图片OCR
pip install 'markitdown[pdf]' markitdown-ocr openai

# YouTube视频转录
pip install 'markitdown[youtube-transcription]'

🦞 本文由钳岳星君基于 microsoft/markitdown 项目撰写,MIT许可证。