
人工智能AI 应用MCP 服务【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址https://gitcode.com/GitHub_Trending/ma/markitdown点击查看免费下载MarkItDown 是一个轻量级的 Python 包与命令行工具用于把各类文件PDF、PowerPoint、Word、Excel、图片、音频、HTML、ZIP、YouTube 等统一转换为 Markdown供 LLM 与文本分析管线索引和消费。本指南以 packages/markitdown/README.md 为核心结合 核心实现 与 CLI 入口 源码完整覆盖安装方式、可选依赖、命令行与 Python API、插件体系、Azure 云端转换能力以及安全注意事项。读完本文你将掌握从本地文件到远程 URI 的多种转换姿势并理解转换器调度与优先级机制能够独立搭建一套文档转 Markdown 的处理管线。MarkItDown 是什么为什么输出选择 MarkdownMarkItDown 与 textract 定位类似但更专注于保留文档的重要结构标题、列表、表格、链接等并以 Markdown 呈现。输出虽然通常可读、适合人类查看但其设计目标是被文本分析工具消费——因此它不追求面向人类的高保真文档转换。选择 Markdown 的根本原因在于Markdown 非常接近纯文本标记极少却能表达关键文档结构主流 LLM如 OpenAI 的 GPT-4o原生说Markdown常在回答中自发使用 Markdown 格式说明其训练语料中包含了海量 Markdown 文本理解力强同时 Markdown 约定高度 token 高效。当前仓库支持转换的格式见 根目录 README 与 转换器注册清单PDFPdfConverterPowerPointPPTX、WordDOCX、ExcelXLSX/XLS图片EXIF 元数据与 OCR音频EXIF 元数据与语音转写HTML、RSS、Wikipedia、YouTube、Bing SERP、Jupyter NotebookIPYNB纯文本类格式CSV、JSON、XMLZIP 压缩包迭代解压其中内容Outlook 邮件MSG、EPUB以及更多可通过第三方插件扩展环境要求与安装前置条件MarkItDown 要求 Python 3.10 或更高版本pyproject.toml 中声明requires-python 3.10建议使用虚拟环境以避免依赖冲突。标准 Python 创建并激活虚拟环境python -m venv .venv source .venv/bin/activate使用uvuv venv --python3.12 .venv source .venv/bin/activate # 注意在此虚拟环境中请使用 uv pip install 而非 pip install 安装包使用 Anacondaconda create -n markitdown python3.12 conda activate markitdown从 PyPI 安装pip install markitdown[all][all]会一次性安装全部可选依赖PDF、DOCX、PPTX、XLSX、XLS、Outlook、音频转写、YouTube 转写、Azure 文档智能等适合开箱即用。从源码安装git clone 本仓库地址 cd markitdown pip install -e packages/markitdown[all]若已在仓库目录内也可以直接在 packages/markitdown 子包下执行pip install -e .[all]。命令行CLI用法基础用法markitdown path-to-file.pdf document.md使用-o指定输出文件markitdown path-to-file.pdf -o document.md通过管道传入内容stdincat path-to-file.pdf | markitdown从 CLI 入口 可以看到markitdown命令还支持以下参数参数说明-v, --version显示版本号并退出-o, --output输出文件名未指定时写入 stdout-x, --extension提供文件扩展名提示例如从 stdin 读取时-m, --mime-type提供文件 MIME 类型提示-c, --charset提供文件字符集提示如 UTF-8会先经codecs.lookup规范化校验-d, --use-docintel使用 Azure Document Intelligence 提取文本需有效端点--use-cu, --use-content-understanding使用 Azure Content Understanding 提取文本需--cu-endpoint-e, --endpointDocument Intelligence 端点默认读取MARKITDOWN_DOCINTEL_ENDPOINT环境变量--cu-endpointContent Understanding 端点默认读取MARKITDOWN_CU_ENDPOINT环境变量--cu-analyzerContent Understanding 分析器 ID缺省时按文件类型自动选择--cu-file-types逗号分隔的文件类型列表如pdf,jpeg,mp4用于限制哪些格式走 CU缺省时全部支持类型均路由到 CU-p, --use-plugins启用第三方插件参与转换--list-plugins列出已安装的第三方插件--keep-data-uris保留输出中的 data URI如 base64 编码的图片默认 data URI 会被截断其中-x/-m/-c三个提示参数会被组装成一个 StreamInfo 对象包含 mimetype、extension、charset、filename、local_path、url 字段在读取 stdin 等无法从路径推断类型的场景下帮助转换器快速识别文件格式。Python API 用法基础转换from markitdown import MarkItDown md MarkItDown(enable_pluginsFalse) # 设置为 True 以启用插件 result md.convert(test.xlsx) print(result.markdown)convert()返回 DocumentConverterResult 对象其markdown属性保存转换后的文本title保存可选标题text_content是markdown的软弃用别名str(result)同样返回 Markdown 文本。面向不同输入源的转换方法族从源码看convert()是一个宽容的分发入口源码传入str且 scheme 为http/https/file/data→ 调用convert_uri()传入本地路径str/Path→ 调用convert_local()传入requests.Response→ 调用convert_response()传入可读的二进制流 → 调用convert_stream()除convert()外MarkItDown 还提供更聚焦的转换方法便于精确控制输入源convert_local(path)从本地磁盘读取文件convert_stream(stream, stream_info...)转换任意二进制流若流不可 seek会先将整个流读入内存缓冲convert_uri(uri)支持file:、data:、http:、https:四种 schemefile:URI 的 netloc 必须为空或localhostHTTP(S) 请求通过内置 requests 会话发出convert_response(response)直接转换requests.Response会解析Content-Typemimetype/charset与Content-Disposition文件名/扩展名头辅助类型识别convert_url(url)convert_uri()的别名未来可能弃用使用 LLM 为图片生成描述目前仅 PPTX 与图片文件支持通过大模型生成图像描述传入llm_client与llm_modelfrom markitdown import MarkItDown from openai import OpenAI client OpenAI(max_retries5) md MarkItDown(llm_clientclient, llm_modelgpt-4o, llm_promptoptional custom prompt) result md.convert(example.jpg) print(result.markdown)max_retries控制 OpenAI 客户端对可重试错误的自动重试次数默认 2设为5时最多尝试六次并带退避。若某次尝试成功则继续正常转换若客户端在重试耗尽后仍报错或遇到不可重试错误MarkItDown 会尝试其他可用转换器只有全部失败才抛出 FileConversionException。这些 LLM 配置llm_client/llm_model/llm_prompt与exiftool_path、style_map会在_convert时作为全局选项透传给每个转换器源码。转换器注册与优先级机制MarkItDown 采用转换器注册表 优先级排序的调度模型核心实现每个转换器是 DocumentConverter 的子类需实现accepts()根据stream_info的 mimetype/extension/url 判断是否接手与convert()真正执行转换。内置转换器默认全部启用enable_builtinsNone时视为启用register_converter(converter, priority...)将转换器插入注册表。默认优先级PRIORITY_SPECIFIC_FILE_FORMAT 0.0针对 .docx、.pdf、.xlsx、wikipedia 等具体格式PRIORITY_GENERIC_FILE_FORMAT 10.0用于 PlainText、HTML、ZIP 这类兜底转换器。数值越小越先尝试因此具体格式的转换器排在通用转换器之前。转换前按优先级做稳定排序同优先级下后注册的转换器排在前面排序在每次_convert调用时进行因为优先级可能动态变化。每次尝试前会通过magika识别流内容并生成一组StreamInfo猜测扩展名→MIME 互推、字符集检测逐条尝试各转换器任一转换器成功即返回全部失败则汇总异常并抛出FileConversionException无转换器接手则抛UnsupportedFormatException。从 转换器模块 可以看到内置转换器全集PlainTextConverter、HtmlConverter、RssConverter、WikipediaConverter、YouTubeConverter、IpynbConverter、BingSerpConverter、PdfConverter、DocxConverter、XlsxConverter/XlsConverter、PptxConverter、ImageConverter、AudioConverter、OutlookMsgConverter、ZipConverter、EpubConverter、CsvConverter以及云端 DocumentIntelligenceConverter、ContentUnderstandingConverter。第三方插件可以注册任意优先级的转换器例如优先级 9 的插件会运行在 PlainTextConverter 之前、内置具体格式转换器之后。可选依赖详解在根 README 与 pyproject.toml 中MarkItDown 提供以下可选依赖分组可按需安装以控制体积分组安装命令覆盖能力[all]pip install markitdown[all]安装全部可选依赖[pptx]pip install markitdown[pptx]PowerPoint 文件python-pptx[docx]pip install markitdown[docx]Word 文件mammoth、lxml[xlsx]pip install markitdown[xlsx]Excel 文件pandas、openpyxl[xls]pip install markitdown[xls]旧版 Excel 文件pandas、xlrd[pdf]pip install markitdown[pdf]PDF 文件pdfminer.six、pdfplumber[outlook]pip install markitdown[outlook]Outlook 邮件olefile[audio-transcription]pip install markitdown[audio-transcription]wav/mp3 音频转写pydub、SpeechRecognition[youtube-transcription]pip install markitdown[youtube-transcription]YouTube 视频转写youtube-transcript-api[az-doc-intel]pip install markitdown[az-doc-intel]Azure Document Intelligenceazure-ai-documentintelligence、azure-identity[az-content-understanding]pip install markitdown[az-content-understanding]Azure Content Understandingazure-ai-contentunderstanding1.2.0b1、azure-identity也可组合安装例如pip install markitdown[pdf, docx, pptx]只安装 PDF、DOCX、PPTX 三类文件的依赖。当转换器所需的可选依赖缺失时会抛出 MissingDependencyException错误信息会明确提示应安装哪个[feature]。插件系统与 markitdown-ocr插件管理MarkItDown 支持第三方插件默认关闭。列出已安装插件markitdown --list-plugins启用插件转换markitdown --use-plugins path-to-file.pdf插件通过 Python 的markitdown.pluginentry point 组被发现源码加载失败时仅告警并跳过。寻找可用插件可搜索#markitdown-plugin标签编写插件可参考 packages/markitdown-sample-plugin 示例。markitdown-ocr为嵌入图片提供 LLM Vision OCR官方提供了 markitdown-ocr 插件为 PDF、DOCX、PPTX、XLSX 转换器增加 OCR 能力——从嵌入图片中提取文字使用的是 MarkItDown 已有的llm_client/llm_model模式无需新增任何 ML 库或二进制依赖。安装pip install markitdown-ocr pip install openai # 或任意 OpenAI 兼容客户端使用Python APIfrom markitdown import MarkItDown from openai import OpenAI md MarkItDown( enable_pluginsTrue, llm_clientOpenAI(), llm_modelgpt-4o, ) result md.convert(document_with_images.pdf) print(result.markdown)命令行方式markitdown document.pdf --use-plugins --llm-client openai --llm-model gpt-4o如果未提供llm_client插件仍然加载但 OCR 会被静默跳过回退到标准内置转换器。可通过llm_prompt覆盖默认提取提示词以适配特殊文档也支持任意 OpenAI 兼容客户端如AzureOpenAI。工作原理插件源码调用MarkItDown(enable_pluginsTrue, ...)时MarkItDown 通过markitdown.pluginentry point 发现插件并调用其register_converters()插件用传入的 kwargs 创建 LLM Vision OCR 服务并以priority -1.0注册四个 OCR 增强转换器——先于优先级 0.0 的内置转换器执行。转换时OCR 转换器接手文件 → 提取文档内嵌图片 → 逐张发送给 LLM 提取文字 → 将结果内联插入保留文档结构与阅读顺序LLM 调用失败则该图片文字跳过、转换继续。提取出的文本块统一包装为*[Image OCR] extracted text [End OCR]*各格式的提取策略PDF 按位置提取内嵌图片并垂直阅读顺序交错插文扫描版 PDF无可用文本的页面自动按 300 DPI 整页渲染交给 LLMpdfplumber/pdfminer 打不开的损坏 PDF 会改用 PyMuPDF 渲染兜底DOCX 通过文档部件关系doc.part.rels提取图片并在 DOCX→HTML→Markdown 管线前注入占位符以保留结构PPTX 支持图片形状、带图占位形状与分组内图片先请求描述再以 OCR 兜底XLSX 按工作表提取图片根据锚点坐标换算单元格位置图片统一列在### Images in this sheet:小节下不混入表格行。常见问题排查输出缺少 OCR 文本最可能是未配置llm_client/llm_model插件未加载可运行markitdown --list-plugins确认是否显示ocrAPI 报错时插件以警告形式透传并继续转换请检查 API Key、配额及所选模型是否支持视觉输入。Azure Content Understanding云端多模态高保真转换当内置或 Document Intelligence 转换器能力不足时可选用 Azure Content UnderstandingCU它提供更高质量的转换并支持结构化字段提取输出为 YAML front matter、多模态文档、图片、音频、视频以及可配置分析器。安装pip install markitdown[az-content-understanding]能力对比能力内置转换器Azure Document IntelligenceAzure Content Understanding文档转换离线、按格式提取云端布局提取云端多模态提取结构化字段不支持本集成不暴露分析器字段输出为 YAML front matter自定义分析器不支持本集成不可配置支持cu_analyzer_id音频与视频仅基础音频无视频不支持音频与视频分析器成本仅本地计算可计费的 Azure API 调用可计费的 Azure API 调用CLI 用法markitdown path-to-file.pdf --use-cu --cu-endpoint content_understanding_endpoint端点也可一次性写入环境变量之后只需--use-cuexport MARKITDOWN_CU_ENDPOINTcontent_understanding_endpoint markitdown path-to-file.pdf --use-cuPython API零配置自动路由from markitdown import MarkItDown # 零配置——按文件类型自动选择分析器 md MarkItDown(cu_endpointcontent_understanding_endpoint) result md.convert(report.pdf) # 文档 → prebuilt-documentSearch result md.convert(meeting.mp4) # 视频 → prebuilt-videoSearch result md.convert(call.wav) # 音频 → prebuilt-audioSearch print(result.markdown)自定义分析器领域字段提取md MarkItDown( cu_endpointcontent_understanding_endpoint, cu_analyzer_idmy-invoice-analyzer, ) result md.convert(invoice.pdf) print(result.markdown) # 输出包含带提取字段的 YAML front matter # --- # contentType: document # fields: # VendorName: CONTOSO LTD. # InvoiceDate: 2019-11-15 # --- # !-- page 1 -- # ...当设置了cu_analyzer_id时转换器会根据分析器的模态modality自动将其限定到兼容的文件类型文档类分析器可处理文档与图片音视频分析器只处理对应模态不兼容的类型自动路由到默认预构建分析器源码实现。限制路由范围以控制成本每次 CU 路由格式的convert()调用都是一次可计费的 Azure API 调用。可用cu_file_types限制哪些格式走 CUfrom markitdown.converters import ContentUnderstandingFileType md MarkItDown( cu_endpointcontent_understanding_endpoint, cu_file_types[ContentUnderstandingFileType.PDF], # 仅 PDF 使用 CU )从 ContentUnderstandingFileType 枚举 可见支持的格式文档类pdf/docx/pptx/xlsx/html/txt/md/rtf/xml、邮件eml/msg、图片jpeg/png/bmp/tiff/heif、视频mp4/m4v/mov/avi/mkv/webm/flv/wmv、音频wav/mp3/m4a/flac/ogg/aac/wma。认证上未显式传入credential时依次尝试AZURE_API_KEY环境变量与DefaultAzureCredential。Azure Document Intelligence使用 Microsoft Document Intelligence 进行转换CLImarkitdown path-to-file.pdf -o document.md -d -e document_intelligence_endpoint端点也可写入环境变量之后只需-dexport MARKITDOWN_DOCINTEL_ENDPOINTdocument_intelligence_endpoint markitdown path-to-file.pdf -o document.md -dPython APIfrom markitdown import MarkItDown md MarkItDown(docintel_endpointdocument_intelligence_endpoint) result md.convert(test.pdf) print(result.markdown)从 DocumentIntelligenceConverter 源码 可以看到实现要点构造参数支持endpoint、api_version、credential、file_types枚举见 DocumentIntelligenceFileType覆盖 docx/pptx/xlsx/html/pdf/jpeg/png/bmp/tiffaccepts()依据扩展名与 MIME 前缀判断。转换调用begin_analyze_document(model_idprebuilt-layout, ...)输出内容格式固定为markdown源码中因 SDK 枚举导入 bug 暂用字符串常量替代。针对 PDF/图片等可 OCR 类型启用FORMULAS公式提取、OCR_HIGH_RESOLUTION高分辨率 OCR、STYLE_FONT字体样式提取三个分析特性office 类文件docx/pptx/xlsx/html不支持 OCR 特性返回空列表。最后会剥离 Doc Intelligence 生成的!--...--注释再返回 Markdown。认证与 CU 一致未提供credential时优先读AZURE_API_KEY否则回退DefaultAzureCredential。Docker 使用仓库根目录提供 Dockerfile可构建镜像并运行docker build -t markitdown:latest . docker run --rm -i markitdown:latest ~/your-file.pdf output.md安全注意事项MarkItDown 以当前进程的权限执行 I/O与open()或requests.get()类似会访问进程本身能访问的资源。因此净化输入不要把不可信输入直接交给 MarkItDown。在托管或服务端场景中如果输入的任一部分可能受不可信用户或系统控制必须先验证和限制——包括限制文件路径、限定 URI scheme 与网络目标、阻断对私有地址、loopback、link-local 或云元数据服务地址的访问。只调用你需要的转换方法优先使用最窄的转换 API。convert()是有意宽松的入口能处理本地文件、远程 URI 和字节流若只需读本地文件调用convert_local()若需更多控制 URI 抓取自行requests.get()后把响应对象传给convert_response()需要最大控制时自行打开输入流并调用convert_stream()。详细说明参见 根目录 README 的安全章节。运行测试与参与开发若想验证实现或参与贡献可进入包目录并使用hatch运行测试详见 READMEcd packages/markitdown pip install hatch hatch shell hatch test提交 PR 前运行pre-commit run --all-files。仓库内还提供了大量针对各转换器的测试用例如 test_cli_vectors.py、test_docx_math.py、test_pdf_tables.py 等可作为理解各格式转换行为的参考。小结MarkItDown 以转换为 Markdown 供 LLM 与文本分析消费为设计目标提供了覆盖绝大多数常见办公与媒体格式的内置转换器、按优先级调度的转换器注册机制、可插拔的第三方插件体系以及可选的 Azure Document Intelligence 与 Content Understanding 云端高保真方案。实际使用时按格式安装对应可选依赖、按输入源选择最窄的转换方法convert_local/convert_stream/convert_uri/convert_response、在不可信环境严格控制输入即可搭建一条稳健、可扩展的文档转 Markdown 管线。赞分享人工智能AI 应用MCP 服务【免费下载链接】markitdownPython tool for converting files and office documents to Markdown.项目地址https://gitcode.com/GitHub_Trending/ma/markitdown点击查看免费下载相关推荐Markdown PDF将Markdown文件轻松转换为多种格式Markdown PDF将Markdown文件轻松转换为多种格式 项目介绍 Markdown PDF 是一个强大的 Visual Studio Code 扩展开发工具文档终极文档转换神器MarkitDown一键将Office文件转为Markdown终极文档转换神器MarkitDown一键将Office文件转为Markdown 还在为文档格式转换而烦恼吗 MarkitDown 是一个强大的 Pyth人工智能AI 应用MCP 服务Haystack MarkItDownConverter 集成指南用微软 MarkItDown 将多格式文件本地转换为 Markdown 文档Haystack MarkItDownConverter 集成指南用微软 MarkItDown 将多格式文件本地转换为 Markdown 文档 MarkItD人工智能大模型RAGAI AgentNLP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考