把 PDF 轉成 Markdown 以節省 LLM token:MarkItDown 實戰指南
直接把 PDF 餵給 Claude 或任何 LLM 都會悄悄燒掉大量 token:每一頁都會被額外轉成圖片。先用微軟免費開源工具 MarkItDown 把檔案轉成 Markdown,token 賬單最多可降低 80%。完整指南涵蓋 CLI、Python 與 MCP 配置。
你把一份 20 頁的 PDF 拖進 Claude,問了一個問題,回答也順利返回了。你沒看到的,是賬單。在你的問題還沒被讀到之前,這份文件就可能吞掉幾萬個 token。一個團隊每天這樣做上幾次,你就在花真金白銀,只為把原始 PDF 鏟進一個本來用乾淨文字就同樣滿意的模型。
有一個免費的解決辦法,而且它一直就擺在明面上:先把檔案轉成 Markdown。本指南會準確解釋為什麼 PDF 這麼貴、你能省多少,以及如何用微軟的開源轉換器 MarkItDown 一條命令完成轉換。
為什麼一份 PDF 要耗這麼多 token
這是沒人告訴你的部分。當你把一份 PDF 交給 LLM 時,它讀取的方式和你讀的方式不一樣。根據 Anthropic 自己的 PDF 文件,系統會對每一頁做兩件事:
- 從頁面中提取文字。
- 把整頁轉成圖片,然後把這張圖片連同文字一起傳送。
第二步就是那個無聲的 token 黑洞。模型不只是在讀文字,它還在看每一頁的圖片,好讓自己能理解圖表、表格和排版。這兩份你都得付費。
Anthropic 的資料讓成本變得具體。僅提取出的文字,按密度不同就要 每頁 1,500 到 3,000 個 token。在此之上,每一頁還要再加一張圖片的成本。來自 Amazon Bedrock 整合的一個有說服力的資料點:完整的視覺化 PDF 模式對一份 3 頁 PDF 大約要用 7,000 個 token,而對同樣這三頁只做純文字提取 大約只用 1,000 個 token。這是 7 倍的差距,而它完全來自逐頁的圖片。
把它放大到一份真實文件。一份內容密集的 20 頁報告,一旦每一頁都被柵格化成圖片,token 數可能落在 40,000 到 70,000 之間。你還什麼都沒問,你只是開啟了這個檔案而已。
橙紅色的色塊是純粹的額外開銷:每一頁一張圖片,不管這一頁裡有沒有任何值得一看的視覺內容。
解決辦法:改喂乾淨的 Markdown
大多數文件並不需要被「看」。一份合同、一份規格說明、一篇研究論文、一套滿是要點的幻燈片:這些全都是套著排版外衣的文字。如果你剝掉排版、保留結構,模型並不會損失任何它真正需要的東西。
這正是 Markdown 給你的。它幾乎是一種格式能做到的、最接近純文字的形態,但它仍然編碼了那些要緊的結構:標題、列表、表格、連結、程式碼塊、加粗與強調。主流 LLM 都是在海量 Markdown 上訓練出來的,所以它們能原生、輕鬆地解析它。開發 MarkItDown 的微軟說得很直白:Markdown「極其接近純文字,標記或格式都極少,但仍提供了一種表示文件重要結構的方式」。
把你的 PDF 轉成 Markdown,你就徹底丟掉了逐頁圖片。沒有柵格化的頁面,沒有視覺開銷,只剩下模型本來就要讀的那份結構化文字。省下來的就是從這裡來的。
認識 MarkItDown,微軟的免費轉換器
MarkItDown 是微軟出品的一個輕量級 Python 工具,以寬鬆的 MIT 授權發布,是 GitHub 上 star 數最高的開發者工具之一,超過 135,000 個 star。它唯一的任務,就是把現實世界裡亂糟糟的檔案變成 LLM 能低成本讀取的乾淨 Markdown。
它不只是個 PDF 工具。它能轉換一長串格式:
- PDF 文件
- Word(
.docx) - Excel(
.xlsx、.xls) - PowerPoint(
.pptx) - 圖片,附帶 EXIF 後設資料,以及對圖片內文字的 OCR
- 音訊,附帶後設資料和語音轉寫
- HTML 頁面
- CSV、JSON 和 XML 資料
- ZIP 壓縮包(它會遍歷其中的內容)
- YouTube 連結(它會抓取字幕)
- EPub 電子書
- Outlook 郵件(
.msg)
一個工具,一種輸出格式,幾乎能搞定任何你原本會作為笨重二進位制檔案丟給模型的東西。
30 秒裝好 MarkItDown
它就是個普通的 Python 包。想把所有功能都裝齊,就安裝 all extra:
pip install 'markitdown[all]'
如果你只關心少數幾種格式、想要更精簡的安裝,就只要那幾個 extra:
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 轉換(並批次處理整個資料夾)
如果你要把它接進流水線,Python API 同樣簡短:
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 個 token | 約 1,000 個 token |
| 20 頁文件(估算) | 40,000 到 70,000 個 token | 10,000 到 15,000 個 token |
對一份價值在於其文字的文件來說,轉成 Markdown 通常能把 token 成本砍掉一大半還不止,往往達到 80% 或更多。這些節省並不神奇:你只是不再為傳送每一頁的圖片付費,而模型本來只需要文字。
當然,Markdown 並非字面意義上的免費。提取出的文字仍然要花 token。但那份文字成本本就是你無論如何都得付的底線。你去掉的,是疊在它上面那一摞逐頁圖片。
什麼時候該保留 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,是你能養成的最便宜、槓桿最高的習慣之一。
用 MarkItDown MCP 伺服器接入你的編碼代理
如果你和編碼代理一起工作,那就更妙了。MarkItDown 提供了一個官方的 MCP(Model Context Protocol)伺服器,於是你的代理可以在任務進行中自己轉換檔案,無需你手動跑任何東西。
安裝它,並透過 stdio 執行:
pip install markitdown-mcp
markitdown-mcp
該伺服器只暴露一個工具,convert_to_markdown(uri),其中的 uri 可以是任何 http:、https:、file: 或 data: URI。給你的代理接上它一次,它就能按需抓取一份 PDF、一個電子表格或一個網頁並轉成 Markdown,全程付的是文字 token 的價錢,而不是視覺的價錢。
當你同時跑著不止一個代理時,這正是那種會產生複利效應的事情。在多代理駕駛艙 AgentsRoom 裡,你只需配置一次 MCP 伺服器,房間裡的每個代理都會繼承它。把你的參考文件轉成 .md,提交進程式碼儲存庫,每個代理就能在每一輪讀取廉價、結構化的文字,而不是把同一份 PDF 一次又一次地重新柵格化。讓單個會話保持輕盈的那套紀律,也能讓整支艦隊保持可負擔,而這在你並行執行編碼代理、且每個代理都在讀取你共享的上下文時,尤為重要。
它也自然契合優秀代理配置已經在用的上下文管理方式。如果你維護著一份 AGENTS.md 上下文檔案,讓它指向輕量的 .md 參考而非原始 PDF,就能讓上下文視窗保持緊湊,而正如我們在用金絲雀技巧捕捉上下文漂移一文中講過的,這在任何長會話裡都已經是成功的一半。
要點回顧
把原始 PDF 餵給 LLM,是一筆你在不知不覺中一直在繳的稅,因為每一頁都被悄悄轉成了圖片。MarkItDown 免費替你去掉這筆稅:一條命令就能把幾乎任何檔案變成乾淨的 Markdown,你甩掉最多 80% 的 token 成本,而模型回答得同樣好,往往更好,因為它讀的是結構,而不是眯著眼去辨認頁面圖片。
先轉換,再提問。你的 token 賬單和你的上下文視窗都會感謝你。
準備好把這套做法鋪到一整支代理團隊、而不只是一個終端上了嗎?下載 AgentsRoom,在提供商相容性矩陣裡看看每個代理支援什麼,並進一步瞭解多提供商支援。
繼續閱讀
金絲雀技巧:在 Claude(或任何 AI 代理)開始幻覺之前抓住它
一個一行就能搞定的技巧,讓你知道 AI 程式設計代理何時開始退化:讓它每條回覆都以一個名字開頭。名字消失了,金絲雀就死了,該開新會話了。適用於 Claude、Codex、Antigravity CLI、Mistral Vibe 等所有 LLM。
讀文章如何與 AI 程式設計代理溝通:Claude、Codex、Antigravity、Grok Build
程式碼不再是瓶頸,溝通才是。本文介紹如何與 AI 代理 Claude、Codex、Antigravity 和 Grok Build 協作,讓你更快、更精準地交付,同時減少 token 消耗。
讀文章後臺編碼代理:讓你的 AI 上夜班
編碼代理不需要你盯著。本文講的是如何在你做別的事時讓代理在後臺執行,以及如何讓一整支艦隊在你睡覺時通宵寫程式碼。
讀文章
下載 AgentsRoom
在一個視窗中執行你所有專案的 AI 代理(Claude、Codex、Antigravity CLI、OpenCode、Aider、Grok Build、Mistral Vibe、Kimi Code)。
配套應用:隨時隨地監控你的 Agent
使用 Claude、Codex、Antigravity CLI 或其他 AI 提供商。
把 Bug 和需求直接傳送到您的公開待辦清單。
AgentsRoom 實際執行一瞥。