物流センターに荷主からFAXで届く出荷指示書を読み取って出荷データにそろえ、品番の不一致と在庫不足をその日の出荷前に拾う
荷主からFAXで届いた出荷指示書を読み取り、届け先・品番・数量・指定日を倉庫管理システムに取り込める出荷データの形にそろえます。取り込む前に、品目マスタに無い品番と、引当できる在庫を超える数量を拾い、ピッキングが始まる前に荷主へ確かめる一覧にします。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Document AI
- 対象業界
- EC/小売/物流/製造
- 対象部門
- 物流
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- インターネットFAXのPDFがメールに届く。担当が開き、荷主を確かめる
- 倉庫管理システムの出荷登録の画面を開き、届け先・品番・数量・指定日を1行ずつ打ち込む
- 品番を打つと品目マスタから品名が出るので、指示書の品名と見比べる
- 品番が出てこないものは、指示書に印を付けて荷主に電話かメールで聞く
- 打ち込み終わったら、在庫の引当を実行する。引当できなかった行が出たら荷主に連絡する
- 指定日が翌日以降のものは保留にし、その日の出荷分だけをピッキングに回す
- 自動インターネットFAXのPDFが受信用の保管場所に保存される
- 自動保存をきっかけに処理が動き、送信元の番号と指示書の見出しから荷主を決める
- 自動OCRが指示書を表として読み、セルの文字・信頼度・手書きの行かどうかを返す
- 自動生成AIが、表の列を届け先・品番・数量・指定日などの項目に対応づけ、行ごとにそろえる
- 自動その荷主の品目マスタと品番を照らし、マスタに無い品番に印を付ける
- 自動引当可能な在庫から、その日すでに受けた分を差し引いて、足りない行に印を付ける
- 自動問題の無い指示書は取り込み用のCSVにし、問題のある行は確認の一覧に出す
- 人担当が確認の一覧だけを開き、FAXの画像と見比べて直すか、荷主に確かめる
- 人担当が取り込み用のCSVを倉庫管理システムに取り込み、ピッキングに回す
各工程の詳しい説明を読む
- インターネットFAXのPDFがメールに届く。担当が開き、荷主を確かめる
- 倉庫管理システムの出荷登録の画面を開き、届け先・品番・数量・指定日を1行ずつ打ち込む
- 品番を打つと品目マスタから品名が出るので、指示書の品名と見比べる
- 品番が出てこないものは、指示書に印を付けて荷主に電話かメールで聞く
- 打ち込み終わったら、在庫の引当を実行する。引当できなかった行が出たら荷主に連絡する
- 指定日が翌日以降のものは保留にし、その日の出荷分だけをピッキングに回す
(a)打ち込みが締め時刻に追われる。 2番目は1行ずつの手入力で、1枚に10行ある指示書なら数分かかります。14時前の1時間に30枚届けば、それだけで4名の手がふさがります。
(b)品番の打ち間違いがピッキングで見つかる。 3番目の見比べは、急いでいると省かれます。「A-1028」と「A-1023」がどちらも実在すれば、打ち間違いでも品名は出てきます。 違う商品が引き当てられ、ピッキングの作業者が棚の前で「指示書と品名が違う」と気づくまで分かりません。
(c)在庫不足が出荷の直前に分かる。 5番目の引当は、打ち込みが全部終わってから行います。引当できない行が分かるのは、締め時刻のあとです。 荷主に連絡しても、その日の出荷には間に合いません。
(d)手書きの訂正が見落とされる。 印刷された指示書の数量に二重線を引いて「5→3」と手で書き直してくる荷主がいます。急いで打つと、印刷された「5」のほうを打ちます。
- 【自動】 インターネットFAXのPDFが受信用の保管場所に保存される
- 【自動】 保存をきっかけに処理が動き、送信元の番号と指示書の見出しから荷主を決める
- 【自動】 OCRが指示書を表として読み、セルの文字・信頼度・手書きの行かどうかを返す
- 【自動】 生成AIが、表の列を届け先・品番・数量・指定日などの項目に対応づけ、行ごとにそろえる
- 【自動】 その荷主の品目マスタと品番を照らし、マスタに無い品番に印を付ける
- 【自動】 引当可能な在庫から、その日すでに受けた分を差し引いて、足りない行に印を付ける
- 【自動】 問題の無い指示書は取り込み用のCSVにし、問題のある行は確認の一覧に出す
- 【人】 担当が確認の一覧だけを開き、FAXの画像と見比べて直すか、荷主に確かめる
- 【人】 担当が取り込み用のCSVを倉庫管理システムに取り込み、ピッキングに回す
8番目が、この設計の分かれ目です。人が見るのは全件ではありません。 品番も数量も問題の無い指示書は、CSVの中身を一覧で流し見て取り込みます。担当が時間を使うのは、確認の一覧に出た行だけです。 全件を人が打ち直すように見直す設計にすると、120.0時間はほとんど減りません。
6番目を取り込みの前に置いているのが、(c)への答えです。 引当を倉庫管理システムに取り込んでから行うと、在庫不足が分かるのは締めのあとになります。FAXが届いた数分後に「この行は足りない」と分かれば、荷主に連絡してもその日の出荷に間に合う可能性が残ります。
02今回想定するシステム構成
荷主からのFAX(インターネットFAXでPDF化) ▼【トリガー】受信用の保管場所へのPDFの保存 Azure Functions ── 送信元の番号から荷主の候補を決める ▼ Azure AI Document Intelligence(レイアウトモデル) │ 表のセル(行・列)、全文、信頼度、手書きの行の印を返す ▼ Azure OpenAI ── 表の列を出荷データの項目に対応づけ、行ごとにそろえる ▼ Azure Functions ── 品目マスタとの照合、引当可能な在庫との比較 ▼ 問題の無い指示書 ──▶ 取り込み用のCSV ──▶ 倉庫管理システム 問題のある行 ──▶ 確認の一覧 ──▶【担当がFAXの画像と見比べる/荷主に確かめる】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence(レイアウトモデル) | Google Document AI(Form Parser) |
| 生成AI | Azure OpenAI(Microsoft Foundry)(列の対応づけと行のそろえ) | Claude API、Gemini API |
| 連携 | Azure Functions(荷主の判定、品目マスタと在庫の照合、CSVの作成) | Azure Logic Apps |
| 保管 | Azure Blob Storage(FAXのPDFと読み取り結果) | センターのファイルサーバー |
倉庫管理システムとインターネットFAXは、新しく足すものではありません。 この構成から倉庫管理システムへ直接は書き込まず、取り込み用のCSVを作るところまでにします。品目マスタと在庫は、倉庫管理システムの書き出し機能で定期的に取り出します。書き出しの方法は製品ごとに違うため、この部分は利用環境に応じた個別実装になります。
土台は、Azure AI Document Intelligence のレイアウトモデルです。 テキスト、テーブル、選択マーク、ドキュメントの構造を抽出するモデルで、表は行と列のインデックス付きのセルとして返ります。 出荷指示書の明細は表の形をとるので、1行を1件の明細として扱えます。セルが見出しかどうか(columnHeader)も返り、列の見出しから列の意味を決める材料になります。
日本語は印刷・手書きともに対応しています。 公式の言語サポートの表では、読み取りとレイアウトのモデルの印刷テキストと手書きテキストの両方に日本語(ja)が含まれています。さらに、各テキスト行が手書きのスタイルかどうかが、信頼度とともに返ります。 印刷された指示書に手で書き足した訂正を、この印で拾えます(第7章)。
荷主ごとにカスタムモデルを作る方法もあります。 カスタム抽出モデルは、公式の説明では同じ種類の文書の例が5つあれば作り始められ、カスタムニューラルモデルの印刷テキストの対応言語に日本語が含まれています。ただし、様式の違う荷主12社のそれぞれに作ると、様式が変わるたびに作り直しになります。 この構成では、まずレイアウトモデルと生成AIで全荷主を受け、枚数の多い荷主から順にカスタムモデルに切り替えるかを検討します。
03どうやって実装するのか
処理の起点を決める
インターネットFAXのPDFが受信用の保管場所に保存されたことを起点にします。 メールに届く設定のままなら、受信用のメールボックスから添付のPDFを取り出して保管場所に置く処理を1つ挟みます。FAXが届いてから数分で確認の一覧に載ることを目標にします。
1時間ごとにまとめて処理しないのは、締め時刻があるからです。 13時50分に届いたFAXを14時の処理で見ても、在庫不足を荷主に伝える時間が残りません。1枚ずつ、届いたときに処理します。
処理が終わったPDFは処理済みの場所に移します。移すのは成功したときだけにし、受信用の場所に残った数が未処理の数になるようにします。 締め前の30分は、この数を事務所の画面に出しておきます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 出荷指示書 | FAXのPDF。受信日時、送信元の番号 | インターネットFAX |
| 読み取り結果 | 表のセル(行・列・見出しかどうか)、全文、単語ごとの信頼度、手書きの行の印 | Azure AI Document Intelligence |
| 荷主の情報 | 荷主コード、FAXの送信元の番号、列の対応表、指定日の書き方の癖 | 荷主の一覧 |
| 品目マスタ | 荷主ごとの品番、品名、入数、旧品番 | 倉庫管理システムの書き出し |
| 引当可能な在庫 | 荷主・品番ごとの引当可能数と、書き出した時刻 | 倉庫管理システムの書き出し |
| その日の受付済みの分 | その日すでに取り込んだ、または確認中の出荷の数量 | この構成の受付の記録 |
質を決めるのは、荷主ごとの列の対応表です。 「商品コード」「品番」「貴社コード」「JAN」と、荷主によって列の見出しが違います。一度確かめた対応を荷主ごとに持っておけば、2回目からは生成AIの対応づけを照らし合わせるだけで済みます。
旧品番を品目マスタに持たせるのは、(b)の打ち間違いと荷主の書き間違いを分けるためです。 荷主が品番を切り替えたあとも、古い様式の指示書で旧品番を書いてくることがあります。旧品番の一覧に当たれば、荷主に聞かずに新しい品番へ寄せる候補を出せます。
その日の受付済みの分を差し引くのは、同じ品番が1日に何枚もの指示書に出るからです。 引当可能な在庫が10個の品番に、午前に6個、午後に6個の指示が来れば、1枚ずつ見ればどちらも足りるのに、合わせると足りません。
データの取得方法を決める
読み取りは、Azure Functions からレイアウトモデルを呼ぶだけです。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 表のセル | tables の cells(rowIndex/columnIndex/kind/content) | 1行を1件の明細として扱う |
| 列の見出し | kind が columnHeader のセル | 列の意味の手がかり |
| 単語と信頼度 | pages の words の content/confidence | 品番・数量のセルの読み取りの確かさ |
| 手書きの行の印 | styles の isHandwritten と confidence | 手で書き足された訂正の検出 |
| 選択マーク | selectionMarks の state(selected/unselected) | 「時間指定あり」「代引き」などの印 |
| 表以外の全文 | 応答の content | 届け先、指定日、備考が表の外に書かれている場合 |
品番のセルの信頼度は、セルではなく単語から取ります。 セルの文字は単語の並びで、品番は1つか2つの単語になります。品番を作っている単語の信頼度の最も低い値を、そのセルの信頼度とします。
品目マスタと在庫は、倉庫管理システムの書き出しを30分ごとに取り込みます。締め前の1時間だけは間隔を縮めます。在庫の数字には書き出した時刻を付けて持ち、古い数字で判定したことが後から分かるようにします。
AIへ渡す前に整形する
- 形式の確認 … レイアウトモデルの入力はPDFと画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)などです。インターネットFAXのPDFはそのまま渡します
- ページ数とサイズの確認 … PDFとTIFFは最大2,000ページ、ファイルの大きさは有料(S0)レベルで500MBが上限です。FAXでは届きませんが、確かめる処理は入れておきます
- 文字の大きさの確認 … 抽出できるテキストの最小の高さは、1024×768ピクセルの画像で12ピクセルです。FAXの画像では、小さな品番や小数点がこの下限に近づきます
- 荷主の判定 … 送信元の番号で候補を決め、指示書の見出しの社名で確かめます。食い違えば、処理を止めて担当に回します
- 送信の重複の確認 … 同じ荷主から同じ内容のFAXが短い間隔で2回届くことがあります。明細の内容が同じなら、2通目に「重複の疑い」を付けます
- 送付状の除外 … 1ページ目が送付状だけのFAXは、表の無いページとして外します
3番目は、荷主にお願いすることでしか直りません。 下限を下回る文字は、どの読み方をしても確かには読めません。品番のセルの信頼度が低い荷主には、送信の画質の設定を上げてもらうか、文字の大きい様式に変えてもらうよう頼みます。 その材料として、荷主ごとの信頼度を記録しておきます(保存・ログ)。
5番目を省くと、同じ指示で2回出荷します。 「届いていますか」の確認のつもりで同じFAXを送り直す荷主は珍しくありません。取り込んでしまうと、ピッキングの現場では見分けがつきません。
AIに処理させる
させるのは、表の列を出荷データの項目に対応づけ、各行を出荷データの1行の形にそろえることだけです。 品番が正しいか、在庫が足りるかの判定はさせません。それはプログラムが品目マスタと在庫で行います。
| 項目 | そろえ方 | 判断できないときの扱い |
|---|---|---|
| 届け先 | 名前、郵便番号、住所、電話番号に分ける | 分けられなければ原文のまま |
| 品番 | 読めたとおりに写す。空白と全角・半角だけを直す | 信頼度が低ければ unreadable |
| 数量 | 数字にする。単位(個・ケース)を分ける | 単位が無ければ unit_unknown |
| 指定日 | 書かれた日付を写す。「明日」「至急」は原文のまま | 日付として読めなければ ambiguous |
| 手書きの訂正 | 二重線と書き足しがある行は、印刷の値と手書きの値を両方残す | どちらを採るかは決めない |
| 備考 | 時間指定、代引き、のし、同梱物などを分ける | 分けられなければ原文のまま |
右端の列の「手書きの訂正」が、(d)への答えです。 レイアウトモデルが返す手書きの行の印を使い、印刷の「5」と手書きの「3」の両方を返させます。どちらを採るかは担当が画像で確かめて決めます。 二重線がかすれて読めないことがあるので、AIに手書きを優先させる決め打ちはしません。
| させないこと | 理由 |
|---|---|
| 品番を品目マスタの近いものに直す | 違う商品がそのまま出荷される |
| 旧品番を新品番に置き換える | 置き換えの候補はプログラムが旧品番の一覧で出す |
| 在庫が足りるかの判断 | 引当可能な在庫と受付済みの分で、プログラムが計算する |
| 指定日の解釈(「至急」を今日に) | 締め時刻の扱いは荷主ごとの取り決め |
| 届け先の住所の補完 | 郵便番号から番地を埋めない |
1行目が、いちばん起きやすく、いちばん高くつく失敗です。 生成AIに品目マスタを渡すと、読めなかった品番を「おそらく A-1023」と直して返すことがあります。品目マスタは生成AIに渡しません。 照合はプログラムが行い、AIには読めたとおりに写すことだけをさせます。
指示内容を固定する
あなたは物流センターの出荷受付の補助として、荷主から届いた
出荷指示書の読み取り結果を出荷データの形にそろえる立場です。
OCRが返した表のセルと全文だけを見てください。推測で埋めないでください。
【そろえる項目】
ship_to(届け先:名前、郵便番号、住所、電話番号)/sku(品番)/
qty(数量)/unit(単位)/delivery_date(指定日)/notes(備考)
【列の対応】
- この荷主の列の対応表が渡されたときは、それに従ってください。
- 対応表に無い見出しの列は、column_map に推測した対応を書き、
confidence を low にしてください。
【厳守事項】
- 品番は、読み取り結果の文字をそのまま写してください。
空白の除去と全角・半角の統一だけを行い、文字を足したり変えたりしないでください。
- 品番の一部が読めないときは、読めた部分だけを写し、sku_status を unreadable にしてください。
「おそらく」の品番を書かないでください。
- 手書きの行の印(is_handwritten)が付いたセルが、印刷された値の近くにあるときは、
printed_value と handwritten_value の両方に入れ、correction を true にしてください。
どちらが正しいかを決めないでください。
- 数量に単位が書かれていないときは、unit を空にしてください。
- 指定日は書かれたとおりに写してください。「至急」「明日」「最短」を日付に直さないでください。
- 届け先の住所を補ったり、郵便番号から住所を埋めたりしないでください。
- 送付状だけのページ、表の無いページは rows に入れないでください。
- 在庫が足りるか、品番が正しいかを書かないでください。
【荷主の列の対応表】{column_map}
【表のセル(行・列・見出し・信頼度・手書きの印)】{table_cells}
【表の外の全文】{content}
「おそらくの品番を書かない」を2か所に書いているのは、片方だけでは埋めてくるからです。 「読めた部分だけを写す」と言っても、前後の文脈から最後の1桁を補った品番が返ることがあります。禁じるのは補うという行為そのもので、正しく補えたかどうかではありません。
列の対応表を渡すのは、毎回の対応づけのぶれをなくすためです。 同じ荷主の同じ様式でも、FAXの写り方で見出しの読み取りが変わります。一度担当が確かめた対応を渡し、対応表に無い列だけを推測させます。
出力形式を固定する
次の形のJSONで受け取ります。 Azure OpenAI の構造化出力(response_format に json_schema を strict: true で渡す方式)を使い、形を固定します。
{
"shipper_id": "",
"fax_id": "",
"column_map": [
{ "header": "", "field": "", "confidence": "high | low" }
],
"rows": [
{
"row_index": 0,
"ship_to": { "name": "", "zip": "", "address": "", "tel": "" },
"sku": "", "sku_status": "ok | unreadable",
"qty": 0, "unit": "",
"printed_value": "", "handwritten_value": "", "correction": false,
"delivery_date": "", "date_status": "ok | ambiguous | blank",
"notes": ""
}
]
}
公式の説明では、構造化出力ではすべての項目を必須にし、additionalProperties を false にします。 値の無い項目は空の値で返させ、項目が欠けた行と、値が空だった行を区別しなくて済むようにします。
1つ目の理由は、品番の照合をプログラムの規則で行えることです。
| 照合の結果 | 意味 | 確認の一覧での扱い |
|---|---|---|
| マスタに一致 | 品番として存在する | 品名を並べて表示(見比べ用) |
| 旧品番に一致 | 荷主が旧品番で書いた | 新品番の候補を出し、担当が確定 |
不一致・sku_status が ok | 読めたが存在しない | 荷主に確かめる |
不一致・sku_status が unreadable | 読めなかった | FAXの画像を見直す |
右下の2つを分けることが、第1章で書いた「違う」と「読めなかった」の区別の実体です。
2つ目は、在庫の判定を受付の順に積み上げられることです。 行ごとの数量を、その日の受付済みの分に足していき、引当可能な在庫を超えた行から「在庫不足」の印を付けます。 どの指示から先に引き当てるかは、届いた順を既定にし、担当が変えられるようにします。
3つ目は、correction の行を必ず確認に回せることです。 手書きの訂正がある行は、品番も数量も問題が無くても確認の一覧に出します。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| インターネットFAX | メールの添付の取り出し、または保管場所への保存 | FAXのPDFを受け取る |
| Azure AI Document Intelligence | API呼び出し | 表のセル、信頼度、手書きの行の印を返す |
| Azure OpenAI | API呼び出し | 列の対応づけと行のそろえ |
| 倉庫管理システム(読み) | 定期の書き出し | 品目マスタ、旧品番、引当可能な在庫 |
| 倉庫管理システム(書き) | 取り込み用のCSV | 問題の無い指示書の出荷データ |
| 確認の一覧 | 表計算または社内の画面 | 問題のある行と、FAXの画像の該当箇所 |
倉庫管理システムへの取り込みは、担当が行います。 CSVを作るところまでを自動にし、取り込みのボタンは人が押します。 取り込んだあとで誤りが分かると、引当とピッキングの指示を取り消す手間がかかるからです。
荷主への問い合わせは送りません。 確認の一覧から、荷主ごとに「品番の確認」「在庫不足」の問い合わせの文面の下書きを作ることはできますが、送るかどうかと文面は担当が決めます。
人が確認する
担当が開くのは確認の一覧だけです。 一覧の各行から、FAXの画像の該当の行に枠を付けて開けるようにします。
- 在庫不足を先に見る … 締め時刻までに荷主へ連絡が要るものから片づけます。欠品で出すか、出荷を待つかは荷主が決めます
- 品番の不一致を見る …
unreadableは画像を見て直し、読めたのに存在しない品番は荷主に確かめます - 手書きの訂正を見る … 画像で二重線と書き足しを確かめ、採る値を決めます
- 旧品番の候補を確定する … 候補が正しければ確定します
- 問題の無い指示書を流し見る … 件数と荷主を一覧で見て、CSVを取り込みます
1番目を先にするのは、時間の制約がいちばん強いからです。 品番の不一致は画像を見れば数十秒で済むことが多いのに対し、在庫不足は荷主の返事を待つ必要があります。
目標は、1,200枚をならして1枚2分です。 確認の一覧に出る指示書が3割前後という想定で、それより多い月は、FAXの画質の悪い荷主が増えているか、品目マスタの更新が遅れています。
例外に対処する
| 起きること | 対応 |
|---|---|
| 送信元の番号が荷主の一覧に無い | 処理を止めて担当に回し、荷主を選ばせる |
| 見出しの社名と送信元の荷主が違う | 処理を止める。 別の荷主の指示を取り違えないため |
| 表として読まれない(自由な文面の指示) | 全文だけを渡し、行のそろえはさせずに確認の一覧へ |
| 同じ内容のFAXが2回届く | 2通目に重複の疑いを付け、取り込まない |
| 品番が読めたのにマスタに無い | 旧品番の一覧を引き、無ければ荷主に確かめる |
| 在庫の書き出しが古い | 書き出しの時刻が1時間より古ければ、在庫の判定を保留にする |
| 手書きの訂正がある | 必ず確認の一覧へ。印刷と手書きの両方を並べる |
| 取り消しのFAX(「先ほどの指示は取消」) | 自動では何もしない。担当に知らせ、取り込み済みかを確かめさせる |
| OCRが応答しない | PDFを受信用の場所に残し、次の回にやり直す |
8行目の取り消しのFAXは、自動で処理しないことに意味があります。 取り消しの対象がどの指示かは、文面だけでは決まらないことが多く、誤って別の指示を取り消すと、その出荷が止まります。
記録を残す
- FAXのPDFと、受信日時・送信元の番号
- OCRが返したJSONの全文(表のセル、単語ごとの信頼度、手書きの行の印)
- AIが返した列の対応と行のそろえの結果
- 照合に使った品目マスタと在庫の書き出しの時刻と、照合の結果
- 担当が直した記録(項目、変更前、変更後、理由)と、取り込んだ日時
- 荷主ごとの、品番のセルの信頼度の平均と、
unreadableの件数
4つ目で書き出しの時刻を残すのは、在庫不足の判定を後から説明するためです。 「在庫はあったはずだ」と言われたとき、その時点の在庫の数字で判定したことを示せます。
最後の行は、荷主に送信の画質や様式の見直しを頼む材料です。 数字で示すと、頼みやすくなります。
04実装レベルの3段階
最小構成は、確かめるための段階です。 1枚ずつ貼るので、締め前の30枚には使えません。 半自動化で、1枚6分が3分程度になります。 打ち込みは無くなりますが、品番と品名の見比べと、引当の確認が手で残ります。本格構成で2分になり、この段階が本記事の想定です。 差が大きいのは、品目マスタとの照合と、その日の受付分を積み上げた在庫の計算が、1枚ずつの手作業だからです。 段階を飛ばさないでください。 半自動化を1か月回すと、荷主ごとの列の対応表がそろい、品番の読み取りが不安定な荷主が分かります。そこを固めてから在庫の判定を足すほうが、確認の一覧の空振りが減ります。
05工数削減シミュレーション
導入後 1,200件 × 2分 ÷ 60 = 40 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 複数の荷主から出荷の指示を受ける物流センターで、EDIや倉庫管理システムへの取り込みに移れない荷主の分が、いまもFAXで届いている場合。届いたFAXを事務所の担当が倉庫管理システムに打ち込んでおり、品番の打ち間違いや在庫の足りない指示に、ピッキングの途中で気づくことがある場合。FAXをインターネットFAXや複合機でPDFとして受け取れる場合。
- 荷主の出荷指示がすべてEDIか倉庫管理システムの画面から入っており、FAXがほとんど無いセンター。FAXが1日に数枚で、担当が目で見て打ち込んでも締め時刻に間に合う場合。荷主ごとの品目マスタを倉庫管理システムに持っておらず、品番を照らす先が無い場合。なお、在庫が足りないときにどの出荷を優先するかの判断は、この構成では代替できません。
07最小構成で試す方法
- 先週届いたFAXから、荷主の違う10枚を選ぶ(うち2枚は手書きの訂正があるもの)
- その10枚について、倉庫管理システムに打ち込んだ出荷データを用意する
- 手元の生成AIのサービスの画面に、FAXのPDFを1枚ずつ貼り付ける
- 「この出荷指示書の明細を、届け先・品番・数量・単位・指定日の表にしてください。品番は読めたとおりに写し、読めない文字は ? にしてください。手書きの訂正があれば、印刷の値と手書きの値を両方書いてください」と指示する
- 出てきた表を、打ち込んだ出荷データと突き合わせる
10枚は必ずやってください。 仕組みを組む前に、「この荷主たちのFAXの画質で、品番が読めるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 打ち込んだデータとほぼ同じ表が出た | OCRと照合の仕組みに進む |
| 品番を近いものに直した、? を埋めた | 指示の書き方と照合をプログラムに移すことで直る。構成は有効 |
| 特定の荷主の品番がほとんど読めない | その荷主のFAXの画質が先。 AIの問題ではない |
3行目が出たら、その荷主には送信の画質を上げてもらうよう頼んでください。 頼んだあとのFAXで同じことをやり直すと、違いが分かります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 読めなかった品番が近い品番に直される | 品目マスタを生成AIに渡さない。 照合はプログラムで行う |
| 「違う品番」と「読めない品番」が混ざる | 単語の信頼度で unreadable を分ける |
| 1枚ずつ見ると足りる在庫が、合わせると足りない | その日の受付済みの分を差し引いて判定する |
| 在庫の判定が古い数字で行われる | 書き出しの時刻を持ち、古ければ保留にする |
| 手書きの訂正が見落とされる | 手書きの行の印で拾い、必ず確認に回す |
| 同じFAXの送り直しで2回出荷する | 明細の内容で重複を見つけ、2通目を取り込まない |
| 荷主を取り違える | 送信元の番号と見出しの社名の両方で確かめる |
| 小さな品番が読めない | 荷主に送信の画質か様式の見直しを頼む |
| 列の対応づけが毎回ぶれる | 荷主ごとの列の対応表を持ち、渡す |
| 取り消しのFAXを自動で処理する | 自動では何もしない。担当に知らせる |
上の4行が、この構成の失敗のほとんどです。 どれも「出荷してはいけないものを出荷する」「出荷できないものを出荷できると判断する」という同じ失敗に行き着きます。照合と在庫の計算をAIから外し、プログラムの規則に置くことで防ぎます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 荷主の取引の内容(品番、数量、出荷先)と、届け先の名前・住所・電話番号です。EC の荷主の出荷では、届け先は個人の消費者です。
- 荷主の情報を混ぜない … 荷主ごとに品目マスタと列の対応表を分け、ある荷主の指示書の処理に、別の荷主のデータを渡しません
- 生成AIに渡す範囲を絞る … 渡すのは、その指示書の読み取り結果と、その荷主の列の対応表だけです。品目マスタと在庫の数字は渡しません
- 届け先の個人情報の保管期間を決める … FAXのPDFと読み取り結果には、消費者の住所と電話番号が含まれます。荷主との契約で定めた期間を過ぎたら消す仕組みを作ります
- 取り込みは人が行う … CSVを作るまでを自動にし、倉庫管理システムへの取り込みは担当が行います
- 欠品の判断を荷主に残す … 在庫不足の行をどう扱うか(欠品で出す、待つ、別の品番で出す)は荷主が決めます。この構成が出すのは、足りないという事実までです
誤りが起きた場合のリスクは、違う商品を出荷することと、出荷できない指示を受けてしまうことの2つです。 前者は品番の補完を許すと起き、後者は在庫を1枚ずつしか見ないと起きます。どちらも、AIに判断させずにプログラムの規則で見ることで防ぎます。
10まず何から始めるか
1週目:列の対応表と旧品番をそろえる
FAXで届く荷主12社の様式を1枚ずつ並べ、列の見出しと出荷データの項目の対応表を作ります。 あわせて、品目マスタに旧品番の列を足し、分かっている切り替えを入れます。
2週目:10枚で試す
荷主の違う10枚のFAXを、手元の生成AIの画面に貼り付けて明細の表にさせます。品番を近いものに直していないか、手書きの訂正を拾えているかを最優先で見ます。
3週目:受信からCSVまでをつなぐ
Azure Functions でFAXのPDFを受け、レイアウトモデルと生成AIを呼び、取り込み用のCSVを作るところまで作ります。この時点では照合をせず、担当がCSVを確かめてから取り込みます。
4週目:品番の照合を足す
品目マスタの書き出しを取り込み、品番の照合と確認の一覧を作ります。unreadable と「存在しない」の件数を荷主ごとに数えます。
2か月目: 在庫の書き出しを取り込み、受付済みの分を差し引いた在庫の判定を足します。3か月目以降: 1枚6分が何分になったかを実測し、枚数の多い荷主からカスタムモデルに切り替えるかを検討します。締め時刻のあとに在庫不足が分かる日がなくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
レイアウトモデルがテキスト、テーブル、選択マーク、ドキュメントの構造を抽出すること。表のセルが rowIndex/columnIndex/kind(columnHeader)付きで返ること。単語ごとに confidence が返ること。各テキスト行が手書きのスタイルかどうかが信頼度とともに返ること。選択マークの state が selected/unselected で返ること。入力がPDFと画像(JPEG/JPG、PNG、BMP、TIFF、HEIF)などであること。PDFとTIFFが最大2,000ページ、ファイルの大きさが有料(S0)レベルで500MBであること。テキストの最小の高さが1024×768ピクセルの画像で12ピクセルであること | Microsoft Learn: レイアウトモデル | 2026-10-08 |
読み取りとレイアウトのモデルの印刷テキストと手書きテキストの対応言語に日本語(ja)が含まれていること | Microsoft Learn: 言語サポート(OCR) | 2026-10-08 |
| カスタム抽出モデルに、カスタムテンプレートとカスタムニューラルの2種類があること。同じ種類の文書の例が5つあれば作り始められること | Microsoft Learn: カスタムモデル | 2026-10-08 |
カスタムニューラルモデルの印刷テキストの対応言語に日本語(ja)が含まれていること | Microsoft Learn: 言語サポート(カスタムモデル) | 2026-10-08 |
response_format に json_schema を strict: true で渡して応答の形を固定できること。すべての項目を必須にし、additionalProperties を false にすること | Microsoft Learn: 構造化出力 | 2026-10-08 |
在庫が足りないときにどの出荷を優先するか、欠品で出すかは、荷主とセンターの取り決めに従って決めてください。 本記事は各製品の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1059)についてのご相談はこちらから。
