跳到正文
土土金API

文件解析與資訊抽取

合同、發票、對帳單轉結構化資料,圖片和掃描件交給支援識圖的模型,帶文字層的 PDF、Word 先提取文本再交給文本模型,兩路都要求按 JSON 輸出,再由程式校驗欄位。按每月 1 萬頁掃描件加 5,000 份文本合同估算,用最低價分組計算,模型費用每月約 ¥178。

價格更新於 2026年11月13日 下午5:58

月成本估算

假設:每月處理 1 萬頁發票和掃描件,每頁輸入約 2,000 tokens(圖片約 1,500、指令約 500),輸出約 400 tokens;另有 5,000 份帶文字層的合同,每份輸入約 6,000 tokens,輸出約 600 tokens。

¥177.6/ 月

  • 掃描件與圖片抽取¥60
  • 文本合同抽取¥117.6
看用量假設

業務問題

財務、法務和供應鏈每天要從發票、合同、對帳單、裝箱單裡把資料抄進系統。版式一多,傳統 OCR 加規則的方案維護起來很費勁,供應商換個模板就得重新配置。

識圖大模型能直接看懂不同版式的票據和表格,按你給的欄位名返回 JSON。它也會讀錯、漏欄位,偶爾把看不清的值猜出來,所以結果必須先校驗再入庫。

更穩的做法是按文件類型先定好欄位清單,讓模型嚴格按清單輸出,再用程式檢查格式和金額合計,校驗不過的進入人工複核。

推薦模型組合

推薦模型按即時目錄自動選取,價格取各模型最低價分組,更新於 2026年11月13日 下午5:58。點模型名可檢視全部分組價格。

參考架構

  1. 1

    分類與預處理

    先判斷文件類型(發票、合同、對帳單)。能提取文字層的直接取文本;掃描件和照片轉成圖片,壓縮到合適的解析度。

  2. 2

    定義欄位

    每類文件寫一份欄位清單:欄位名、類型和格式(日期統一 YYYY-MM-DD,金額用數字),寫進提示詞。

  3. 3

    呼叫模型

    圖片走識圖模型,文本走文本模型,temperature 設為 0,用 response_format 要求返回 JSON。部分模型不支援 response_format,就在提示詞裡要求只返回 JSON,並在程式碼裡擷取 JSON 部分。

  4. 4

    程式校驗

    檢查必填欄位、日期和金額格式;發票核對明細合計與總額,合同核對各個日期的先後。不合格的自動重試一次。

  5. 5

    人工複核

    重試後仍不合格、或金額超過閾值的單據進入人工複核佇列,複核結果回寫系統,典型錯例可以加進提示詞當示例。

成本估算

假設:每月處理 1 萬頁發票和掃描件,每頁輸入約 2,000 tokens(圖片約 1,500、指令約 500),輸出約 400 tokens;另有 5,000 份帶文字層的合同,每份輸入約 6,000 tokens,輸出約 600 tokens。

專案模型用量假設費用
掃描件與圖片抽取gemini-3.8-flash10,000 次 × 輸入 2,000 + 輸出 400 tokens¥60
文本合同抽取deepseek-v4.1-flash5,000 次 × 輸入 6,000 + 輸出 600 tokens¥117.6
合計(每月)¥177.6

按各模型最低價分組的即時價格計算,價格更新於 2026年11月13日 下午5:58。

只含模型呼叫費用,不含預處理、儲存和人工複核成本。圖片換算成多少 tokens 因模型和解析度而異,表中按每頁約 1,500 tokens 估算,實際以響應裡的 usage 為準。頁數翻倍,費用大致翻倍。

示例程式碼

把圖片轉成 base64 放進 image_url,要求模型按欄位清單返回 JSON,再檢查欄位是否齊全。

示例程式碼(Python,發票圖片轉 JSON)
import base64
import json
import os
from openai import OpenAI

client = OpenAI(base_url="https://www.tutujin.com/v1", api_key=os.environ["TUTUJIN_API_KEY"])

FIELDS = ["invoice_number", "issue_date", "seller_name", "buyer_name", "total_amount", "currency"]
PROMPT = (
    "Extract these fields from the invoice image and reply with one JSON object only: "
    + ", ".join(FIELDS)
    + ". Use null for anything you cannot read. Dates as YYYY-MM-DD, amounts as numbers."
)


def parse_json(text):
    """Some models add text around the JSON; keep the outermost object."""
    return json.loads(text[text.find("{"): text.rfind("}") + 1])


def extract(path):
    with open(path, "rb") as f:
        data_url = "data:image/png;base64," + base64.b64encode(f.read()).decode()
    resp = client.chat.completions.create(
        model="gemini-3.8-flash",
        messages=[{
            "role": "user",
            "content": [
                {"type": "text", "text": PROMPT},
                {"type": "image_url", "image_url": {"url": data_url}},
            ],
        }],
        response_format={"type": "json_object"},
        temperature=0,
    )
    record = parse_json(resp.choices[0].message.content)
    missing = [k for k in FIELDS if k not in record]
    if missing:
        raise ValueError("missing fields: " + ", ".join(missing))
    return record


print(extract("invoice.png"))
# Text-layer PDFs and Word files: extract the text yourself and send it to deepseek-v4.1-flash with the same field list.

用一把 Key 試試這個方案

註冊後在控制台建立 API Key,把上面程式碼裡的 base_url 和 Key 換成你的就能執行。企業採購、開發票可以加客服微信 JsnonoChat。

土土金客服微信二維碼
微信JsnonoChat

掃碼或搜尋微信號新增客服

常見問題

每月處理 1.5 萬份文件要多少錢?

按 1 萬頁掃描件(每頁輸入約 2,000 tokens)加 5,000 份文本合同(每份輸入約 6,000 tokens)估算,用最低價分組計算約 ¥178。圖片解析度和合同長度對費用影響最大。

抽取結果能保證準確嗎?

不能保證。模型可能讀錯模糊的數字、漏掉欄位,所以結果要經過程式校驗(格式、合計、必填項),關鍵單據保留人工複核。

PDF 可以直接發給模型嗎?

有文字層的 PDF 建議先用程式提取文字,再發給文本模型,費用更低;掃描版 PDF 先轉成圖片,每頁一張交給識圖模型。

模型不按 JSON 返回怎麼辦?

優先用 response_format 要求 JSON。模型不支援時,在提示詞裡寫明只返回 JSON,程式碼裡擷取第一個左花括號到最後一個右花括號之間的內容再解析,解析失敗就重試。

涉及敏感資訊的合同能用嗎?

請求會經本站轉發給模型服務處理。包含個人資訊或商業機密的文件,建議先脫敏(隱去身份證號、銀行帳號等)再提交,並按你們自己的資料合規要求評估。