Chuyển PDF sang Markdown để tiết kiệm token LLM: hướng dẫn MarkItDown
Gửi thẳng PDF cho Claude hay bất kỳ LLM nào âm thầm đốt token: mỗi trang còn bị biến thành ảnh. Hãy chuyển tệp sang Markdown trước bằng MarkItDown, công cụ mã nguồn mở miễn phí của Microsoft, và cắt giảm hóa đơn token tới 80%. Hướng dẫn đầy đủ với CLI, Python và máy chủ MCP.
Bạn thả một tệp PDF 20 trang vào Claude, đặt một câu hỏi, và câu trả lời quay về ngon lành. Cái bạn không thấy là hóa đơn. Trước cả khi câu hỏi của bạn được đọc, tài liệu đó có thể nuốt hàng chục nghìn token. Làm vậy vài lần mỗi ngày trên quy mô cả nhóm, và bạn đang trả tiền thật để đổ những tệp PDF thô vào một mô hình mà lẽ ra chỉ cần văn bản sạch là đã vui rồi.
Có một cách khắc phục miễn phí, và nó nằm sờ sờ ngay đó từ đầu đến giờ. Hãy chuyển tệp sang Markdown trước đã. Hướng dẫn này giải thích chính xác vì sao PDF lại đắt đến vậy, bạn tiết kiệm được bao nhiêu, và cách thực hiện việc chuyển đổi chỉ bằng một câu lệnh với MarkItDown, trình chuyển đổi mã nguồn mở của Microsoft.
Vì sao một tệp PDF tốn nhiều token đến thế
Đây là phần không ai nói cho bạn biết. Khi bạn đưa một tệp PDF cho LLM, nó không được đọc theo cách bạn đọc. Theo tài liệu chính thức về PDF của Anthropic, hệ thống làm hai việc với từng trang một:
- Nó trích xuất văn bản từ trang.
- Nó chuyển cả trang thành ảnh, rồi gửi ảnh đó kèm theo văn bản.
Bước thứ hai chính là cái lỗ đen nuốt token một cách lặng lẽ. Mô hình không chỉ đọc chữ, nó còn nhìn vào một bức ảnh của mỗi trang để hiểu được biểu đồ, bảng biểu và bố cục. Bạn trả tiền cho cả hai.
Những con số của Anthropic làm cho cái giá trở nên cụ thể. Riêng văn bản trích xuất đã ngốn 1.500 đến 3.000 token mỗi trang tùy mật độ. Bên cạnh đó, mỗi trang còn gánh thêm chi phí của một bức ảnh. Một dữ liệu đáng chú ý từ tích hợp Amazon Bedrock: chế độ PDF trực quan đầy đủ dùng khoảng 7.000 token cho một PDF 3 trang, trong khi trích xuất văn bản thuần của chính ba trang đó chỉ dùng khoảng 1.000 token. Đó là chênh lệch gấp 7 lần, và toàn bộ đến từ những bức ảnh theo từng trang.
Hãy nhân con số đó lên với một tài liệu thực tế. Một báo cáo dày 20 trang có thể rơi vào đâu đó từ 40.000 đến 70.000 token một khi mỗi trang đã bị rasterize thành ảnh. Bạn còn chưa hỏi gì cả. Bạn chỉ mới mở tệp ra thôi.
Khối màu cam đỏ là phần phụ trội thuần túy: một bức ảnh cho mỗi trang, bất kể trang đó có gì đáng nhìn hay không.
Cách khắc phục: đưa Markdown sạch vào thay thế
Phần lớn tài liệu không cần phải được nhìn. Một hợp đồng, một bản đặc tả, một bài nghiên cứu, một bộ slide đầy gạch đầu dòng: tất cả đều là văn bản khoác lên mình một lớp bố cục. Nếu bạn lột bỏ bố cục và giữ lại cấu trúc, mô hình chẳng mất đi thứ gì mà nó thực sự cần.
Đó chính là thứ Markdown mang lại. Nó gần như là văn bản thuần ở mức một định dạng có thể đạt được, nhưng vẫn mã hóa được cấu trúc quan trọng: tiêu đề, danh sách, bảng, liên kết, khối mã, in đậm và nhấn mạnh. Các LLM phổ biến được huấn luyện trên lượng Markdown khổng lồ, nên chúng phân tích cú pháp Markdown một cách tự nhiên và không tốn sức. Microsoft, đơn vị xây dựng MarkItDown, nói thẳng: Markdown "cực kỳ gần với văn bản thuần, với rất ít đánh dấu hay định dạng, nhưng vẫn cung cấp cách biểu diễn cấu trúc quan trọng của tài liệu".
Chuyển PDF sang Markdown và bạn loại bỏ hoàn toàn các bức ảnh theo từng trang. Không còn trang nào bị rasterize, không còn phụ trội thị giác, chỉ còn lại văn bản có cấu trúc mà dù sao mô hình cũng sẽ đọc. Đó chính là nơi sinh ra khoản tiết kiệm.
Làm quen với MarkItDown, trình chuyển đổi miễn phí của Microsoft
MarkItDown là một tiện ích Python nhẹ của Microsoft, phát hành theo giấy phép MIT thoáng và là một trong những công cụ cho lập trình viên được gắn sao nhiều nhất trên GitHub, với hơn 135.000 sao. Nhiệm vụ duy nhất của nó là biến những tệp lộn xộn của thế giới thực thành Markdown sạch mà LLM có thể đọc với chi phí thấp.
Nó không chỉ là một công cụ cho PDF. Nó chuyển đổi cả một danh sách dài các định dạng:
- Tài liệu PDF
- Word (
.docx) - Excel (
.xlsx,.xls) - PowerPoint (
.pptx) - Ảnh, với siêu dữ liệu EXIF và OCR cho văn bản nằm trong ảnh
- Âm thanh, với siêu dữ liệu và phiên âm giọng nói
- Trang HTML
- Dữ liệu CSV, JSON và XML
- Lưu trữ ZIP (nó duyệt qua nội dung bên trong)
- URL YouTube (nó lấy về phần phiên âm)
- Sách điện tử EPub
- Thư Outlook (
.msg)
Một công cụ, một định dạng đầu ra, cho gần như mọi thứ mà lẽ ra bạn đã ném cho mô hình dưới dạng một tệp nhị phân nặng nề.
Cài MarkItDown trong 30 giây
Đây là một gói Python bình thường. Để lấy mọi thứ, hãy cài extra all:
pip install 'markitdown[all]'
Nếu bạn chỉ quan tâm đến vài định dạng và muốn một bản cài gọn nhẹ hơn, chỉ cần yêu cầu đúng những extra đó:
pip install 'markitdown[pdf, docx, pptx]'
Các tùy chọn khả dụng bao gồm [all], [pdf], [docx], [pptx], [xlsx], [xls], [outlook], [audio-transcription] và [youtube-transcription], cùng nhiều thứ khác.
Chuyển PDF sang Markdown từ dòng lệnh
Con đường nhanh nhất là CLI. Trỏ nó vào một tệp và gửi đầu ra đến bất cứ đâu bạn muốn:
markitdown report.pdf -o report.md
Hoặc dùng một phép chuyển hướng đơn giản, cho ra kết quả y hệt:
markitdown report.pdf > report.md
Bạn cũng có thể đưa thẳng một tệp vào qua pipe:
cat report.pdf | markitdown
Đó là toàn bộ quy trình. Giờ bạn đã có một tệp report.md để đưa cho bất kỳ mô hình nào, thả vào một kho mã, hoặc dán vào một đoạn chat, và nó chỉ tốn một phần nhỏ so với bản gốc.
Tệp nặng đi vào, Markdown sẵn sàng cho agent đi ra, một câu lệnh ở giữa.
Chuyển đổi trong Python (và xử lý hàng loạt cả một thư mục)
Nếu bạn đang gắn việc này vào một pipeline, API Python cũng ngắn gọn không kém:
from markitdown import MarkItDown
md = MarkItDown(enable_plugins=False)
result = md.convert("report.pdf")
print(result.text_content)
result.text_content là chuỗi Markdown của bạn, sẵn sàng ghi xuống đĩa hoặc đưa cho mô hình. Để chuyển đổi cả một thư mục tài liệu trong một lượt, hãy lặp qua nó:
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")
Chạy lệnh đó một lần và một thư mục PDF đắt đỏ trở thành một thư mục Markdown rẻ tiền, có cấu trúc, mà bất kỳ agent nào cũng có thể đọc ở mỗi lượt mà không phải trả lại khoản thuế thị giác.
Bạn thật sự tiết kiệm được bao nhiêu?
Câu trả lời thành thật: còn tùy tài liệu, nhưng phần thắng là lớn và ổn định. Đây là hình dạng chung của nó cho một tệp điển hình, nặng về văn bản.
| PDF gửi cho mô hình | Đã chuyển sang Markdown | |
|---|---|---|
| Văn bản trích xuất | có | có |
| Một ảnh mỗi trang | có, mọi trang | không |
| Phụ trội thị giác | toàn bộ | không có |
| Tài liệu 3 trang (số liệu Bedrock) | ~7.000 token | ~1.000 token |
| Tài liệu 20 trang (ước tính) | 40.000 đến 70.000 token | 10.000 đến 15.000 token |
Với một tài liệu mà giá trị nằm ở phần chữ, việc chuyển sang Markdown thường xuyên cắt giảm chi phí token đi hơn hẳn một nửa, và thường là 80% trở lên. Khoản tiết kiệm này chẳng có gì thần kỳ: đơn giản là bạn không còn phải trả tiền để gửi một bức ảnh của mỗi trang khi mô hình chỉ cần phần văn bản.
Tất nhiên, Markdown không phải hoàn toàn miễn phí. Văn bản trích xuất vẫn tốn token. Nhưng chi phí văn bản đó là cái sàn mà dù sao bạn cũng luôn phải trả. Cái bạn loại bỏ là chồng ảnh theo từng trang nằm đè lên trên.
Khi nào nên giữ PDF (đừng tối ưu quá đà)
Chuyển đổi là lựa chọn mặc định đúng đắn, không phải một quy tắc phổ quát. Hãy giữ tệp PDF gốc khi bố cục trực quan chính là vấn đề:
- Biểu đồ và đồ thị mà bạn thật sự cần mô hình đọc. Nếu ý nghĩa nằm trong một biểu đồ cột, bức ảnh đang làm một công việc thực sự.
- Tài liệu scan vốn là ảnh của văn bản. MarkItDown có thể OCR chúng, nhưng nếu việc nhận dạng chập chờn, khả năng thị giác của chính mô hình có khi đọc trang đó đáng tin cậy hơn.
- Bảng hoặc biểu mẫu trực quan phức tạp nơi vị trí và sự căn chỉnh mang ý nghĩa, vốn sẽ bị san phẳng khi đưa sang Markdown.
- Infographic và những trang nặng về thiết kế nơi bố cục chính là nội dung.
Với mọi thứ còn lại, tức là phần lớn tài liệu, Markdown thắng.
Câu hỏi không bao giờ là "PDF hay Markdown" một cách trừu tượng. Nó là "mô hình có cần nhìn trang này, hay chỉ cần đọc nó?".
Vượt ra ngoài PDF: Word, Excel, PowerPoint, và cả YouTube
Chính câu lệnh một dòng đó cũng dùng được với phần còn lại trong đống tài liệu của bạn. Một tệp Word, một bảng tính, một bộ slide, một trang web, và cả phần phiên âm của một video YouTube, tất cả đều gói gọn thành Markdown sạch theo cùng một cách:
markitdown deck.pptx -o deck.md
markitdown budget.xlsx -o budget.md
markitdown https://www.youtube.com/watch?v=VIDEO_ID -o transcript.md
Nếu quy trình làm việc của bạn thường xuyên liên quan đến việc rút ngữ cảnh ra từ các tệp Office hay từ web rồi đưa cho mô hình, việc chuẩn hóa mọi thứ về Markdown trước là một trong những thói quen rẻ nhất và hiệu quả nhất mà bạn có thể xây dựng.
Cắm nó vào các agent lập trình của bạn với máy chủ MCP MarkItDown
Nếu bạn làm việc với các agent lập trình, mọi thứ còn hay hơn nữa. MarkItDown đi kèm một máy chủ MCP (Model Context Protocol) chính thức, nên agent của bạn có thể tự chuyển đổi tệp, ngay giữa chừng một tác vụ, mà bạn không phải chạy gì bằng tay.
Cài nó và chạy qua stdio:
pip install markitdown-mcp
markitdown-mcp
Máy chủ này phơi ra một công cụ duy nhất, convert_to_markdown(uri), trong đó uri có thể là bất kỳ URI nào dạng http:, https:, file: hoặc data:. Cắm nó vào agent một lần và nó có thể lấy về một PDF, một bảng tính, hay một trang web rồi biến thành Markdown theo yêu cầu, trả giá token văn bản thay vì giá thị giác suốt cả quá trình.
Đây chính xác là kiểu việc có hiệu ứng cộng dồn khi bạn chạy nhiều hơn một agent. Trong AgentsRoom, buồng lái đa agent, bạn cấu hình một máy chủ MCP một lần và mọi agent trong phòng đều thừa hưởng nó. Hãy chuyển các tài liệu tham chiếu của bạn sang .md, commit chúng vào kho mã, và mỗi agent đọc văn bản sạch, có cấu trúc ở mỗi lượt thay vì rasterize lại cùng một tệp PDF hết lần này đến lần khác. Cùng một kỷ luật giúp một phiên làm việc đơn lẻ nhẹ nhàng cũng giúp cả một đội hình giữ được chi phí phải chăng, điều rất quan trọng khi bạn chạy các agent lập trình song song và từng agent một đang đọc ngữ cảnh chung của bạn.
Nó cũng kết hợp một cách tự nhiên với cách mà những thiết lập agent tốt vốn đã quản lý ngữ cảnh. Nếu bạn duy trì một tệp ngữ cảnh AGENTS.md, việc trỏ nó tới các tham chiếu .md nhẹ nhàng thay vì các PDF thô sẽ giữ cho cửa sổ ngữ cảnh gọn gàng, điều mà, như chúng tôi đã đề cập trong mẹo chim hoàng yến để bắt sự trôi dạt ngữ cảnh, chính là một nửa trận chiến trong bất kỳ phiên làm việc dài nào.
Điều cốt lõi cần nhớ
Đưa PDF thô cho LLM là một khoản thuế bạn đã trả mà không hề để ý, bởi vì mỗi trang đều âm thầm bị biến thành ảnh. MarkItDown gỡ bỏ khoản thuế đó miễn phí: một câu lệnh biến gần như mọi tệp thành Markdown sạch, bạn vứt đi tới 80% chi phí token, và mô hình vẫn trả lời ngon lành như cũ, thường là tốt hơn, vì nó đang đọc cấu trúc thay vì nheo mắt nhìn ảnh chụp các trang.
Hãy chuyển đổi trước, rồi mới hỏi. Cả hóa đơn token lẫn cửa sổ ngữ cảnh của bạn đều sẽ cảm ơn bạn.
Sẵn sàng chạy điều này trên cả một đội ngũ agent thay vì một terminal đơn lẻ? Tải AgentsRoom, xem mỗi agent hỗ trợ những gì trong ma trận tương thích nhà cung cấp, và đọc thêm về hỗ trợ đa nhà cung cấp.
Tải AgentsRoom
Chạy các agent AI của bạn (Claude, Codex, OpenCode, Gemini CLI, Aider) trên tất cả dự án, trong một cửa sổ duy nhất.
Ứng dụng đồng hành: theo dõi agent khi đi đường
Sử dụng Claude, Codex, Gemini CLI hoặc nhà cung cấp AI khác.
Gửi lỗi và yêu cầu thẳng vào backlog công khai của bạn.
Một cái nhìn về AgentsRoom đang hoạt động.