Konwersja PDF na Markdown, aby oszczędzać tokeny LLM: poradnik MarkItDown
Podanie PDF prosto do Claude lub dowolnego LLM po cichu pożera tokeny: każda strona jest też zamieniana w obraz. Najpierw przekonwertuj plik na Markdown za pomocą MarkItDown, darmowego narzędzia open source od Microsoftu, i obetnij rachunek za tokeny nawet o 80%. Pełny poradnik: CLI, Python i serwer MCP.
Wrzucasz 20-stronicowy PDF do Claude, zadajesz jedno pytanie i odpowiedź wraca bez problemu. Czego nie widzisz, to rachunek. Zanim Twoje pytanie zostanie w ogóle przeczytane, ten dokument może pochłonąć dziesiątki tysięcy tokenów. Zrób tak kilka razy dziennie w skali zespołu, a płacisz prawdziwe pieniądze za wpychanie surowych PDF-ów do modelu, który równie chętnie zadowoliłby się czystym tekstem.
Istnieje darmowe rozwiązanie i przez cały czas leżało na widoku. Najpierw przekonwertuj plik na Markdown. Ten poradnik wyjaśnia dokładnie, dlaczego PDF-y są tak kosztowne, ile oszczędzasz i jak wykonać konwersję jedną komendą za pomocą MarkItDown, konwertera open source od Microsoftu.
Dlaczego PDF kosztuje tyle tokenów
Oto część, o której nikt Ci nie mówi. Kiedy podajesz PDF do LLM, nie jest on czytany tak, jak Ty go czytasz. Zgodnie z oficjalną dokumentacją PDF Anthropic system robi z każdą pojedynczą stroną dwie rzeczy:
- Wyodrębnia tekst ze strony.
- Zamienia całą stronę w obraz, a następnie wysyła ten obraz obok tekstu.
Ten drugi krok to cichy pożeracz tokenów. Model nie tylko czyta słowa, ogląda też zdjęcie każdej strony, żeby zrozumieć wykresy, tabele i układ. Płacisz za oba.
Liczby Anthropic czynią ten koszt namacalnym. Sam wyodrębniony tekst to od 1500 do 3000 tokenów na stronę w zależności od gęstości. Do tego każda strona niesie koszt obrazu. Wymowna dana z integracji z Amazon Bedrock: pełny tryb wizualny PDF zużywa około 7000 tokenów na PDF liczący 3 strony, podczas gdy zwykłe wyodrębnienie tekstu z tych samych trzech stron zużywa około 1000 tokenów. To różnica 7-krotna i pochodzi w całości z obrazów strona po stronie.
Przełóż to na prawdziwy dokument. Gęsty, 20-stronicowy raport może wylądować gdziekolwiek między 40 000 a 70 000 tokenów, gdy każda strona zostanie zrasteryzowana do obrazu. O nic jeszcze nie zapytałeś. Po prostu otworzyłeś plik.
Pomarańczowo-czerwony blok to czysty narzut: jeden obraz na każdą stronę, niezależnie od tego, czy na stronie jest coś wizualnego wartego obejrzenia.
Rozwiązanie: podawaj zamiast tego czysty Markdown
Większość dokumentów nie musi być oglądana. Umowa, specyfikacja, artykuł naukowy, zestaw slajdów pełen punktów: to wszystko jest tekstem ubranym w układ. Jeśli usuniesz układ, a zachowasz strukturę, model nie traci nic, czego naprawdę potrzebował.
Właśnie to daje Ci Markdown. Jest mniej więcej tak blisko czystego tekstu, jak format tylko może być, a mimo to wciąż koduje strukturę, która ma znaczenie: nagłówki, listy, tabele, linki, bloki kodu, pogrubienie i wyróżnienie. Popularne LLM-y są trenowane na ogromnych ilościach Markdown, więc parsują go natywnie i bez wysiłku. Microsoft, który tworzy MarkItDown, ujmuje to wprost: Markdown jest „niezwykle bliski czystemu tekstowi, z minimalnym znacznikowaniem lub formatowaniem, a mimo to daje sposób na przedstawienie ważnej struktury dokumentu".
Przekonwertuj swój PDF na Markdown, a całkowicie pozbywasz się obrazów strona po stronie. Żadnych zrasteryzowanych stron, żadnego narzutu wizji, tylko ustrukturyzowany tekst, który model i tak miał przeczytać. Stąd właśnie biorą się oszczędności.
Poznaj MarkItDown, darmowy konwerter Microsoftu
MarkItDown to lekkie narzędzie w Pythonie od Microsoftu, wydane na permisywnej licencji MIT i jedno z najczęściej gwiazdkowanych narzędzi deweloperskich na GitHubie, z ponad 135 000 gwiazdek. Jego jedyne zadanie: zamieniać niechlujne pliki z prawdziwego świata w czysty Markdown, który LLM może przeczytać tanio.
To nie tylko narzędzie do PDF-ów. Konwertuje długą listę formatów:
- Dokumenty PDF
- Word (
.docx) - Excel (
.xlsx,.xls) - PowerPoint (
.pptx) - Obrazy, z metadanymi EXIF i OCR dla tekstu wewnątrz zdjęcia
- Audio, z metadanymi i transkrypcją mowy
- Strony HTML
- Dane CSV, JSON i XML
- Archiwa ZIP (przechodzi przez ich zawartość)
- Adresy YouTube (pobiera transkrypcję)
- E-booki EPub
- Wiadomości Outlook (
.msg)
Jedno narzędzie, jeden format wyjściowy, dla niemal wszystkiego, co inaczej rzuciłbyś modelowi jako ciężki plik binarny.
Zainstaluj MarkItDown w 30 sekund
To zwykły pakiet Pythona. Aby dostać wszystko, zainstaluj extra all:
pip install 'markitdown[all]'
Jeśli zależy Ci tylko na kilku formatach i chcesz lżejszą instalację, poproś tylko o te extra:
pip install 'markitdown[pdf, docx, pptx]'
Dostępne opcje obejmują między innymi [all], [pdf], [docx], [pptx], [xlsx], [xls], [outlook], [audio-transcription] i [youtube-transcription].
Przekonwertuj PDF na Markdown z linii komend
Najszybsza droga to CLI. Wskaż mu plik i wyślij wynik tam, gdzie chcesz:
markitdown report.pdf -o report.md
Albo użyj zwykłego przekierowania, które robi to samo:
markitdown report.pdf > report.md
Możesz też przesłać plik prosto przez potok:
cat report.pdf | markitdown
To cały przepływ pracy. Masz teraz report.md, który możesz podać dowolnemu modelowi, wrzucić do repozytorium albo wkleić do czatu, a kosztuje on ułamek oryginału.
Ciężki plik na wejściu, gotowy dla agenta Markdown na wyjściu, jedna komenda pomiędzy.
Konwersja w Pythonie (i przetwarzanie całego folderu)
Jeśli wpinasz to w potok, API Pythona jest równie krótkie:
from markitdown import MarkItDown
md = MarkItDown(enable_plugins=False)
result = md.convert("report.pdf")
print(result.text_content)
result.text_content to Twój ciąg Markdown, gotowy do zapisania na dysku lub podania modelowi. Aby przekonwertować cały folder dokumentów w jednym przebiegu, przejdź po nim pętlą:
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")
Uruchom to raz, a katalog kosztownych PDF-ów staje się katalogiem taniego, ustrukturyzowanego Markdown, który dowolny agent może czytać w każdej turze, nie płacąc ponownie podatku za wizję.
Ile faktycznie oszczędzasz?
Szczera odpowiedź: to zależy od dokumentu, ale zysk jest duży i stały. Oto jak wygląda to dla typowego pliku nasyconego tekstem.
| PDF wysłany do modelu | Przekonwertowany na Markdown | |
|---|---|---|
| Wyodrębniony tekst | tak | tak |
| Jeden obraz na stronę | tak, każda strona | nie |
| Narzut wizji | pełny | brak |
| Dokument 3-stronicowy (liczba z Bedrock) | ~7000 tokenów | ~1000 tokenów |
| Dokument 20-stronicowy (szacunek) | 40 000 do 70 000 tokenów | 10 000 do 15 000 tokenów |
Dla dokumentu, którego wartość tkwi w słowach, konwersja na Markdown rutynowo obcina koszt w tokenach o znacznie ponad połowę, a często o 80% lub więcej. Te oszczędności nie są magią: po prostu nie płacisz już za wysyłanie zdjęcia każdej strony, gdy model potrzebował tylko tekstu.
Markdown nie jest oczywiście dosłownie darmowy. Wyodrębniony tekst nadal kosztuje tokeny. Ale ten koszt tekstu to podłoga, którą i tak miałeś zapłacić. To, co usuwasz, to stos obrazów strona po stronie spoczywający na wierzchu.
Kiedy zachować PDF (nie przesadzaj z optymalizacją)
Konwersja to dobry domyślny odruch, nie uniwersalna reguła. Zachowaj oryginalny PDF, gdy wizualny układ jest właśnie sednem:
- Wykresy i grafy, które model naprawdę musi odczytać. Jeśli sens żyje w wykresie słupkowym, obraz wykonuje prawdziwą pracę.
- Dokumenty skanowane, które są obrazami tekstu. MarkItDown potrafi je przepuścić przez OCR, ale jeśli rozpoznawanie jest niepewne, własna wizja modelu odczyta stronę czasem bardziej niezawodnie.
- Złożone wizualne tabele lub formularze, w których pozycja i wyrównanie niosą sens, który spłaszcza się w Markdown.
- Infografiki i mocno dopracowane projektowo strony, na których układ jest treścią.
Dla wszystkiego pozostałego, czyli większości dokumentów, Markdown wygrywa.
Pytanie nigdy nie brzmi „PDF czy Markdown" w oderwaniu. Brzmi „czy model musi zobaczyć tę stronę, czy tylko ją przeczytać?"
Poza PDF-ami: Word, Excel, PowerPoint, a nawet YouTube
Ta sama jednolinijkowa komenda działa na reszcie Twojego stosu dokumentów. Dokument Word, arkusz kalkulacyjny, zestaw slajdów, strona internetowa, a nawet transkrypcja filmu na YouTube, wszystko to zwija się w czysty Markdown w ten sam sposób:
markitdown deck.pptx -o deck.md
markitdown budget.xlsx -o budget.md
markitdown https://www.youtube.com/watch?v=VIDEO_ID -o transcript.md
Jeśli Twój przepływ pracy polega na regularnym wyciąganiu kontekstu z plików Office lub z sieci i podawaniu go modelowi, ujednolicenie wszystkiego najpierw do Markdown to jeden z najtańszych i najbardziej opłacalnych nawyków, jakie możesz wyrobić.
Wepnij to do swoich agentów kodujących przez serwer MCP MarkItDown
Jeśli pracujesz z agentami kodującymi, robi się jeszcze lepiej. MarkItDown dostarcza oficjalny serwer MCP (Model Context Protocol), więc Twój agent może sam konwertować pliki, w trakcie zadania, bez uruchamiania czegokolwiek ręcznie.
Zainstaluj go i uruchom przez stdio:
pip install markitdown-mcp
markitdown-mcp
Serwer udostępnia jedno narzędzie, convert_to_markdown(uri), gdzie uri może być dowolnym URI typu http:, https:, file: lub data:. Wepnij go raz do swojego agenta, a może on pobrać PDF, arkusz kalkulacyjny lub stronę internetową i zamienić ją w Markdown na żądanie, płacąc przez cały czas ceny tokenów tekstu zamiast cen wizji.
To dokładnie ten rodzaj rzeczy, który kumuluje się, gdy uruchamiasz więcej niż jednego agenta. W AgentsRoom, kokpicie multi-agentowym, konfigurujesz serwer MCP raz, a każdy agent w pokoju go dziedziczy. Przekonwertuj swoje dokumenty referencyjne na .md, zatwierdź je w repozytorium, a każdy agent czyta tani, ustrukturyzowany tekst w każdej turze, zamiast rasteryzować ten sam PDF w kółko. Ta sama dyscyplina, która utrzymuje pojedynczą sesję w ryzach, utrzymuje całą flotę w przystępnej cenie, co ma znaczenie, gdy uruchamiasz agentów kodujących równolegle, a każdy z nich czyta Twój współdzielony kontekst.
Pasuje to też naturalnie do sposobu, w jaki dobre konfiguracje agentów już zarządzają kontekstem. Jeśli prowadzisz plik kontekstu AGENTS.md, wskazanie go na lekkie referencje .md zamiast surowych PDF-ów utrzymuje okno kontekstu ciasno, co, jak omówiliśmy w sztuczce z kanarkiem do wychwytywania dryfu kontekstu, stanowi połowę sukcesu w każdej długiej sesji.
Wniosek
Podawanie surowych PDF-ów do LLM to podatek, który płacisz bez świadomości, ponieważ każda strona jest po cichu zamieniana w obraz. MarkItDown usuwa ten podatek za darmo: jedna komenda zamienia niemal dowolny plik w czysty Markdown, zrzucasz nawet 80% kosztu w tokenach, a model odpowiada równie dobrze, często lepiej, ponieważ czyta strukturę zamiast mrużyć oczy na zdjęcia stron.
Najpierw konwertuj, potem pytaj. Twój rachunek za tokeny i Twoje okno kontekstu, oba Ci podziękują.
Gotowy, żeby uruchomić to na całym zespole agentów zamiast na jednym terminalu? Pobierz AgentsRoom, zobacz, co obsługuje każdy agent w matrycy kompatybilności providerów, i przeczytaj więcej o wsparciu multi-provider.
Pobierz AgentsRoom
Uruchamiaj swoich agentów Claude na wszystkich projektach z jednego okna.
Aplikacja towarzyszaca: monitoruj agentów w podrozy
Użyj Claude, Codex, Gemini CLI lub innego dostawcy AI.
Wysyłaj bugi i prośby bezpośrednio do swojego publicznego backlogu.
Spojrzenie na AgentsRoom w akcji.