Конвертировать PDF в Markdown, чтобы экономить токены LLM: руководство по MarkItDown
Отправляя PDF напрямую в Claude или любой другой LLM, вы незаметно жжёте токены: каждая страница ещё и превращается в картинку. Сконвертируйте файл в Markdown заранее с помощью MarkItDown, бесплатного open-source инструмента от Microsoft, и сократите расход токенов до 80%. Полное руководство: CLI, Python и сервер MCP.
Вы кидаете в Claude PDF на 20 страниц, задаёте один вопрос, и ответ приходит без проблем. Чего вы не видите, так это счёта. Ещё до того, как ваш вопрос вообще будет прочитан, этот документ может проглотить десятки тысяч токенов. Делайте так несколько раз в день в масштабе команды, и вы платите вполне реальные деньги за то, чтобы загружать сырые PDF в модель, которой с тем же успехом хватило бы чистого текста.
Есть бесплатное решение, и оно лежало на виду всё это время. Сконвертируйте файл в Markdown заранее. В этом руководстве подробно объясняется, почему PDF обходятся так дорого, сколько вы экономите и как сделать конвертацию одной командой с помощью MarkItDown, open-source конвертера от Microsoft.
Почему PDF стоит так много токенов
Вот та часть, о которой вам никто не рассказывает. Когда вы передаёте PDF в LLM, он читается не так, как читаете его вы. Согласно собственной документации Anthropic по PDF, система делает с каждой отдельной страницей две вещи:
- Она извлекает текст со страницы.
- Она превращает всю страницу в картинку, а затем отправляет эту картинку вместе с текстом.
Этот второй шаг и есть тихий пожиратель токенов. Модель не просто читает слова, она ещё и смотрит на снимок каждой страницы, чтобы понимать графики, таблицы и вёрстку. Вы платите за оба.
Цифры Anthropic делают эту цену осязаемой. Один только извлечённый текст занимает от 1 500 до 3 000 токенов на страницу в зависимости от плотности. Поверх этого каждая страница несёт стоимость картинки. Показательный факт из интеграции с Amazon Bedrock: полный визуальный режим PDF использует около 7 000 токенов на PDF из 3 страниц, тогда как простое извлечение текста тех же трёх страниц использует около 1 000 токенов. Это разрыв в 7 раз, и он целиком приходится на постраничные картинки.
Перенесите это на реальный документ. Плотный отчёт на 20 страниц может уйти куда-то в диапазон от 40 000 до 70 000 токенов, как только каждая страница будет растрирована в картинку. Вы ещё ничего не спросили. Вы просто открыли файл.
Оранжево-красный блок: это чистые накладные расходы, по одной картинке на каждую страницу, независимо от того, есть ли на странице вообще что-то стоящее, чтобы это разглядывать.
Решение: подавать вместо этого чистый Markdown
Большинству документов не нужно, чтобы их видели. Контракт, спецификация, научная статья, набор слайдов с маркированными списками: всё это текст, наряженный в вёрстку. Если убрать вёрстку и сохранить структуру, модель не теряет ничего, что ей действительно было нужно.
Именно это и даёт Markdown. Он настолько близок к простому тексту, насколько вообще может быть формат, но при этом всё равно кодирует структуру, которая важна: заголовки, списки, таблицы, ссылки, блоки кода, жирный шрифт и выделение. Массовые LLM обучены на огромных объёмах Markdown, поэтому они разбирают его нативно и без усилий. Microsoft, разработчик MarkItDown, формулирует это прямо: Markdown «крайне близок к простому тексту, с минимальной разметкой или форматированием, но всё же даёт способ представить важную структуру документа».
Сконвертируйте свой PDF в Markdown, и вы полностью избавляетесь от постраничных картинок. Никаких растрированных страниц, никаких накладных расходов на зрение, только структурированный текст, который модель и так собиралась прочитать. Вот откуда берётся экономия.
Знакомьтесь: MarkItDown, бесплатный конвертер от Microsoft
MarkItDown: это лёгкая утилита на Python от Microsoft, выпущенная под разрешительной лицензией MIT и один из самых «звёздных» инструментов для разработчиков на GitHub, с более чем 135 000 звёзд. Её единственная задача: превращать беспорядочные файлы из реального мира в чистый Markdown, который LLM может читать дёшево.
Это не только инструмент для PDF. Он конвертирует длинный список форматов:
- Документы PDF
- Word (
.docx) - Excel (
.xlsx,.xls) - PowerPoint (
.pptx) - Изображения, с метаданными EXIF и OCR для текста внутри картинки
- Аудио, с метаданными и расшифровкой речи
- Страницы HTML
- Данные CSV, JSON и XML
- Архивы ZIP (он обходит их содержимое)
- Ссылки YouTube (он вытаскивает расшифровку)
- Электронные книги EPub
- Сообщения Outlook (
.msg)
Один инструмент, один формат вывода, почти для всего, что вы иначе закинули бы в модель в виде тяжёлого бинарника.
Установить MarkItDown за 30 секунд
Это обычный пакет Python. Чтобы получить всё, установите экстру all:
pip install 'markitdown[all]'
Если вам важны только несколько форматов и вы хотите установку полегче, запросите только нужные экстры:
pip install 'markitdown[pdf, docx, pptx]'
Среди доступных опций есть [all], [pdf], [docx], [pptx], [xlsx], [xls], [outlook], [audio-transcription] и [youtube-transcription], и другие.
Сконвертировать PDF в Markdown из командной строки
Самый быстрый путь: это CLI. Укажите ей на файл и отправьте вывод куда захотите:
markitdown report.pdf -o report.md
Или используйте простое перенаправление, оно делает то же самое:
markitdown report.pdf > report.md
Можно также передать файл напрямую через пайп:
cat report.pdf | markitdown
Вот и весь рабочий процесс. Теперь у вас есть report.md, который вы можете отдать любой модели, положить в репозиторий или вставить в чат, и стоит он малую долю от оригинала.
Тяжёлый файл на входе, готовый для агента Markdown на выходе, одна команда между ними.
Сконвертировать в Python (и обработать целую папку пакетом)
Если вы встраиваете это в конвейер, API на Python столь же короток:
from markitdown import MarkItDown
md = MarkItDown(enable_plugins=False)
result = md.convert("report.pdf")
print(result.text_content)
result.text_content: это ваша строка Markdown, готовая к записи на диск или подаче в модель. Чтобы сконвертировать целую папку документов за один проход, пройдитесь по ней циклом:
from pathlib import Path
from markitdown import MarkItDown
md = MarkItDown(enable_plugins=False)
for src in Path("docs").glob("*.pdf"):
out = src.with_suffix(".md")
out.write_text(md.convert(str(src)).text_content, encoding="utf-8")
Запустите это один раз, и каталог дорогих PDF превращается в каталог дешёвого структурированного Markdown, который любой агент может читать на каждом ходу, не доплачивая налог за зрение.
Сколько вы на самом деле экономите?
Честный ответ: это зависит от документа, но выигрыш большой и стабильный. Вот примерная картина для типичного файла, насыщенного текстом.
| PDF, отправленный в модель | Сконвертировано в Markdown | |
|---|---|---|
| Извлечённый текст | да | да |
| Одна картинка на страницу | да, каждая страница | нет |
| Накладные расходы на зрение | полные | никаких |
| Документ на 3 страницы (цифра Bedrock) | ~7 000 токенов | ~1 000 токенов |
| Документ на 20 страниц (оценка) | от 40 000 до 70 000 токенов | от 10 000 до 15 000 токенов |
Для документа, ценность которого в его словах, конвертация в Markdown регулярно срезает расход токенов более чем наполовину, а часто на 80% и больше. В этой экономии нет никакой магии: вы просто больше не платите за то, чтобы отправлять снимок каждой страницы, когда модели нужен был только текст.
Markdown, конечно, не совсем бесплатен. Извлечённый текст всё равно стоит токенов. Но эта стоимость текста: это та нижняя граница, которую вы всё равно собирались оплатить. То, что вы убираете, это стопка постраничных картинок, лежащая поверх.
Когда оставить PDF (не переусердствуйте с оптимизацией)
Конвертация: это правильный выбор по умолчанию, а не универсальное правило. Оставляйте оригинальный PDF, когда визуальная вёрстка и есть суть:
- Графики и диаграммы, которые модели действительно нужно прочитать. Если смысл живёт в столбчатой диаграмме, картинка делает реальную работу.
- Отсканированные документы, которые представляют собой изображения текста. MarkItDown может пропустить их через OCR, но если распознавание шаткое, собственное зрение модели порой прочитает страницу надёжнее.
- Сложные визуальные таблицы или формы, где положение и выравнивание несут смысл, который сплющивается в Markdown.
- Инфографика и страницы с насыщенным дизайном, где вёрстка и есть содержание.
Для всего остального, а это большинство документов, выигрывает Markdown.
Вопрос никогда не звучит как «PDF или Markdown» в абстракции. Он звучит как «нужно ли модели увидеть эту страницу или просто прочитать её?»
За пределами PDF: Word, Excel, PowerPoint и даже YouTube
Та же команда в одну строку работает и с остальной вашей грудой документов. Документ Word, таблица, набор слайдов, веб-страница и даже расшифровка видео с YouTube: всё это точно так же сворачивается в чистый Markdown:
markitdown deck.pptx -o deck.md
markitdown budget.xlsx -o budget.md
markitdown https://www.youtube.com/watch?v=VIDEO_ID -o transcript.md
Если ваш рабочий процесс предполагает регулярное извлечение контекста из файлов Office или из веба и передачу его модели, привести всё сначала к Markdown: это одна из самых дешёвых и максимально окупающихся привычек, которые вы можете в себе выработать.
Подключить это к вашим агентам для кода через сервер MCP MarkItDown
Если вы работаете с агентами для кода, всё становится ещё лучше. MarkItDown поставляется с официальным сервером MCP (Model Context Protocol), так что ваш агент может конвертировать файлы сам, прямо посреди задачи, без того чтобы вы что-либо запускали вручную.
Установите его и запустите поверх stdio:
pip install markitdown-mcp
markitdown-mcp
Сервер предоставляет единственный инструмент, convert_to_markdown(uri), где uri может быть любым URI вида http:, https:, file: или data:. Подключите его к агенту один раз, и он сможет вытащить PDF, таблицу или веб-страницу и превратить её в Markdown по требованию, всё время платя по ценам текстовых токенов, а не по ценам зрения.
Это ровно тот случай, который накапливается, когда вы запускаете больше одного агента. В AgentsRoom, кокпите для нескольких агентов, вы настраиваете сервер MCP один раз, и каждый агент в комнате его наследует. Сконвертируйте свои справочные документы в .md, закоммитьте их в репозиторий, и каждый агент будет читать дешёвый структурированный текст на каждом ходу вместо того, чтобы заново растрировать один и тот же PDF снова и снова. Та же дисциплина, что держит одиночную сессию лёгкой, держит весь флот по карману, а это важно, когда вы запускаете агентов для кода параллельно и каждый из них читает ваш общий контекст.
Это также естественно сочетается с тем, как хорошие конфигурации агентов уже управляют контекстом. Если вы ведёте файл контекста AGENTS.md, нацеливание его на лёгкие .md-справки вместо сырых PDF держит окно контекста узким, а это, как мы разбирали в приёме с канарейкой для отлова дрейфа контекста, и есть половина дела в любой долгой сессии.
Вывод
Подача сырых PDF в LLM: это налог, который вы платили, сами того не замечая, потому что каждая страница тихо превращается в картинку. MarkItDown убирает этот налог бесплатно: одна команда превращает почти любой файл в чистый Markdown, вы сбрасываете до 80% стоимости в токенах, и модель отвечает так же хорошо, а часто и лучше, потому что читает структуру вместо того, чтобы щуриться на снимки страниц.
Сначала конвертируйте, потом спрашивайте. И ваш счёт за токены, и ваше окно контекста скажут вам спасибо.
Готовы запустить это на целую команду агентов вместо одного терминала? Скачайте AgentsRoom, посмотрите, что поддерживает каждый агент, в матрице совместимости провайдеров, и узнайте больше о поддержке нескольких провайдеров.
Скачать AgentsRoom
Запускай агентов Claude на всех проектах из одного окна.
Приложение-компаньон: следите за агентами на ходу
Используйте Claude, Codex, Gemini CLI или другого поставщика AI.
Отправляйте баги и запросы прямо в ваш публичный бэклог.
Взгляд на AgentsRoom в действии.