海外の検品会社から届く英文の出荷前検査報告書を読み取り、AQLの判定と不良の内訳を検品台帳に転記して、出荷可否の判断が要るものを品質管理へ回す
海外の検品会社から届く英文の出荷前検査報告書を読み取り、判定・AQL・不良の内訳・指摘写真の説明を発注ごとの検品台帳に転記します。出荷可否の判断が要るものだけを品質管理へ回します。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- EC/商社/小売/製造
- 対象部門
- 品質管理/購買
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 入力作業が多い/判断に時間がかかる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/対応スピード向上/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 共有受信箱に届いた報告書のPDFを、品質管理の担当者が開く
- 1ページ目で発注番号・品番・判定を読み、検品台帳の該当の行を探す
- AQLと抜取数、重大・主要・軽微の不良の数と許容数を読み、台帳に写す
- 発注データで取り決めたAQLと見比べる
- 不良の一覧と写真の説明を読み、主な不良の内容を台帳に一言で書く
- 判定が `FAIL` か `PENDING` のもの、気になる指摘があるものを、品質管理の判断者にメールで回す
- 判断の結果を購買に伝え、購買が工場に出荷か手直しかを連絡する
- 自動共有受信箱に届いた報告書のPDFが、受付フォルダ(Amazon S3)に保存される
- 自動保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 自動OCRが全文、レイアウト、表、チェック欄の状態、信頼度を返す
- 自動生成AIが、発注番号・判定・AQL・抜取数・不良の数と許容数・不良の内訳・写真の説明を、原文のまま項目にそろえる
- 自動プログラムが発注データと照らし、判定と数字の食い違い、AQLの取り決めとの違い、数量の違いに印を付ける
- 自動検品台帳に1行を書き、印の付いたものを品質管理の判断待ちの一覧に入れる
- 人品質管理の担当者が、判断待ちの報告書を開き、写真と指摘を見て出荷か手直しか再検査かを決める
- 人購買の担当者が、決まった内容を工場に伝える
各工程の詳しい説明を読む
- 共有受信箱に届いた報告書のPDFを、品質管理の担当者が開く
- 1ページ目で発注番号・品番・判定を読み、検品台帳の該当の行を探す
- AQLと抜取数、重大・主要・軽微の不良の数と許容数を読み、台帳に写す
- 発注データで取り決めたAQLと見比べる
- 不良の一覧と写真の説明を読み、主な不良の内容を台帳に一言で書く
- 判定が
FAILかPENDINGのもの、気になる指摘があるものを、品質管理の判断者にメールで回す - 判断の結果を購買に伝え、購買が工場に出荷か手直しかを連絡する
(a)写すのに時間がかかる。 1件で写す項目は15〜25あり、不良の一覧を読んで一言にまとめる5番目が一番重い作業です。
(b)判定と数字の食い違いを見落とす。 3番目で数字を写しても、判定と数字が合っているかを見比べることまではしていません。 判定の欄を信じて台帳に PASS と書きます。
(c)取り決めのAQLとの照合が抜ける。 4番目は発注データを別に開く必要があり、急いでいる日ほど省かれます。
(d)保留が放置される。 PENDING の報告書は「判断が要る」のですが、誰に回すかの決まりが無く、 出荷予定日の前日に購買から問い合わせが来て気づくことがあります。
- 【自動】 共有受信箱に届いた報告書のPDFが、受付フォルダ(Amazon S3)に保存される
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRが全文、レイアウト、表、チェック欄の状態、信頼度を返す
- 【自動】 生成AIが、発注番号・判定・AQL・抜取数・不良の数と許容数・不良の内訳・写真の説明を、原文のまま項目にそろえる
- 【自動】 プログラムが発注データと照らし、判定と数字の食い違い、AQLの取り決めとの違い、数量の違いに印を付ける
- 【自動】 検品台帳に1行を書き、印の付いたものを品質管理の判断待ちの一覧に入れる
- 【人】 品質管理の担当者が、判断待ちの報告書を開き、写真と指摘を見て出荷か手直しか再検査かを決める
- 【人】 購買の担当者が、決まった内容を工場に伝える
7番目が、この設計の分かれ目です。 担当者は90件をすべて開くのではなく、判断待ちの一覧に入ったものだけを開きます。 印の無い PASS の報告書は台帳で流し見ます。
5番目をAIにさせないのも、意図してのことです。 不良の数と許容数の比較、取り決めのAQLとの照合、数量の比較。どれも数字で決まる処理で、生成AIには報告書から値を写すところまでをさせます。
02今回想定するシステム構成
英文の出荷前検査報告書(PDF。検品会社3社からのメール添付) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・パスワードの確認 ▼ AWS Textract(StartDocumentAnalysis:LAYOUT/TABLES/FORMS) │ 全文、見出し、表、チェック欄の状態、写真の位置、信頼度 ▼ Claude API ── 報告書の項目を原文のまま取り出す │ ① 発注番号・品番・数量 ② 判定 ③ AQLと抜取数 │ ④ 不良の数と許容数 ⑤ 不良の内訳 ⑥ 写真の説明文 ▼ Python ── 発注データとの照合、判定と数字の食い違い、AQLの取り決めとの照合 ▼ 検品台帳(ok / needs_decision / inconsistent / aql_mismatch / po_not_found / needs_human) ▼ 【品質管理の担当者が判断待ちの報告書を確認】 └──▶ 購買が工場へ出荷・手直し・再検査を連絡
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(報告書の項目の取り出しと、不良の内訳の整理) | OpenAI API、Gemini API |
| 差異計算 | Python(発注データとの照合、判定と数字の食い違いの検出) | 検品台帳の関数 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(報告書、読み取り結果、照合の結果) | 社内のファイルサーバー |
発注データと検品台帳は、新しく足すものではありません。 最初の準備は、発注データに取り決めたAQL(重大・主要・軽微ごと)と検査水準の列を持たせることと、検品会社ごとの発注番号の書き方の一覧を作ることです。
OCRに AWS Textract を選ぶのは、報告書が英文だからです。 公式の上限の表で、対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語とされ、日本語や中国語は読めません。 検品員が現地で書き込む手書きのメモは、英語であれば読めます。手書きの認識は英語だけが対象です。
この題材で効くのは、チェック欄(SELECTION_ELEMENT)とレイアウトの図(LAYOUT_FIGURE)です。 判定が PASS/FAIL/PENDING のチェック欄で示される報告書では、どの欄に印があるかが SELECTED/NOT_SELECTED で返ります。 図は写真の位置を示すので、その近くの本文を写真の説明文として拾えます。 写真そのものの中身は、この構成では読みません。
03どうやって実装するのか
処理の起点を決める
起点は2つあります。報告書が届いたときと、毎朝の定時です。
1つ目は、受付フォルダ(Amazon S3)に報告書のPDFが保存されたことです。共有受信箱のルールで、検品会社3社の送り元から届いたメールの添付をS3へ転送します。保存の通知で AWS Lambda が動き、読み取りから台帳への記録までを済ませます。届いた時点で読むので、出荷予定日までの残りの日数を最大限に使えます。
2つ目は、毎朝9時の定時です。判断待ちの一覧のうち、出荷予定日まで3日を切ったもの、判断が付いていないもの、再検査の報告書が届いていないものを並べ、品質管理の判断者と購買の担当者に送ります。保留の報告書が放置されないように、期日の管理を一覧の側に置きます。
再検査の報告書も同じ経路で入れます。 発注番号が同じものは、台帳の同じ行の履歴に足します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 出荷前検査報告書 | PDF。発注番号、品番、ロットの数量、判定、AQLと検査水準、抜取数、不良の一覧と数、許容数、寸法の測定、梱包・表示の確認、写真と説明文 | 受付フォルダ(Amazon S3) |
| 読み取り結果 | 全文、レイアウトの要素、表とセル、チェック欄の状態、それぞれの信頼度と、手書きか印字かの区別 | AWS Textract |
| 発注データ | 発注番号、品番、数量、出荷予定日、取り決めたAQL(重大・主要・軽微)と検査水準、工場 | 発注データの出力 |
| 発注番号の書き方の一覧 | 検品会社ごとの発注番号の書き方(接頭の文字、区切り、枝番) | 購買部で作る一覧 |
| 検品台帳 | これまでの検査の結果、再検査の履歴、判断の記録 | 検品台帳 |
質を決めるのは、発注データの取り決めたAQLの列です。 これが無いと、報告書のAQLが正しいかを照らす先がありません。今は取り決めが品質協定の文書の中にしか無く、発注ごとに引ける形になっていません。
発注番号の書き方の一覧は、台帳の行を探すために持ちます。 PO-26-0412、260412、PO#0412-A のように、同じ発注でも検品会社によって書き方が違います。ここで行が見つからないと、それ以降の照合がすべて止まります。
データの取得方法を決める
読み取りは StartDocumentAnalysis にS3の場所と FeatureTypes を渡して始めます。完了は NotificationChannel に指定した Amazon SNS のトピックに通知され、状態が SUCCEEDED なら GetDocumentAnalysis で結果を取ります。
| 指定するもの | 値 | 理由 |
|---|---|---|
FeatureTypes | LAYOUT、TABLES、FORMS | 見出しと写真の位置、不良の表、判定のチェック欄とキーと値 |
ClientRequestToken | ファイルのハッシュ | 同じ報告書で二重に読み取りを始めない |
JobTag | 検品会社の区分 | 完了の通知から、書き方の一覧を引く |
結果は1回最大1,000ブロックで区切られ、NextToken が返る限り呼び直します。同期の処理はPDF1ページまでで、報告書は10ページを超えるので非同期で読みます。 JobId は7日間しか有効でないため、取った結果はその場でS3に保存します。
| 取るもの | ブロック | 何に使うか |
|---|---|---|
| 判定のチェック欄 | SELECTION_ELEMENT(SELECTED/NOT_SELECTED) | どの判定に印があるか |
| 発注番号・品番・数量 | KEY_VALUE_SET | 台帳の行を探す |
| AQLと不良の数の表 | TABLE、CELL、列の見出し | 重大・主要・軽微ごとの数と許容数 |
| 写真の位置と説明文 | LAYOUT_FIGURE とその近くの LAYOUT_TEXT | 指摘の説明を写す |
| 手書きのメモ | TextType が HANDWRITING の行 | 検品員の書き込みを別に記録する |
手書きの行を分けて記録するのは、そこに判断の材料があることが多いためです。 印字の判定のあとに、検品員が「工場が手直しを約束」のような書き込みをしていることがあります。
不良の表は、列の見出しで意味を決めます。 Found、Allowed、Ac、Re の見出しが検品会社ごとに違う言い方で並ぶので、列の見出しの言い方の一覧を検品会社ごとに持ち、セルの ColumnIndex と結び付けます。 見出しが一覧に無い表は、列の意味を決めずに ambiguous として人に回します。
AIへ渡す前に整形する
- 形式の確認 … JPEG、PNG、PDF、TIFF であることを確かめます
- パスワードの確認 … PDFはパスワードで保護されていてはいけないとされています。保護されたものは検品会社に解除したものを頼みます
- サイズとページ数の確認 … 非同期の処理で、PDFとTIFFは500MB・3,000ページまでです。写真の多い報告書は大きくなるので、サイズを先に確かめます
- 報告書の種類の確認 … 1ページ目の題名から、出荷前検査か、生産中の検査か、再検査かを決めます。出荷前検査と再検査以外は、この流れに乗せず担当者の一覧に入れます
- 発注番号の正規化 … 書き方の一覧で、報告書の発注番号を自社の書き方に直します
AIに処理させる
させるのは、報告書の項目を原文のまま写し、不良の内訳を種類ごとに並べ直すことです。 照合と、出荷できるかの判断はさせません。
| 見るもの | 取り出し方 | 判断できないときの扱い |
|---|---|---|
| 発注番号・品番・ロットの数量 | 原文のまま | 複数の発注番号が並べば ambiguous |
| 判定 | 文字の判定と、チェック欄の印の両方を記録 | 文字と印が食い違えば ambiguous |
| AQLと検査水準 | 重大・主要・軽微ごとに原文のまま | 書かれていなければ空 |
| 抜取数 | 原文の数字 | 読めなければ unreadable |
| 不良の数と許容数 | 重大・主要・軽微ごとに、見つかった数と許容数(Ac)・不合格の数(Re) | 表の列の意味が決まらなければ ambiguous |
| 不良の内訳 | 不良の名称、区分、数を1行ずつ | 区分が書かれていなければ区分を空のまま |
| 写真の説明文 | 写真ごとの説明を原文のまま、短く | 説明が無ければ空 |
| 検品員の書き込み | 手書きの行を原文のまま | 読めなければ unreadable |
判定を文字と印の両方で記録するのは、書式によって片方しか正しくないことがあるためです。 チェック欄の横に PASS と印字されていても、印は FAIL の欄に付いている、という報告書があります。
| させないこと | 理由 |
|---|---|
| 出荷を許可するかの判断 | 品質管理の担当者が写真と指摘を見て決める |
| 判定と数字の照合 | Python が数字で行う |
| 許容数の計算 | 抜取表から引き直さない。報告書に書かれた値を写すだけ |
| 不良の区分の付け直し | 検品会社が付けた区分を写す。軽微を主要に直したりしない |
| 写真の中身の評価 | 説明文だけを写す。画像は人が見る |
3行目を明記するのは、計算させると引き直すためです。 抜取数とAQLを見て、許容数を一般的な抜取表から求めようとし、報告書に書かれた値と違う数を返します。 正しいかどうかではなく、報告書に何が書かれていたかを残すのが目的です。
指示内容を固定する
あなたは生活雑貨の商社の品質管理部で、海外の検品会社から届いた
英文の出荷前検査報告書の記載を記録する担当です。
OCRの読み取り結果だけを使ってください。推測で埋めないでください。
【取り出す項目】
po_number_raw、item_number_raw、lot_quantity_raw、
verdict_text_raw、verdict_checkbox(どの欄に印があるか)、
aql_raw(critical/major/minor)、inspection_level_raw、sample_size_raw、
defects_found(critical/major/minor)、accept_raw(Ac)、reject_raw(Re)、
defect_lines(名称、区分、数)、photo_captions、handwritten_notes、
各項目の status とページ
【status の選び方】
- ok ........... 値が読み取れており、その項目として解釈できる
- missing ...... 書かれていない
- unreadable ... 文字は検出されているが値として確定できない
- ambiguous .... 候補が複数ある、または文字と印が食い違う
【厳守事項】
- 判定は、印字された文字と、チェック欄の印の両方を別々に記録して
ください。どちらかに合わせて書き換えないでください。
- 許容数(Ac)と不合格の数(Re)は、報告書に書かれた数だけを
入れてください。抜取数や AQL から計算しないでください。
- 不良の区分(critical/major/minor)は、報告書に書かれたとおりに
してください。重さを判断して付け直さないでください。
- 写真の説明文は書かれた文をそのまま短く写してください。
写真に何が写っているかを推測して書き足さないでください。
- 手書きの書き込みは handwritten_notes に分けて入れてください。
- 出荷してよいか、再検査が要るかを書かないでください。
- 出荷前検査の報告書でない書類と判断した場合は、項目を取り出さず
document_type に種類を書いてください。
【読み取り結果】{textract_layout_tables_forms}
【検品会社の区分】{inspector_company}
「どちらかに合わせて書き換えない」を明記しないと、合わせます。 文字と印が食い違うと、もっともらしいほうに寄せて1つの判定を返し、食い違いがあったという事実が消えます。
出力形式を固定する
Claude API の構造化出力(output_config.format に json_schema を指定)で、次の形のJSONを受け取ります。
{
"file": "",
"document_type": "pre_shipment_inspection",
"po_number_raw": "PO#0412-A",
"item_number_raw": "HW-2207",
"lot_quantity_raw": "3,600 pcs",
"verdict_text_raw": "PASS",
"verdict_checkbox": "FAIL",
"aql_raw": { "critical": "0", "major": "2.5", "minor": "4.0" },
"sample_size_raw": "200",
"defects_found": { "critical": 0, "major": 11, "minor": 6 },
"accept_raw": { "critical": "0", "major": "10", "minor": "14" },
"defect_lines": [
{ "name_raw": "Loose stitching", "class_raw": "major", "count": 7 }
],
"photo_captions": ["Loose stitching at handle seam"],
"handwritten_notes": [],
"items": [
{ "item": "verdict", "status": "ambiguous", "confidence": 0, "page": 1 }
]
}
1つ目の理由は、照合と回付をプログラムの側に置けることです。 Python が発注データを引き、数字を比べて印を付けます。
| 印 | 付ける条件 |
|---|---|
ok | 判定が PASS で、文字と印が一致し、不良の数がすべて許容数以下で、AQLと数量が取り決めどおり |
needs_decision | 判定が FAIL か PENDING |
inconsistent | 判定が PASS なのに不良の数が許容数を超える、または文字と印が食い違う |
aql_mismatch | 報告書のAQLが取り決めより緩い、または検査水準が違う |
po_not_found | 発注番号が発注データに見つからない、またはロットの数量が発注と違う |
needs_human | unreadable の項目がある、または報告書の種類が違う |
inconsistent を needs_decision と分けるのは、確かめる相手が違うためです。 前者は検品会社に報告書の訂正を頼むもので、後者は自社が出荷を決めるものです。
2つ目は、不良の内訳を台帳で集計できることです。 defect_lines を工場と品番ごとに積み上げると、同じ工場で同じ不良が続いていることが見えます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知 | 報告書の保存を検知して AWS Lambda を動かす |
| AWS Textract | API呼び出し(非同期) | 読み取りを始め、完了の通知で結果を取る |
| Claude API | API呼び出し | 項目の取り出しと、不良の内訳の整理 |
| 発注データ | 毎朝の出力の読み取り | 品番・数量・出荷予定日・取り決めたAQLを引く |
| 検品台帳 | 書き込み | 報告書ごとの1行と印、判断待ちの一覧 |
工場への連絡と出荷の許可は、この構成からは行いません。 判断待ちの一覧を見た品質管理の担当者が決め、購買が工場に伝えます。出荷を止めるか通すかの連絡を自動にすると、印の付け間違い1つで船積みが止まります。
人が確認する
品質管理の担当者が開くのは、判断待ちの一覧に入ったものです。 ok の報告書は台帳で件数と工場を流し見ます。
inconsistentを先に見る … 報告書の該当ページを開き、判定と数字のどちらが正しいかを確かめます。検品会社に訂正を頼む前に、読み取りの誤りでないことを確かめますaql_mismatchを確かめる … 取り決めと違う基準で検査されたなら、検品会社に再検査か説明を求めますneeds_decisionの写真と指摘を見る … 写真を開き、手直しで足りるか、再検査が要るか、条件付きで出荷するかを決めます- 判断を台帳に記録する … 決めた内容、決めた人、理由を残し、購買に回します
1番目を急がないでください。 inconsistent の多くは報告書の記入の誤りですが、判定の欄のほうが正しく、表の数字が誤っていることもあります。 どちらが正しいかは検品会社に確かめるまで分かりません。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | 読めない。検品会社に解除したものを頼む |
| 6言語に入らない報告書 | 読み取りに回さず、担当者が目で見る |
| 発注番号が見つからない | po_not_found。書き方の一覧に無い書き方なら一覧に足す |
| 1つの報告書に複数の発注 | 発注ごとに表が分かれていれば分ける。分かれていなければ needs_human |
| 判定の文字と印が食い違う | inconsistent。検品会社に確かめる |
| 再検査の報告書が届く | 同じ発注の行の履歴に足し、最新の判定で印を付け直す |
| ロットの数量が発注より少ない | po_not_found として人へ。分納か、検査の範囲の誤りかを購買が工場に確かめる |
| 写真のページだけで説明文が無い | 説明は空のまま。写真のページ番号を一覧に載せる |
ジョブが FAILED または PARTIAL_SUCCESS | StatusMessage と Warnings のページ番号を記録し、そのページを人へ |
上から3行目が、運用の初めに最も多く出ます。 検品会社の書き方を一覧に足していくと減り、1か月ほどでほとんど出なくなる想定です。
記録を残す
- 元の報告書と、受け取った日時、検品会社、メールの件名
- AWS Textract が返したJSONの全文
- Claude API が返したJSON
- 照合の結果と、そのとき参照した発注データの取り決めたAQLと数量
- 品質管理の判断の記録 … 出荷・手直し・再検査・条件付き出荷のどれか、決めた人、理由
- 検品会社に訂正を頼んだ記録と、訂正された報告書との対応
判断の記録は、工場ごとの品質の傾向を見る材料になります。 再検査や手直しの多い工場と不良の種類を並べると、次の発注で検査の水準を上げるべき工場が見えてきます。
04実装レベルの3段階
本記事の想定は半自動化です。 読み取りと転記と照合が自動になり、担当者は判断待ちのものだけを開きます。1件40分が12分になるのはこの段階です。 本格構成で足すのは、判断の後の流れです。 ただし工場への連絡を送るのは、引き続き購買の担当者です。段階を飛ばさず、半自動化の間に検品会社ごとの書き方の一覧を育てておきます。
05工数削減シミュレーション
導入後 90件 × 12分 ÷ 60 = 18 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海外の工場に生産を委託し、出荷の前に第三者の検品会社へ抜取検査を依頼している商社・小売・EC事業者。英文の検査報告書がPDFで毎月数十〜百件届き、判定・AQL・不良の数・指摘の内容を発注ごとの台帳に手で写している場合。報告書の判定と不良の数が食い違うものや、判定が保留のものを、誰がいつ見るかが決まっていない場合。発注ごとにAQLや検査の水準を取り決めている場合。
- 検品会社の報告書が中国語やベトナム語などで届く場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、質問(Queries)は英語の文書だけが対象です)。検品会社の Web の画面から検査結果をCSVなどのデータで受け取れており、PDFを読む工程が無い場合。報告書が月に数件で、目視の転記で足りる場合。なお、出荷を許可するか、手直しや再検査を求めるかの判断と、指摘写真の中身の評価は、この構成では代替できません。
07最小構成で試す方法
- 先月届いた報告書から20件を選ぶ(判定が
FAILのもの、PENDINGのもの、チェック欄で判定を示すもの、手書きの書き込みがあるものを必ず入れる) - 手元の生成AIの画面に1件ずつ渡し、「この報告書の発注番号、判定、AQL、抜取数、重大・主要・軽微ごとの不良の数と許容数、主な不良の内容を、書かれたとおりに表にしてください。許容数は計算せず、書かれた数だけを書いてください。判定の文字とチェック欄の印が違えば、両方を書いてください」と指示する
- 出てきた表を、当時の台帳と見比べる
- 判定が
PASSで不良の数が許容数を超えていたものが、当時の台帳でどう扱われたかを数える
20件は必ずやってください。 仕組みを組む前に、許容数を勝手に計算しないか、判定を1つに寄せないかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 数字と判定を原文どおりに取り出した | OCRのAPIと照合の処理に進む |
| 許容数を抜取表から計算して返した | 指示で禁じる。直るまで先に進まない |
| 判定の文字と印を1つにまとめた | 両方を書く指示を足す。構成は有効 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 判定の文字と印を1つにまとめて返す | 両方を別々に記録させ、食い違いは inconsistent に |
| 許容数を抜取表から計算して返す | 報告書に書かれた数だけを写させる |
判定が PASS なら数字を見ない | Python で数字を必ず比べる |
| 取り決めより緩いAQLで検査されている | 発注データに取り決めの列を持たせて照らす |
| 発注番号の書き方が違って台帳の行が見つからない | 検品会社ごとの書き方の一覧で正規化する |
| 写真の中身を推測して説明に書き足す | 説明文だけを写させる。画像は人が見る |
| 手書きの書き込みを見落とす | HANDWRITING の行を分けて記録する |
| 不良の表の列の意味を取り違える | 検品会社ごとに列の見出しの一覧を持ち、無ければ人へ |
| 再検査の報告書で別の行ができる | 発注番号で同じ行の履歴に付ける |
| 出荷の連絡を自動で送る | 判断と連絡は人が行う |
上の2行が、この構成の失敗のほとんどです。 どちらも報告書に書かれていたことを、AIがもっともらしい形に直してしまう失敗です。写すことと判断することを分ける設計で守ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 発注番号と品番、数量、協力工場の名前、検査の結果と不良の内容、製品の写真です。個人情報は基本的に含みませんが、発売前の商品の写真と仕様、取引先の工場の品質の記録は、取引上の秘密です。
- 外部へ渡す範囲を、取り出しに必要なものに限る … 生成AIに渡すのは報告書の読み取り結果と検品会社の区分だけです。発注データの単価や取引先の条件は渡しません。 照合は社内の Python で行います
- 写真の画像を生成AIに渡さない … 写真の説明文だけを使います。発売前の商品の画像を外部に出す範囲を最小にします
- 出荷を判定させない … この構成が出すのは印と判断待ちの一覧までで、出荷か手直しか再検査かは品質管理の担当者が決めます
- 基準の版を確かめる … ISO のページでは、ISO 2859-1 の第3版が2026年1月に発行され、1999年版とその追補を置き換え、スキップロットの手順が加わったとされています。検品会社との取り決めで、どの版のどの基準で検査するかを確かめておきます
誤りが起きた場合のリスクは、不良の多いロットを出荷することと、問題の無いロットを止めることの2つです。 前者は判定と数字の食い違いの見落としから、後者は読み取りの誤りによる inconsistent から起きるので、値を原文のまま残し、印の付いたものは人が報告書で確かめる設計を崩さないでください。
10まず何から始めるか
1週目:発注データに取り決めたAQLの列を足す
品質協定の文書から、品目ごとの取り決めたAQL(重大・主要・軽微)と検査水準を書き出し、発注データに列を足します。件数の多い上位10工場の品目から埋めます。
2週目:20件で試す
先月の報告書から20件を選び、手元の生成AIの画面で項目を表にさせます。許容数を計算しないか、判定を1つに寄せないかを最優先で見ます。
3週目:判断待ちの回し方を決める
needs_decision、inconsistent、aql_mismatch のそれぞれを誰が見て、出荷予定日の何日前までに判断するかを、品質管理部と購買部で決めます。あわせて、検品会社ごとの発注番号の書き方の一覧を作ります。
4週目:受付フォルダから台帳までをつなぐ
S3、Lambda、Textract、Claude API、Python の照合をつなぎ、台帳に1行を書くところまで作ります。この時点では、検品会社1社の報告書だけを対象にします。
2か月目: 対象を3社に広げ、po_not_found と inconsistent の件数を毎週数えて、書き方の一覧と表の読み方を直します。3か月目以降: 工場ごとの不良の傾向の集計を足し、1件40分が何分になったかを実測します。PENDING の報告書が出荷予定日の前日に見つかることがなくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| ISO 2859-1 が AQL で索引付けたロットごとの抜取検査の方式を定めること。AQL が抜取検査で許容できるとみなす不良の最大の平均の割合であること。第3版が2026年1月に発行され、1999年版とその追補を置き換え、スキップロットの手順が加わったこと | ISO: ISO 2859-1:2026 | 2026-10-08 |
| 対応する形式がJPEG、PNG、PDF、TIFFであること。同期はPDF1ページ・10MB、非同期はPDFとTIFFで500MB・3,000ページであること。PDFはパスワードで保護できないこと。対応言語が英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語であること。手書きの認識は英語のみであること | AWS: Set Quotas in Amazon Textract | 2026-10-08 |
StartDocumentAnalysis の FeatureTypes(TABLES/FORMS/QUERIES/SIGNATURES/LAYOUT)、ClientRequestToken、JobTag、NotificationChannel で Amazon SNS に完了を通知すること。JobId が7日間だけ有効なこと | AWS: StartDocumentAnalysis | 2026-10-08 |
GetDocumentAnalysis の JobStatus(SUCCEEDED/FAILED/PARTIAL_SUCCESS ほか)、MaxResults(最大1,000)と NextToken、StatusMessage、Warnings。キーと値、表とセル、チェック欄などの選択要素を返すこと | AWS: GetDocumentAnalysis | 2026-10-08 |
SELECTION_ELEMENT の SelectionStatus が SELECTED/NOT_SELECTED であること。TextType が HANDWRITING/PRINTED であること。信頼度が0〜100で返ること。LAYOUT_FIGURE が画像の位置を示すこと | AWS: Block | 2026-10-08 |
| レイアウトがタイトル、セクションの見出し、表、本文、図などの要素を返し、読む順に並べて返すこと | AWS: Layout Response Objects | 2026-10-08 |
構造化出力を output_config.format に json_schema を指定して受け取れること | Claude Docs: Structured outputs | 2026-10-08 |
出荷を許可するか、手直しや再検査を求めるかは、品質管理の担当者が判断してください。 本記事は公開仕様で確認できた範囲だけを扱っています。抜取検査の基準と許容数は、検品会社との取り決めと規格の本文で確かめてください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0867)についてのご相談はこちらから。
