MarkItDown: Chuyển Đổi Tài Liệu Cho LLM Bằng Python
MarkItDown chuyển PDF, file Office, ảnh và audio thành Markdown mà LLM đọc được trực tiếp, thay vì file nhị phân hay HTML lộn xộn. Dùng nó khi bạn nạp tài liệu vào pipeline RAG hoặc context window của LLM và cần giữ tiêu đề, bảng, danh sách ở dạng văn bản thuần. Bỏ qua nếu bạn cần kết quả đẹp cho người đọc — chính README nói rõ đó không phải mục tiêu của công cụ.
Chuyển Đổi Tài Liệu Sang Markdown
MarkItDown là thư viện Python của Microsoft, chuyển file — PDF, Word, PowerPoint, Excel, ảnh, audio, HTML, file ZIP, thậm chí URL YouTube — thành Markdown. Nó giữ nguyên tiêu đề, danh sách, bảng và link thay vì làm phẳng mọi thứ thành văn bản trơn, nên code phía sau vẫn phân biệt được đâu là bảng, đâu là đoạn văn. Repo tự mô tả là gần giống textract nhất, nhưng nhắm vào máy đọc chứ không phải một tài liệu trình bày đẹp.
Định Dạng File Và Tuỳ Chọn Chuyển Đổi Được Hỗ Trợ
- ✓Chuyển PDF, PowerPoint, Word, Excel, HTML, CSV/JSON/XML, file ZIP, EPub và URL YouTube sang Markdown, cộng thêm ảnh và audio qua EXIF metadata và OCR/speech transcription
- ✓Công cụ dòng lệnh (`markitdown path-to-file.pdf > document.md`) và Python API (`MarkItDown().convert()`)
- ✓Backend Azure Document Intelligence tuỳ chọn để trích xuất layout trên cloud
- ✓Backend Azure Content Understanding tuỳ chọn, thêm trích xuất field có cấu trúc (số tiền hoá đơn, ngày tháng) dưới dạng YAML front matter, cộng hỗ trợ audio và video
- ✓Hệ thống plugin bên thứ ba, mặc định tắt, bật bằng `--use-plugins`; plugin chính thức `markitdown-ocr` thêm OCR bằng LLM Vision cho PDF, DOCX, PPTX và XLSX
- ✓Mô tả ảnh do LLM sinh ra (tuỳ chọn) cho file PPTX và ảnh khi bạn truyền `llm_client` và `llm_model`
Bắt Đầu Với MarkItDown
Yêu cầu Python 3.10 trở lên. Cài đầy đủ tính năng bằng `pip install 'markitdown[all]'`, hoặc cài một phần như `pip install 'markitdown[pdf,docx,pptx]'` để bỏ qua các dependency không cần. Cài từ source: `git clone [email protected]:microsoft/markitdown.git`, `cd markitdown`, `pip install -e 'packages/markitdown[all]'`. Repo cũng có sẵn Dockerfile (`docker build -t markitdown:latest .`).
Chuyển Đổi File Với MarkItDown
Qua CLI: `markitdown path-to-file.pdf > document.md`, hoặc dùng `-o document.md` để đặt tên file output, hoặc pipe input bằng `cat path-to-file.pdf | markitdown`. Qua Python: `from markitdown import MarkItDown; md = MarkItDown(); result = md.convert("test.xlsx"); print(result.text_content)`. Truyền `docintel_endpoint` để định tuyến qua Azure Document Intelligence, hoặc `cu_endpoint` cho Azure Content Understanding — công cụ này tự chọn analyzer theo từng loại file và có thể trả field có cấu trúc dưới dạng YAML front matter, tính phí theo mỗi lần gọi Azure API.
Lợi Ích Cho Phân Tích Văn Bản LLM
- ✓Một dependency duy nhất thay vì các parser PDF, DOCX, PPTX, XLSX riêng lẻ, với hỗ trợ định dạng cài theo nhu cầu qua các extra như `[pdf]` hay `[docx]`
- ✓Markdown xuất ra giữ được tiêu đề, danh sách, bảng dễ nhận diện, nên bước chia nhỏ (chunking) phía sau không phải đoán cấu trúc tài liệu từ văn bản thô
- ✓Giấy phép MIT, và được Microsoft duy trì tích cực
- ✓Tích hợp Azure Content Understanding thêm trích xuất field có cấu trúc và hỗ trợ video mà không cần SDK riêng
Lưu Ý Quan Trọng Và Bảo Mật
- △Chất lượng chuyển đổi phụ thuộc file nguồn — chính README không khẳng định việc xử lý OCR hay PDF scan ngang bằng một dịch vụ document AI chuyên dụng
- △Azure Content Understanding và Document Intelligence là add-on trả phí: mỗi lần gọi `convert()` định tuyến qua đó là một request Azure API tính phí
- △Nó thực hiện I/O với đúng quyền của cả tiến trình — cảnh báo bảo mật trong chính README khuyên không nên đưa input không đáng tin vào mà chưa sanitize đường dẫn, URI scheme và địa chỉ mạng
- △Plugin là của bên thứ ba, không được đội core kiểm định; bật chúng (`--use-plugins`) nghĩa là chạy bất kỳ code nào tác giả plugin viết ra
- △Nó chỉ chuyển đổi văn bản đầu ra — chunking, tạo embedding và làm sạch cho pipeline RAG vẫn là việc của bạn
MarkItDown So Với Các Công Cụ Trích Xuất Văn Bản Khác
Câu Hỏi Thường Gặp
MarkItDown chuyển PDF, PowerPoint, Word, Excel, ảnh (qua EXIF metadata và OCR), audio (qua EXIF metadata và speech transcription), HTML, CSV/JSON/XML, file ZIP, EPub và URL YouTube thành Markdown.
MarkItDown không sinh ra cho việc đó. Chính README nói kết quả nhắm tới công cụ phân tích văn bản, không phải chuyển đổi độ trung thực cao cho người đọc, nên bố cục phức tạp sẽ bị đơn giản hoá thay vì tái tạo chính xác.
MarkItDown có thể định tuyến việc chuyển đổi qua Azure Content Understanding bằng cách truyền cu_endpoint; nó tự chọn analyzer theo từng loại file, hỗ trợ audio và video mà các converter tích hợp sẵn không xử lý được, và có thể trả về các field trích xuất dưới dạng YAML front matter — mỗi lần gọi là một request Azure API tính phí.
MarkItDown thực hiện I/O với đúng quyền của tiến trình đang chạy nó, tương tự open() hay requests.get(). README khuyên nên sanitize input không đáng tin và gọi hàm chuyển đổi hẹp nhất, như convert_local() hoặc convert_stream(), thay vì hàm convert() vốn cho phép quá rộng.
MarkItDown hỗ trợ plugin của bên thứ ba, mặc định tắt và bật bằng --use-plugins. Ví dụ, plugin chính thức markitdown-ocr thêm OCR bằng LLM Vision cho việc chuyển đổi PDF, DOCX, PPTX và XLSX mà không cần thêm dependency ML nào.
MarkItDown yêu cầu Python 3.10 trở lên theo phần prerequisites của dự án, và README khuyên nên cài trong một virtual environment để tránh xung đột dependency.
Vấn đề mà nó giải quyết
Tài liệu cần đưa vào LLM thường ở dạng PDF, DOCX, PPTX, XLSX hoặc ảnh scan — những định dạng mà mô hình ngôn ngữ không đọc trực tiếp được, và nếu trích xuất văn bản kiểu thô thì tiêu đề, bảng, cấu trúc danh sách mà mô hình có thể tận dụng sẽ bị mất. MarkItDown giải quyết đúng khoảng trống đó: biến một đống file Office và PDF hỗn tạp thành Markdown mà model có thể đọc theo đúng cách nó được huấn luyện.
Trường hợp sử dụng tốt nhất
- •Nạp hàng loạt PDF và file Office vào chỉ mục RAG — chuyển một lần, rồi chia nhỏ và tạo embedding từ Markdown
- •Trích xuất field hoá đơn hay hợp đồng ở quy mô lớn bằng cách định tuyến PDF qua backend Azure Content Understanding, trả về giá trị trích xuất dưới dạng YAML front matter thay vì phải viết thêm bước parse riêng
- •Đưa URL YouTube hoặc file audio vào pipeline văn bản qua tính năng transcription tích hợp sẵn
- •Giải nén và chuyển đổi một archive gồm nhiều loại file trong một lần chạy, vì MarkItDown tự động duyệt qua nội dung file ZIP
Ai nên dùng — và ai nên bỏ qua
Nên thử MarkItDown nếu bạn đang xây pipeline RAG hoặc ứng dụng LLM và cần biến PDF, file Office hay ảnh thành Markdown có thể parse được mà không phải tự viết parser cho từng định dạng. Bỏ qua nếu output cần đẹp cho người đọc, hoặc bạn cần độ chính xác OCR/document AI vượt xa những gì converter tích hợp sẵn hay add-on Azure cung cấp — cân nhắc điều đó trước khi chi ngân sách cho path Azure Content Understanding, vì nó tính phí theo từng lần gọi.
Repo liên quan
MarkItDown có đáng để bạn bỏ thời gian?
ChatGPT, Claude và Perplexity đều đọc được trang này. Hỏi thử xem họ nghĩ gì về MarkItDown.
