
AnyDoc:將辦公文件秒轉為 LLM 友善 Markdown 的開源利器
在建構 RAG(檢索增強生成)系統或處理大量數位文件時,如何從不同格式中精準、快速地提取結構化資訊,一直是開發者面臨的巨大挑戰。不論是舊版的 Word、複雜的 Excel 試算表、PDF 還是 RTF 檔,這些格式常如同資料孤島。
由 Firecrawl 團隊開發的開源專案 AnyDoc 完美解決了這個痛點。它採用純 Rust 撰寫,能將多達 14 種主流辦公文件,以毫秒級的速度(中位數小於 5ms)轉換為統一、乾淨且符合 GitHub 風格的 Markdown (GFM) 格式,為 AI 應用與下游分析提供高質量的結構化資料。
為什麼需要通用的文件轉換器?
處理真實世界的文件時,最棘手的問題在於檔案格式的多樣性與混亂。一份 .docx 檔案可能帶有複雜的巢狀樣式,而 .odt、.rtf 或 .pdf 則有完全不同的內部儲存與排版邏輯。
過去,開發者往往需要為每種格式引入不同的第三方解析套件(例如 PDF 專用、Excel 專用等),這不僅使專案依賴變得臃腫,且當遇到檔案輕微損壞或非常規編碼時,轉換管線極易崩潰。
AnyDoc 的核心優勢在於將轉換流程高度標準化。它並非逐個格式單獨開發轉換器,而是先將所有格式解析為一個統一的「共享文件模型(Shared Document Model)」,該模型會捕捉標題、段落、列表、表格與嵌入資源,最後再由單一的 Markdown 序列化器(Serializer) 輸出。這意味著,不論是 2003 年的舊版 .doc 還是昨天的 .pptx,產出的 Markdown 結構、轉義規則與表格呈現都具有百分之百的一致性。
AnyDoc 的核心技術優勢
AnyDoc 之所以能在眾多文檔轉換工具中脫穎而出,歸功於以下架構特色:
- 極致的轉換速度: 得益於純 Rust 實現且不依賴任何機器學習模型或外部雲端服務,AnyDoc 轉換單份文件的中位數時間僅為 4.4 毫秒。相比於傳統的 LibreOffice(中位數 1129ms)或 Unstructured(中位數 572ms),速度提升了數百倍。
- 14 種格式的超廣支援:
- Word 系列:
.doc,.docx,.docm - PowerPoint 系列:
.ppt,.pps,.pot,.pptx,.pptm,.ppsx,.ppsm - Excel 系列:
.xls,.xlsx,.xlsm,.xlsb - OpenDocument 家族:
.odt,.ods,.odp - 其他常見格式:
.rtf,.epub,.csv,.pdf
- Word 系列:
- 完美的表格重組與格式保留: 處理包含合併儲存格、表頭與複雜邊界的表格是文件轉換的難點。AnyDoc 能對齊行邊界並精準重建網格,轉化為標準的 Markdown 表格。此外,它還能完美保留標題錨點、粗斜體、程式碼區塊、雙向內部交叉引用、項目/編號列表、腳註/尾註以及簡報中的講者備忘錄(Speaker Notes)。
- 自動檔案類型偵測(Content-based Detection): AnyDoc 是透過檔案的**實際二進位特徵(Magic Bytes)**來識別格式(例如 PDF 標頭、RTF 群組標記、OLE 串流、Zip 套件的 Mimetype),而非單純依賴副檔名。即使使用者故意將
.docx命名成.txt,AnyDoc 也能正確識別並解析。 - 資源管理與安全性保障: 針對可能含有惡意代碼或「惡意壓縮包(Zip Bomb)」的異常文件,AnyDoc 內建了
ResourceLimit安全閥。一旦偵測到不合理的嵌套深度、超載的解壓需求或節點數量過多,會立即觸發錯誤中斷,保障運行主機的記憶體不被耗盡。 - 本地 PDF 解析與 OCR 整合: 針對文字型 PDF,AnyDoc 可直接透過底層的
pdf-inspector在本地進行純文字高速解析,完全無需額外呼叫雲端 OCR。若遇到掃描版 PDF,官方也提供了託管版本的 Firecrawl Parse API,可無縫對接其 OCR 視覺模型來處理無法直接讀取的核心影像頁面。
跨語言開發環境應用
AnyDoc 除了 Rust 原生庫之外,更提供了極其豐富的語言綁定。而且其底層設計非常貼心:Node.js 綁定運行於 libuv 執行緒池,絕不阻塞事件循環;Python 綁定則會釋放 GIL(全域鎖),確保多執行緒併發運行的效率。
1. Python 快速上手
您可以直接透過 PyPI 安裝 firecrawl-anydoc:
pip install firecrawl-anydoc
在代碼中只需幾行,即可靈活讀取路徑、讀取位元組或提取共享文檔模型:
import anydoc
# 1. 直接將文件轉為 Markdown 字串
markdown_text = anydoc.to_markdown("report.docx")
# 2. 從二進位位元組數據中讀取(會自動偵測格式)
with open("data.xlsx", "rb") as f:
byte_data = f.read()
markdown_from_bytes = anydoc.to_markdown_bytes(byte_data)
# 3. 提取包含嵌入資源(如圖片位元組與媒體類型)的完整 Document 模型
document_model = anydoc.to_document(byte_data)
2. LLM 智慧代理整合(Agent Skill)
AnyDoc 原生支持作為標準的 Agent Skill。如果您正在使用 Claude Code、Cursor、Codex 等兼容 Agent 系統,只需執行以下命令,即可讓您的 AI 助手具備閱讀、轉換與理解任何本機辦公文件的能力:
npx skills add firecrawl/anydoc
常見問題
問:AnyDoc 支援哪些檔案格式?
答:它目前原生完整支持高達 14 種格式,包括 Microsoft Office 的 Word(.doc/.docx/.docm)、PowerPoint(.ppt/.pptx 等全系列)、Excel(.xls/.xlsx/.xlsb/.xlsm)、OpenDocument(.odt/.ods/.odp)、RTF、EPUB、CSV 以及 PDF。
問:處理結構混亂的大型文件會使系統崩潰嗎?
答:不會。AnyDoc 內建了嚴格的資源與安全限制(ConvertError::ResourceLimit)。若文件超過了系統的安全處理上限(如嵌套層級過深或檔案結構異常),它會主動拋出錯誤中斷任務,以此保護伺服器不發生 OOM(記憶體溢出)。
問:這與一般的格式轉存工具有何不同? 答:一般的開源轉存軟體多是粗暴地將文字塞在一起,常會丟失表格的二維結構、混淆列表的編號,或遺失講者備忘錄與腳註。AnyDoc 致力於將所有檔案對齊至一個「共享文件模型」,並利用 Rust 的高性能,做到小於 5 毫秒的極致轉換,產出的 Markdown 結構標準、語意乾淨,是專為下游大語言模型(LLM)量身打造的輸入格式。
結語
AnyDoc 將混亂、分散的辦公室文檔格式,以不可思議的高速轉化為穩定、結構化的 Markdown 資料,極大地簡化了企業知識庫的標準化流程。如果您正在建構自動化知識檢索、AI Agent 或常受文檔解析效率低下所苦,不妨立即造訪 Firecrawl 的 AnyDoc GitHub 頁面 開始體驗!



