同樣的文件,同樣的結構,不同的答案: space-ocr vs Mistral
8份高難度文件、463個欄位、每個引擎3輪的受控基準測試:欄位讀取率、多輪穩定性,以及分數表看不到的座標差距。
每家OCR廠商的展示都能完美讀出一張乾淨的列印發票,我們也不例外。但這對你的選型決策毫無資訊量。真正重要的問題有三個:碰到難的文件會怎樣?同一頁跑兩次,答案會不會變?不把每個值都人工複核一遍,要怎麼找出讀錯的值?
所以我們直接測了。從自家的回歸語料裡挑出最難的8份文件,給space-ocr和Mistral Document AI發送完全相同的請求,用同一個腳本評分。這篇文章就是結果,方法寫得夠細,想反駁的人可以精確地反駁。
設置如下:8份真實文件(幾張日文送貨單、一張商品名和數量單價分打兩行的超市收據、一張對著螢幕拍攝的22行批發行情表、一張佣金明細),共463個可評分欄位。三個測試組拿到完全相同的圖片、欄位結構和「按印刷原樣擷取」的指令:space-ocr正式環境的欄位擷取API、Mistral OCR加JSON結構註釋(mistral-ocr-latest)、Mistral視覺大模型加結構化輸出(mistral-medium)。每組跑3輪,按去空白後的精確比對對照凍結的標準答案評分,72輪原始輸出全部存檔。2026年8月。

先說結果。space-ocr在463個欄位中以精確比對讀出91.1%(3輪平均)。Mistral OCR註釋是70.0%,視覺大模型是73.5%。為排除格式雜訊,我們把只差分隔符或空格的不一致全部剔除,只數內容錯誤:每輪space-ocr約23個,Mistral兩組分別是119個和93個。
在下結論之前有件事值得先說清楚:Mistral認字認得不錯。在這組裡最乾淨的文件,那張22行的列印行情表上,Mistral OCR以141中139和我們打平。差距是在文件結構變得棘手時拉開的。在那張商品名一行、數量和單價另起一行的收據上,Mistral每輪13個欄位只拿到2.3個:它把合計區塊捲進了商品行,配不上那兩行。在雜亂的送貨單上,數量跑進了規格欄。字大多是對的,字落進的表格是錯的。
穩定性本身就是一個發現。同樣的輸入跑3輪,我們的總分波動16個欄位,Mistral OCR波動100個。一小時前還能讀出72中58的文件,下一輪變成3,43行表格的每一欄都被悄悄打亂。回應裡沒有任何訊號告訴你,你剛付費的是哪一種輪次。

這張圖才是真正的論點,而它在任何分數表裡都看不到。那張行情表上,space-ocr返回了138個方框,每個欄位一個,各自釘在讀取它的像素上。Mistral給整張表返回了一個矩形,因為它的回應裡根本不存在欄位級座標,任何文件都一樣,區塊輪廓就是極限。也沒有任何驗證訊號。Mistral讀錯的時候是悄悄讀錯的,找出來的唯一辦法是全部複核。
space-ocr的每個值都帶著方框、說明框下文字是否吻合的text_verified、帶原因的needs_review,這個版本起還有ocr_confidence分數,以及給頁面上重複出現的值用的label錨點。這次基準測試的誠實總結不是Mistral不會讀,乾淨的印刷品它讀得挺好;而是一個API告訴你哪些答案可以信,另一個要求你全信。
驗證的運作方式:語言模型只返回值和詞元提示,從不生成座標。引擎把每個返回值與OCR環節在頁面上實際偵測到的符號逐字比對,以match_ratio打分(0.85以上算確信比對),再讓兩個引擎互相核對,不一致就成為帶原因的needs_review標記。方框是xmin/ymin/xmax/ymax,0到1000正規化。關於上面數字的一條公平性說明:標準答案是按我們管線的輸出慣例凍結的,所以包括我們在內的所有即時引擎都會因邊界切分差異被扣分。絕對值請當下限看,相對比較才是結論。完整方法和72輪原始輸出都有存檔。
價格也照基準測試文章的樣子直說:每張成功掃描$0.05,失敗自動退款,每月前100頁免費,不用綁卡。在相信任何人的圖表之前,包括這篇文章的,拿你自己的5份文件在兩邊都跑一遍。下面的步驟就是我們用的流程。
- 挑難啃的文件,不要展示樣張選5到10頁真正折磨人的:多行紀錄、重複的值、拍螢幕照片、密集表格。乾淨的樣張分不出廠商高下。
- 固定一套結構和指令欄位清單只寫一次,用同樣的名稱和描述原樣發給每個引擎。要求按印刷原樣返回值。
- 先手寫標準答案在跑任何東西之前,把每個欄位的期望值抄下來,之後不再修改。
- 每個引擎至少跑3輪只跑一輪會掩蓋不穩定。所有輪次用同一個腳本評分,看波動而不是只看平均。
- 單獨統計無聲的錯誤每個錯誤值都記下引擎是否給了標記。帶標記的錯值只花你一眼,沒有訊號的錯值花的是你在它上面搭的整個流程。