這一行,外人不會知道的事
- 一張紙上常常不只一張單。磅單三四張貼在同一張 A4 上很常見,印表機一次吐出好幾份同版型的單據也很常見。先切開,才能一張張對應到一筆紀錄。切錯一次,後面的數字就全部跟著錯。
- 原圖本來就不乾淨。工地的單據多半是手機隨手拍,紙面歪、有陰影與摺痕。點陣印表機加上複寫紙,墨色淡、筆畫斷,0 跟 8、1 跟 7 看起來很像。
- 同樣叫送貨單,版型可能完全不同。同一家廠商換了印刷廠,欄位位置就跑了。混凝土送貨單、過磅單、水電費單的欄位更是各自不同,先判斷是哪一種,才知道該去哪裡找數字。
- 數字之間的關係,單據上通常不寫。淨重其實是總重減掉空車重,但紙上只印一個結果。登打的人通常不會逐筆去算,錯誤就這樣一路進到請款與計價。
- 最後那個人,才是真正的關卡。送進請款或計價之前,總要有一位承辦人對照原圖看過。系統能做的,是讓他看得快、看得出哪裡可疑,而不是替他決定數字對不對。
動工之前,我們會先問的事
動工前,我們會先問下面這些。每個答案都會改變系統怎麼做。
- 單據是怎麼進到系統的?拍照、掃描,還是有人直接打字?一天大約幾張?
- 同一種單據有幾種版型?印刷廠或表單換過幾次?
- 一張紙上通常貼幾張?是要切開一張張登,還是整張一起看?
- 讀錯的數字,現在是在哪一步、由誰發現的?
- 這些數字最後流向哪裡?請款、計價,還是 ERP?接收的人能不能接受「標示異常、由人決定」?
- 有沒有哪些欄位只有老師傅看得懂,寫在備註或角落的手寫字裡?
我們在這個現場做了什麼
做法的核心是:AI 只負責讀字,什麼時候讀、讀完怎麼擋、讀錯時誰看得見,是我們設計的。系統的可靠來自後面這幾道設計,不是來自模型不會錯。
- 先切再讀:由人指定一頁要切成幾列幾欄。系統找出頁面上有字的範圍,等分成格子,每一格存成獨立影像,空白的格子會被標出來。
- 先判斷是哪一種單據,再依該類型讀:每一格先判斷單據類型,再套用該類型的提示詞與欄位定義,請 Claude Vision 讀取。類型清單與欄位定義可以在系統內維護。
- 讀出來要標信心,低信心不能直接用:每一筆結果都帶有高、中、低的信心等級。等級為低時,畫面會以紅色警示「請勿直接使用」,要求人對照原圖逐欄核對,而不是把猜出來的數字直接交出去。
- 由人決定哪一格算數:切割後,人可以勾選要納入或排除的格子。辨識完成後,每一格都要按下確認或拒絕,拒絕時要寫原因。原始檔、切出的格子與模型的原始輸出都保留,回頭查得到。
如果你也在這一行,可以先想的事
- 先不要追求全自動。能讓人一眼看出哪裡讀錯,比少點幾次確認更重要。確認這一步省不掉,只能讓它變快。
- 先不要把所有單據一次做完。挑一種量最大、版型最穩的,例如混凝土送貨單,讓承辦人先習慣,再加過磅單或水電費單。
- 有些事不必用系統解決。量不大時,逐張人工核對可能比導入系統更省事,先把量算清楚。
- 把「誰看最後那一關」寫清楚。系統會標出異常,但決定數字算不算數的人必須明確。不能讓大家都以為是別人在看。
適合來談的人:營造工程單位、預拌混凝土廠、有地磅與大量水電費單據的製造業與公用事業單位,以及想把紙本單據接進既有系統、需要有人懂現場的開發團隊。
常見問題
AI 單據辨識會讀錯嗎?讀錯了怎麼辦?
會。字跡模糊、版型不熟、數字長得很像時都可能讀錯,我們不承諾每個字都對。系統的做法是讓錯誤被看見:信心低的結果會標成紅色,原圖與讀出的欄位並排,每一格都要有人按下確認或拒絕,才算完成。
照片拍得歪、有陰影,還能讀嗎?
要看原圖本身。字跡還清楚,讀得出來就讀;字糊到連人都要猜,讀出來的結果會被標成低信心,請人對照原圖逐欄核對,不會硬給一個數字。拍照時盡量讓整張紙入鏡、光線平均,能省下很多複核的時間。
一張 A4 上貼了三四張過磅單,怎麼切?
上傳時由人指定要切成幾列幾欄,系統找出頁面上有字的範圍後等分成格子,每一格存成獨立影像,空白的格子會標出來。切割是依格數等分,不是自動找出每張紙的邊界,所以紙貼得不整齊時,要在切割畫面確認每一格有沒有切到別張的字。
工地或工廠要導入,應該從哪裡開始?
從量最大、版型最穩的一種單據開始,例如混凝土送貨單或過磅單。先拿近三個月的實際單據試讀,看哪些欄位最常讀錯,再決定要不要上線。上線初期保留紙本流程並行,讓承辦人有退路。
這個案例實際用的技術:Python(FastAPI)、Claude Vision、Pillow 與 NumPy 做影像處理、Angular、SQL Server。技術跟著問題走,不是重點。