海外の輸出者から届く英文の商品規格書を読み取り、商品マスタの登録案にそろえて、日本の食品表示に要る項目の抜けを拾う
海外の輸出者から届く英文の商品規格書を読み取り、原材料・アレルゲン・賞味期間・保存温度・ケース入数を商品マスタの登録案にそろえます。あわせて、日本の食品表示に要る項目のうち規格書から埋まらないものを挙げ、輸出者へ問い合わせる一覧にします。
- 生成AI
- Azure OpenAI Service/ChatGPT/Claude
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- EC/商社/小売
- 対象部門
- 購買
- 対象業務
- データ入力・転記/内容確認・チェック
- 主な課題
- 人手が足りない/入力作業が多い/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 輸出者から規格書のPDFがメールで届き、担当者が共有フォルダに保存する
- 規格書を開き、商品名・ブランド・バーコード(GTIN)・内容量・ケース入数・ケースの寸法と重量を探して、商品マスタの登録の画面へ転記する
- 原材料の一覧を読み、和訳を作業表に書く。アレルゲンの欄を読み、特定原材料に当たるものを書き出す
- 賞味期間(Shelf Life)を日数・月数から読み、保存温度から常温・冷蔵・冷凍の区分を決める
- 栄養成分の表を読み、表示に要る値がそろっているかを見る
- 表示に要る項目のうち規格書に無いものを、輸出者への問い合わせのメモにする
- 登録と問い合わせが終わったものを、表示ラベルを作る担当へ回す
- 人輸出者から届いた規格書のPDFを、受付用のメールアドレスへ転送するか、受付フォルダへ置く
- 自動保存をきっかけに処理が動き、形式・ページ数・言語を確かめる
- 自動AWS Textract が表・項目・質問への答え(Queries)を読み取る
- 自動Claude API が読み取り結果を商品マスタの登録案の形にそろえ、原材料の一覧を1つずつに分ける
- 自動プログラムが原材料の語を特定原材料の語の一覧と照らし、申告欄との食い違いを出す
- 自動プログラムが賞味期間・保存温度・入数を自社の単位に換算し、区分を決める
- 自動表示に要る項目のチェックリストと照らし、`present`/`missing`/`unreadable` を付ける
- 自動`missing` の項目を、輸出者への問い合わせ文の下書きにまとめる
- 人商品登録の担当が登録案と要確認の項目を確かめ、商品マスタへ登録する
- 人表示の担当がアレルゲンの食い違いと問い合わせの下書きを確かめ、輸出者へ送る
各工程の詳しい説明を読む
- 輸出者から規格書のPDFがメールで届き、担当者が共有フォルダに保存する
- 規格書を開き、商品名・ブランド・バーコード(GTIN)・内容量・ケース入数・ケースの寸法と重量を探して、商品マスタの登録の画面へ転記する
- 原材料の一覧を読み、和訳を作業表に書く。アレルゲンの欄を読み、特定原材料に当たるものを書き出す
- 賞味期間(Shelf Life)を日数・月数から読み、保存温度から常温・冷蔵・冷凍の区分を決める
- 栄養成分の表を読み、表示に要る値がそろっているかを見る
- 表示に要る項目のうち規格書に無いものを、輸出者への問い合わせのメモにする
- 登録と問い合わせが終わったものを、表示ラベルを作る担当へ回す
(a)見る場所が規格書ごとに違う。 ケース入数が「Units per Case」「Case Pack」「Pack Configuration」のどれで書かれているか、表の中か本文の中かは、開いてみるまで分かりません。1件の半分近くは、項目を探す時間です。
(b)アレルゲンの申告欄を信じてしまう。 申告欄に「None」とあると、原材料の一覧を読み飛ばしがちです。輸出国の制度で申告対象でない品目は、申告欄には出てきません。 原材料に「cashew」とあっても、申告欄だけを見ていると拾えません。
(c)足りない項目にラベル作成のときに気づく。 6番の確認が忙しい月には省かれ、ラベルの担当が「ナトリウムの値が無い」「保存方法が書いていない」と戻してきます。そこから輸出者に問い合わせると、返事が来るまで入荷した商品を売り場に出せません。
(d)単位の換算で誤る。 賞味期間が月数か日数か、保存温度が華氏か摂氏かで、区分の判断が変わります。入数も「12 x 6」のように掛け算で書かれ、どちらをケース入数とするかが担当者で分かれます。
- 【人】 輸出者から届いた規格書のPDFを、受付用のメールアドレスへ転送するか、受付フォルダへ置く
- 【自動】 保存をきっかけに処理が動き、形式・ページ数・言語を確かめる
- 【自動】 AWS Textract が表・項目・質問への答え(Queries)を読み取る
- 【自動】 Claude API が読み取り結果を商品マスタの登録案の形にそろえ、原材料の一覧を1つずつに分ける
- 【自動】 プログラムが原材料の語を特定原材料の語の一覧と照らし、申告欄との食い違いを出す
- 【自動】 プログラムが賞味期間・保存温度・入数を自社の単位に換算し、区分を決める
- 【自動】 表示に要る項目のチェックリストと照らし、
present/missing/unreadableを付ける - 【自動】
missingの項目を、輸出者への問い合わせ文の下書きにまとめる - 【人】 商品登録の担当が登録案と要確認の項目を確かめ、商品マスタへ登録する
- 【人】 表示の担当がアレルゲンの食い違いと問い合わせの下書きを確かめ、輸出者へ送る
5番目が、この設計の分かれ目です。 アレルゲンの判定をAIの読み取りに任せず、原材料の語と特定原材料の語の一覧の照合をプログラムで行います。 AIには原材料を1つずつに分けるところまでをさせ、どれが特定原材料に当たるかの最初の当たりは、決まった語の一覧で付けます。
9番目で人が見るのは、要確認の印が付いた項目が中心です。 ただし、アレルゲンの項目だけは印が無くても毎回目で見ます。
02今回想定するシステム構成
英文の商品規格書(PDF) │ 受付メール/受付フォルダ ▼【トリガー】Amazon S3 への保存 AWS Lambda ├──▶ 形式・ページ数の確認 ▼ AWS Textract(StartDocumentAnalysis:TABLES/FORMS/QUERIES) │ 完了の通知(Amazon SNS) ▼ AWS Lambda ── GetDocumentAnalysis で結果を取る ▼ Claude API ── 登録案の形にそろえる(構造化出力) ▼ Python ── 特定原材料の語との照合/単位の換算/チェックリストとの照合 ▼ 登録案と要確認の一覧(購買部の作業表) ├──▶【人】商品登録の担当が確認して商品マスタへ └──▶【人】表示の担当がアレルゲンと問い合わせの下書きを確認
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis の TABLES/FORMS/QUERIES) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(読み取り結果を登録案の形にそろえる) | OpenAI API、Azure OpenAI(Microsoft Foundry) |
| 差異計算 | Python(特定原材料の語との照合、単位の換算、チェックリストとの照合) | 作業表の関数 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | AWS Step Functions |
| 保管 | Amazon S3(規格書、読み取り結果、登録案) | 購買部のファイルサーバー |
商品マスタには、この構成から書き込みません。 登録案は作業表に出し、担当者が確かめてから基幹システムの画面で登録します。誤った入数やアレルゲンが、確認なしに売り場の値札や通販の商品ページへ流れる経路を作らないためです。
土台になるのは、AWS Textract の文書分析です。 非同期の StartDocumentAnalysis は、Amazon S3 に置いたJPEG・PNG・TIFF・PDFを分析し、FeatureTypes に TABLES・FORMS・QUERIES などを指定できます。完了すると、指定した Amazon SNS のトピックに完了の状態が送られます。 状態が SUCCEEDED であることを確かめてから、GetDocumentAnalysis に JobId を渡して結果を取ります。
規格書が英文であることが、Textract を選べる理由です。 Textract の対応言語は英語・フランス語・ドイツ語・イタリア語・ポルトガル語・スペイン語で、質問への答え(Queries)は英語の文書だけで使えます。 日本語の縦書きにも対応していません。日本語や中国語の規格書が混ざる取引先がある会社は、Azure AI Document Intelligence か Google Document AI を本命にしてください。
生成AIは Claude API を直接呼びます。 構造化出力は output_config.format に JSON スキーマを渡して使いますが、Amazon Bedrock 上の Claude では対応が旧来の統合の一部のモデルに限られると公式ページにあります。
03どうやって実装するのか
処理の起点を決める
受付用の Amazon S3 のバケットにPDFが置かれたことを起点にします。 輸出者からのメールは受付用のアドレスへ転送し、添付ファイルをバケットに保存する仕組みを1つ置きます。担当者が手で置く場合も、同じバケットの受付用のフォルダに入れます。
届いた順に1件ずつ動かします。 新しい商品の規格書は、催事の準備や定番の入れ替えの前にまとまって届きますが、まとめて夜に処理すると、問い合わせの下書きが出るのが翌日になります。 輸出者とは時差があるので、午前中に問い合わせを出せば相手の営業時間に届きます。
Textract の非同期の処理は、ClientRequestToken を付けると同じ依頼から同じ JobId が返ります。同じPDFが二度置かれても二重に分析しないよう、ファイルのハッシュ値をこのトークンに使います。 完了の通知に載る JobTag には、受付の番号を入れておきます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 商品規格書 | 英文のPDF。輸出者名、受け取った日時、新規か改訂か | 受付用の S3 バケット |
| 読み取り結果 | 行と単語、表とセル、キーと値、質問への答え、それぞれの信頼度 | AWS Textract |
| 輸出者の情報 | 輸出者コード、国、過去の規格書の版、前回の登録内容 | 購買部の取引先一覧 |
| 特定原材料の語の一覧 | 9品目と、それぞれに当たる英語の語(例:cashew、walnut、shrimp、prawn、crab、wheat、buckwheat、peanut、egg、milk) | 表示の担当が持つ一覧 |
| 表示のチェックリスト | 日本の表示に要る項目と、規格書のどの値から埋めるかの対応 | 表示の担当が持つ一覧 |
| 自社の区分の基準 | 常温・冷蔵・冷凍の温度の範囲、受け入れる賞味期間の下限 | 物流と品質管理の取り決め |
質を決めるのは、下の3つです。 特定原材料の語の一覧が粗いと照合が漏れ、チェックリストが無いと「何が抜けているか」を言えません。どちらもAIに作らせず、表示の担当が持つ一覧として管理します。
特定原材料の語の一覧には、言い換えを多めに入れます。 「milk」だけでなく「whey」「casein」「butter」「cream」、「wheat」だけでなく「semolina」「durum」「spelt」のように、原材料の名前に現れる形で並べます。ここに無い語は照合で拾えないので、拾えなかった食い違いを見つけるたびに足していきます。
データの取得方法を決める
読み取りは StartDocumentAnalysis を1回呼ぶだけです。FeatureTypes に TABLES・FORMS・QUERIES を指定し、QueriesConfig に質問を並べます。
| 取るもの | 方法 | 何に使うか |
|---|---|---|
| 表とセル | TABLES | 栄養成分の表、包装の構成の表(内箱・外箱・パレット) |
| キーと値 | FORMS | 「Shelf Life: 18 months」のような項目と値の組 |
| 質問への答え | QUERIES | 書式が決まっていない規格書から、決まった項目を引く |
| 行と単語 | 常に返る | 原材料の一覧の本文、注記 |
質問は、書式がばらばらでも聞きたいことは同じ、という項目に使います。 例えば What is the shelf life?(別名 SHELF_LIFE)、What is the storage temperature?(STORAGE_TEMP)、How many units are in one case?(UNITS_PER_CASE)、What is the country of origin?(ORIGIN)、What is the GTIN or EAN barcode?(GTIN)のように並べます。答えは QUERY_RESULT のブロックで返り、信頼度と答えの位置が付きます。答えが見つからないときは空になります。
質問の数には上限があります。 1ページあたり、同期の処理で15件、非同期の処理で30件までです。質問を増やしすぎず、表と項目で取れるものは表と項目から取ります。 上限を超えたり、存在しないページに質問したりすると、結果に INVALID_REQUEST_PARAMETERS が出ます。
結果は GetDocumentAnalysis で取ります。1回で返るブロックは既定で1,000件までで、それを超えると NextToken が返るので、無くなるまで繰り返し呼びます。 途中で止めると、後ろのページの栄養成分の表が欠けたまま次へ進みます。
AIへ渡す前に整形する
- 形式の確認 … JPEG・PNG・TIFF・PDFだけを受け付けます。Wordや表計算のまま届いたものはPDFにします。XFA形式のPDFは扱えないので、印刷し直したPDFを輸出者に頼みます
- パスワードの確認 … パスワード付きのPDFは扱えません。輸出者に外したものを頼みます
- ページ数とサイズの確認 … 非同期の処理ではPDFが500MB・3,000ページまでです。規格書は数ページに収まるので、数十ページあるものはカタログが混ざっていないかを疑います
- 文字の大きさの確認 … 検出できる文字の高さは15ピクセルが下限で、150DPIで8ポイントの文字に当たります。栄養成分の表の脚注は小さいことが多いので、スキャンし直したPDFは解像度を確かめます
- 言語の確認 … 読み取った単語に英語以外の文字が多いものは、Textract の対象外として人へ回します
- 新規か改訂かの判定 … 輸出者と商品名・GTINで既存の登録を引き、改訂なら前回の登録内容を一緒に渡します
6番目を軽く見ないでください。 改訂の規格書は、変わったところだけを見たいものです。前回の登録内容と並べて渡すと、原材料が1つ増えた、賞味期間が短くなった、という差分を出せます。 第2章で書いた「改訂の見落とし」を止めるのはここです。
AIに処理させる
させるのは、読み取り結果を登録案の項目に割り当て、原材料の一覧を1つずつに分けることです。 判定はさせません。
| させること | 中身 | 判断できないときの扱い |
|---|---|---|
| 項目の割り当て | 商品名、ブランド、GTIN、内容量、ケース入数、ケースの寸法と重量、原産国 | 候補が複数あれば ambiguous |
| 原材料の分割 | 原材料の一覧を1つずつに分け、括弧の中の副原材料を分ける。書かれた順を保つ | 区切りが読めなければ全文を残して unreadable |
| 原材料の和訳の案 | 1つずつに最も一般的な日本語の名前の案を付ける | 訳せない語は英語のまま残す |
| 申告されたアレルゲンの書き写し | 「Contains」「May contain」の欄をそのまま写す | 欄が無ければ missing |
| 期間・温度・入数の書き写し | 単位を含めて原文のまま写す | 換算はしない |
| 栄養成分の書き写し | 表の行を、単位と基準量(per 100g など)とともに写す | 基準量が書かれていなければ missing |
| させないこと | 理由 |
|---|---|
| 特定原材料に当たるかの判定 | 決まった語の一覧とプログラムで照合し、人が確かめる |
| 単位の換算と区分の判断 | 華氏・摂氏、日数・月数の換算はプログラムで行う |
| 書かれていない値の推測 | 似た商品の値で埋めると、問い合わせるべき項目が消える |
| 食塩相当量の計算 | ナトリウムからの換算は表示の担当が行う |
| 表示の文案 | 日本語の一括表示は表示の担当が作る |
3行目がいちばん起きやすい失敗です。 保存温度が書いていない冷凍食品を渡すと、「Frozen」という商品名から −18℃ と埋めることがあります。埋まった瞬間、輸出者に聞くべき項目が一覧から消えます。
指示内容を固定する
あなたは輸入食品の商品登録の担当を手伝う立場です。
AWS Textract が英文の商品規格書から読み取った結果だけを見て、
商品マスタの登録案の項目に値を割り当ててください。推測で埋めないでください。
【割り当てる項目】
product_name, brand, gtin, net_quantity, units_per_case,
inner_pack, case_dimensions, case_weight, country_of_origin,
shelf_life_raw, storage_raw, ingredients, allergen_statement,
nutrition_rows
【status の選び方】
- present ..... 値が読み取れており、その項目として解釈できる
- missing ..... 規格書にその項目の記載が無い
- unreadable .. 文字は検出されているが信頼度が低く、値として確定できない
- ambiguous ... 候補が複数あり、1つに決められない
迷ったときに present を選ばないでください。
【厳守事項】
- 記載がなければ value を「不明」とし、status を missing にしてください。
商品名やカテゴリから推測して埋めないでください。
- 期間・温度・重量は、単位を含めて原文のまま写してください。
換算しないでください。
- ingredients は書かれた順を保ったまま1つずつに分けてください。
括弧の中の副原材料は sub に入れてください。並べ替えないでください。
- 各原材料に ja_name_draft として日本語の名前の案を付けてください。
訳せない語は英語のまま入れ、note に「訳語未確定」と書いてください。
- allergen_statement は「Contains」「May contain」の欄を原文のまま写してください。
原材料の一覧からアレルゲンを補って書き足さないでください。
- 特定原材料に当たるかどうかは書かないでください。
- 入数が「12 x 6」のように掛け算で書かれていれば、そのまま写し、
units_per_case を計算しないでください。
- evidence には根拠にした文字列を原文のまま写してください。
- confidence は読み取り結果の値をそのまま入れてください。
【読み取り結果】{textract_result}
【前回の登録内容(改訂のときだけ)】{previous_entry}
「申告欄に原材料から書き足さない」を明記しないと、親切に補います。 原材料に「cashew」があり、申告欄に無ければ、AIは申告欄に「cashew」を加えたくなります。しかし、申告と原材料の食い違いこそが拾いたいものです。 補われると、食い違いが無かったことになります。
「換算しない」「計算しない」を何度も書くのも同じ理由です。 換算をAIに任せると、どこで換算したかが記録に残りません。原文のまま写させ、換算はプログラムの側で、式が分かる形で行います。
出力形式を固定する
Claude API の構造化出力で、次の形のJSONを受け取ります。
{
"spec_id": "",
"exporter_code": "",
"revision": "new | revised",
"fields": [
{ "name": "units_per_case", "status": "present | missing | unreadable | ambiguous",
"value": "", "confidence": 0, "evidence": "" }
],
"ingredients": [
{ "order": 1, "name_en": "", "sub": [], "ja_name_draft": "", "note": "" }
],
"allergen_statement": { "contains": "", "may_contain": "", "status": "" },
"nutrition_rows": [
{ "nutrient": "", "value": "", "unit": "", "basis": "" }
]
}
1つ目の理由は、AIの割り当てとプログラムの判定を別の層に置けることです。 fields と ingredients はAIが埋め、特定原材料との照合、単位の換算、チェックリストの判定はプログラムが行います。特定原材料が増えても、直すのは語の一覧とプログラムだけです。
2つ目は、構造化出力でスキーマに合う形が保証されることです。 公式ページでは、構造化出力は数値の範囲や文字数の制約に対応していないとされています。confidence の範囲や GTIN の桁数は、受け取った後にプログラムで確かめます。
プログラムが足す判定は、次の表の形で作業表に出します。
| 判定 | 中身 | 例 |
|---|---|---|
| アレルゲンの照合 | 原材料の語と特定原材料の語の一覧を照らし、申告欄と比べる | 原材料に cashew、申告欄に無し → conflict |
| 区分 | 保存温度を摂氏に換算し、自社の常温・冷蔵・冷凍の範囲に当てる | 32–40°F → 0–4.4℃ → 冷蔵 |
| 賞味期間 | 日数・月数を日数に換算し、受け入れる下限と比べる | 540 days → 下限内 |
| 入数 | 内箱×外箱の掛け算を展開する | 12 x 6 → 72(内箱6の場合は要確認) |
| 表示の材料 | チェックリストの各項目が埋まるか | 栄養成分の基準量が無い → missing |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付用の S3 バケット | 保存の通知で Lambda を起動 | 規格書の受付 |
| AWS Textract | StartDocumentAnalysis/GetDocumentAnalysis | 表・項目・質問への答え |
| Amazon SNS | 完了の通知 | 結果を取りに行く Lambda を起動 |
| Claude API | Messages API の構造化出力 | 登録案の形にそろえる |
| 購買部の作業表 | ファイルへの書き出し | 登録案、判定、問い合わせの下書き |
| 商品マスタ | 担当者が画面で登録 | この構成からは書き込まない |
チェックリストは、日本の食品表示基準で一般用の加工食品に表示が求められる項目を、規格書のどの値で埋めるかに置き換えたものです。 名称、保存の方法、消費期限または賞味期限、原材料名、添加物、内容量、栄養成分(たんぱく質・脂質・炭水化物・ナトリウム)の量と熱量、アレルゲン、輸入品の原産国名、輸入業者の氏名と所在地などが並びます。輸入業者は自社なので規格書からは埋めません。 チェックリストのどの項目を規格書から埋め、どの項目を自社で書くかは、表示の担当が決めます。
人が確認する
- アレルゲンの照合結果を毎回見る …
conflictが無くても、原材料の一覧と申告欄を目で見ます。語の一覧に無い言い方は照合で拾えないからです missingとunreadableを分ける …unreadableはPDFの画質の問題です。輸出者に聞く前に、元のPDFで該当の箇所を見ます- 区分と入数を確かめる … 冷蔵か冷凍か、ケース入数が内箱か外箱かは、物流の手配と発注の単位に直結します
- 改訂の差分を確かめる … 前回の登録と変わった項目だけを見て、売り場と通販の表示に影響があるかを判断します
- 問い合わせの下書きを直して送る … 送信は表示の担当が行います
1番目を省かないでください。 アレルゲンの見落としは、商品の回収と健康被害につながります。この構成の時短は、アレルゲン以外の項目で稼ぐ前提です。
目標は、180件をならして1件10分です。 登録案の確認と転記に6分、アレルゲンと表示の材料の確認に4分という見込みです。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワード付き・XFA形式のPDF | 扱えない。輸出者に外したもの・印刷し直したものを頼む |
| 英文以外の規格書 | Textract の対象外。人が読むか、別の読み取りの製品に回す |
| 文字が小さすぎる | 15ピクセルが下限。unreadable にして元のPDFを人が見る |
| 質問の上限を超えた | INVALID_REQUEST_PARAMETERS。質問を減らし、表と項目で取る |
分析が FAILED/PARTIAL_SUCCESS | 受付の一覧に残し、StatusMessage を担当者へ |
| 1つのPDFに複数の商品 | 商品ごとに分けて再投入。分けられないものは人へ |
| 申告と原材料が食い違う | conflict。表示の担当が輸出者に確かめるまで登録しない |
構造化出力が refusal や max_tokens で終わる | スキーマに合わないことがある。受け付けず再実行 |
| 改訂で原材料が増えた | 差分として表示の担当に回す。表示ラベルの差し替えを検討する |
上から3行目までは、規格書の受け取り方で減らせます。 輸出者に「英文のPDFで、パスワードを付けずに」と最初に伝えておくと、例外のほとんどが入口で消えます。
記録を残す
- 元の規格書のPDFと、受け取った日時・輸出者・新規か改訂か
- Textract が返した結果の全文(ブロックと信頼度)
- Claude API の出力と、そのとき使った指示の版
- プログラムの判定(アレルゲンの照合、区分、換算)と、そのとき使った特定原材料の語の一覧の版
- 人が登録案を直した記録(どの項目を、何から何へ)
- 輸出者への問い合わせと回答の記録
4つ目で語の一覧の版を残すのは、特定原材料が変わるからです。 令和8年4月のカシューナッツの追加のように、一覧が変わったときに、どの登録を見直せばよいかを版から引けます。
04実装レベルの3段階
半自動化で、1件30分が18分程度になります。 項目を探して写す時間はほぼ消えますが、単位の換算と表示の材料の確認が手作業で残ります。本格構成で10分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化で1か月回すと、照合で拾えなかった言い方が分かります。語の一覧を直してから本格構成に進みます。
05工数削減シミュレーション
導入後 180件 × 10分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海外の食品・日用品を直輸入して自社の店舗や通販で売る小売業・専門商社で、新しく扱う商品や規格の改訂で月に百件を超える英文の商品規格書が届き、商品マスタへの転記と日本語の表示の準備を購買の担当が手で行っている場合。規格書がPDFで届き、輸出者ごとに書式が違う場合。AWS を社内で使っている場合。
- 輸入を商社に任せていて、日本語の表示を付けた状態で商品が届く場合。扱う輸出者が数社で、規格書の書式が固定されている場合。規格書が日本語・中国語・韓国語などで届く場合(AWS Textract は日本語・中国語を読めません)。なお、日本の表示として何をどう書くか、輸入品として販売してよいかの判断は、この構成では代替できません。
07最小構成で試す方法
- 先月届いた規格書から20件を選ぶ(アレルゲンの申告が無いのに原材料にナッツや小麦が入っているものを数件入れる)
- その20件について、当時の転記の結果とラベルの担当から戻された項目を集める
- 規格書のPDFを手元のAIサービスに1件ずつ貼り付ける
- 「この規格書から、商品名・GTIN・内容量・ケース入数・賞味期間・保存温度・原産国・原材料・アレルゲンの申告・栄養成分を、原文のまま書き出してください。書かれていない項目は『不明』としてください。換算しないでください。アレルゲンを原材料から補わないでください」と指示する
- 書き出された値を、当時の転記と比べる
| 出てきた内容 | 判断 |
|---|---|
| 当時の転記と同じ値が出て、抜けた項目も一致した | 読み取りの API と照合のプログラムに進む |
| 書かれていない値を推測で埋めた | 指示の書き方で直る。構成は有効 |
| 表の値が行ずれして読めない規格書が多い | 表の読み取りを Textract の表の結果で補う設計にする |
最小構成では、アレルゲンの照合はまだ人が行います。 照らしてみて拾いにくかった語が、語の一覧に足すべき語です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| アレルゲンの申告欄だけを見て照合が漏れる | 原材料の語と特定原材料の語の一覧を照らす。 申告との食い違いは必ず人へ |
| AIが申告欄に原材料から書き足す | 指示で禁じ、申告欄は原文のままか後段で比べる |
| 書かれていない保存温度を商品名から埋める | 推測を禁じ、missing にする |
| 華氏と摂氏を取り違える | 単位を含めて写させ、換算はプログラムで行う |
| 入数の内箱と外箱を取り違える | 掛け算のまま写させ、どちらを発注単位にするかは人が決める |
| 質問を増やしすぎて上限に当たる | 1ページあたり非同期で30件まで。表と項目で取れるものは質問にしない |
| 日本語の規格書が混ざる | Textract は日本語を読めない。対象外として人へ回すか、別の製品を使う |
| 特定原材料の追加に気づかない | 語の一覧に版を付け、変わったら既存の登録を見直す |
上の2行が、この構成の失敗のほとんどです。 どちらも「申告欄を正とする」思い込みから出ています。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 輸出者の商品規格書(原材料の配合の順、包装の仕様、価格が書かれていることもある)、輸出者の担当者の名前と連絡先です。個人の消費者の情報は扱いません。
- 規格書は輸出者の営業秘密を含みうる … 配合の順や製造の工程が書かれていることがあります。輸出者との秘密保持の取り決めで、外部のサービスで処理してよいかを確かめます
- Textract の結果の暗号化を指定する …
KMSKeyIdを指定すると結果の保存に使う鍵を選べます。指定しなければ SSE-S3 で暗号化されます - アレルゲンの判断を自動で確定させない … 照合はプログラムで行いますが、登録は人が確かめてからです。誤りは健康被害に直結します
- 表示の内容は表示の担当が決める … この構成は材料がそろっているかを示すだけで、日本語の一括表示の文案と、輸入品として販売してよいかの判断は代替しません
- 経過措置の扱いを決めておく … カシューナッツの追加には、令和10年3月31日までに製造・加工・輸入されるものに経過措置があります。自社がいつから新しい表示にするかを決めます
誤りが起きた場合のリスクは、アレルゲンを見落として売ることと、入数や区分を誤って発注・保管することの2つです。 どちらも判定をプログラムと人の側に置いて防ぎます。
10まず何から始めるか
1週目:特定原材料の語の一覧を作る
表示の担当と一緒に、9品目それぞれに当たる英語の語を、原材料の名前に現れる形で並べます。
2週目:20件で試す
先月の規格書から20件を選び、手元のAIサービスで項目を原文のまま書き出させます。当時の転記と比べ、書かれていない値を埋めていないかを最優先で見ます。
3週目:表示のチェックリストを作る
日本の表示に要る項目を、規格書のどの値から埋めるか、自社で書くかに分けて一覧にします。この一覧が決まらないうちに照合を組むと、「何が抜けているか」が担当者ごとに変わります。
4週目:受付から登録案までをつなぐ
S3 への保存から Textract、Claude API、作業表への書き出しまでを作ります。この時点ではアレルゲンの照合だけをプログラムで行い、換算とチェックリストは人が見ます。
2か月目: 単位の換算とチェックリストとの照合を足し、問い合わせの下書きを出します。3か月目以降: 改訂の差分を足し、1件30分が何分になったかを実測します。照合で拾えなかった語を一覧に足し終え、ラベルの担当からの差し戻しが減った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| 対応形式が JPEG・PNG・PDF・TIFF で XFA形式のPDFは不可、非同期でPDFが500MB・3,000ページ、パスワード付きPDFは不可、質問が同期15件・非同期30件/ページ、縦書きに非対応、対応言語が英・仏・独・伊・葡・西で質問は英語の文書のみ、文字の高さの下限が15ピクセル(150DPIで8ポイント)、手書きは英語のみ | AWS: Set Quotas in Amazon Textract | 2026-10-13 |
質問の答えが QUERY/QUERY_RESULT のブロックで、別名・信頼度・位置とともに返り、答えが無ければ空になること | AWS: Queries | 2026-10-13 |
表が TABLE・CELL・MERGED_CELL のブロックで返り、列見出し・表題・脚注を見分けられること | AWS: Tables | 2026-10-13 |
StartDocumentAnalysis が S3 の文書を分析し、FeatureTypes に TABLES・FORMS・QUERIES・SIGNATURES・LAYOUT を取ること。完了の状態が SNS に送られること。ClientRequestToken・JobTag・KMSKeyId。JobId は7日間有効 | AWS: StartDocumentAnalysis | 2026-10-13 |
GetDocumentAnalysis の MaxResults が既定・最大1,000で NextToken で続きを取ること、JobStatus の値、質問の上限超過などで INVALID_REQUEST_PARAMETERS が出ること | AWS: GetDocumentAnalysis | 2026-10-13 |
構造化出力を output_config.format で指定すること、数値の範囲・文字数の制約が非対応であること、refusal・max_tokens で終わるとスキーマに合わないことがあること、Amazon Bedrock 上では旧来の統合の一部のモデルに限られること | Claude: Structured outputs | 2026-10-13 |
| 一般用加工食品の横断的義務表示(名称、保存の方法、期限、原材料名、添加物、内容量、栄養成分の量と熱量、表示責任者、アレルゲンなど)、輸入品は輸入業者の氏名・所在地と原産国名を表示すること、賞味期限が3か月を超える場合の年月表示、食塩相当量の定義、別表第十四の特定原材料9品目(カシューナッツを含む)と令和10年3月31日までの経過措置 | e-Gov 法令API: 食品表示基準 | 2026-10-13 |
| 2026年4月1日に特定原材料としてカシューナッツが追加されたこと、容器包装された加工食品に特定原材料を含む旨の表示が義務付けられていること | 消費者庁: 食物アレルギー表示に関する情報 | 2026-10-13 |
日本語の表示の文案と、輸入品として販売してよいかの判断は、表示の担当と必要に応じて専門家が行ってください。 本記事は上の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1418)についてのご相談はこちらから。
