分享日常 · 2026年11月4日 0

MarkItDown:微软开源19万星,一条命令把任何文件转成AI能读的文本

做 AI 的人都有一个共同的坎:你手上有一堆 PDF、Word、Excel,想让 AI 读,但 AI 只认纯文本。

复制粘贴?表格全散架,标题和小字糊成一团。用在线转换站?文件先传别人服务器,公司文档根本不敢传。

微软自己出了个工具解决这件事:MarkItDown,一条命令把任何文件转成 Markdown。19 万星,MIT 协议,本地跑,不上传。

它到底能转什么

官方 README 列的支持清单,一条不少抄下来:

类型说明
PDF正文、排版结构
Word / PowerPoint / Excel表格会保留成 Markdown 表格
图片读 EXIF 元数据,可选 OCR
音频读元数据,可选语音转写
HTML网页正文
CSV / JSON / XML文本类格式
ZIP自动遍历压缩包里的每个文件
EPUB电子书
YouTube 链接直接抓字幕转文字

ZIP 那条最实用:扔一个压缩包进去,它会把里面每份文件都转出来,一次搞定一整批资料。

为什么一定要 Markdown

不是随便挑的格式。Markdown 有三个特性正好卡在 AI 的需求上:

  • 结构不丢——标题、列表、表格、链接都能保留,PDF 里藏着的层级关系不会糊成一片
  • AI 天生认识——主流大模型训练时吃了大量 Markdown,拿到就直接理解
  • 省 token——同样的内容,Markdown 比 HTML 少一大截标签,长文档能省不少钱

安装:一个坑先说

它要求 Python 3.10 到 3.14。我用 macOS 自带的 3.9 试过,装不上,pip 只会给你一个 0.0.1a1 的占位包,报错信息还很模糊。换 3.12 一次就过了。

先确认你的 Python 版本:

python3 --version

如果是 3.10 以上,直接装全量:

pip install 'markitdown[all]'

不想装一大堆依赖,只装你要用的格式:

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

可选的依赖包清单(照抄官方):

[all]                    全部
[pdf]                    PDF
[docx]                   Word
[pptx]                   PowerPoint
[xlsx]                   Excel
[xls]                    旧版 Excel
[outlook]                Outlook 邮件
[audio-transcription]    wav / mp3 语音转写
[youtube-transcription]  YouTube 字幕
[az-doc-intel]           Azure 文档智能

怎么用:一条命令

markitdown 报告.pdf > 报告.md

或者指定输出文件:

markitdown 报告.pdf -o 报告.md

也支持管道,适合批处理:

cat 报告.pdf | markitdown

我自己实测的效果

造了个带表格的 Word 和 Excel 试了一下,输出是这样:

# 测试标题

这是正文段落。

|  |  |
| --- | --- |
| 键 | 值 |
| A | 100 |

标题层级、正文、表格全部保留下来,而且表格是标准的 Markdown 表格语法——直接贴给 AI 就能看懂,不用再解释。

在 Python 里调用

做批量处理时走 API 更方便:

from markitdown import MarkItDown

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

批量转一个文件夹:

from markitdown import MarkItDown
from pathlib import Path

md = MarkItDown()
for f in Path("资料").iterdir():
    if f.is_file():
        try:
            out = f.with_suffix(".md")
            out.write_text(md.convert(str(f)).markdown, encoding="utf-8")
            print("OK", f.name)
        except Exception as e:
            print("跳过", f.name, e)

扫描版 PDF 怎么办

这是它唯一明显的短板:纯图片的扫描件,它读不出字。因为默认只提取文本层,图片里的内容需要 OCR。

解决办法是装官方插件 markitdown-ocr,它借用 AI 的视觉能力识图,不额外装机器学习库:

pip install markitdown-ocr
pip install openai

然后带插件跑:

markitdown --use-plugins 扫描件.pdf

想先看装了哪些插件:

markitdown --list-plugins

一个必须知道的安全提示

官方 README 里自己写了警告:这个工具以当前进程的权限读写文件。

意思是——你对它说「转换这个文件」,它就能读你进程能读的任何东西。处理来路不明的文件时要小心,别在服务器上直接跑别人上传的压缩包。

官方给的稳妥做法是:在不可信环境里,调用最窄的那个函数(比如 convert_stream() 或 convert_local()),先清洗输入。

适合谁用

  • 让 AI 读资料的人——一堆 PDF 丢进去,转成文本喂给大模型
  • 做知识库/私有 RAG 的——文档预处理第一环就是把格式统一成文本
  • 整理文档的——Word/Excel 转 Markdown 后能进 Git 版本管理
  • 处理敏感文件的人——本地跑,一个字节都不出门

如果你只是偶尔转一两个 PDF,用现成的在线工具更快;但一旦上量、或者文件不能外传,本地命令行就是唯一靠谱的选项。

常见问题

Q:装的时候报 0.0.1a1 是什么?
A:Python 版本太老(低于 3.10),pip 退回到了占位包。换 Python 3.10+ 重装。

Q:中文文件名有问题吗?
A:没问题,只要输出重定向时用 UTF-8 编码。

Q:要联网吗?
A:纯本地转换不需要。只有处理 YouTube 链接、或者开了 OCR 插件时才要。

Q:导出效果好到能直接给人看吗?
A:官方明说了,它的目标是给文本分析工具用,不是给人做高保真排版还原。要好看还是得人工调。

Q:Windows 能用吗?
A:能,Python 跨平台,命令完全一样。

一句话总结

19 万星不是白来的:它解决的是 AI 时代最基础也最烦的一步——把人类格式变成机器能读的文本。一条命令,本地跑,免费。

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