万能文档转 Markdown:把 Office 全家桶读进对话

前言

对话里要读一份 .docx,常见做法是先把文件下载、解压、遍历 word/document.xml,再想办法把表格拼回 Markdown,脚本写一次能用,但换一个 .xlsx 又要重来一遍。这类「文档内容提取」的活,格式分散、依赖琐碎,每次都从头造轮子成本不低。

下面介绍的 Skill「万能文档转 Markdown」就是把这件小事封装成一条命令。它底层用的是微软开源的 MarkItDown,支持 PDF、Word、Excel、PowerPoint、HTML、CSV、图片 OCR、音频等格式,输出统一为 Markdown,适合直接喂给大模型或 RAG 流程。

这是什么

一句话定位:把各种格式的本地文档批量转成 Markdown 文本的 Skill。

  • 出品方:SkillHub 上的 community 来源 Skill,坐标 @user_825f001d/markitdown,Skill 版本 1.0.0,分类 office-efficiency。
  • 底层能力:微软开源的 MarkItDown,PyPI 上以 markitdown 包发布(MIT 许可)。
  • 解决的问题:让 Agent 在拿到用户上传的 Office 附件时,不必自己写解析逻辑,直接产出可读、可索引的 Markdown。
  • 前置条件:requires_api_key=false,不需要额外配置密钥。

核心功能

以下能力来自该 Skill 的官方简介,并与 MarkItDown 上游仓库核对。

支持的输入格式:

  1. PDF
  2. Word(.docx)
  3. Excel(.xlsx,另支持旧版 .xls)
  4. PowerPoint(.pptx)
  5. HTML
  6. CSV、JSON、XML 等文本类格式
  7. 图片(读取 EXIF 元数据,并支持 OCR)
  8. 音频(读取 EXIF 元数据,并做语音转写)
  9. ZIP(遍历包内内容逐个转换)
  10. EPUB、RSS

触发时机:当用户要求「把 PDF/Word/Excel/PPT 转成 markdown」「提取这份文档的内容」「docx 转 md」「网页转 markdown」,或需要把 Office 附件内容读入对话时使用。

Skill 侧还内置了一套工程化处理:本机安全转换、批量工作流、环境检查,以及在 markitdown 缺失时的离线兜底方案。资料中说明本机已把 MarkItDown 装在托管 venv 中,因此多数情况下无需自行装依赖。

安装与启用

Skill 本体按 SkillHub 的通用 SKILL.md 格式使用,在对应 Agent 的 Skill 管理里启用即可。需要安装底层 MarkItDown 时,命令如下(来自 MarkItDown 官方文档)。

先建虚拟环境,避免污染全局依赖:

python -m venv .venv
source .venv/bin/activate

安装全部可选依赖:

pip install 'markitdown[all]'

只想装部分格式的依赖,可以按需裁剪,例如只用到 PDF、DOCX、PPTX:

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

MarkItDown 要求 Python 3.10 到 3.14。可选依赖项包括 [all]、[pptx]、[docx]、[xlsx]、[xls]、[pdf]、[outlook]、[az-doc-intel]、[az-content-understanding]、[audio-transcription]、[youtube-transcription]。

典型用法

命令行下把单个文件转成 Markdown,重定向到输出文件:

markitdown path-to-file.pdf > document.md

或指定输出路径:

markitdown path-to-file.pdf -o document.md

也可以走管道,从标准输入读取:

cat path-to-file.pdf | markitdown

在 Python 里调用,适合嵌进 Agent 的转换流程:

from markitdown import MarkItDown

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

批量处理多个文件时,通常由 Skill 内的批量工作流统一调度;命令行也可以按上面的形式逐个处理。

适用场景与注意

适合:需要把 Office 附件、PDF、网页内容读进大模型对话或 RAG 索引,但又不想维护多套解析脚本的场景。

需要注意的几点:

  1. 输出面向文本分析工具,不保证人类阅读的版式还原。MarkItDown 官方说明其目标是保留标题、列表、表格、链接等结构,而不是高保真的文档转换。
  2. 转换以当前进程权限执行 I/O。在不可信环境下处理外部文件时,应先做输入校验,并尽量调用粒度最窄的转换函数(如 convert_stream()、convert_local())。
  3. 部分格式依赖可选依赖项。没装 [all] 时,遇到对应格式会缺能力,先确认实际需要哪几类再装。
  4. 图片 OCR 与音频转写依赖相应依赖;PDF 内嵌图片的 OCR 还可通过 markitdown-ocr 插件走 LLM 视觉能力。
  5. 版本方面,该 Skill 页面记录的底层版本是 MarkItDown 0.1.8,PyPI 上当前最新版是 0.1.9,安装时以实际装到的版本为准。

结尾

这个 Skill 的价值在于把「读文档」这件事从一次性脚本变成可复用能力:格式覆盖面广,输出统一为 Markdown,不需要配置密钥,且自带环境检查与离线兜底。如果你的 Agent 经常要处理用户上传的 Office 附件或 PDF,用它比每次手写解析更省事。

官方地址:https://api.skillhub.cn/user_5d230dc2/markitdown

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜