Firecrawl

Firecrawl /parse:把本地文件變成 LLM 可用資料的最短略徑

Firecrawl 推出 /parse 端點,讓 PDF、Word、Excel 等本地文件直接上傳,走與 /scrape 同一套 Rust 解析引擎,回傳乾淨 Markdown 與結構化 JSON。本文拆解其分層解析策略、單次呼叫的 schema 抽取流程,以及計費與掃描品質等限制。

Firecrawl /parse:把本地文件變成 LLM 可用資料的最短略徑 — 文章封面
本頁內容6 個段落
  1. 一個 API,同時覆蓋網頁與本地文件
  2. Rust 引擎:不是更快地跑 OCR,而是少跑 OCR
  3. 一次呼叫:Markdown 與結構化欄位同時拿
  4. 計費、快取與掃描品質:三個要先知道的限制
  5. 對 builder 的實際意義
  6. 參考來源

如果你的團隊在搭 RAG 系統或自動化文件流程,一定遇過這個斷點:網頁內容好抓,但合約、報告、發票、使用者上傳的檔案都躺在硬碟裡,格式混亂,要先寫一堆解析與清理程式才能餵給 LLM。Firecrawl 在 4 月 28 日推出的 /parse 端點補上這一塊:直接上傳本地檔案,拿回與網頁抓取完全一致的乾淨輸出——PDF 保留閱讀順序與表格、Word 濾掉 XML 噪音、試算表變成整齊的 tabular Markdown,甚至可以在同一呼叫裡要求摘要或結構化 JSON 抽取。

一個 API,同時覆蓋網頁與本地文件

/parse 的定位是 /scrape 的本地檔案版:兩者走同一套解析引擎,輸出格式一致,這代表你的下游管線(清洗、切塊、入向量庫)只需要寫一次。官方在公告裡把場景說得很直白——很多需要處理的文件(合約、報告、發票、上傳檔案)存在磁碟上而不是網路上,過去這條路要自己接 OCR 或文件庫,現在與網頁抓取收斂到同一個 API。

支援格式:PDF、DOCX、DOC、ODT、RTF、XLSX、XLS、HTML,單檔上限 50 MB。不在清單上的格式會直接回 UNSUPPORTED_FILE_TYPE 錯誤,不會猜。對既有 /scrape 使用者來說,遷移成本近乎零:差別只在檔案來源從 URL 換成上傳,參數與回應結構照舊。

Rust 引擎:不是更快地跑 OCR,而是少跑 OCR

/parse 底層是 Rust 解析引擎,平均每頁處理低於 400 毫秒。真正的設計重點是它不把每頁都丟給 OCR,而是先分類再處理:

  • 純文字頁走原生抽取:開源 Rust 函式庫 pdf-inspector 直接讀 PDF 內部結構(字型、文字運算子、圖片覆蓋率),毫秒級取出文字,完全不需要渲染。
  • GPU 只用在需要的地方:掃描頁與圖片為主的頁面才送到 GPU 叢集,而且是 lane-based 隔離——一份 200 頁的報告不會拖慢別人單頁發票的處理。
  • 版面感知準確度:神經版面模型分別偵測表格、公式、文字區塊與標題,再對各區域調參——表格拿到更高的 token 預算、公式保留為 LaTeX、多欄文件的閱讀順序由模型預測。

這種分層策略讓速度與成本務實平衡:純文字頁的成本壓在原生抽取,昂貴的 GPU 只留給真正需要它的掃描頁。

一次呼叫:Markdown 與結構化欄位同時拿

實務上最有感的是 schema 抽取可以內嵌在上傳呼叫裡。以合約為例,連同檔案一起傳入 JSON schema:

import requests
import json

with open("contract.pdf", "rb") as f:
    response = requests.post(
        "https://api.firecrawl.dev/v2/parse",
        headers={"Authorization": "Bearer fc-YOUR_API_KEY"},
        files={"file": f},
        data={
            "options": json.dumps({
                "formats": ["markdown", "json"],
                "json": {
                    "schema": {
                        "type": "object",
                        "properties": {
                            "parties": {"type": "array", "items": {"type": "string"}},
                            "effective_date": {"type": "string"},
                            "total_value": {"type": "string"}
                        }
                    }
                }
            })
        }
    )

data = response.json()["data"]
print(data["markdown"])
print(data["json"])

回應裡 markdown 是保留表格與閱讀順序的全文,json 則是按 schema 抽出的 typed 欄位(當事人、生效日、總額這種)。一次呼叫拿兩種輸出,不需要再寫第二段解析。對 RAG 場景,這一步出來的結果就是 embedding-ready:結構保留、表格完整、必要時附摘要,切塊後直接進向量庫。

計費、快取與掃描品質:三個要先知道的限制

官方公告也把限制攤開來講。第一,每次呼叫都重新解析:結果不快取,同一檔案重複上傳會重複計費;計費模式與 /scrape 相同——一次呼叫,加上你要求的 LLM 格式(如 JSON 抽取)。第二,掃描 PDF 的品質上限就是掃描品質:乾淨的掃描解析乾淨,低解析度或手寫內容輸出品質就會下降,因為這類頁面終究要走 OCR。第三,固定格式與大小上限:50 MB、八種格式,沒有灰色地帶。

另外一個合規相關的細節:Enterprise 方案可開啟 Zero Data Retention(ZDR),確保解析輸出不落地儲存——對處理合約、醫療記錄或內部報告的團隊,這是把文件管線交给第三方服務前的必要檢查項。

對 builder 的實際意義

/parse 目前對所有 Firecrawl API 使用者開放。兩個最直接的落地場景:

  1. 應用內的檔案上傳環節:使用者丟 PDF 或 DOCX 進你的產品,一次呼叫變成 Markdown 加結構化欄位,後續無論是進向量庫、觸發 workflow 或寫入資料庫,都是同一種格式。
  2. 統一文件管線:Email 附件、下載的報表、網頁內容、使用者上傳——四種來源全走 Firecrawl,輸出一致,少維護一套自製解析器。

導入建議也很簡單:先拿你實際會遇到的一批文件(尤其含掃描件與多欄表格的)跑一輪,確認輸出品質;掃描品質與版面複雜度是結果的最大變因,實測永遠比規格表準。如果工作流程會反覆處理同一批檔案,記得把「不快取、每次計費」算進成本模型——考慮在自己這層快取解析結果,讓同一份未變動的文件重複處理時不再付費,這是官方計費設計下最直接的成本槓桿。

參考來源

本文由 AI 協助自上述來源整理,經人工審核後發布。

這篇內容對你有幫助嗎?

支持本站繼續整理實用的 AI 文章、教學與開發筆記。

請我喝杯咖啡
分享X電郵