海外のメーカー・代理店から届く英文の見積書を読み取り、単価・インコタームズ・支払条件・納期・保証を見積比較表にそろえて、条件のそろっていない見積を拾う
海外のメーカーや代理店から届く英文の見積書を読み取り、単価・数量・インコタームズ・支払条件・納期・保証を見積比較表の項目にそろえます。見積依頼で出した条件と違う見積を拾い、比べる前に確かめる点を挙げます。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 商社/製造
- 対象部門
- 購買
- 対象業務
- データ入力・転記/比較検討
- 主な課題
- 入力作業が多い/判断に時間がかかる/確認ミスが多い
- AIで行う処理
- 抽出
- 主な効果
- 入力漏れ削減/判断支援/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 仕入先からメールで届いた見積書のPDFを、見積依頼の番号のフォルダに保存する
- 購買担当が見積書を開き、品番・数量・単価・通貨・金額を見積比較表に写す
- インコタームズと場所、支払条件、納期、見積の有効期限、保証期間を読み、依頼の条件と見比べる
- 明細の注記と約款のページを読み、梱包費・書類費・試験費・最小発注数量などの別途の条件を拾う
- 条件が依頼と違う見積は、仕入先に確かめるメールを書く
- 3社分がそろったら、比較表を課長に回し、発注先を決める
- 自動見積の受け取り用のメールアドレスに届いた添付を、見積依頼の番号ごとの受付フォルダへ保存する
- 自動保存をきっかけに、形式・ページ数・パスワードの有無を確かめる
- 自動OCRが見積書のキーと値、明細の表、質問への答え(見積番号・インコタームズ・支払条件・有効期限など)を、信頼度とともに返す
- 自動生成AIが、明細と取引条件を見積比較表の項目にそろえ、条件の文を原文のまま切り出す
- 自動見積依頼の条件と規則で照らし、項目ごとに `same` / `differs` / `not_stated` / `unclear` を付ける
- 自動見積ごとに `aligned` / `terms_differ` / `currency_differ` / `validity_short` / `incomplete` / `needs_human` を付け、比較表に書き出す
- 自動`aligned` 以外の見積について、仕入先に確かめる英文のメールの下書きを作る
- 人購買担当が比較表を見て、`aligned` 以外の見積の原本を確かめ、下書きを直して仕入先へ送る
- 人条件がそろったところで、購買担当と課長が発注先を決める
各工程の詳しい説明を読む
- 仕入先からメールで届いた見積書のPDFを、見積依頼の番号のフォルダに保存する
- 購買担当が見積書を開き、品番・数量・単価・通貨・金額を見積比較表に写す
- インコタームズと場所、支払条件、納期、見積の有効期限、保証期間を読み、依頼の条件と見比べる
- 明細の注記と約款のページを読み、梱包費・書類費・試験費・最小発注数量などの別途の条件を拾う
- 条件が依頼と違う見積は、仕入先に確かめるメールを書く
- 3社分がそろったら、比較表を課長に回し、発注先を決める
(a)転記に時間がかかる。 2番で、単価の列の見出しは「Unit Price」「Price/pc」「Net Price」と仕入先ごとに違い、数量の単位も「pcs」「EA」「per 100」と揺れます。 明細が多い見積では、行を写すだけで10分を超えます。
(b)条件の違いを見落とす。 3番と4番は、急ぎの見積依頼が重なると省かれます。1社がEXW、2社がCIPで出してきたことに気づかず単価だけで比べ、発注の後に運賃と保険料の手配が別に要ると分かることがあります。
(c)約款の一文を拾えない。 「Prices are subject to change without notice」「Validity: 30 days」が約款の中ほどにあり、比較表には載らないまま発注の時期が過ぎ、値上げの連絡を受けてから気づきます。
(d)比較表ができるまで決められない。 転記と問い合わせが終わらないと、発注先を決める話が始まりません。
- 【自動】 見積の受け取り用のメールアドレスに届いた添付を、見積依頼の番号ごとの受付フォルダへ保存する
- 【自動】 保存をきっかけに、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRが見積書のキーと値、明細の表、質問への答え(見積番号・インコタームズ・支払条件・有効期限など)を、信頼度とともに返す
- 【自動】 生成AIが、明細と取引条件を見積比較表の項目にそろえ、条件の文を原文のまま切り出す
- 【自動】 見積依頼の条件と規則で照らし、項目ごとに
same/differs/not_stated/unclearを付ける - 【自動】 見積ごとに
aligned/terms_differ/currency_differ/validity_short/incomplete/needs_humanを付け、比較表に書き出す - 【自動】
aligned以外の見積について、仕入先に確かめる英文のメールの下書きを作る - 【人】 購買担当が比較表を見て、
aligned以外の見積の原本を確かめ、下書きを直して仕入先へ送る - 【人】 条件がそろったところで、購買担当と課長が発注先を決める
4番目でAIに任せるのは「そろえる」と「原文の切り出し」までです。 依頼と同じ条件か、どの見積が有利かはAIに判断させません。依頼の条件は購買管理の仕組みにあり、照らし方は規則で決められるからです。
7番目で下書きを作っても、送るのは人です。 問い合わせの文面は仕入先との関係に関わり、どの条件を合わせてもらうかは購買担当の交渉の一部です。
02今回想定するシステム構成
仕入先からの英文の見積書(PDF) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・サイズ・パスワードの確認 ▼ AWS Textract(StartDocumentAnalysis:FORMS/TABLES/QUERIES) │ キーと値、明細の表、質問への答え、信頼度 ▼ Claude API ── 比較表の項目にそろえ、条件の文を原文のまま切り出す ▼ Python ── 見積依頼の条件と照らす │ ① 品番と数量 ② 通貨 ③ インコタームズと場所 ④ 支払条件 │ ⑤ 納期 ⑥ 有効期限 ⑦ 保証 ⑧ 別途の費用 ▼ 判定(aligned / terms_differ / currency_differ / validity_short / incomplete / needs_human) ▼ 見積比較表 ──▶【購買担当が確認】──▶ 仕入先への確認メール(人が送る)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis/GetDocumentAnalysis) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(比較表の項目への整形と、確認メールの下書き) | OpenAI API、Gemini API |
| 差異計算 | Python(見積依頼の条件との照合) | 購買管理の仕組みの照合の機能 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | AWS Step Functions |
| 保管 | Amazon S3(見積書、読み取り結果、照合の結果) | 社内のファイルサーバー |
購買管理の仕組みと見積比較表のひな形は、新しく足すものではありません。 最初の準備は、見積依頼の条件(数量・希望納期・インコタームズと場所・支払条件・保証期間)を照合に使える形で取り出せるようにすることです。
OCRに AWS Textract を選ぶのは、見積書が英文だからです。 対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、日本語の見積書は読めません。 国内の仕入先や日本の代理店が日本語で出す見積は、別の構成で扱います。
使う機能は、文書の分析(同期の AnalyzeDocument と、非同期の StartDocumentAnalysis)です。 FORMS で「Quotation No.: Q-2026-0815」のようなキーと値の組、TABLES で明細の表、QUERIES で「What are the delivery terms?」のような質問への答えが返ります。見積書は請求書の専用の分析の対象ではないので、文書の分析で読みます。
約款のページまで付いた見積書は数ページになるので、非同期の処理で読みます。 同期の処理はPDFで1ページ・10MBまで、非同期はPDFで500MB・3,000ページまでです。質問の検出は英語の文書でしか使えません。 ドイツやイタリアの仕入先が自国語の見積書を送ってくる場合は、質問を外してキーと値と表だけで読みます。
03どうやって実装するのか
処理の起点を決める
受付フォルダ(Amazon S3)に見積書が保存されたことを起点にします。 見積は届いた順に読み、1社分ずつ比較表の列が埋まっていく形にします。3社そろうまで待つと、確認の往復のぶんだけ発注が遅れます。
見積の受け取り用のメールアドレスを、見積依頼の英文に書いて仕入先に案内します。件名に見積依頼の番号を書いてもらい、その番号で受付フォルダを分けます。 購買担当の個人のアドレスに届いた見積は、そのアドレスへ転送してもらいます。
処理が終わった見積書は処理済みの場所へ移し、移すのは比較表への書き出しまで成功したときだけにします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 見積書 | PDF。送り元のアドレス、受け取った日時、件名の見積依頼の番号 | 受付フォルダ |
| 読み取り結果 | キーと値、明細の表のセル、質問への答え、値ごとの信頼度 | AWS Textract |
| 見積依頼の条件 | 依頼の番号、品番、数量、希望納期、希望のインコタームズと場所、支払条件、求める保証期間、回答期限、発注の予定日 | 購買管理の仕組み |
| 仕入先マスタ | 仕入先コード、見積書の言語、数字と日付の書き方、過去に確かめた支払条件の書き方 | 購買管理の仕組み |
| インコタームズの一覧 | 規則のコード、名前、運賃と保険料を売り手が持つか、使える輸送手段 | 自社で用意する一覧 |
| 社内の為替レート | 通貨ごとの社内の換算レートと、その適用月 | 経理が出す一覧 |
質を決めるのは、見積依頼の条件の持ち方です。依頼の番号で、品番ごとの数量と取引条件を1行で引ける形にそろえることが、最初の作業になります。
データの取得方法を決める
読み取りは、Lambda から StartDocumentAnalysis を呼んで始めます。 文書はS3の場所で指定し、完了の通知先にSNSのトピックを渡します。ClientRequestToken に受付のファイルごとの値を入れ、同じ見積書の処理が二重に始まらないようにします。 JobId は7日間しか有効でないので、完了の通知を受けたらすぐに GetDocumentAnalysis で結果を取り、自社のバケットへ書き出します。
質問は QueriesConfig に並べ、Pages で当てるページを1ページ目と2ページ目に絞ります。 約款のページに質問を当てると、約款の一般的な支払条件の文を答えとして拾うことがあるためです。約款は全文を LINE で取り、別に生成AIに読ませます。
質問の文(Text) | Alias | 何に使うか |
|---|---|---|
| What is the RFQ or inquiry reference? | RFQ_REF | 見積依頼に結び付ける第一の手がかり |
| What are the delivery terms? | INCOTERMS | 依頼との照合 |
| What are the payment terms? | PAYMENT_TERMS | 依頼との照合 |
| What is the currency? | CURRENCY | 単価の照合 |
| How long is the quotation valid? | VALIDITY | 有効期限の照合 |
| What is the warranty period? | WARRANTY | 保証の照合 |
答えは QUERY_RESULT の塊として返り、信頼度が付きます。答えが見つからないときは空のまま返ります。 空のときは約款と注記の全文から生成AIに探させ、無ければ not_stated にします。 質問の数は、同期で1ページに15まで、非同期で30までです。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 質問への答え | QUERY と QUERY_RESULT | 主要な条件の値と信頼度 |
| キーと値の組 | KEY_VALUE_SET | 質問を使えない言語の書式、質問で取れなかった項目 |
| 明細の表 | TABLE と CELL | 品番・品名・数量・単位・単価・金額・納期の行 |
| 全文 | LINE と WORD | 明細の下の注記、約款のページ |
見積依頼の条件は Python で購買管理の仕組みから取り出します。 生成AIには、見積書の読み取り結果と、その依頼の品番の一覧だけを渡し、依頼の条件そのものは渡しません。
AIへ渡す前に整形する
- 形式の確認 … 扱えるのはJPEG、PNG、PDF、TIFFです。XFA形式のPDFには対応していません
- パスワードの確認 … パスワードで保護されたPDFは読めません。 仕入先に保護のないものを送り直してもらいます
- 解像度の確認 … 読み取れる文字の高さは15ピクセル以上(150dpiで8ポイント)です。文字の小さい約款のページに注意します
- 見積依頼の特定 … 件名の依頼の番号で引きます。無ければ質問
RFQ_REFの答え、それも無ければ仕入先と品番で引きます - 言語の切り替え … 仕入先マスタの見積書の言語が英語なら
QUERIESを入れ、それ以外はFORMSとTABLESだけにします - 数値と日付の正規化 … 仕入先マスタの書き方で、「1.250,00」や「03/04/2026」を自社の形に直します。元の文字列は残します
- 重複と改訂の検知 … 同じ仕入先・同じ見積番号のものが既にあれば、再送か改訂(「Rev. 1」「Revised」)かの印を付けます
6番目はAIに任せません。 「1.250,00」の読み方で単価が千倍ずれます。
7番目は、価格交渉の後に同じ見積番号で出し直してくる仕入先がいるためです。 改訂前の単価が残ると、下がった単価が反映されないまま別の仕入先に決めてしまいます。
AIに処理させる
させるのは、読み取り結果を比較表の項目にそろえ、取引条件を原文のまま切り出し、別途の費用と除外事項を拾うことだけです。
| 見るもの | 書き出す内容 | 判断できないときの扱い |
|---|---|---|
| 主要な項目 | 見積番号、見積日、依頼の番号、通貨、改訂の番号 | 書かれていなければ「不明」 |
| 明細の行 | 品番、品名、数量、単位、価格の単位(1個あたりか100個あたりか)、単価、金額、最小発注数量 | 列が読めなければ unknown |
| インコタームズ | 規則のコード、場所、版の年の原文 | 書かれていなければ「不明」 |
| 支払条件 | 支払条件の原文 | 書かれていなければ「不明」 |
| 納期 | 納期の原文と、週・日の数と起算点(注文受領後、図面承認後など) | 起算点が無ければ「不明」 |
| 有効期限・保証 | 有効期限と保証期間の原文 | 書かれていなければ「不明」 |
| 別途の費用・除外事項 | 梱包費、書類費、試験費、運賃、価格改定の条項の原文と、書かれていたページ | 無ければ空の一覧 |
条件を「原文のまま」切り出させるのは、言い換えで意味が変わるからです。 「8-10 weeks ARO」と「8-10 weeks after drawing approval」は起算点が違い、要約させると「8〜10週」にまとまって違いが消えます。
| させないこと | 理由 |
|---|---|
| 依頼の条件との比較 | 規則で照らす。AIに依頼の条件を渡さない |
| 運賃・保険料の見積もりや足し込み | 根拠のない数字が比較表に入る |
| 通貨の換算 | 社内のレートで Python が行う |
| インコタームズの読み替え | 「FOB」を「FCA」に直すなどをしない |
| どの見積が有利かの判断 | 発注先は購買担当と課長が決める |
2行目がいちばん起きやすい失敗です。 EXWとCIPの見積を並べると、AIは「運賃を加えるとおよそこのくらい」と書いてきます。根拠のない数字が、比較表では本物の見積と同じ重みで読まれます。
指示内容を固定する
あなたは製造業の購買部で、海外の仕入先から届いた英文の見積書を、
見積比較表の項目にそろえる立場です。
渡すのは、OCRが返した読み取り結果と、見積依頼の品番の一覧です。
そこに書かれたことだけを使ってください。
【書き出すこと】
1. 主要な項目: quote_no, quote_date, rfq_ref, revision, currency
2. 明細の行: part_no, description, qty, unit, price_basis,
unit_price, amount, moq
3. incoterms_text: インコタームズの記載を原文のまま
4. payment_terms_text: 支払条件の記載を原文のまま
5. lead_time_text: 納期の記載を原文のまま。あわせて週または日の数と
起算点(ARO、図面承認後など)を書く。起算点が無ければ「不明」
6. validity_text, warranty_text: 有効期限と保証の記載を原文のまま
7. extra_charges: 梱包費・書類費・試験費・運賃などの別途の費用、
価格改定の条項。原文とページ番号
【厳守事項】
- 書かれていない項目は「不明」としてください。推測で埋めないでください。
- 数量・単価・金額・日付は、読み取り結果の文字列のまま写してください。
計算・換算・書き方の修正をしないでください。
- price_basis は「per piece」「per 100」など、書かれている単位をそのまま
写してください。書かれていなければ「不明」としてください。
- インコタームズ・支払条件・納期・有効期限・保証は、要約・言い換え・
修正をせず原文のまま写してください。誤りに見えても直さないでください。
- 運賃・保険料・関税の金額を見積もったり、足したりしないでください。
- 見積依頼と合っているか、どの見積が有利かを書かないでください。
- 品番は、渡した見積依頼の品番の一覧と一致するものだけ part_no に入れ、
一致しない品番(代替品の提案など)は alternative に入れてください。
- evidence には、根拠にした文字列とページ番号をそのまま写してください。
- 見積書でない書類(カタログ、辞退の連絡など)と判断した場合は、
そろえる作業をせず document_type に種類を書いてください。
【読み取り結果】{textract_result}
【約款のページの全文】{terms_text}
【見積依頼の品番の一覧】{rfq_parts}
「誤りに見えても直さない」を書かないと、インコタームズを直します。 航空便の見積に「FOB Frankfurt Airport」と書かれていると、AIは「航空便ならFCAのはず」と直して返すことがあります。確かめるべき違いが消えます。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format に type: "json_schema" とJSONスキーマを渡す)を使うと、スキーマどおりの形で返り、必須の項目が欠けません。 オブジェクトには additionalProperties: false を付けます。
{
"document_type": "quotation",
"quote_no": "",
"quote_date": "",
"rfq_ref": "",
"revision": "",
"currency": "",
"lines": [
{ "part_no": "", "description": "", "qty": "", "unit": "",
"price_basis": "", "unit_price": "", "amount": "", "moq": "",
"evidence": "" }
],
"alternative": [],
"incoterms_text": "",
"payment_terms_text": "",
"lead_time": { "text": "", "weeks_min": "", "weeks_max": "", "basis": "" },
"validity_text": "",
"warranty_text": "",
"extra_charges": [ { "text": "", "page": "" } ]
}
数値の最小値・最大値の制約はスキーマに書けないので、 weeks_min などは文字列で受け、原文に無い数字なら Python が unclear にします。
この後に、Python が照合を足します。
| 確かめること | 規則 | 結果 |
|---|---|---|
| 品番と数量 | 依頼の品番がすべてあるか、数量が依頼と同じか、最小発注数量で増えていないか | 欠ければ incomplete |
| 通貨 | 依頼で指定した通貨か | 違えば currency_differ。社内のレートで参考値を出す |
| インコタームズ | 規則のコードと場所が依頼と一致するか、11の規則に当たるか | 違えば terms_differ |
| 支払条件 | 依頼の条件、または過去に一致と確かめた書き方と一致するか | 違えば terms_differ |
| 納期 | 起算点が分かり、発注の予定日から数えて希望納期に間に合うか | 間に合わなければ terms_differ、起算点が不明なら unclear |
| 有効期限 | 発注の予定日まで有効か | 切れるなら validity_short |
| 保証 | 依頼で求めた期間以上か | 短ければ terms_differ |
| 別途の費用 | 1件でもあるか | あれば比較表に注記 |
インコタームズは、原文から規則のコードと場所に分けて照らします。 ICCは2020年版で旧来のDAT(Delivered at Terminal)をDPU(Delivered at Place Unloaded)に改めたとしており、一覧に無いコードは terms_differ にします。 あわせて一覧で運賃と保険料を売り手が持つかを引き、負担の範囲が依頼と違う見積に「単価をそのまま比べない」と印を付けます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知で Lambda を起動 | 見積書の受け取り |
| AWS Textract | StartDocumentAnalysis/GetDocumentAnalysis | キーと値、明細の表、質問への答え |
| Claude API | API呼び出し | 比較表の項目への整形、確認メールの下書き |
| 購買管理の仕組み | 見積依頼・仕入先マスタの読み取り | 照合の材料 |
| 見積比較表 | 表への書き出し | 依頼ごとに仕入先を列に並べる |
| メール | 下書きの保存 | 送信は購買担当が行う |
購買管理の仕組みへは書き込みません。 作るのは比較表と確認メールの下書きまでで、見積の採用と発注は人が行います。 比較表は依頼ごとに1枚、仕入先を列にし、各セルに判定の色を付けて原文をコメントに入れます。
人が確認する
購買担当は、見積ごとに判定を見て、見方を分けます。
alignedは比較表の行を原本と並べて確かめる … 単価と数量の桁を目で追うだけですterms_differを最優先で見る … 払う額と納期に直結します。原文のセルを読み、確認メールの下書きを直して送りますcurrency_differとvalidity_shortは受けるかを決める … 通貨や期限を合わせてもらうかを決めますincompleteとneeds_humanは原本を開く … 品番の抜け、代替品の提案、読み取りの信頼度の低い行です- 確かめた支払条件の書き方を仕入先マスタに積む … 翌月から同じ書き方は機械で
sameになります
目標は、120件をならして1件10分です。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | 読めない。仕入先に保護のないものを送り直してもらう |
| 英語以外の見積書で質問が使えない | FORMS と TABLES で読み、主要な条件は生成AIがキーと値と全文から拾う |
| 見積依頼の番号が書かれていない | 仕入先と品番で依頼を引く。複数当たれば needs_human |
| 同じ見積番号で改訂版が届く | 前の版の列を比較表から外し、差だけを確認の一覧に出す |
| 依頼と違う品番(代替品)が提案される | alternative に入れ、依頼の品番の列には並べない |
| 価格の単位が「per 100」 | 単価の列に注記を付ける。1個あたりへの割り算は Python が行い、元の値を残す |
| 納期の起算点が書かれていない | unclear にし、確認メールの下書きに起算点の問いを入れる |
| OCRが応答しない | 受付フォルダに残す。処理済みへ移すのは成功時だけ |
6行目の「per 100」は、桁の誤りとして最も多い型です。 100個あたり85ユーロの見積を1個85ユーロと読むと、その仕入先は比較から外れ、いちばん安い仕入先を見逃します。
記録を残す
- 元の見積書のPDFと、受け取った日時・送り元・見積依頼の番号
- OCRが返したJSONの全文
- AIが返したJSONと、そのとき渡した見積依頼の品番の一覧
- 照合に使った見積依頼の条件の版と、照合の結果
- 比較表の版と、人が判定を覆した記録(どのセルを、どちらに変えたか)
- 仕入先への確認の内容と回答、改訂版との対応
「見積依頼の条件の版」を残すのは、数量や希望納期を変えて依頼を出し直すことがあるためです。 どの条件で比べて決めたかを、後から確かめられるようにします。
04実装レベルの3段階
本記事の想定は半自動化です。 1件30分が10分になります。本格構成で総額の参考値を出すと、運賃の見積の前提が違う依頼で誤った順位が付きます。 半自動化で照合の判定を3か月見て、terms_differ の中身が落ち着いてから進めます。
05工数削減シミュレーション
導入後 120件 × 10分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 欧米のメーカーやその日本・アジアの代理店から、部品・機器・材料を毎月まとめて買っている製造業と専門商社の購買部門。1件の見積依頼に2〜4社が英文の見積書をPDFで返してきて、購買担当が単価と取引条件を表に写して見比べている場合。見積依頼のときに数量・希望納期・希望のインコタームズと場所・支払条件を決めて出しており、見積と照らす基準がある場合。
- 見積書が日本語・中国語で届く場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めません)。海外の仕入先が1〜2社に固定され、年間の単価契約で買っている場合。見積が仕入先のWebの発注画面の画面表示だけで、書類として届かない場合。なお、どの仕入先に発注するかの決定と、価格・条件の交渉は、この構成では代替できません。
07最小構成で試す方法
- 先月の見積依頼から3件を選び、その見積書を9〜12件集める(EXWとCIPが混ざるもの、改訂版、約款付き、代替品の提案があるものを入れる)
- その見積について、購買担当が作った見積比較表を書き出しておく
- 見積書のPDFと見積依頼の品番の一覧を、手元のAIサービスに貼り付ける
- 「この見積書から、品番ごとの数量・単価・価格の単位と、インコタームズ・支払条件・納期・有効期限・保証・別途の費用を書き出してください。条件は原文のまま写してください。書かれていない項目は『不明』としてください。運賃を見積もったり、どれが有利かを判断したりしないでください」と指示する
- 出てきた内容を、当時の比較表と突き合わせる
3件分は必ずやってください。 組む前に、「書式の違う見積書から、同じ項目を同じ形で取れるか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の比較表とほぼ同じ値が出た | OCRと照合の仕組みに進む |
| 条件を言い換えた、運賃を見積もった | 指示の書き方で直る。構成は有効 |
| 明細の列がずれて数量と単価が入れ替わる | 表の読み取りの確認が先。 仕入先の書式ごとに列見出しを確かめる |
当時の比較表に無かった条件(約款の価格改定の条項など)が出てきたら、これまで比べないまま決めていた条件が1つ見つかったということです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| AIがインコタームズを直してしまう | 原文のまま写させ、誤りに見えても直さないと書く |
| 運賃をAIが見積もって比較表に入れる | 運賃・保険料の見積もりを禁じる。 足すならフォワーダーの見積で |
| 納期の起算点が消える | 原文で切り出し、起算点を別の項目にする |
| 約款のページから支払条件を拾う | 質問を当てるページを Pages で絞る |
| 「per 100」の単価を1個あたりと読む | 価格の単位を別の項目で取り、割り算は Python が行う |
| 改訂版が2列になる | 同じ見積番号の改訂を見分け、前の版を外す |
| 代替品が依頼の品番の列に並ぶ | 依頼の品番の一覧と一致するものだけ並べる |
| 英語以外の見積書で質問が空になる | 質問は英語の文書だけ。 言語で設定を切り替える |
| 確認メールを自動で送る | 下書きまでにする。 送信は人 |
上の3行が、この構成の失敗のほとんどです。 どれも取引条件の文字列や数字が、どこかで「それらしく」変わってしまうことから出ています。原文を切り出し、照らすのは規則、という分け方を崩さないことです。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 仕入先の名前と見積の単価、数量、取引条件、見積依頼の品番と数量です。仕入先ごとの単価は、その仕入先との取引の条件で、他の仕入先に知られてはならない情報です。見積依頼の数量からは、自社の生産の計画も読み取れます。
- 外部へ渡す範囲を、整形に必要な項目に限る … 生成AIに渡すのは、その見積書の読み取り結果と依頼の品番の一覧だけです。他の仕入先の単価と依頼の条件は渡しません
- 確認メールに他社の条件を書かない … 下書きに「他社はCIPで出している」と書かせないよう指示し、送る前に人が確かめます。他社の見積の内容を別の仕入先に伝えることは、取引の信義に関わります
- 発注先の決定をAIに任せない … 発注先は、価格だけでなく品質・納期の実績・取引の継続性で決まります。AIが出すのは条件がそろっているかという事実だけです
- 約款の判断をAIに任せない … 仕入先の販売約款を受け入れるかは、法務と購買が決めます
- 保存先を暗号化する … 非同期の分析では、結果を自社のバケットに出し、KMSの鍵で暗号化する設定ができます
- 見られる人を絞る … 比較表は、その依頼を担当する購買担当と承認者だけが見られるようにします
誤りが起きた場合のリスクは、条件の違う見積を安いと読んで決めることと、桁の誤りで安い仕入先を見逃すことの2つです。 前者はインコタームズや納期の起算点の言い換えで、後者は価格の単位と数字の書き方の読み違いで起きます。どちらも、原文を残して規則で照らす設計で防ぎます。
10まず何から始めるか
1週目:見積依頼の条件を引ける形にする
購買管理の仕組みから、見積依頼の番号・品番・数量・希望納期・インコタームズと場所・支払条件・保証期間・発注の予定日を取り出せるかを確かめます。取り出せない項目があれば、それが最初の課題です。 あわせて、インコタームズの一覧を作ります。
2週目:3件分で試す
手元のAIサービスで、見積書を比較表の項目に書き出させます。条件を言い換えていないか、運賃を見積もっていないかを最優先で見ます。
3週目:照合の規則を決める
どの違いを terms_differ にするか、納期の起算点や保証の短さをどこまで許すかを購買部で合わせます。過去に一致と確かめた支払条件の書き方を、仕入先ごとに積み始めます。
4週目:受付から比較表までをつなぐ
S3 の受付フォルダから StartDocumentAnalysis を呼び、比較表の項目への整形と依頼との照合を書き出すところまで作ります。この時点では確認メールの下書きは作らず、比較表の判定だけを見ます。
2か月目: 改訂版と代替品の見分けを足し、aligned 以外の件数を毎週数えます。3か月目以降: 確認メールの下書きを足し、1件30分が何分になったかを実測します。継続の仕入先の見積の大半が aligned で確かめるだけになった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
StartDocumentAnalysis がJPEG・PNG・TIFF・PDFを非同期で分析し、完了をSNSに通知し、GetDocumentAnalysis で結果を取ること。ClientRequestToken で二重起動を防げること、JobId が7日間有効なこと、JobTag が完了の通知に含まれること、OutputConfig と KMSKeyId で自社のバケットへの出力と暗号化ができること | AWS: StartDocumentAnalysis | 2026-10-08 |
AnalyzeDocument が同期の処理で、キーと値(KEY_VALUE_SET)、表とセル、行と単語、質問(QUERY・QUERY_RESULT、答えに信頼度)を返すこと。FeatureTypes に TABLES・FORMS・QUERIES などを指定でき、QueriesConfig が Text・Alias・Pages を持つこと | AWS: AnalyzeDocument | 2026-10-08 |
| 質問の答えが信頼度とともに返り、答えが見つからないときは空のまま返ること | AWS: Queries | 2026-10-08 |
| 同期の処理がPDFで1ページ・10MBまで、非同期がPDFで500MB・3,000ページまで、XFA形式とパスワード保護のPDFは不可、対応言語が6言語、質問の検出は英語の文書だけ、質問の数が同期で1ページ15・非同期で30まで、文字の高さが15ピクセル以上(150dpiで8ポイント)であること | AWS: Set Quotas in Amazon Textract | 2026-10-08 |
| インコタームズが11の3文字の取引条件で、費用・危険・義務の分担を示すこと、2020年版で旧来のDAT(Delivered at Terminal)がDPU(Delivered at Place Unloaded)に改められたこと | ICC: Incoterms® 2020 | 2026-10-08 |
構造化出力を output_config.format(type: "json_schema")で指定すること、オブジェクトに additionalProperties: false を付けること、enum が使えること、数値の最小値・最大値の制約が使えないこと | Claude Docs: Structured outputs | 2026-10-08 |
取引条件の解釈と仕入先の約款の扱いは、自社の法務と仕入先との基本契約で決めてください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0950)についてのご相談はこちらから。
