Chuyển PDF, Word sang Markdown để AI phân tích yêu cầu
Quy trình cho BA/PO chuyển tài liệu nghiệp vụ sang Markdown, kiểm tra cấu trúc và vùng OCR trước khi dùng AI so sánh phiên bản, tìm điểm mơ hồ, viết user story và acceptance criteria.
Bạn nhận một bản PDF đặc tả từ đối tác: có bảng điều kiện, luồng xử lý và ghi chú cuối trang. Một tuần sau, họ gửi thêm bản Word “đã cập nhật”.
Câu hỏi quen thuộc của BA là: điều gì thực sự thay đổi, và thay đổi đó ảnh hưởng đến user story hay acceptance criteria nào?
Copy-paste trực tiếp từ PDF vào chatbot thường làm vỡ bảng, lẫn tiêu đề vào nội dung hoặc đọc sai phần scan. Một cách thực dụng hơn là chuyển tài liệu sang Markdown trước: văn bản nhẹ, nhưng vẫn biểu diễn được heading, danh sách, bảng và liên kết để AI đọc có ngữ cảnh.
Với BA/PO, đây không chỉ là đổi định dạng. Đây là bước chuẩn bị đầu vào để rà yêu cầu, đối chiếu phiên bản và đặt câu hỏi với stakeholder có hệ thống hơn.
Markdown “sẵn sàng cho AI” là gì?
Markdown dùng ký hiệu đơn giản để biểu diễn cấu trúc:
# cho tiêu đề;
dấu gạch đầu dòng cho danh sách;
hàng và cột cho bảng.
MarkItDown là tiện ích Python chuyển nhiều loại tệp sang Markdown, gồm PDF, Word, Excel, PowerPoint, ảnh, HTML và các định dạng văn bản khác.
Công cụ ưu tiên giữ những cấu trúc quan trọng như heading, list, table và link. Mục tiêu chính là tạo đầu vào cho LLM và quy trình phân tích văn bản, không phải tạo một bản tài liệu có độ trung thực hiển thị cao để gửi khách hàng.
Với BA/PO, Markdown có thể giúp chuẩn bị BRD, tài liệu quy trình, biên bản họp hoặc bảng quy tắc nghiệp vụ để:
Tách yêu cầu thành user story và acceptance criteria.
Tìm điểm mơ hồ như “xử lý phù hợp” hoặc “kiểm tra hợp lệ”.
Đối chiếu các phiên bản đặc tả.
Truy vấn xuyên tài liệu: quy tắc nào nhắc đến hạn mức, vai trò nào được phê duyệt, bước nào thiếu ngoại lệ.
Gửi một phần tài liệu có chọn lọc cho AI mà vẫn giữ ngữ cảnh tiêu đề và bảng.
README của MarkItDown cũng nêu Markdown có hiệu quả token tốt. Điều này hữu ích khi tài liệu dài phải đi qua công cụ AI hoặc quy trình phân tích có giới hạn ngữ cảnh.
Chọn công cụ theo độ khó của tài liệu
Không nhất thiết phải dùng một công cụ cho mọi loại tệp.
| Tình huống BA gặp | Lựa chọn nên cân nhắc |
|---|---|
| PDF hoặc Word thông thường, cần giữ heading, list, table để AI đọc | MarkItDown |
| PDF có bố cục phức tạp, thứ tự đọc quan trọng, bảng khó hoặc công thức | Docling |
| Tài liệu scan hoặc có ảnh chứa chữ cần OCR | MarkItDown với plugin OCR, hoặc Docling |
| Tài liệu nhạy cảm cần xử lý trong môi trường cô lập | Docling có khả năng chạy cục bộ và trong môi trường air-gapped |
Docling mô tả các khả năng xử lý PDF nâng cao, gồm bố cục trang, thứ tự đọc, cấu trúc bảng, mã, công thức và phân loại ảnh. Công cụ cũng hỗ trợ xuất Markdown và OCR cho PDF scan, ảnh.
Với tài liệu nghiệp vụ phổ biến, MarkItDown là điểm bắt đầu gọn nhẹ. Khi bảng, biểu mẫu, bố cục nhiều cột hoặc thứ tự đọc là yếu tố quyết định, hãy thử Docling và kiểm tra kết quả đầu ra trước khi đưa vào AI.
Quy trình chuyển tài liệu thành đầu vào có thể kiểm tra
Bước 1: Tạo môi trường làm việc tách biệt
MarkItDown yêu cầu Python từ phiên bản 3.10 đến 3.14. README khuyến nghị dùng virtual environment để giảm xung đột thư viện.
bash
python -m venv .venv
source .venv/bin/activate
Cài đầy đủ các thành phần hỗ trợ:
bash
pip install 'markitdown[all]'
Nếu chỉ cần PDF, Word và PowerPoint, có thể cài các thành phần tương ứng:
bash
pip install 'markitdown[pdf, docx, pptx]'
Nếu không tự cài được Python, BA/PO có thể phối hợp với đội kỹ thuật. Nên thống nhất quy ước tên đầu ra, ví dụ:
text
<tên-tài-liệu>-<phiên-bản>.md
Quy ước này giúp việc so sánh phiên bản sau đó rõ ràng hơn.
Bước 2: Chuyển từng bản tài liệu sang Markdown
Với PDF, dùng lệnh cơ bản:
bash
markitdown path-to-file.pdf -o document.md
Với Word, thay tệp đầu vào bằng đường dẫn đến tệp thực tế. MarkItDown hỗ trợ Word và tạo tệp Markdown để mở bằng trình soạn thảo văn bản hoặc đưa vào kho tài liệu.
Nếu cần thử Docling:
bash
pip install docling
Ví dụ CLI trong README:
bash
docling https://arxiv.org/pdf/2206.01062
Lệnh này tạo tệp .md trong thư mục hiện tại. Docling cũng minh họa việc dùng nguồn là đường dẫn cục bộ hoặc URL trong Python. Với tài liệu nội bộ, hãy triển khai theo hướng dẫn của đội kỹ thuật và chính sách bảo mật của tổ chức.
Bước 3: Kiểm tra cấu trúc trước khi hỏi AI
Đừng đưa ngay toàn bộ Markdown cho AI. Hãy mở tệp và rà theo thứ tự:
Heading: Các mục như Phạm vi, Quy trình, Ngoại lệ có bị nhập vào nhau không?
Bảng: Tên cột có còn không? Hàng có bị lệch không? Điều kiện có bị rơi sang ô khác không?
Danh sách: Các bước xử lý có giữ đúng thứ tự không?
Phần scan hoặc ảnh: Có đoạn trống, ký tự lạ, số tiền hoặc mã quy tắc đáng ngờ không?
Chân trang: Phiên bản, ngày hiệu lực, ghi chú có bị lẫn vào nội dung chính không?
Đây là phần BA/PO tạo giá trị rõ nhất: hiểu ngữ cảnh nghiệp vụ để phân biệt một điều kiện bất thường là lỗi trích xuất hay thay đổi chính sách thực sự.
Đánh dấu vùng OCR nghi ngờ
MarkItDown có plugin markitdown-ocr để trích xuất chữ từ ảnh nhúng trong PDF, DOCX, PPTX và XLSX bằng LLM Vision.
Cài plugin:
bash
pip install markitdown-ocr
pip install openai
Ví dụ Python trong README:
python
from markitdown import MarkItDown
from openai import OpenAI
md = MarkItDown(
enableplugins=True,
llmclient=OpenAI(),
llmmodel="gpt-4o",
)
result = md.convert("documentwithimages.pdf")
print(result.markdown)
Một lưu ý quan trọng: nếu không cung cấp llmclient, plugin vẫn được tải nhưng OCR sẽ bị bỏ qua âm thầm và bộ chuyển đổi mặc định được dùng. Vì vậy, đừng kết luận tài liệu không có nội dung chỉ vì phần scan không xuất hiện trong Markdown.
Thay vì để AI tự suy đoán, hãy gắn nhãn những vùng cần kiểm tra:
markdown
> [CẦNXÁCMINHOCR]
> Bản gốc khó đọc tại <vị trí>.
> Nội dung trích xuất: "<nội dung OCR>"
> Cần đối chiếu với PDF/Word gốc trước khi chốt yêu cầu.
Nhãn này giúp AI nhận biết dữ liệu chưa đáng tin, đồng thời biến việc rà OCR thành danh sách công việc rõ ràng cho buổi refinement.
Prompt để AI tạo đầu ra BA có thể dùng
Sau khi rà cấu trúc và gắn nhãn vùng nghi ngờ, hãy gửi phần liên quan thay vì toàn bộ kho tài liệu.
Phân tích yêu cầu
text
Bạn là Business Analyst trong lĩnh vực <ngành>.
Dựa duy nhất trên Markdown bên dưới:
Tóm tắt quy tắc nghiệp vụ.
Viết user story theo mẫu: Là <vai trò>, tôi muốn <mục tiêu>, để <lợi ích>.
Đề xuất acceptance criteria có thể kiểm thử.
Liệt kê các điểm mơ hồ, thiếu điều kiện hoặc mâu thuẫn.
Không suy đoán nội dung tại các đoạn gắn [CẦNXÁCMINHOCR].
Với mỗi nhận định, trích lại heading hoặc bảng nguồn liên quan.
Markdown:
<dán nội dung Markdown>
So sánh hai phiên bản tài liệu
Trước khi so sánh, hãy bảo đảm cả hai bản đã được chuyển đổi bằng cùng cách tiếp cận và đã kiểm tra cấu trúc.
text
Bạn là BA phụ trách <sản phẩm>.
So sánh Version A và Version B dưới đây.
Chỉ nêu khác biệt có bằng chứng trong nội dung.
Phân loại: thêm mới, bỏ đi, sửa quy tắc, thay đổi luồng, thay đổi dữ liệu.
Nêu tác động tới user story, acceptance criteria, quy trình và câu hỏi cần xác nhận.
Đánh dấu mọi khác biệt liên quan đoạn [CẦNXÁCMINHOCR] là "chưa xác thực".
Không kết luận rằng một thay đổi đã được phê duyệt.
Version A:
<markdown phiên bản A>
Version B:
<markdown phiên bản B>
Ví dụ: từ quy tắc nghiệp vụ đến acceptance criteria
Đầu vào Markdown đã được kiểm tra:
markdown
## Kiểm tra giao dịch
| Điều kiện | Kết quả |
|---|---|
| Giao dịch vượt <hạn mức> | Chuyển phê duyệt |
| Giao dịch bị từ chối | Hiển thị lý do |
> [CẦNXÁCMINHOCR]
> Điều kiện tại <trang> có thể bị OCR sai.
Đầu ra AI có thể hữu ích:
markdown
### User story
Là giao dịch viên, tôi muốn hệ thống chuyển giao dịch vượt <hạn mức>
sang bước phê duyệt để kiểm soát giao dịch theo quy định.
Acceptance criteria
Câu hỏi cần xác nhận
Mục tiêu không phải để AI viết dài hơn. Mục tiêu là tách phần đã có bằng chứng khỏi phần BA cần xác nhận với stakeholder.
Review đầu ra AI trước khi tạo Jira
Trước khi biến kết quả thành ticket, kiểm tra bốn điểm:
Thiếu: Đã có actor, trigger, dữ liệu đầu vào, ngoại lệ và kết quả đầu ra chưa?
Mơ hồ: Những từ như “phù hợp”, “nhanh”, “đúng quy định” đã có tiêu chí kiểm thử chưa?
Mâu thuẫn: Cùng một điều kiện có dẫn đến hai kết quả ở các mục khác nhau không?
Truy vết: Mỗi acceptance criterion có thể chỉ về heading, bảng hoặc đoạn nguồn nào không?
Nếu AI đề xuất một điều kiện không có trong Markdown, hãy ghi đó là đề xuất cần xác nhận, không phải yêu cầu đã được phê duyệt.
Nếu bảng gốc bị lệch, cần sửa hoặc ghi chú lỗi trước khi tạo Jira. Đừng tin bản tóm tắt chỉ vì câu chữ nghe hợp lý.
Lưu ý bảo mật và checklist