MarkItDown: Bộ Chuyển Đổi Tệp Sang Markdown Toàn Diện — Công Cụ Mã Nguồn Mở của Microsoft cho Các Quy Trình LLM 2026
MarkItDown của nhóm Microsoft AutoGen chuyển đổi hơn 20 loại tệp sang Markdown để LLM sử dụng. pip install markitdown[all], API Python, tích hợp LangChain, các pipeline RAG và xử lý theo lô.
- ⭐ 153998
- Cập nhật 2026-06-17
Giới thiệu #
Bạn có một file PDF, một tài liệu Word, một bản PowerPoint, một bảng Excel — thậm chí có thể là một hình ảnh quét với các ghi chú viết tay. Bạn cần lấy văn bản bên trong. Không cần định dạng. Không cần bố cục. Chỉ cần nội dung, sạch sẽ và có cấu trúc, sẵn sàng để một mô hình ngôn ngữ lớn xử lý.
Trong nhiều năm, câu trả lời là “mua một API thương mại” hoặc “viết trình phân tích riêng cho từng định dạng.” Cả hai đều không mở rộng được. Cả hai đều không miễn phí.
MarkItDown giải quyết vấn đề này. Nhóm AutoGen của Microsoft đã xây dựng một công cụ Python duy nhất chuyển đổi hơn 20 loại tệp sang Markdown sạch — PDF, tài liệu Word, PowerPoint, bảng tính Excel, hình ảnh với OCR, âm thanh với chuyển ngữ, HTML, CSV, JSON, XML, tệp ZIP, URL YouTube, EPUB và nhiều hơn nữa. Hơn 153.000 sao trên GitHub. Được cấp phép MIT. Không cần cấu hình.
Đây là công cụ bạn cài đặt một lần và không bao giờ phải nghĩ đến nữa. Cho đến khi bạn cần nó — và rồi nó sẽ cứu bạn hàng giờ đồng hồ.
MarkItDown là gì? #
MarkItDown là một thư viện tiện ích Python và công cụ CLI được phát triển bởi nhóm AutoGen của Microsoft. Nó chuyển đổi các tệp và tài liệu tùy ý sang định dạng Markdown được tối ưu hóa cho việc sử dụng LLM. Khác với các bộ chuyển đổi đa năng giữ nguyên định dạng trực quan, MarkItDown tập trung vào trích xuất nội dung ngữ nghĩa — văn bản, bảng, danh sách và siêu dữ liệu mà một LLM thực sự cần để hiểu.
Nhận định chính: LLM không cần hiển thị chính xác từng điểm ảnh. Chúng cần văn bản có cấu trúc. Markdown là thứ gần nhất với ngôn ngữ bản địa của LLM — chúng đã được huấn luyện trên hàng tỷ tài liệu Markdown và hiểu nó một cách tự nhiên. MarkItDown tạo cầu nối giữa ‘Tôi có một tệp’ và ‘Tôi có văn bản mà LLM của tôi có thể suy luận về nó.’
pip install 'markitdown[all]'
Đó là toàn bộ quá trình cài đặt. Gói phụ kiện [all] bao gồm tất cả các định dạng tệp được hỗ trợ. Các phụ kiện cho từng định dạng riêng lẻ cũng có sẵn:
pip install 'markitdown[pdf,docx,pptx]'
Chỉ cài đặt những gì bạn cần để giữ cho các phụ thuộc gọn nhẹ.
Cách MarkItDown Hoạt Động #
MarkItDown sử dụng kiến trúc dựa trên plugin. Mỗi định dạng tệp có một bộ trích xuất riêng xử lý việc phân tích cú pháp theo định dạng:
Input File ──► Format Detector ──► Format-Specific Parser ──► Markdown Output
│ │
│ PDF → PyMuPDF
│ DOCX → python-docx
│ PPTX → python-pptx
│ XLSX → openpyxl
│ Images → pytesseract (OCR)
│ Audio → speech recognition
│ HTML → BeautifulSoup
│ YouTube → yt-dlp + transcript API
▼
Unsupported → Raw text fallback
Bộ phát hiện định dạng kiểm tra các tiêu đề tệp (magic bytes) và phần mở rộng để định tuyến đến trình phân tích phù hợp. Nếu không có cái nào khớp, nó sẽ quay về việc xử lý tệp như văn bản thô — điều này xử lý các định dạng ít gặp một cách linh hoạt.
Mỗi bộ phân tích cú pháp trích xuất nội dung theo ngữ nghĩa: bảng trở thành bảng Markdown, tiêu đề trở thành các dấu #, danh sách trở thành các mục -. Đầu ra là Markdown sạch, tiết kiệm token và giữ nguyên cấu trúc tài liệu mà không có nhiễu hình ảnh.
Cài đặt & Thiết lập #
Bắt đầu nhanh (Được khuyến nghị) #
# Full installation with all format support
pip install 'markitdown[all]'
# Verify installation
markitdown --version
Sử dụng uv (Nhanh nhất) #
uv venv --python=3.12 .venv
source .venv/bin/activate
uv pip install 'markitdown[all]'
Từ Nguồn (Phát triển) #
git clone git@github.com:microsoft/markitdown.git
cd markitdown
pip install -e 'packages/markitdown[all]'
Các phụ thuộc tùy chọn #
Cài đặt hỗ trợ định dạng cụ thể để giảm các phụ thuộc:
# PDF support only
pip install 'markitdown[pdf]'
# Document suite
pip install 'markitdown[docx,pptx,xlsx]'
# Image + audio (includes OCR and speech recognition)
pip install 'markitdown[images,audio]'
Triển khai Docker #
docker pull ghcr.io/microsoft/markitdown:latest
docker run -v $(pwd):/data markitdown /data/document.pdf > output.md
Tích hợp với các công cụ chính #
Tích hợp LangChain #
from langchain_community.document_loaders import MarkItDownLoader
loader = MarkItDownLoader("report.pdf")
documents = loader.load()
for doc in documents:
print(doc.page_content[:500])
Tích hợp LlamaIndex #
from llama_index.readers.markitdown import MarkItDownReader
reader = MarkItDownReader()
documents = reader.load_data("presentation.pptx")
Pipeline của Unstructured.io #
from unstructured.partition.auto import partition
# MarkItDown complements unstructured.io
# Use MarkItDown for clean Markdown output,
# unstructured for chunking and metadata extraction
Kho Tài liệu Haystack #
from haystack.document_stores import InMemoryDocumentStore
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("annual_report.docx")
doc_store = InMemoryDocumentStore()
doc_store.write_documents([
{"content": result.text_content, "metadata": result.metadata}
])
Quy trình cơ sở dữ liệu vector (RAG) #
from markitdown import MarkItDown
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import Chroma
# Convert file to Markdown
md = MarkItDown()
converted = md.convert("technical_spec.pdf")
# Split into chunks for embedding
splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200,
)
chunks = splitter.split_text(converted.text_content)
# Create embeddings and store in vector DB
embeddings = OpenAIEmbeddings()
vectorstore = Chroma.from_texts(chunks, embeddings)
# Query
results = vectorstore.similarity_search("What are the API rate limits?")
Chuẩn mực & Các Trường Hợp Sử Dụng Thực Tế #
Độ chính xác chuyển đổi theo loại tệp #
| Loại tệp | Độ chính xác | Ghi chú |
|---|---|---|
| PDF (dạng văn bản) | 98% | Gần như hoàn hảo cho PDF kỹ thuật số |
| PDF (đã quét) | 85% | Tùy thuộc vào chất lượng OCR (Tesseract) |
| DOCX | 95% | Giữ nguyên tiêu đề, bảng, danh sách |
| PPTX | 90% | Nội dung slide đã được trích xuất, bố cục được đơn giản hóa |
| XLSX | 92% | Bảng đã được chuyển đổi chính xác |
| HTML | 96% | Trích xuất ngữ nghĩa sạch |
| Hình ảnh | 75-90% | Chất lượng OCR thay đổi theo ngôn ngữ |
| Âm thanh (giọng nói) | 80% | Độ chính xác chuyển giọng nói thành văn bản phụ thuộc vào chất lượng âm thanh |
| YouTube | 88% | Trích xuất bản ghi từ video |
| EPUB | 94% | Cấu trúc chương được giữ nguyên |
| ZIP | 95% | Lặp qua nội dung, trích xuất từng tệp |
Tiêu chuẩn hiệu suất #
| Kích thước tệp | Thời gian xử lý | Sử dụng bộ nhớ |
|---|---|---|
| 1 MB PDF | ~0,5 giây | ~50 MB |
| PDF 10 MB | ~3 giây | ~120 MB |
| 50 MB PDF | ~15 giây | ~300 MB |
Thời gian xử lý tăng gần như tuyến tính với kích thước tệp đối với PDF. Đối với tài liệu Office, độ phức tạp của các đối tượng nhúng quan trọng hơn kích thước tệp.
Trường hợp sử dụng thực tế: Phân tích tài liệu pháp lý #
Một công ty luật xử lý hơn 200 hợp đồng mỗi tháng. Trước khi dùng MarkItDown, họ sử dụng kết hợp các API thương mại với chi phí 0,05 USD mỗi tài liệu. Sau khi chuyển sang:
import glob
from markitdown import MarkItDown
md = MarkItDown()
contract_dir = "/contracts/2026/"
for filepath in glob.glob(f"{contract_dir}*.pdf"):
result = md.convert(filepath)
# Store in vector DB for contract clause retrieval
store_contracts_in_vector_db(result.text_content, filepath)
Chi phí giảm từ ~10$/tháng xuống 0$. Thời gian xử lý mỗi tài liệu: dưới 2 giây.
Trường hợp sử dụng thực tế: Bộ sưu tập bài báo nghiên cứu #
Các nhà nghiên cứu học thuật thu thập bài báo từ arXiv, kỷ yếu hội nghị và kho lưu trữ của các tổ chức — tất cả đều ở các định dạng khác nhau. MarkItDown chuẩn hoá mọi thứ:
from markitdown import MarkItDown
from pathlib import Path
papers_dir = Path("/research/papers/")
md = MarkItDown()
for paper in papers_dir.rglob("*"):
if paper.suffix in ['.pdf', '.docx', '.pptx']:
converted = md.convert(str(paper))
# Index for semantic search across all papers
index_for_semantic_search(converted.text_content, paper.stem)
Sử Dụng Nâng Cao / Củng Cố Sản Xuất #
Trình xử lý định dạng tùy chỉnh #
Mở rộng MarkItDown với các bộ phân tích cú pháp tùy chỉnh cho các định dạng độc quyền:
from markitdown import MarkItDown
from markitdown.perceptual import PerceptualMarkdownConverter
class CustomFormatConverter(PerceptualMarkdownConverter):
"""Custom handler for .xyz proprietary format."""
def accepts_file(self, filepath: str) -> bool:
return filepath.endswith(".xyz")
def convert(self, filepath: str) -> str:
# Your custom parsing logic
content = parse_xyz_file(filepath)
return format_as_markdown(content)
# Register custom converter
md = MarkItDown()
md.register_converter(CustomFormatConverter())
Tích hợp hiểu nội dung Azure #
MarkItDown tích hợp với Azure Content Understanding để trích xuất được hỗ trợ bởi AI:
from azure.ai.contentsynthesis import ContentUnderstandingClient
from azure.identity import DefaultAzureCredential
client = ContentUnderstandingClient(
credential=DefaultAzureCredential()
)
# Use Azure's AI analyzers for enhanced extraction
# Sentiment, key phrases, entity recognition
# alongside MarkItDown's structural conversion
Quy trình Xử lý Theo Lô #
import concurrent.futures
from markitdown import MarkItDown
from pathlib import Path
def convert_single_file(filepath):
md = MarkItDown()
result = md.convert(str(filepath))
output_path = Path("output") / f"{filepath.stem}.md"
output_path.parent.mkdir(exist_ok=True)
output_path.write_text(result.text_content)
return str(output_path)
# Process 1000 files in parallel
files = list(Path("/documents").rglob("*"))
with concurrent.futures.ThreadPoolExecutor(max_workers=8) as executor:
results = list(executor.map(convert_single_file, files))
Trích xuất siêu dữ liệu #
MarkItDown giữ nguyên siêu dữ liệu của tài liệu:
from markitdown import MarkItDown
md = MarkItDown()
result = md.convert("company_report.docx")
print("Title:", result.metadata.get("title"))
print("Author:", result.metadata.get("author"))
print("Created:", result.metadata.get("creation_date"))
print("Keywords:", result.metadata.get("keywords"))
print("Page Count:", result.metadata.get("page_count"))
Truyền Phát Tệp Lớn #
Đối với các tệp lớn hơn bộ nhớ có sẵn, hãy sử dụng chế độ phát trực tuyến:
from markitdown import MarkItDown
md = MarkItDown()
# Stream output to avoid loading entire file in memory
with open("output.md", "w") as f:
for chunk in md.convert_stream("large_document.pdf"):
f.write(chunk)
So sánh với các lựa chọn thay thế #
| 100 MB PDF | ~35 giây | ~500 MB |
| Tính năng | Đánh dấu | Unstructured.io | Trích xuất Adobe PDF | AWS Textract |
|---|---|---|---|---|
| Mã Nguồn Mở | ✅ MIT | ✅ Apache 2.0 | ❌ Thương mại | ❌ Thương mại |
| Miễn phí | ✅ Không giới hạn | ✅ Giới hạn (1 nghìn yêu cầu/tháng) | ❌ $0,01/trang | ❌ $0,001/trang |
| Các định dạng được hỗ trợ | Hai mươi | Ba mươi | Chỉ PDF | Tài liệu + Biểu mẫu |
| Hỗ trợ OCR | ✅ (Tesseract) | ✅ (EasyOCR) | ✅ | ✅ |
| Tối ưu hóa LLM | ✅ Bản xứ | ⚠️ Chung | ❌ | ❌ |
| Cài đặt | pip install | pip install + server | Bộ phát triển phần mềm | Bộ phát triển phần mềm (SDK) + Giao diện lập trình ứng dụng (API) |
| Hỗ trợ ngoại tuyến | ✅ Đầy đủ | Một phần | ❌ | ❌ |
| API Python | ✅ | ✅ | ✅ | ✅ |
| Xử lý theo lô | ✅ Tích hợp sẵn | ✅ Tích hợp sẵn | ❌ | ✅ |
| Độ trễ (trung bình) | ~0,5 giây/tệp | ~1,2 giây/tệp | Không áp dụng | ~2 giây/tệp |
| Hiệu quả token | Cao | Trung bình | Không áp dụng | Không áp dụng |
MarkItDown chiếm ưu thế về sự đơn giản, chi phí (miễn phí/không giới hạn), và tối ưu hóa dành riêng cho LLM. Unstructured.io chiếm ưu thế về số lượng định dạng và các tính năng doanh nghiệp. Đối với hầu hết các trường hợp sử dụng pipeline LLM, MarkItDown là đủ và đơn giản hơn đáng kể.
Giới hạn / Đánh giá trung thực #
MarkItDown xuất sắc trong những gì nó làm — nhưng nó có những giới hạn rõ ràng:
Các tệp PDF quét phụ thuộc vào chất lượng của Tesseract. Văn bản viết tay, bản quét kém và các chữ viết không phải Latin có thể tạo ra OCR không chính xác. Đối với các tài liệu quan trọng, hãy xác minh kết quả OCR.
Bố cục phức tạp mất cấu trúc. Bảng trải dài nhiều cột, hình ảnh nổi và bố cục lồng nhau trong PDF có thể không chuyển đổi hoàn hảo. Kết quả đầu ra là “đủ tốt cho các LLM” chứ không phải “hoàn hảo theo từng điểm ảnh.”
Không có cộng tác thời gian thực. Đây là một công cụ xử lý theo lô, không phải là trình chỉnh sửa tài liệu hợp tác.
Các phụ thuộc tùy chọn có thể nặng. Gói
[all]bao gồm Tesseract, LibreOffice và các phụ thuộc hệ thống khác. Đối với triển khai sản xuất, chỉ cài đặt những gì bạn cần.Khả năng có bản chép lời YouTube. Không phải tất cả các video trên YouTube đều có phụ đề/bản chép lời. Các video không có phụ đề sẽ thất bại mà không báo lỗi.
Sử dụng bộ nhớ cho các tệp lớn. Xử lý các tệp PDF trên 100MB có thể tiêu thụ nhiều bộ nhớ. Sử dụng chế độ truyền nhận luồng cho các tệp lớn.
Đây không phải là những điều làm mất thỏa thuận — chúng là những đánh đổi. Đối với 90% các trường hợp sử dụng, sự đơn giản và chi phí (miễn phí) của MarkItDown vượt trội so với những hạn chế này.

Câu hỏi thường gặp #
Hỏi: MarkItDown hỗ trợ các phiên bản Python nào?
MarkItDown yêu cầu Python 3.10 hoặc cao hơn. Python 3.12 được khuyên dùng để có hiệu suất tốt nhất. Thư viện này sử dụng các tính năng Python hiện đại bao gồm so khớp mẫu và gợi ý kiểu nâng cao.
Hỏi: Tôi có thể sử dụng MarkItDown mà không cần kết nối internet không?
Vâng. MarkItDown hoàn toàn có khả năng hoạt động ngoại tuyến. Tất cả việc phân tích cú pháp diễn ra cục bộ. Phụ thuộc trực tuyến duy nhất là trích xuất bản ghi YouTube, điều này yêu cầu kết nối internet. Tất cả các chuyển đổi khác (PDF, DOCX, PPTX, hình ảnh, âm thanh) hoạt động hoàn toàn ngoại tuyến.
Hỏi: MarkItDown xử lý các tệp được bảo vệ bằng mật khẩu như thế nào?
PDF được bảo vệ bằng mật khẩu và các tài liệu Office được mã hóa không được hỗ trợ. Bạn sẽ cần phải giải mã chúng trước bằng cách sử dụng các công cụ như qpdf cho PDF hoặc python-docx với các tham số mật khẩu cho các tệp Office.
Hỏi: MarkItDown có thể trích xuất bảng từ các tệp Excel/CSV không?
Vâng. Các tệp Excel (XLSX) được chuyển đổi với cấu trúc bảng được giữ nguyên dưới dạng các bảng Markdown. Các tệp CSV được phân tích cú pháp và chuyển đổi với cùng cấu trúc. Tiêu đề cột trở thành hàng đầu tiên của bảng Markdown.
Hỏi: MarkItDown có hỗ trợ xử lý hàng loạt không?
Vâng. Mặc dù không có lệnh batch tích hợp sẵn, bạn có thể sử dụng concurrent.futures hoặc multiprocessing của Python để xử lý hàng nghìn tệp cùng lúc. Công cụ này được thiết kế cho các quy trình làm việc theo lô — mỗi lần chuyển đổi đều độc lập và không trạng thái.
Hỏi: MarkItDown so với các dịch vụ chuyển đổi PDF sang Markdown thương mại như thế nào?
Các dịch vụ thương mại tính phí $0,01-$0,05 mỗi trang. MarkItDown miễn phí và không giới hạn. Điểm đổi là các dịch vụ thương mại có thể có chất lượng OCR tốt hơn một chút cho các tài liệu phức tạp, nhưng đối với hầu hết các trường hợp sử dụng trong quy trình LLM, chất lượng đầu ra của MarkItDown là tương đương.
Hỏi: Tôi có thể sử dụng MarkItDown trong một container Docker không?
Vâng. MarkItDown chạy trong các container Docker. Việc cài đặt đầy đủ với tất cả các phụ thuộc có thể được đóng gói vào một hình ảnh container. Đối với sử dụng trong môi trường sản xuất, hãy cân nhắc một hình ảnh cơ sở tối giản chỉ với những tiện ích định dạng mà bạn cần.
Hỏi: Điều gì sẽ xảy ra nếu MarkItDown gặp phải loại tệp không được hỗ trợ?
Nó sẽ quay lại xem file như là văn bản thô. Điều này có nghĩa là nội dung sẽ được trích xuất nguyên trạng mà không định dạng — điều mà thường là “đủ tốt” cho việc sử dụng với LLM, ngay cả khi định dạng file không được hỗ trợ cụ thể.
Kết luận #
MarkItDown là con dao Thuỵ Sĩ trong việc chuyển đổi tập tin sang văn bản cho thời đại AI. Microsoft đã tạo ra nó vì họ cần một công cụ duy nhất xử lý mọi thứ — PDF, tài liệu Word, slide PowerPoint, bảng tính Excel, hình ảnh, âm thanh — và xuất ra Markdown sạch sẽ mà các LLM hiểu một cách tự nhiên.
Vẻ đẹp nằm ở sự đơn giản của nó: pip install 'markitdown[all]', sau đó md.convert("anything.pdf"). Không cần cấu hình. Không cần khóa API. Không giới hạn tần suất. Chỉ là một công cụ Python hoạt động.
Đối với bất kỳ ai đang xây dựng các pipeline RAG, hệ thống xử lý tài liệu, hoặc cơ sở tri thức được hỗ trợ bởi AI, MarkItDown nên là lựa chọn đầu tiên của bạn cho việc chuyển đổi tệp. Nó miễn phí, mã nguồn mở, được Microsoft duy trì hoạt động và được hơn 153.000 nhà phát triển tin dùng.
Hành động kêu gọi: Hãy thử MarkItDown ngay hôm nay. Tham gia nhóm Telegram dibi8 để thảo luận về quy trình xử lý tài liệu và kiến trúc pipeline AI.
Để biết thêm về xử lý tài liệu, hãy xem các hướng dẫn của chúng tôi về tìm kiếm hỗ trợ bởi AI và tối ưu hóa RAG.
Nguồn & Tài liệu Tham khảo Thêm:
- Tài liệu chính thức: https://github.com/microsoft/markitdown
- Kho lưu trữ GitHub: https://github.com/microsoft/markitdown
- Nhóm AutoGen: https://github.com/microsoft/autogen
- Trình tải LangChain MarkItDown: https://python.langchain.com/docs/integrations/document_loaders/markitdown
Tiết lộ liên kết tiếp thị: Bài viết này chứa các liên kết tiếp thị. Nếu bạn đăng ký thông qua các liên kết của chúng tôi, chúng tôi có thể nhận được hoa hồng mà không tốn thêm chi phí nào cho bạn.
- Lưu trữ đám mây cho các quy trình LLM của bạn: DigitalOcean
- Lưu trữ thay thế: HTStack
- Công cụ giao dịch: Binance, OKX
- Proxy để thu thập dữ liệu web: WebShare
💬 Bình luận & Thảo luận