把 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 文件,系統會對每一頁做兩件事:

  1. 從頁面中提取文字。
  2. 把整頁轉成圖片,然後把這張圖片連同文字一起傳送。

第二步就是那個無聲的 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 之間。你還什麼都沒問,你只是開啟了這個檔案而已。

柱狀圖,比較同一份 20 頁文件以 PDF 形式傳送與轉換成 Markdown 後的 token 成本。PDF 把提取文字的 token 與逐頁圖片的 token 疊加,約 48,000 個 token,而 Markdown 版本只用文字 token,約 11,000 個 token,少了大約 77%。

橙紅色的色塊是純粹的額外開銷:每一頁一張圖片,不管這一頁裡有沒有任何值得一看的視覺內容。

解決辦法:改喂乾淨的 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 頁面
  • CSVJSONXML 資料
  • 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,可以交給任何模型、放進程式碼儲存庫,或者粘進對話裡,而它的成本只是原檔案的一小部分。

工作流程示意圖:PDF、DOCX、XLSX、PPTX 等原始檔流入 MarkItDown,後者輸出單個乾淨的 Markdown 檔案,再餵給大語言模型或編碼代理。一個 token 標記沿著路徑移動,展示文件穿過整條流水線。

笨重檔案進,代理可直接讀用的 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 個 token10,000 到 15,000 個 token

對一份價值在於其文字的文件來說,轉成 Markdown 通常能把 token 成本砍掉一大半還不止,往往達到 80% 或更多。這些節省並不神奇:你只是不再為傳送每一頁的圖片付費,而模型本來只需要文字。

當然,Markdown 並非字面意義上的免費。提取出的文字仍然要花 token。但那份文字成本本就是你無論如何都得付的底線。你去掉的,是疊在它上面那一摞逐頁圖片。

什麼時候該保留 PDF(別過度最佳化)

轉換是合理的預設選擇,而不是放之四海皆準的規則。當視覺排版本身就是重點時,請保留原始 PDF:

  • 你確實需要模型讀懂的圖表和曲線。 如果含義就活在一張柱狀圖裡,那張圖片是在做真正的工作。
  • 掃描件,也就是文字的圖片。MarkItDown 可以對它們做 OCR,但如果識別不太靠譜,模型自帶的視覺有時反而能更可靠地讀出這一頁。
  • 複雜的視覺化表格或表單,其中位置與對齊承載著含義,而這些在 Markdown 裡會被壓平。
  • 資訊圖和高度設計化的頁面,排版「就是」內容本身。

至於其餘的一切,也就是絕大多數文件,Markdown 都更勝一籌。

決策示意圖:先問你是否真的需要這份文件的視覺排版,比如圖表、掃描頁或複雜的視覺化表格。如果不需要,就把它轉成 Markdown 以節省 token,這是推薦的路徑。如果需要,就保留 PDF,讓模型的視覺直接讀取頁面圖片。

問題從來不是抽象的「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,在提供商相容性矩陣裡看看每個代理支援什麼,並進一步瞭解多提供商支援

繼續閱讀

下載 AgentsRoom

在一個視窗中執行你所有專案的 AI 代理(Claude、Codex、Antigravity CLI、OpenCode、Aider、Grok Build、Mistral Vibe、Kimi Code)。

免費下載 AgentsRoom

配套應用:隨時隨地監控你的 Agent

使用 Claude、Codex、Antigravity CLI 或其他 AI 提供商。

獲取擴充套件
Chrome Web Store

把 Bug 和需求直接傳送到您的公開待辦清單。

AgentsRoom 實際執行一瞥。

多專案管理
多供應商
多代理執行
實時狀態
檔案差異與提交
行動應用
實時預覽
代理團隊
瀏覽器自動化
Backlog 驅動開發
提示詞庫
技能庫
檢視所有功能