Как загружать PDF в Claude Code без потери токенов: 3 способа в 2026

Опубликовано 31.05.202616 мин чтенияБазовый
На датчике токенов: PDF загоняет стрелку в красную зону потерь, Markdown — в зеленую экономии.
Что узнаешь
  • Поймёшь, почему страница PDF стоит 1500-3000 токенов в Claude Code
  • Сэкономишь до 87% токенов через конверсию в Markdown за один проход
  • Поставишь MarkItDown за 5 минут и проверишь на своём PDF
  • Подключишь MarkItDown MCP-сервер прямо в Claude Code
  • Узнаешь когда PDF в Claude всё-таки лучше Markdown
Применить за 30 мин
Сэкономит 8 ч
Базовый
5просмотров
Что понадобится

Каждый день в Telegram-канале - что нового в вайб-кодинге: инструменты, примеры, ошибки. Подпишись, чтобы быть в курсе.

Что происходит с PDF в Claude и почему страница стоит 1500-3000 токенов?

В официальной документации Anthropic это описано прямо в три шага:

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

Anthropic, https://platform.claude.com/docs/en/docs/build-with-claude/pdf-support

Звучит логично, но цена обработки растёт линейно по страницам. И вот цифра, которая объясняет, почему лимит подписки кончается за один PDF:

Каждая страница обычно использует 1500-3000 токенов в зависимости от плотности контента. Поскольку каждая страница конвертируется в изображение, к ней применяется та же стоимость, что и для обычных изображений.

Anthropic, https://platform.claude.com/docs/en/docs/build-with-claude/pdf-support

Чтобы понять, насколько это много - на Bedrock у Anthropic измерили один и тот же 3-страничный PDF в двух режимах. В текстовом режиме (Converse Document Chat) - ~1000 токенов. С визуальным анализом (Claude PDF Chat) - ~7000 токенов. Включение картинок делает обработку в 7 раз дороже.

Скриншоты страниц - ещё хуже. Рубен Хассид в своём гайде по экономии лимитов Claude приводит цифру:

Один скриншот 1000×1000 пикселей стоит примерно 1300 токенов. Туго обрезанный скриншот можно сжать до меньше 100 токенов.

Ruben Hassid, https://ruben.substack.com/p/how-to-stop-hitting-claude-usage

Итого механика проста: 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 перетокенизирует его целиком.

codeitbro, https://www.codeitbro.com/blog/tips-to-stop-hitting-claude-usage-limits

Если ты конвертируешь тот же 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, чтобы держать тело запроса маленьким.

Anthropic, https://platform.claude.com/docs/en/docs/build-with-claude/pdf-support

В Claude.ai (потребительский веб) лимиты другие: максимум 500 МБ на файл, до 20 файлов в чате. Но визуальный анализ работает только для PDF до 100 страниц - дальше Claude видит только текст без графиков и диаграмм.

Три способа отправить PDF через API:

  1. По URL - "source": {"type": "url", "url": "..."} - самый простой, если документ лежит онлайн.
  2. В Base64 - "source": {"type": "base64", "media_type": "application/pdf", "data": "..."} - для локальных файлов.
  3. Через Files API - "source": {"type": "file", "file_id": "file_abc123"} - для повторных запросов; нужен beta-header anthropic-beta: files-api-2025-04-14.

Files API - главный способ сэкономить при работе с одним и тем же PDF из разных чатов. Загружаешь один раз, получаешь file_id, потом всё общение работает по нему. С cache_control: ephemeral повторные вызовы стоят 10% от обычной цены.

Anthropic ещё даёт официальный совет, как минимизировать расход:

Плотные PDF (много мелкого шрифта, сложные таблицы, тяжёлая графика) могут заполнить контекстное окно до того, как ты упрёшься в лимит страниц. Попробуй разбить документ на секции; для больших файлов уменьшай разрешение встроенных изображений перед загрузкой.

Anthropic, https://platform.claude.com/docs/en/docs/build-with-claude/pdf-support

Хочешь не только сэкономить токены, но и собрать связку, которая делает Claude стабильным? Конверсия PDF - один кирпичик контекст-инжиниринга. На практикуме за 3 эфира собираешь все три кита: ИИ-клон + Второй мозг + Контекст-инжиниринг. Эта связка превращает Claude из «помощника с галлюцинациями» в надёжный инструмент.

Практикум по вайб-кодингу
+Твой второй мозг
3 вечера - стек, метод, первый проект
Старт 9–11 июня  ·  2 000 ₽
Записаться →

Способ 1: как настроить MarkItDown за 5 минут?

MarkItDown - официальный проект Microsoft, поддерживается командой AutoGen. На GitHub - 134 тысячи звёзд и 9.2 тысячи форков (на конец мая 2026). Назначение указано прямо в README:

Лёгкая Python-утилита для конверсии разных файлов в Markdown - для использования с LLM и пайплайнами текстового анализа.

Microsoft, https://github.com/microsoft/markitdown

Что она поддерживает:

  • Документы: PDF, DOCX, PPTX, XLSX
  • Веб: HTML, JSON, XML, CSV
  • Медиа: аудио с транскрипцией, изображения с EXIF и OCR, YouTube-видео (через captions)
  • Архивы: ZIP, EPub
  • Прочее: все вложения внутри Outlook MSG

Установка

Требование: Python 3.10+ (на macOS обычно уже стоит, на Windows нужно поставить отдельно).

bash
pip install 'markitdown[all]'

Если не нужны все форматы - можно выборочно:

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

Конверсия одного файла

Самый простой случай:

bash
markitdown document.pdf > document.md

После этого в текущей папке появится document.md, который ты тащишь в Claude Code через @document.md или просто кладёшь рядом с проектом.

Python API

Если хочешь встроить в свой скрипт:

python
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 в чистые структурированные данные с минимальной настройкой.

Artifex Software, https://pymupdf.readthedocs.io/en/latest/pymupdf4llm/

Версия на 31 мая 2026 - 1.27.2.3 (релиз 24 апреля 2026).

Что внутри

  • Многоколоночные страницы с правильным порядком чтения
  • Таблицы переводятся в GitHub-flavored Markdown
  • Header/footer удаляются автоматически
  • Картинки извлекаются с относительными ссылками в отдельной папке
  • Smart OCR: применяется только к нечитаемым регионам, экономит ~50% времени
  • Native C-движок, GPU не нужен

Установка

bash
pip install pymupdf4llm

Использование

python
import pymupdf4llm

# Базовый сценарий - сразу в Markdown:
md_text = pymupdf4llm.to_markdown("document.pdf")

# Сохранить:
with open("document.md", "w") as f:
    f.write(md_text)

В одну строку, как обещано:

bash
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 сам решает, когда конвертировать».

Установка

bash
pip install markitdown-mcp

Конфигурация в Claude Code

Создаём (или дополняем) файл .mcp.json в корне проекта:

json
{
  "mcpServers": {
    "markitdown": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "markitdown-mcp:latest"]
    }
  }
}

Чтобы MarkItDown видел локальные файлы - монтируем папку:

json
{
  "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:

Сервер не поддерживает авторизацию и работает с правами того пользователя, под которым запущен.

Microsoft, https://github.com/microsoft/markitdown/tree/main/packages/markitdown-mcp

По умолчанию биндится на 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+ форматов.

bash
pipx install git+https://github.com/trsdn/markitdown-mcp.git

Хороший выбор, если работаешь с большими партиями файлов и хочешь конвертить целые папки одной командой через Claude.

Какой способ выбрать под свою задачу?

Расширенная таблица сравнения:

ИнструментЗвёзды GitHubЛучше всего дляСкоростьЛицензия
MarkItDown (Microsoft)134kPDF + DOCX + PPTX + YouTube + аудиоСредняяMIT
PyMuPDF4LLM (Artifex)-Native PDF, OCR, embedded URLsСамая высокая (без GPU)AGPL v3 / коммерческая
Docling (IBM Research)60.7kProduction 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%.

datalab.to, https://github.com/datalab-to/marker

Но Marker требует GPU для нормальной скорости и тащит модели машинного обучения. Для большинства задач (обычные текстовые PDF) - PyMuPDF4LLM или MarkItDown справятся без GPU и за секунды.

Простое решающее правило

  1. Один-два PDF, нужно быстро - MarkItDown CLI.
  2. Десятки PDF, нужна автоматизация - MarkItDown MCP-сервер или PyMuPDF4LLM в скрипте.
  3. PDF с ссылками и картинками, важно сохранить структуру - PyMuPDF4LLM.
  4. Production RAG для бизнеса, нужна стабильность таблиц - Docling.
  5. Научные статьи с формулами - Marker.
  6. Не хочу думать, пусть Claude сам конвертит - MarkItDown MCP-сервер.

Как написать готовый скрипт автоконверсии для папки документов?

Пример из практики: представь, у тебя 40 PDF и PPTX отчётов от клиентов в одной папке - брокерские выписки, договоры, презы. В лоб грузить эту папку в Claude бесполезно: контекстное окно забьётся информацией ещё до первого ответа. Прогоняешь всю папку через скрипт ниже за один проход - и работаешь дальше с лёгкими .md файлами вместо тяжёлых PDF.

Сохрани этот скрипт как scripts/docs-to-md.sh в корне проекта:

bash
#!/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"

Сделай его исполняемым:

bash
chmod +x scripts/docs-to-md.sh

Запуск:

bash
bash scripts/docs-to-md.sh ./reports

После прогона у тебя в ./reports/_md/ лежат .md версии всех документов. В Claude Code тащишь их через @reports/_md/ - и работаешь с уже сжатыми текстами вместо PDF.

Скрипт автоматически пропускает уже сконвертированные файлы (если .md новее чем исходник) - повторный запуск дешёвый, не пересчитывает всё.

Идемпотентность и инкрементальная конверсия

Если хочешь, чтобы скрипт ловил даже изменённые PDF (которые пересохранили с тем же именем) - добавь content-hash проверку:

bash
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 анализирует и текст, и изображения, чтобы лучше понять документ.

Anthropic, https://platform.claude.com/docs/en/docs/build-with-claude/pdf-support

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 токенов чистого текста.

codeitbro, https://www.codeitbro.com/blog/tips-to-stop-hitting-claude-usage-limits

Решение: либо конверсия в 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 спасёт от одной утечки, но три другие останутся. Поэтому в гайдах:

И на практикуме за 3 эфира собираешь полную связку - ИИ-клон + Второй мозг + Контекст-инжиниринг. Три кита, без которых ИИ галлюцинирует и сжигает лимиты.

Источники

Полная схема по вайб-кодингу за вечер: ИИ-клон + Второй мозг + Контекст-инжиниринг. 3 эфира, 2 000 ₽. Записи остаются у тебя.

Практикум по вайб-кодингу
+Твой второй мозг
3 вечера - стек, метод, первый проект
Старт 9–11 июня  ·  2 000 ₽
Записаться →
Была инструкция полезна?
Артемий Миллер
Автор
Артемий Миллер
Предприниматель и вайб-кодер

Артемий Миллер - предприниматель и вайб-кодер. Бывший программист, собирает продукты исключительно вместе с ИИ-агентами, без найма разработчиков.

Связанные инструкции

Как настроить Spec Kit в Claude Code в 2026: спецификации вместо промптов

GitHub Spec Kit - метод Spec-Driven Development, через который Karpathy предлагает заменить вайб-кодинг в 2026. Внутри: 4 фазы, готовые шаблоны под Claude Code, истории AWS Kiro и Rackspace.

22 мин

Cline vs Claude Code в 2026: бесплатная альтернатива в VS Code

Cline - это VS Code-расширение с открытым кодом, в которое ты подключаешь свой API-ключ к Claude, DeepSeek, Gemini, OpenRouter или локальной модели через Ollama. Не замена Claude Code, а другой инструмент: ручное подтверждение каждого шага плюс свобода модели вместо автономности и единого биллинга.

26 мин

Как настроить CLAUDE.md в 2026: готовый шаблон и 6 правил

Готовый шаблон CLAUDE.md, 6 правил живого файла и разбор боевого примера действующего бизнеса. Скопировал, вставил, Claude перестал забывать твой проект между сессиями.

26 мин

Второй мозг в Claude Code: как настроить, чтобы он помнил проект

Иерархия памяти Claude Code, структура второго мозга из 5 частей и git как машина времени. Чтобы агент перестал забывать твой проект каждую сессию и работал на свежем контексте.

21 мин

Связанные концепты