ARTICLE · 1223929
微软把文档转换这件苦活开源了
让AI处理一份文档也不是什么难的事情了。
麻烦的是,资料往往不止一份,格式也各不相同(PDF、Word、Excel、PPT等等)。要导入知识库,光是把内容转换为同一格式,就得写不少处理代码。
MarkItDown 是微软开源的一个工具,它做的这项工作虽然不显眼,却绕不开:把各种各样的文件转换为 Markdown 格式,然后传给大模型或者之后的文字分析过程去用。
它是用Python写的一个工具包,并且带有命令行功能。
它可以处理PDF、Office文档、HTML、CSV、JSON、XML、EPUB等格式的文件,在README中已经列出了支持的文件类型。
对于图片和音频文件,虽然有相应的处理能力,但是具体的实现效果会受到所使用的依赖项以及配置情况的影响。
不是改变文件后缀名,而是保留原有的结构
直接抽出一大段文字,标题、列表、表格和链接可能就混在了一起。MarkItDown 希望把这些结构保留为 Markdown,而不是只提取纯文本。
源码中根据文件类型来选择合适的转换器去处理文件,并且返回处理后的结果。各种格式都有自己独特的转换规则,并不会将所有的文件都交给一个大的模型来处理。
这也可以说明它的选择:它主要为机器读取的文档服务,并不会把原来页面的内容完全复制一遍。官方也已经清楚地表明了,高保真的人类阅读版文档转换并不是它的强项。
我认为最重要的一点就是它统一了资料进入系统的方式。后面的检索、切分或者摘要等工作可以用其他的工具来完成;而前面不需要为每一种文件都设置一个调用的方法。
但是 Markdown 只是一个中间格式,并没有完成知识库的建设工作,也不代表检索结果已经准确。
先转换一份,再看是否要加入到流程中去。
目前的 README 要求 Python 3.10 至 3.14,推荐使用虚拟环境。安装所有可选依赖项,官方提供的命令如下:
pip install 'markitdown[all]'把一份 PDF 转换为 Markdown 文件并保存:
markitdown path-to-file.pdf -o document.md如果只处理 PDF、Word 和 PPT,可以按需安装对应依赖,不必把所有依赖项都装上:
pip install 'markitdown[pdf, docx, pptx]'项目官方提供的 Python 基础示例为:
from markitdown import MarkItDownmd = MarkItDown(enable_plugins=False)result = md.convert("test.xlsx")print(result.markdown)第三方插件默认是关闭状态,必须自己去开启。这个边界还是应该保留下来的:对于自己熟悉的数据,先使用内建的功能;如果真的缺少某项功能的话,才考虑添加外挂。
支持PDF,并不意味着所有的PDF都可以很容易地读取
扫描件、复杂的表格以及多页式的文件格式仍然要仔细查看转换后的结果。项目提供的 Azure Document Intelligence 和 Azure Content Understanding 都是通过云端接入的方式来进行处理的,并且这些功能并不是所有本地转换都会自动包含进去的,在使用过程中还会产生一定的费用。
图片描述还可以另外设置大模型客户端以及模型,接入云端或者模型之后还要重新考虑资料是否允许离开本地环境,不能把整个项目简单地当成是“完全离线、全都是免费”的事情。
另外,在把MarkItDown做成公开的服务的时候要小心一点,它会用到当前进程的权限来读取文件、访问资源,并且没有隔离沙箱。
不能直接将陌生人传来的网址、路径等信息交给 MarkItDown 处理,只转本地文件的时候优先使用convert_local()方法;对于已经获取到的字节流进行转换的话,则可以采用convert_stream()的方法,并且在外部要限定好输入和操作权限。
先打通入口,然后再考虑用智能的方式做
MarkItDown 使用的是 MIT 开源许可协议。它的价值不在于多一个聊天入口,而在于提供可以嵌入现有系统的文档转换能力。
建议选择需要处理的文件,特别是表格较多或者扫描页较多的文件,核实标题、表格以及内容有没有被正确地抽取出来之后再来确定要接入的部分。
模型能不能答好问题,不只取决于模型本身,也和提供的信息有关。提供的信息首先要能读明白。
https://github.com/microsoft/markitdown















































































