Hướng dẫn AI

MarkItDown là gì? Phân tích repo microsoft/markitdown và hướng dẫn sử dụng

Tìm hiểu MarkItDown, công cụ Python của Microsoft để chuyển PDF, Word, Excel, PowerPoint, HTML, ảnh, audio, ZIP, YouTube URL và nhiều định dạng khác sang Markdown cho LLM, RAG và phân tích văn bản.

Xuất bản: 4 thg 6, 2026Cập nhật: 4 thg 6, 2026Thời gian đọc: 10 minLượt xem: 2
MarkItDownMicrosoftMarkdownLLMRAGPythonMCP

💡Điểm chính của bài viết

  • Tìm hiểu MarkItDown, công cụ Python của Microsoft để chuyển PDF, Word, Excel, PowerPoint, HTML, ảnh, audio, ZIP, YouTube URL và nhiều định dạng khác sang Markdown cho LLM, RAG và phân tích văn bản.

MarkItDown là gì? Phân tích repo microsoft/markitdown và hướng dẫn sử dụng dễ hiểu

Ảnh preview repo microsoft/markitdown từ GitHub Open Graph
Ảnh preview repo microsoft/markitdown từ GitHub Open Graph

Ảnh trích xuất từ GitHub Open Graph preview của repo microsoft/markitdown. Ảnh không phải SVG.1

Tóm tắt nhanh

MarkItDown là một công cụ Python của Microsoft dùng để chuyển nhiều loại file sang Markdown. Repo chính thức mô tả MarkItDown là một tiện ích Python nhẹ để chuyển nhiều định dạng file sang Markdown cho LLM và các pipeline phân tích văn bản.2

Nói đơn giản: nếu bạn có file PDF, Word, Excel, PowerPoint, HTML, CSV, JSON, XML, EPUB, ZIP, ảnh, audio hoặc YouTube URL, MarkItDown giúp biến nội dung đó thành Markdown dễ đưa vào ChatGPT, Claude, RAG system, search index, vector database hoặc script phân tích tài liệu.

MarkItDown không nhắm tới việc giữ bố cục đẹp tuyệt đối như tài liệu gốc. README nói output thường khá dễ đọc, nhưng mục tiêu chính là để công cụ phân tích văn bản tiêu thụ; vì vậy nó ưu tiên giữ cấu trúc quan trọng như heading, list, table, link và nội dung chính ở dạng Markdown.2

MarkItDown giải quyết vấn đề gì?

LLM và hệ thống RAG thường làm việc tốt với text rõ ràng. Nhưng dữ liệu thực tế lại nằm trong nhiều định dạng khác nhau: báo cáo PDF, file Word, slide PowerPoint, bảng Excel, trang HTML, CSV/JSON/XML, email Outlook, ảnh, audio, ZIP, YouTube transcript hoặc EPUB.

Nếu xây pipeline AI mà không có công cụ chuyển đổi thống nhất, bạn phải viết nhiều converter riêng cho từng định dạng. MarkItDown gom các converter phổ biến vào một công cụ duy nhất và xuất ra Markdown.

Vì sao lại là Markdown?

Markdown gần với plain text, ít markup, nhưng vẫn biểu diễn được cấu trúc tài liệu như heading, list, table và link. README cũng nêu rằng các LLM lớn như GPT-4o thường hiểu Markdown tốt và Markdown tương đối tiết kiệm token.2

Định dạng nguồnVấn đề với LLMMarkdown giúp gì
PDFlayout phức tạp, text bị chia dòngchuyển thành text có heading/table/list
DOCXstyle và cấu trúc riênggiữ nội dung chính dạng Markdown
PPTXnội dung rải trên slidegom text slide thành format đọc được
XLSXnhiều sheet, bảngchuyển thành bảng/text
HTMLnhiều tag, quảng cáo, layoutlấy nội dung chính thành Markdown
JSON/XMLcấu trúc lồng nhaugiữ dạng text dễ đọc hơn
ZIPnhiều file conlặp qua nội dung bên trong

MarkItDown hỗ trợ định dạng nào?

README liệt kê các nhóm định dạng chính mà MarkItDown hỗ trợ:2

  • PDF
  • PowerPoint
  • Word
  • Excel
  • Images: EXIF metadata và OCR
  • Audio: EXIF metadata và speech transcription
  • HTML
  • CSV, JSON, XML
  • ZIP files, bằng cách lặp qua nội dung bên trong
  • YouTube URLs
  • EPUBs
  • và nhiều định dạng khác

Không phải mọi dependency đều được cài mặc định. MarkItDown dùng optional dependencies để bạn cài đúng nhóm định dạng cần dùng.

MarkItDown không phải là gì?

MarkItDown làMarkItDown không phải là
Công cụ chuyển tài liệu sang MarkdownTrình soạn thảo Markdown
Công cụ chuẩn bị text cho LLM/RAGCông cụ dàn trang PDF đẹp tuyệt đối
Python library và CLIMột dịch vụ cloud bắt buộc
Có thể dùng offline cho nhiều định dạngLuôn hiểu mọi layout phức tạp hoàn hảo
Có plugin, MCP, DockerMột OCR engine duy nhất cho mọi trường hợp

Nếu mục tiêu là “chuyển file thành Markdown đủ tốt để LLM đọc”, MarkItDown rất phù hợp. Nếu mục tiêu là “giữ nguyên 100% bố cục”, cần kiểm tra kỹ vì đó không phải mục tiêu chính của repo.

Cài đặt MarkItDown

MarkItDown yêu cầu Python 3.10 trở lên.2

Tạo virtual environment:

python -m venv .venv
source .venv/bin/activate

Windows PowerShell:

python -m venv .venv
.\.venv\Scripts\Activate.ps1

Cài toàn bộ tính năng:

pip install "markitdown[all]"

Chỉ cài một số định dạng:

pip install "markitdown[pdf,docx,pptx]"

README liệt kê các extra như [pptx], [docx], [xlsx], [xls], [pdf], [outlook], [az-doc-intel], [az-content-understanding], [audio-transcription], [youtube-transcription][all].2

Cài từ source:

git clone https://github.com/microsoft/markitdown.git
cd markitdown
pip install -e "packages/markitdown[all]"

Dùng bằng command line

Chuyển PDF sang Markdown:

markitdown report.pdf > report.md

Ghi ra file bằng -o:

markitdown report.pdf -o report.md

Dùng pipe:

cat report.pdf | markitdown > report.md

Một số ví dụ khác:

markitdown document.docx -o document.md
markitdown slides.pptx -o slides.md
markitdown workbook.xlsx -o workbook.md
markitdown page.html -o page.md
markitdown data.json -o data.md
markitdown archive.zip -o archive.md

Nếu đã cài extra phù hợp, có thể chuyển YouTube URL:

markitdown "https://www.youtube.com/watch?v=VIDEO_ID" -o video.md

Dùng bằng Python API

Ví dụ cơ bản trong README:2

from markitdown import MarkItDown

md = MarkItDown(enable_plugins=False)
result = md.convert("test.xlsx")

print(result.text_content)

Lưu ra file:

from pathlib import Path
from markitdown import MarkItDown

converter = MarkItDown()
result = converter.convert("report.pdf")

Path("report.md").write_text(result.text_content, encoding="utf-8")

Chuyển nhiều file trong thư mục:

from pathlib import Path
from markitdown import MarkItDown

converter = MarkItDown()
input_dir = Path("documents")
output_dir = Path("markdown")
output_dir.mkdir(exist_ok=True)

for path in input_dir.iterdir():
    if path.is_file():
        try:
            result = converter.convert(str(path))
            out = output_dir / f"{path.stem}.md"
            out.write_text(result.text_content, encoding="utf-8")
            print("Converted:", path)
        except Exception as exc:
            print("Failed:", path, exc)

Dùng LLM để mô tả ảnh

README nói MarkItDown có thể dùng Large Language Models để mô tả ảnh, hiện cho image files và PowerPoint, bằng cách truyền llm_clientllm_model.2

from markitdown import MarkItDown
from openai import OpenAI

client = OpenAI()

md = MarkItDown(
    llm_client=client,
    llm_model="gpt-4o",
    llm_prompt="Mô tả hình ảnh ngắn gọn, tập trung vào thông tin có ích cho tìm kiếm.",
)

result = md.convert("example.jpg")
print(result.text_content)

Cách này hữu ích khi ảnh hoặc slide có nội dung quan trọng nhưng extractor thông thường không đọc được.

Plugin OCR cho PDF/DOCX/PPTX/XLSX

Repo có package markitdown-ocr. README plugin nói nó dùng LLM Vision để trích xuất text từ ảnh nhúng trong PDF, DOCX, PPTX và XLSX, dùng cùng pattern llm_client / llm_model của MarkItDown.3

Cài đặt:

pip install markitdown-ocr
pip install openai

CLI:

markitdown document.pdf --use-plugins --llm-client openai --llm-model gpt-4o

Python:

from markitdown import MarkItDown
from openai import OpenAI

md = MarkItDown(
    enable_plugins=True,
    llm_client=OpenAI(),
    llm_model="gpt-4o",
)

result = md.convert("document_with_images.pdf")
print(result.text_content)

Theo README plugin, nếu không có llm_client, plugin vẫn load nhưng OCR bị bỏ qua và converter built-in được dùng.3

Plugin system

MarkItDown hỗ trợ plugin bên thứ ba. README nói plugin bị tắt mặc định.2

Liệt kê plugin:

markitdown --list-plugins

Dùng plugin:

markitdown --use-plugins path-to-file.pdf

Sample plugin cho thấy một plugin cần tạo class kế thừa DocumentConverter, implement accepts()convert(), rồi export register_converters() qua entrypoint markitdown.plugin trong pyproject.toml.4

Ý nghĩa thực tế: nếu công ty có định dạng riêng như .rtf, invoice export, report format hoặc dữ liệu nội bộ, bạn có thể viết converter riêng và gắn vào MarkItDown.

Azure Document Intelligence và Azure Content Understanding

MarkItDown có thể dùng Azure cloud services cho trường hợp cần chất lượng cao hơn.

Azure Document Intelligence:

markitdown path-to-file.pdf -o document.md -d -e "<document_intelligence_endpoint>"

Python:

from markitdown import MarkItDown

md = MarkItDown(docintel_endpoint="<document_intelligence_endpoint>")
result = md.convert("test.pdf")
print(result.text_content)

Azure Content Understanding:

markitdown path-to-file.pdf --use-cu --cu-endpoint "<content_understanding_endpoint>"

Python:

from markitdown import MarkItDown

md = MarkItDown(cu_endpoint="<content_understanding_endpoint>")
result = md.convert("report.pdf")
print(result.markdown)

Với custom analyzer:

md = MarkItDown(
    cu_endpoint="<content_understanding_endpoint>",
    cu_analyzer_id="my-invoice-analyzer",
)

result = md.convert("invoice.pdf")
print(result.markdown)

README lưu ý mỗi lần convert() với format được route qua Content Understanding là billable Azure API call, nên cần giới hạn file type nếu muốn kiểm soát chi phí.2

MarkItDown MCP là gì?

markitdown-mcp là MCP server cho MarkItDown. README package này nói nó cung cấp server nhẹ qua STDIO, Streamable HTTP và SSE, expose một tool duy nhất: convert_to_markdown(uri), trong đó URI có thể là http:, https:, file: hoặc data:.5

Cài đặt:

pip install markitdown-mcp

Chạy STDIO:

markitdown-mcp

Chạy HTTP/SSE local:

markitdown-mcp --http --host 127.0.0.1 --port 3001

Nếu Claude Desktop, Cursor hoặc agent hỗ trợ MCP, bạn có thể cho agent một tool chuyển tài liệu sang Markdown.

Dùng MarkItDown MCP với Claude Desktop bằng Docker

README của markitdown-mcp khuyến nghị dùng Docker với Claude Desktop.5

Build image:

docker build -t markitdown-mcp:latest .

Cấu hình Claude Desktop:

{
  "mcpServers": {
    "markitdown": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "markitdown-mcp:latest"]
    }
  }
}

Nếu muốn cho container đọc file local:

{
  "mcpServers": {
    "markitdown": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-v",
        "/home/user/data:/workdir",
        "markitdown-mcp:latest"
      ]
    }
  }
}

Sau đó agent có thể gọi:

convert_to_markdown("file:///workdir/report.pdf")

Docker cho MarkItDown CLI

README repo chính có ví dụ Docker:2

docker build -t markitdown:latest .
docker run --rm -i markitdown:latest < ~/your-file.pdf > output.md

Dockerfile chính dùng python:3.13-slim-bullseye, cài ffmpegexiftool, cài markitdown[all] và sample plugin, rồi chạy entrypoint markitdown.6

Dùng Docker khi cần tránh dependency conflict, chạy batch job hoặc muốn cô lập quyền file/network.

Triển khai MarkItDown trong pipeline RAG

Pipeline cơ bản:

File gốc
  ↓
MarkItDown
  ↓
Markdown text
  ↓
Chunking
  ↓
Embedding
  ↓
Vector database
  ↓
RAG answer

Ví dụ:

from pathlib import Path
from markitdown import MarkItDown

converter = MarkItDown()
docs_dir = Path("raw_docs")
md_dir = Path("markdown_docs")
md_dir.mkdir(exist_ok=True)

for file in docs_dir.glob("*"):
    if not file.is_file():
        continue

    result = converter.convert(str(file))
    md_file = md_dir / f"{file.stem}.md"
    md_file.write_text(result.text_content, encoding="utf-8")

Sau đó dùng Markdown này để chunk, embedding và đưa vào vector database.

Triển khai server-side an toàn

README cảnh báo MarkItDown thực hiện I/O với quyền của process hiện tại. Giống open() hoặc requests.get(), nó có thể truy cập tài nguyên mà process có quyền. README khuyến nghị sanitize input trong môi trường không tin cậy và gọi hàm convert_* hẹp nhất phù hợp, ví dụ convert_stream() hoặc convert_local().7

Nếu triển khai MarkItDown làm backend cho người dùng upload file:

  • không cho người dùng nhập đường dẫn file tùy ý;
  • không fetch URL tùy ý nếu chưa lọc;
  • chặn private IP, loopback, link-local, metadata service;
  • giới hạn file size;
  • giới hạn loại file;
  • chạy trong container hoặc sandbox;
  • dùng user không có quyền đọc secret;
  • tắt network nếu không cần fetch URL;
  • scan malware nếu nhận file từ internet;
  • log lỗi nhưng không log nội dung nhạy cảm.

Các hàm convert nên dùng

README khuyến nghị không nhất thiết dùng convert() rộng nếu đã biết nguồn input.7

HàmKhi nào dùng
convert()Dùng nhanh, linh hoạt, nhưng permissive
convert_local()Chỉ cần đọc file local
convert_stream()Bạn tự mở stream và muốn kiểm soát input
convert_response()Bạn tự fetch bằng requests.get() rồi truyền response vào

Quy tắc dễ nhớ: trong production, hãy dùng hàm hẹp nhất có thể.

Khi nào nên dùng MarkItDown?

Nên dùng khi:

  • cần chuyển tài liệu sang Markdown cho LLM;
  • cần chuẩn bị dữ liệu cho RAG;
  • muốn batch convert PDF/DOCX/PPTX/XLSX;
  • cần một CLI nhanh để lấy text từ file;
  • muốn agent MCP đọc file dưới dạng Markdown;
  • muốn tích hợp Azure Document Intelligence hoặc Content Understanding;
  • muốn viết plugin cho format nội bộ.

Không nên dùng nếu:

  • cần giữ nguyên layout chính xác như bản gốc;
  • tài liệu scan chất lượng thấp nhưng không dùng OCR/cloud converter;
  • input không tin cậy mà chưa sandbox;
  • cần một trình soạn thảo Markdown;
  • cần trình render PDF/HTML đẹp cho người dùng cuối.

So sánh nhanh

Công cụPhù hợp nhấtGhi chú
MarkItDownChuyển nhiều file sang Markdown cho LLM/RAGTập trung vào text analysis pipeline
PandocChuyển đổi tài liệu học thuật/markupMạnh về format văn bản, không chuyên cho LLM pipeline
OCR thuầnLấy text từ ảnh/scanned PDFKhông nhất thiết giữ cấu trúc Markdown tốt
Azure Document IntelligenceLayout/table/scanned document phức tạpCloud, có chi phí
Azure Content UnderstandingMultimodal + structured fieldsCloud, có chi phí, phù hợp use case doanh nghiệp

Checklist triển khai

  • Cài trong virtual environment.
  • Chỉ cài extra cần dùng nếu muốn nhẹ.
  • Dùng CLI để test từng định dạng trước.
  • Với RAG, lưu Markdown trung gian để debug.
  • Với PDF scan, cân nhắc OCR plugin hoặc Azure.
  • Với server public, không cho người dùng nhập URL/path tùy ý.
  • Với MCP, chỉ bind localhost nếu chưa có auth.
  • Với Docker, mount đúng thư mục cần đọc, không mount toàn bộ home.
  • Với plugin, bật --use-plugins rõ ràng.
  • Với Azure CU, kiểm soát chi phí billable API call.

FAQ

MarkItDown là gì?

MarkItDown là công cụ Python của Microsoft để chuyển nhiều loại file và tài liệu Office sang Markdown cho LLM và pipeline phân tích văn bản.2

MarkItDown có hỗ trợ PDF không?

Có. README liệt kê PDF trong nhóm định dạng được hỗ trợ; để cài dependency PDF riêng có thể dùng pip install "markitdown[pdf]" hoặc cài tất cả bằng markitdown[all].2

MarkItDown có chuyển Word và PowerPoint không?

Có. MarkItDown hỗ trợ Word và PowerPoint; các extra tương ứng là [docx][pptx].2

MarkItDown có OCR không?

Có hỗ trợ hình ảnh ở mức metadata/OCR theo README, và có plugin markitdown-ocr dùng LLM Vision để OCR ảnh nhúng trong PDF, DOCX, PPTX và XLSX.23

MarkItDown có dùng được với Claude Desktop hoặc MCP client không?

Có. Package markitdown-mcp cung cấp MCP server với tool convert_to_markdown(uri).5

Có nên expose MarkItDown MCP ra internet không?

Không nên. README của markitdown-mcp cảnh báo server không có authentication và mặc định bind localhost; không bind sang interface khác nếu chưa hiểu rõ rủi ro bảo mật.5

Kết luận

microsoft/markitdown rất hữu ích nếu bạn làm việc với LLM, RAG hoặc phân tích tài liệu. Nó không cố biến tài liệu thành bản trình bày đẹp tuyệt đối; nó tập trung chuyển nhiều định dạng phổ biến sang Markdown để model đọc dễ hơn và giữ được cấu trúc quan trọng.

Cách bắt đầu đơn giản nhất là cài pip install "markitdown[all]", chạy markitdown file.pdf -o file.md, rồi kiểm tra output. Khi dùng production, điểm quan trọng nhất là bảo mật: kiểm soát file path, URL, quyền I/O, sandbox/container và chỉ dùng API chuyển đổi hẹp nhất phù hợp với use case.

Nguồn tham khảo

Footnotes

  1. GitHub Open Graph preview image for microsoft/markitdown. https://opengraph.githubassets.com/markitdown-guide/microsoft/markitdown

  2. Microsoft MarkItDown README. https://raw.githubusercontent.com/microsoft/markitdown/main/README.md 2 3 4 5 6 7 8 9 10 11 12 13 14 15

  3. packages/markitdown-ocr/README.md. https://raw.githubusercontent.com/microsoft/markitdown/main/packages/markitdown-ocr/README.md 2 3

  4. packages/markitdown-sample-plugin/README.md. https://raw.githubusercontent.com/microsoft/markitdown/main/packages/markitdown-sample-plugin/README.md

  5. packages/markitdown-mcp/README.md. https://raw.githubusercontent.com/microsoft/markitdown/main/packages/markitdown-mcp/README.md 2 3 4

  6. MarkItDown Dockerfile. https://raw.githubusercontent.com/microsoft/markitdown/main/Dockerfile

  7. Microsoft MarkItDown README, Security Considerations. https://raw.githubusercontent.com/microsoft/markitdown/main/README.md 2

PR

Được biên soạn bởi PixelRouter Editorial Team

Chúng tôi cung cấp các bài viết chuyên sâu và chính xác về hạ tầng AI, bảo mật API, quản lý tài chính đám mây và tối ưu hóa hệ thống cho nhà phát triển.

Câu hỏi thường gặp

MarkItDown là gì?

MarkItDown là công cụ Python của Microsoft dùng để chuyển nhiều loại file sang Markdown, phục vụ LLM và các pipeline phân tích văn bản.

MarkItDown hỗ trợ những định dạng nào?

Bài viết nêu MarkItDown hỗ trợ các nhóm định dạng như PDF, PowerPoint, Word, Excel, ảnh, audio, HTML, CSV, JSON, XML, ZIP, YouTube URL, EPUB và nhiều định dạng khác.

MarkItDown có dùng được cho RAG không?

Có. MarkItDown có thể chuyển tài liệu gốc thành Markdown, sau đó dùng Markdown này cho các bước chunking, embedding, vector database và RAG answer.

MarkItDown có OCR không?

Có. README được bài viết trích dẫn nêu MarkItDown hỗ trợ ảnh ở mức metadata/OCR, và có plugin markitdown-ocr dùng LLM Vision để trích xuất text từ ảnh nhúng trong PDF, DOCX, PPTX và XLSX.

MarkItDown MCP là gì?

markitdown-mcp là MCP server cho MarkItDown, cung cấp tool convert_to_markdown(uri) để chuyển nội dung từ URI như http, https hoặc file sang Markdown.

Khi triển khai MarkItDown server-side cần chú ý gì?

Bài viết nhấn mạnh cần kiểm soát input không tin cậy: không cho nhập path hoặc URL tùy ý, giới hạn file size và loại file, sandbox/container, dùng quyền tối thiểu, và dùng hàm convert hẹp nhất phù hợp.