發票欄位抽取(含校驗)
一堆發票需要錄入報銷系統,手動抄太慢。
提示詞長度
285
tokens
建議模型
Flash
單次成本(離峰)
$0.00022
Flash
跑一萬次
$2.23
Flash 離峰
提示詞全文
從下面的發票文字中抽取欄位。
發票文字(OCR 結果):
```
{{發票文字}}
```
輸出 JSON:
{
"invoice_no": "發票號碼",
"date": "YYYY-MM-DD",
"seller": "銷售方名稱",
"buyer": "購買方名稱",
"items": [{"name": "品名", "qty": 數量, "price": 單價, "amount": 金額}],
"subtotal": 不含稅金額,
"tax": 稅額,
"total": 價稅合計,
"__checks": ["校驗發現的問題"]
}
校驗規則(必須執行並在 __checks 裡報告):
1. 各項金額加總是否等於 subtotal
2. subtotal + tax 是否等於 total
3. 數量 × 單價 是否等於金額
4. 日期格式是否合理
5. 發票號碼位數是否符合常見格式
要求:
- 數字一律用數字類型,不要用字串
- OCR 明顯錯字(如 0/O、1/l)修正後在 __checks 說明
- 校驗不通過時不要擅自調整數字,只報告問題
- 如果關鍵欄位缺失,對應值填 null
為什麼這樣寫
- 「校驗規則」是發票抽取的核心。只看抽取不看校驗,等於把人工抄寫換成人工核對,沒省事。
- 「校驗不通過不要擅自調整」很重要 —— 模型傾向把數字改成「對得上」,反而掩蓋真實錯誤。
- 要求 OCR 錯字修正在 __checks 說明,保留可追溯性。
成本
按上面這段提示詞估算(輸入 285 tokens、輸出 300 tokens)。輸出長度依任務而定,實際會有差異。
| 模型 | 單次(高峰) | 單次(離峰) | 1 萬次(高峰) | 1 萬次(離峰) |
|---|---|---|---|---|
| DeepSeek Flash | $0.00045 | $0.00022 | $4.46 | $2.23 |
| DeepSeek V4 Pro | $0.00156 | $0.00078 | $15.64 | $7.82 |
模型建議:發票抽取是結構化的模式匹配任務,Flash 準確率足夠。若 OCR 品質較差、需要推理修補,再用 V4 Pro。
變體
- 要批量對帳時,改成「輸入多張發票,輸出陣列,並在最後給出總額匯总」。
- 有小計和稅率時,追加「驗證稅率是否與 subtotal 匹配」。
常見失敗
- OCR 品質差時抽取會不穩,建議先人工確認關鍵欄位。
- 不要求校驗,錯誤會被靜默帶進財務系統。