ある青果食品卸では、毎朝FAXが届く。
4社の取引先から、それぞれまったく違う書式で。月間カレンダー形式、着日指定のグリッド形式、店舗別混在形式、丸印で数量を示す形式。担当者は4種類の帳票を読み解いて、1行ずつ手でシステムに入力する。
これを毎日やっている。
「AIで読み取れないですか」という相談を受けたとき、「できます」ではなく「やってみます」と答えた。FAXの帳票読取をAIで正確にやれるかどうか、実際に試してみないと分からなかった。
4社4フォーマットの実態
A社の帳票は月間カレンダー形式だ。縦軸が日付(1日〜31日)、横軸が商品(うどん・そば・ラーメン)で、交差するセルに数量が入る。1枚のFAXに1か月分の発注が詰まっている。「8*30」のような計算式がセルに書かれていることもある。
B社は着日と納品日を手書きで指定するグリッド形式。
C社は北店・南店・西店の3店舗分が1枚の帳票に混在する。印刷と手書きが入り交じっている。
D社はJANコード付きの印刷フォームで、商品の数量欄に丸印を押す方式だ。「3個なら3の欄に丸」という、人間には直感的だが機械には難しいフォーマットだ。
なぜClaude Visionで読むのか
従来のOCRは「文字として何が書いてあるか」は読める。しかし「この数値がどの商品の何日分か」という構造の理解が苦手だ。
Claude Visionは違う。カレンダー形式の表を見て「縦が日付で横が商品だ」と理解する。手書きの文字を文脈から推測する。計算式を計算して結果で返す。
精度が100%でないことは分かっていた。そもそも4種類の帳票で100%を目指すこと自体、現実的ではない。ここで大切なのは「全て正確に読める」ことではなく「手作業転記より効率が上がる」ことだと、設計を始めた段階で決めた。
システムの全体像
担当者がブラウザからFAX画像(JPG・PNG・PDF)をアップロードする。FastAPIバックエンドがClaude Visionに渡して読み取りを実行する。読み取り結果をPostgreSQLに保存する。確認画面で結果を見ながら修正・確認する。
技術スタックはFastAPI(Python)とPostgreSQLと静的HTML(vanilla JS)。既存のEC2インスタンスに相乗りさせた。新しいサーバーを立ち上げない分、インフラコストは増えない。
FastAPIを選んだのはPythonの非同期処理とAnthropicのSDKが組み合わせやすいからだ。Claude Vision APIの呼び出しは数十秒かかることがある。非同期で処理することで、その間フロントエンドをブロックしない。
手作業転記との比較
精度80%の帳票があったとして、「80%の行はOKを押すだけ、20%を修正する」という操作は「100%を自分で入力する」よりも効率的だ。
このシステムの価値はAIの精度ではなく、ワークフローの改善にある。「読み取った結果を確認する」という行為は、「帳票を見て全部入力する」よりも軽い。
試してみた結果を次の記事に書く。
*次回は「FastAPI + PostgreSQLで読取結果を管理する設計」*
*シンプルシステム株式会社 代表 伊藤勝彦*