Каждый день в Telegram-канале - что нового в вайб-кодинге: инструменты, примеры, ошибки. Подпишись, чтобы быть в курсе.
Что происходит с PDF в Claude и почему страница стоит 1500-3000 токенов?
В официальной документации Anthropic это описано прямо в три шага:
Система конвертирует каждую страницу документа в изображение. Текст с каждой страницы извлекается и предоставляется вместе с изображением страницы. Claude анализирует и текст, и изображения, чтобы лучше понять документ.
Звучит логично, но цена обработки растёт линейно по страницам. И вот цифра, которая объясняет, почему лимит подписки кончается за один PDF:
Каждая страница обычно использует 1500-3000 токенов в зависимости от плотности контента. Поскольку каждая страница конвертируется в изображение, к ней применяется та же стоимость, что и для обычных изображений.
Чтобы понять, насколько это много - на Bedrock у Anthropic измерили один и тот же 3-страничный PDF в двух режимах. В текстовом режиме (Converse Document Chat) - ~1000 токенов. С визуальным анализом (Claude PDF Chat) - ~7000 токенов. Включение картинок делает обработку в 7 раз дороже.
Скриншоты страниц - ещё хуже. Рубен Хассид в своём гайде по экономии лимитов Claude приводит цифру:
Один скриншот 1000×1000 пикселей стоит примерно 1300 токенов. Туго обрезанный скриншот можно сжать до меньше 100 токенов.
Итого механика проста: PDF дорогой потому, что Claude не доверяет своему OCR. Он берёт и текст, и картинку, чтобы потом сверять одно с другим - и платишь за оба слоя одновременно. Я для тяжёлых документов делаю по-другому: сохраняю файл в Markdown в папку проекта и говорю Claude «вот документ, там лежит информация - растащи». И он растаскивает по своим файлам, дальше работает уже с разложенным текстом, не сжирая всё разом.
Сколько съедает PDF в типичной задаче?
Конкретные числа (модель Sonnet 4.x, input по $3 за миллион токенов):
| Подход | Токены (15 стр., 4 чата) | Стоимость |
|---|---|---|
| PDF загружен 4 раза напрямую | 15 × 2250 × 4 = 135 000 | ~$0.40 |
| PDF → Markdown + 4 чата | 15 × 300 × 4 = 18 000 | ~$0.054 |
| Экономия | −87% | −$0.35 |
И это только за один цикл из 4 запросов. Дальше работает prompt caching (TTL 5 минут по умолчанию, до 1 часа на расширенном тарифе, скидка до 90% на повторные вызовы внутри окна) - экономия растёт кратно.
Каждый раз, когда ты грузишь тот же PDF в новый чат - Claude его читает заново, кеш между чатами не переходит.
Каждый раз, когда ты грузишь PDF в новый чат, Claude перетокенизирует его целиком.
Если ты конвертируешь тот же 15-страничный PDF в Markdown один раз и потом тянешь его как .md файл в каждом новом чате - получается 2000 токенов вместо 135 000. Это и есть основной механизм экономии.
Для подписки Claude Pro эта математика становится ещё жёстче. Один 100-страничный отчёт может выжечь весь лимит на 5 часов. После конверсии в Markdown в тот же бюджет влезает 10+ таких документов.
Какие лимиты Anthropic API на PDF в 2026?
Документация Anthropic фиксирует лимиты прямо в шапке (актуально на 31 мая 2026):
| Требование | Лимит |
|---|---|
| Максимальный размер запроса | 32 МБ (varies by platform) |
| Максимум страниц на запрос | 600 (100 для моделей с 200K-token context) |
| Формат | стандартный PDF без паролей и шифрования |
Оба лимита применяются ко всему телу запроса, включая контент рядом с PDF. Для больших PDF используй Files API и ссылайся через
file_id, чтобы держать тело запроса маленьким.
В Claude.ai (потребительский веб) лимиты другие: максимум 500 МБ на файл, до 20 файлов в чате. Но визуальный анализ работает только для PDF до 100 страниц - дальше Claude видит только текст без графиков и диаграмм.
Три способа отправить PDF через API:
- По URL -
"source": {"type": "url", "url": "..."}- самый простой, если документ лежит онлайн. - В Base64 -
"source": {"type": "base64", "media_type": "application/pdf", "data": "..."}- для локальных файлов. - Через Files API -
"source": {"type": "file", "file_id": "file_abc123"}- для повторных запросов; нужен beta-headeranthropic-beta: files-api-2025-04-14.
Files API - главный способ сэкономить при работе с одним и тем же PDF из разных чатов. Загружаешь один раз, получаешь file_id, потом всё общение работает по нему. С cache_control: ephemeral повторные вызовы стоят 10% от обычной цены.
Anthropic ещё даёт официальный совет, как минимизировать расход:
Плотные PDF (много мелкого шрифта, сложные таблицы, тяжёлая графика) могут заполнить контекстное окно до того, как ты упрёшься в лимит страниц. Попробуй разбить документ на секции; для больших файлов уменьшай разрешение встроенных изображений перед загрузкой.
Хочешь не только сэкономить токены, но и собрать связку, которая делает Claude стабильным? Конверсия PDF - один кирпичик контекст-инжиниринга. На практикуме за 3 эфира собираешь все три кита: ИИ-клон + Второй мозг + Контекст-инжиниринг. Эта связка превращает Claude из «помощника с галлюцинациями» в надёжный инструмент.
Способ 1: как настроить MarkItDown за 5 минут?
MarkItDown - официальный проект Microsoft, поддерживается командой AutoGen. На GitHub - 134 тысячи звёзд и 9.2 тысячи форков (на конец мая 2026). Назначение указано прямо в README:
Лёгкая Python-утилита для конверсии разных файлов в Markdown - для использования с LLM и пайплайнами текстового анализа.
Что она поддерживает:
- Документы: PDF, DOCX, PPTX, XLSX
- Веб: HTML, JSON, XML, CSV
- Медиа: аудио с транскрипцией, изображения с EXIF и OCR, YouTube-видео (через captions)
- Архивы: ZIP, EPub
- Прочее: все вложения внутри Outlook MSG
Установка
Требование: Python 3.10+ (на macOS обычно уже стоит, на Windows нужно поставить отдельно).
pip install 'markitdown[all]'Если не нужны все форматы - можно выборочно:
pip install 'markitdown[pdf, docx, pptx]'Конверсия одного файла
Самый простой случай:
markitdown document.pdf > document.mdПосле этого в текущей папке появится document.md, который ты тащишь в Claude Code через @document.md или просто кладёшь рядом с проектом.
Python API
Если хочешь встроить в свой скрипт:
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("research-paper.pdf")
print(result.text_content)
# Можно сразу сохранить:
with open("research-paper.md", "w") as f:
f.write(result.text_content)Что MarkItDown НЕ умеет
- OCR для сканированных PDF - вернёт пустоту. Для сканов нужен PyMuPDF4LLM или Docling.
- Сложный layout с многоколоночной разметкой - может сломать порядок чтения.
- Embedded URLs из PDF - не сохраняет.
Для простых PDF (отчёты, статьи, документация) MarkItDown - оптимальный выбор. Универсал, который ставится за минуту и не требует знания Python.
Способ 2: что даёт PyMuPDF4LLM и когда он лучше?
MarkItDown берёт ширину форматов, PyMuPDF4LLM - глубину работы с PDF.
Лёгкое расширение PyMuPDF, которое превращает PDF в чистые структурированные данные с минимальной настройкой.
Версия на 31 мая 2026 - 1.27.2.3 (релиз 24 апреля 2026).
Что внутри
- Многоколоночные страницы с правильным порядком чтения
- Таблицы переводятся в GitHub-flavored Markdown
- Header/footer удаляются автоматически
- Картинки извлекаются с относительными ссылками в отдельной папке
- Smart OCR: применяется только к нечитаемым регионам, экономит ~50% времени
- Native C-движок, GPU не нужен
Установка
pip install pymupdf4llmИспользование
import pymupdf4llm
# Базовый сценарий - сразу в Markdown:
md_text = pymupdf4llm.to_markdown("document.pdf")
# Сохранить:
with open("document.md", "w") as f:
f.write(md_text)В одну строку, как обещано:
python3 -c "import pymupdf4llm; \
open('document.md','w').write(pymupdf4llm.to_markdown('document.pdf'))"Когда выбрать PyMuPDF4LLM, а не MarkItDown
- Когда в PDF много ссылок, которые нужно сохранить (MarkItDown их теряет).
- Когда документ сканированный и нужен OCR.
- Когда нужна скорость на тысячах файлов локально - native C-движок быстрее Python-обёрток.
- Когда нужны изображения из PDF в отдельной папке для дальнейшей обработки.
Лицензионный нюанс (важно для бизнеса)
PyMuPDF4LLM - под двойной лицензией: AGPL v3 ИЛИ коммерческая Artifex.
AGPL означает: если используешь библиотеку в публичном SaaS - обязан публиковать весь исходный код своего сервиса под той же AGPL. Для внутреннего использования (твой скрипт на твоём ноуте) - никаких ограничений.
Для коммерческой разработки без раскрытия кода - покупаешь лицензию у Artifex (artifex.com). Цены публично не опубликованы, запрашиваются у sales.
Если делаешь продукт для клиентов - проверь лицензию в начале. MarkItDown (MIT) и Docling (MIT) безопаснее для SaaS.
Способ 3: как подключить MarkItDown MCP-сервер к Claude Code?
Если MarkItDown в режиме CLI - это «конвертирую руками заранее», то MCP-сервер - это «Claude Code сам решает, когда конвертировать».
Установка
pip install markitdown-mcpКонфигурация в Claude Code
Создаём (или дополняем) файл .mcp.json в корне проекта:
{
"mcpServers": {
"markitdown": {
"command": "docker",
"args": ["run", "--rm", "-i", "markitdown-mcp:latest"]
}
}
}Чтобы MarkItDown видел локальные файлы - монтируем папку:
{
"mcpServers": {
"markitdown": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "/Users/your-user/Documents:/workdir",
"markitdown-mcp:latest"
]
}
}
}После добавления конфига - перезапускаешь Claude Code, и в списке MCP-серверов появляется markitdown.
Как пользоваться
В Claude Code просто говоришь:
Сконвертируй /workdir/report.pdf в Markdown и проанализируй основные тезисы.Claude сам вызывает convert_to_markdown(uri), получает Markdown, и работает с ним - PDF в контекст не загружается вообще.
Поддерживаемые URI
file://- локальные файлыhttp://,https://- онлайн-документыdata:- inline-данные (Base64)
Безопасность
Из официального README:
Сервер не поддерживает авторизацию и работает с правами того пользователя, под которым запущен.
По умолчанию биндится на localhost. Если запускаешь по HTTP/SSE (опция --http --host 127.0.0.1 --port 3001) - не открывай порт наружу без reverse-proxy с авторизацией.
Community-альтернатива
Есть форк trsdn/markitdown-mcp с тремя tools вместо одного: convert_file, list_supported_formats, convert_directory (batch). Поддерживает 29+ форматов.
pipx install git+https://github.com/trsdn/markitdown-mcp.gitХороший выбор, если работаешь с большими партиями файлов и хочешь конвертить целые папки одной командой через Claude.
Какой способ выбрать под свою задачу?
Расширенная таблица сравнения:
| Инструмент | Звёзды GitHub | Лучше всего для | Скорость | Лицензия |
|---|---|---|---|---|
| MarkItDown (Microsoft) | 134k | PDF + DOCX + PPTX + YouTube + аудио | Средняя | MIT |
| PyMuPDF4LLM (Artifex) | - | Native PDF, OCR, embedded URLs | Самая высокая (без GPU) | AGPL v3 / коммерческая |
| Docling (IBM Research) | 60.7k | Production RAG, таблицы, формулы | Средняя | MIT |
| Marker (datalab.to) | 35.6k | Научные PDF, arXiv, формулы | Высокая (с GPU) | GPL-3.0 + Open Rail-M |
| MinerU | - | CJK-документы (китайский/японский) | Высокая | Apache-2.0 |
Marker даёт впечатляющие цифры точности на бенчмарках:
0.18 секунды на страницу на H100 GPU (122 страницы в секунду). Точность 95.67% против Llamaparse (84.24%) и Mathpix (86.43%). На научных статьях - 96.67%.
Но Marker требует GPU для нормальной скорости и тащит модели машинного обучения. Для большинства задач (обычные текстовые PDF) - PyMuPDF4LLM или MarkItDown справятся без GPU и за секунды.
Простое решающее правило
- Один-два PDF, нужно быстро - MarkItDown CLI.
- Десятки PDF, нужна автоматизация - MarkItDown MCP-сервер или PyMuPDF4LLM в скрипте.
- PDF с ссылками и картинками, важно сохранить структуру - PyMuPDF4LLM.
- Production RAG для бизнеса, нужна стабильность таблиц - Docling.
- Научные статьи с формулами - Marker.
- Не хочу думать, пусть Claude сам конвертит - MarkItDown MCP-сервер.
Как написать готовый скрипт автоконверсии для папки документов?
Пример из практики: представь, у тебя 40 PDF и PPTX отчётов от клиентов в одной папке - брокерские выписки, договоры, презы. В лоб грузить эту папку в Claude бесполезно: контекстное окно забьётся информацией ещё до первого ответа. Прогоняешь всю папку через скрипт ниже за один проход - и работаешь дальше с лёгкими .md файлами вместо тяжёлых PDF.
Сохрани этот скрипт как scripts/docs-to-md.sh в корне проекта:
#!/bin/bash
# docs-to-md.sh - конвертит все документы в папке в Markdown через MarkItDown
# Использование: bash docs-to-md.sh ./documents
set -e
INPUT_DIR="${1:-./documents}"
OUTPUT_DIR="${INPUT_DIR}/_md"
mkdir -p "$OUTPUT_DIR"
echo "Сканирую $INPUT_DIR..."
for file in "$INPUT_DIR"/*.{pdf,docx,pptx,xlsx}; do
[ -f "$file" ] || continue
basename=$(basename "$file")
name="${basename%.*}"
output="$OUTPUT_DIR/${name}.md"
if [ -f "$output" ] && [ "$output" -nt "$file" ]; then
echo "Пропускаю $basename (уже сконвертирован)"
continue
fi
echo "Конвертирую $basename..."
markitdown "$file" > "$output"
done
echo "Готово. Результаты в $OUTPUT_DIR"Сделай его исполняемым:
chmod +x scripts/docs-to-md.shЗапуск:
bash scripts/docs-to-md.sh ./reportsПосле прогона у тебя в ./reports/_md/ лежат .md версии всех документов. В Claude Code тащишь их через @reports/_md/ - и работаешь с уже сжатыми текстами вместо PDF.
Скрипт автоматически пропускает уже сконвертированные файлы (если .md новее чем исходник) - повторный запуск дешёвый, не пересчитывает всё.
Идемпотентность и инкрементальная конверсия
Если хочешь, чтобы скрипт ловил даже изменённые PDF (которые пересохранили с тем же именем) - добавь content-hash проверку:
hash=$(shasum -a 256 "$file" | cut -d' ' -f1)
hash_file="$OUTPUT_DIR/.${name}.sha256"
if [ -f "$hash_file" ] && [ "$(cat "$hash_file")" = "$hash" ]; then
echo "Пропускаю $basename (хэш совпадает)"
continue
fi
markitdown "$file" > "$output"
echo "$hash" > "$hash_file"Эта версия пересчитает файл только если его содержимое изменилось.
Когда PDF в Claude всё-таки лучше Markdown?
Три случая, когда конверсия в Markdown проигрывает:
1. Визуальный анализ диаграмм и графиков
Если Claude должен «прочитать» график - кривую цен, схему процесса, диаграмму архитектуры - в Markdown этой информации нет. Markdown сохраняет только подписи к рисункам, а сам рисунок теряется.
Решение: грузишь PDF, явно включаешь visual режим. На Claude API - флаг автоматически работает, на AWS Bedrock нужен citations flag.
Claude анализирует и текст, и изображения, чтобы лучше понять документ.
2. Сложные таблицы с merged cells
Markdown-таблицы плоские. Если в PDF таблица со слитыми ячейками, многоуровневыми заголовками или вложенными подтаблицами - конвертер либо сплющит её, либо потеряет связи.
Решение: либо PDF напрямую, либо Docling (он лучше всех держит сложные таблицы), либо ручная разметка post-conversion.
3. Документ как артефакт с привязкой к страницам
Юридический документ, договор, протокол - тут важно цитировать с указанием «страница 7, абзац 3». В Markdown номера страниц теряются.
Решение: PDF + Files API + prompt caching. Один раз загрузил, потом обращаешься по file_id, Claude видит pagination и может ссылаться на конкретные страницы.
Короткие документы
Если PDF меньше 2 страниц и ты используешь его один раз - конверсия не окупается. 5000 токенов за PDF против 800 за Markdown - не та экономия, ради которой стоит ставить MarkItDown.
Граница окупаемости - примерно 5+ страниц или 2+ использования одного документа. Меньше - грузи PDF напрямую, больше - конвертируй.
Какие 5 ошибок чаще всего встречаются с PDF в Claude?
1. Грузить один PDF в новый чат каждый раз
Claude Pro даёт лимит сообщений на 5 часов - один 50-страничный отчёт может выжечь весь лимит ещё до того, как ты задал второй вопрос.
У меня для этого простой принцип: одна задача - один чат. Когда у тебя ИИ начинает жрать немыслимое количество токенов - это говорит о том, что ты всё пихаешь в один чат и тащишь туда PDF снова и снова. Я в каждом окне держу одну микрозадачу. Документ конвертирую в Markdown один раз и потом тащу .md в каждое новое окно как файл рядом с проектом. Кругляш контекстного окна не загорается жёлтым.
Если ты грузишь один и тот же 15-страничный PDF в 4 разных чата, ты только что сжёг 180 000 токенов на документе, который можно было сконвертировать в 2000 токенов чистого текста.
Решение: либо конверсия в Markdown один раз, либо Files API с file_id и prompt caching.
2. Скриншот вместо текста
Видел кучу раз: человек хочет показать Claude кусок кода или таблицу, делает скриншот всего экрана 1920×1080 - и удивляется, что лимит кончился за 5 запросов.
Скриншот 1000×1000 пикселей стоит ~1300 токенов. Тот же кусок текста скопированный руками - 50-100 токенов. Разница - 13-26 раз.
Решение: скриншоты обрезать туго (только важная часть), а лучше копировать текст напрямую.
3. Сканированный PDF без OCR
MarkItDown не умеет OCR. Если ты конвертируешь скан - на выходе пустой .md файл (или 3 строчки с шумом).
Решение: для сканов - PyMuPDF4LLM (со встроенным smart OCR) или Docling.
4. Игнорирование лимита 100 страниц
Документация Anthropic даёт лимит 600 страниц на запрос - но по факту для моделей с 200K контекстом (Sonnet 4.x, Opus 4.x) лимит 100 страниц. На 600 рассчитаны старые модели или специальные тарифы.
Если грузишь 150-страничный отчёт в Sonnet 4.6 - получишь ошибку или (хуже) Claude обработает только первые 100 страниц и сделает вид, что прочитал весь документ.
Решение: разбивай длинные PDF на части перед загрузкой. Или конвертируй в Markdown - там лимита страниц нет, только токены.
5. Не использовать prompt caching на повторных запросах
Если работаешь с одним и тем же документом через API - оборачивай его в cache_control: ephemeral. Повторные вызовы за 5 минут стоят 10% от первоначальной цены. Один запрос дороже, остальные - со скидкой 90%.
Решение: для всего что грузишь больше одного раза - prompt caching включён по умолчанию.
Что дальше: контекст-инжиниринг и три кита
PDF в Markdown - один из приёмов экономии токенов. Сам по себе он не делает Claude точнее в ответе. Точность даёт контекст-инжиниринг - дисциплина того, что ты кладёшь в контекст модели до момента, когда задаёшь вопрос.
Если у тебя в CLAUDE.md 800 строк, в проекте 10 ненужных MCP-серверов, и ты тащишь PDF на 100 страниц - конверсия в Markdown спасёт от одной утечки, но три другие останутся. Поэтому в гайдах:
- Куда уходят токены в Claude Code - 9 паттернов утечки контекста, не только PDF.
- Контекст-инжиниринг в 2026 - канон Anthropic + Karpathy, как управлять контекстом системно.
- Plan Mode в Claude Code - режим планирования до того, как Claude начнёт писать код.
И на практикуме за 3 эфира собираешь полную связку - ИИ-клон + Второй мозг + Контекст-инжиниринг. Три кита, без которых ИИ галлюцинирует и сжигает лимиты.
Источники
- Anthropic - PDF support (platform.claude.com)
- Anthropic - Upload files to Claude (support.claude.com)
- Microsoft MarkItDown на GitHub
- MarkItDown MCP-сервер
- PyMuPDF4LLM - официальная документация
- Docling на GitHub (IBM Research)
- Marker на GitHub (datalab.to)
- Ruben Hassid - How to stop hitting Claude usage
- MindStudio - Convert files to Markdown, reduce AI tokens
- Digitnaut - How to Convert PDF to Markdown for Claude in 2026
- File2Markdown - Markdown for Claude
- Codeitbro - Tips to stop hitting Claude usage limits
- Community fork trsdn/markitdown-mcp
- Skill pdf-to-markdown на mcp.directory
Полная схема по вайб-кодингу за вечер: ИИ-клон + Второй мозг + Контекст-инжиниринг. 3 эфира, 2 000 ₽. Записи остаются у тебя.

