Перейти к содержанию

MarkItDown — конвертация файлов в Markdown для LLM

MarkItDown — лёгкая Python-утилита от Microsoft (команда AutoGen) для конвертации файлов разных форматов — PDF, Word, Excel, PowerPoint, изображений, аудио, HTML, текстовых форматов (CSV/JSON/XML), ZIP, EPub и даже ссылок на YouTube — в Markdown. По опыту команды это один из самых удобных инструментов для подготовки документов и данных перед загрузкой в LLM.

Установка: pip install 'markitdown[all]'. Базовое использование из CLI — markitdown file.pdf > out.md, или из Python:

from markitdown import MarkItDown
md = MarkItDown(enable_plugins=False)
print(md.convert("file.docx").text_content)

Зачем Markdown для LLM

Опыт команды: модели лучше работают именно с Markdown, поэтому информацию перед подачей в LLM стоит сконвертировать. Это совпадает с позицией авторов проекта: ведущие LLM (например, GPT-4o) «понимают» Markdown нативно, поскольку обучались на больших объёмах такого текста, а сами конструкции Markdown токен-эффективны. При этом сохраняется структура документа — заголовки, списки, таблицы, ссылки.

Два пути конвертации: локальный и облачный

У инструмента есть два пути обработки — локальный и облачный. С точки зрения приватности ключевой вопрос — что остаётся на вашей машине, а что уходит в чужое облако.

Что обрабатывается локально (по умолчанию)

По умолчанию MarkItDown работает полностью локально. Встроенные конвертеры для PDF (с текстовым слоем), Office-форматов (Word, Excel, PowerPoint), HTML, CSV/JSON/XML, EPub и ZIP выполняются офлайн, на локальных вычислительных ресурсах, без обращения в интернет. Сюда же относится базовое извлечение текста из изображений (EXIF/OCR). Затраты — только локальные вычисления.

Для строго локальной работы с файлами на диске документация рекомендует вызывать узкий метод convert_local() вместо универсального convert(): последний умеет ходить в сеть и открывать произвольные URI.

Что уходит в облако

Внешние сервисы подключаются при явной настройке — и именно на это важно обращать внимание:

  • Azure Document Intelligence (docintel_endpoint, флаг -d -e) и Azure Content Understanding (cu_endpoint, --use-cu) — облачные, платные вызовы Azure API. Они дают более качественный OCR/раскладку, таблицы, формулы и мультимодальность (аудио/видео, извлечение полей). Данные шифруются в транзите по HTTPS, временно сохраняются в Azure Storage в регионе ресурса и передаются в Azure OpenAI для обработки; результаты хранятся до 24 часов, после чего удаляются.
  • Описание изображений через LLM и плагин markitdown-ocr требуют передать llm_client / llm_model (OpenAI или совместимый сервис) — то есть содержимое изображений отправляется в сторонний LLM.
  • Расшифровка аудио — важный подводный камень. Хотя встроенная транскрипция числится среди «офлайн»-возможностей и по README может так показаться, на самом деле она вызывает recognizer.recognize_google(audio) — то есть отправляет звук в облачный сервис распознавания речи Google. Это не локальная обработка.
  • YouTube-ссылки и любые URL — расшифровка и загрузка тянутся из сети.

Как остаться полностью офлайн (приватность данных)

Чтобы данные не покидали периметр:

  • Ставьте только нужные офлайн-зависимости (например, markitdown[pdf,docx,pptx]), а не весь набор [all].
  • Не передавайте llm_client, docintel_endpoint и cu_endpoint, не используйте флаги --use-cu и -d, не включайте плагины, обращающиеся наружу (enable_plugins=False).
  • Конвертируйте только локальные файлы методом convert_local(); не подавайте YouTube- и удалённые URL-источники.
  • Помните, что аудио встроенными средствами приватно обработать не получится — для локальной транскрипции понадобится отдельный движок распознавания речи вне MarkItDown.

При таком наборе только встроенных конвертеров инструмент работает без GPU и без интернета — это и обеспечивает приватность обрабатываемых документов.

Источники