📌 本文重點
- NuExtract3 專門做「影像 / PDF → 結構化文字」
- 直接輸出 JSON / Markdown,省掉後續清洗
- 可自架本地部署,敏感資料不用上雲
- 用 prompt 自訂欄位 schema,方便接到現有 workflow
把亂七八糟的 PDF、發票截圖、表格照片,丟進 NuExtract3,就能直接拿到乾淨的 JSON / Markdown 結構化資料,方便你後續丟進 Notion、Google Sheet 或資料庫繼續用。
官方開源介紹(含 Demo 連結):Reddit:NuExtract3 released
核心功能:三件事講完 NuExtract3
1. 多種文件型態,一次搞定
NuExtract3 是基於 Qwen3.5-4B 訓練的開源多模態模型(Apache-2.0 授權),主打「影像 / PDF → 結構化文字」。實際可以拿來處理:
- 多頁 PDF:報表、合約、研究報告
- 發票、收據、報銷單:紙本拍照、掃描檔
- 表格:Excel 匯出成 PDF、紙本表單的掃描
- 表單截圖:Google Form 結果頁、線上後台報表截圖
你只要準備:
- 一個檔案(PDF / 圖片)
- 一個「你想要的結構」描述(例如:請輸出成 JSON,欄位有
date、vendor、total_amount)
就能讓它幫你把畫面裡的內容拉成乾淨結構。
💡 關鍵: 只要定義好欄位結構,NuExtract3 就能把任何格式雜亂的文件,轉成統一結構的資料,後續處理成本會大幅下降。
2. 直接輸出 JSON / Markdown,少一個清洗步驟
NuExtract3 的設計重點不是「純 OCR」,而是「OCR + 結構化輸出」。實際測試時,你可以要求:
- 輸出 JSON:適合丟進程式、API、資料庫
- 輸出 Markdown:適合整理筆記、放進 Notion、Obsidian
例如你給他一張發票照片,提示可以這樣寫:
你是一個資料錄入助手。從這張發票中擷取欄位,並輸出 JSON:
{
"date": "發票日期 (YYYY-MM-DD)",
"vendor": "商家名稱",
"invoice_number": "發票號碼",
"items": [
{"name": "品項名稱", "quantity": 數量, "unit_price": 單價, "amount": 金額}
],
"subtotal": 小計,
"tax": 稅額,
"total": 總金額
}
如果沒有某個欄位,填 null。
輸出就會直接是可用的 JSON,不用再寫額外的字串處理把文字拆欄位。
3. 本地部署,自已控管資料隱私
NuExtract3 以「開源權重、自架」為主:
- 模型權重可下載,
Apache-2.0授權,可商用 - 可以在自己筆電、公司伺服器上跑
- 不需要把發票、合約等敏感文件上傳到第三方雲端
你可以先在官方 Hugging Face Space 線上試,用得順手再搬回本地。
線上 Demo(免註冊):搜「NuExtract3」即可在 Hugging Face Spaces 上找到官方 Space。
💡 關鍵: 在合約、財務等敏感場景,自架 + 開源授權讓你既能自動化,又不必冒資料外流風險。
適合誰用:三個典型場景
1. 財務 / 行政:發票、報銷單半自動錄入
適用情境:
- 同事每個月丟一堆發票照片、PDF 報銷單
- 你要把日期、金額、商家、發票號碼一筆筆打進系統或 Excel
可以這樣用:
- 把所有發票照片存進一個資料夾
- 用腳本逐張丟給 NuExtract3,要求輸出統一格式的 JSON
- 把 JSON 轉成 CSV,匯入到:
- 公司報銷系統
- Google Sheet 統計報表
立即可做的行動:
– 把你現有的 2–3 張發票/收據,丟進官方 Space,測試能不能抓出你要的欄位(日期/金額/店名)。
2. 自媒體 / 法務:整理掃描合約、條款重點
適用情境:
- 合作合約只有掃描版 PDF
- 你只關心「合約雙方」「金額」「期限」「解約條件」「付款節點」
你可以:
- 把 PDF 上傳 NuExtract3
- 用自然語言指定要的欄位,例如:
請閱讀這份合約,並用 JSON 回答:
{
"party_a": "甲方名稱",
"party_b": "乙方名稱",
"contract_term": "合約期間(文字說明)",
"payment_terms": "付款條件摘要",
"termination_clause": "解約條款摘要"
}
- 把輸出貼進 Notion,或丟給 ChatGPT / 其他 LLM 再做風險檢查
立即可做的行動:
– 找一份你平常會反覆查的合約掃描檔,試著用 NuExtract3 生成「合約摘要 Markdown」,看可讀性如何。
3. 數據分析師:報表、問卷結果結構化
適用情境:
- 手上有 PDF 報表、問卷紙本掃描
- 想要的,是一張可以直接做分析的表格
使用方式:
- 對著一頁表格截圖
- 提示要求輸出成「每列一筆紀錄」的 JSON 陣列
把這頁問卷結果表格,轉成 JSON 陣列,每列是一位受訪者:
[
{
"id": "編號",
"age": 年齡,
"gender": "性別",
"q1": "問題1答案",
"q2": "問題2答案"
}
]
- 把 JSON 轉成 CSV 後丟進 Python / R / Excel 分析
立即可做的行動:
– 拿一頁報表截圖,試著讓 NuExtract3 幫你還原成表格,再貼進 Google Sheet 看欄位是否正確。
怎麼開始:五分鐘上手路線
步驟 0:先線上玩一次(不用裝任何東西)
- 打開瀏覽器,前往 Hugging Face Space(搜尋
NuExtract3) - 上傳一張發票 / 合約 / 表格截圖
- 在「指令」欄位輸入你想要的輸出格式(JSON / Markdown + 欄位定義)
- 看輸出結果是否符合你平常的工作需求
如果這步已經感覺能用,再考慮搬回本機或公司伺服器。
💡 關鍵: 先用線上 Demo 驗證「欄位抓得準不準」,再投入時間做 Docker 與腳本整合,能避免白做工。
步驟 1:在本機 / 伺服器用 Docker 跑起服務
以下是假設官方提供 Docker 映像的典型流程(實際請以官方 README 為準):
# 1. 拉取映像
docker pull numind/nuextract3:latest
# 2. 啟動服務(假設開在 8000 port)
docker run -d \
--gpus all \
-p 8000:8000 \
--name nuextract3 \
numind/nuextract3:latest
啟動後通常會有一個簡單 API,例如:
curl -X POST http://localhost:8000/extract \
-F "file=@invoice.jpg" \
-F 'prompt=請擷取發票資訊並輸出 JSON,欄位:date, vendor, total_amount'
回傳的就是 JSON 結果,可以直接被腳本處理。
步驟 2:用簡單 Python Script 跑推論
如果你偏好直接在 Python 裡呼叫(例如透過 vLLM / Transformers),典型流程會像這樣(範例示意):
from PIL import Image
import requests
import json
API_URL = "http://localhost:8000/extract"
image_path = "./samples/invoice.jpg"
prompt = "請從這張發票擷取日期(date)、商家(vendor)、總金額(total_amount),並輸出 JSON。"
files = {"file": open(image_path, "rb")}
data = {"prompt": prompt}
resp = requests.post(API_URL, files=files, data=data)
result = resp.json()
print(json.dumps(result, ensure_ascii=False, indent=2))
這段可以直接嵌入到你現有的報表處理、RPA 流程裡。
步驟 3:自訂你的欄位 schema
NuExtract3 沒有「固定欄位」,而是靠你的提示(prompt)決定要萃取什麼。實作時可以:
- 先在 Notion / Google Sheet 寫好你要的欄位列表,例如:
datevendorcategorysubtotaltaxtotal- 在提示裡把這些欄位寫成 JSON 模板,明確說明格式
- 要求:
- 用固定欄位名稱
- 金額用數字,不要加貨幣符號
- 缺失欄位填
null
這樣輸出就更穩定,後續程式處理也比較不容易爆炸。
步驟 4:組一個簡單 workflow:NuExtract3 + Google Sheet / Notion
你可以很快做出一個「半自動錄入」流程:
發票例子:
- 把所有發票照片放進
invoices/資料夾 - 用 Python 跑一個簡單批次處理:
- 逐張呼叫 NuExtract3 API
- 收集 JSON 結果
- 把 JSON 轉成 CSV:
- 用
pandas寫入 Google Sheet(透過 Google API) - 或匯出 CSV 手動上傳
概念範例:
import os, json, requests, csv
API_URL = "http://localhost:8000/extract"
rows = []
for fname in os.listdir("./invoices"):
with open(os.path.join("./invoices", fname), "rb") as f:
resp = requests.post(
API_URL,
files={"file": f},
data={"prompt": "請輸出 JSON,欄位:date, vendor, total_amount"}
)
data = resp.json()
rows.append([data["date"], data["vendor"], data["total_amount"]])
with open("invoices.csv", "w", newline="", encoding="utf-8") as fp:
writer = csv.writer(fp)
writer.writerow(["date", "vendor", "total_amount"])
writer.writerows(rows)
Notion 的話,則可以用 Notion API 建立資料庫頁面,把每一筆 JSON 轉成一筆資料列。
小結:什麼時候值得用 NuExtract3?
- 你有大量掃描檔、截圖要轉成結構化資料
- 內容多是表格、發票、收據、合約這類「格式固定但樣式雜」的文件
- 你在意 資料不能丟到雲端,希望自架
先在 Hugging Face Space 玩 10 分鐘,如果覺得可用,再花半天把 Docker + 簡單腳本接起來,你就多了一個專門幫你「把亂檔變乾淨資料」的本地工具。
🚀 你現在可以做的事
- 上 Hugging Face 搜尋
NuExtract3,用 2–3 張發票或表格截圖測試輸出 JSON / Markdown- 在 Notion 或 Google Sheet 列出你常用的欄位 schema,順手寫一個對應的 prompt 模板
- 在本機用 Docker 跑起
nuextract3,照文中的curl或 Python 範例打一次 API,驗證能否接到現有流程


發佈留言