外部に委託した試験・分析の報告書を読み取って、社内の試験データに取り込む
外部の試験機関から届く試験報告書のPDFを入力に、試料、試験方法、試験条件、測定値と単位、判定、試験日を読み取り、社内の試験データベースへ取り込む下書きを作ります。単位の換算と規格値との比較は機械が行い、人は確認だけを行います。
- 利用ツール
- AWS Textract/Azure AI/ChatGPT/Claude/Gemini/Google Apps Script/Google Document AI/Make/n8n/Power Automate/Python
- 対象業界
- その他/医療/建設/製造/飲食
- 対象部門
- 品質管理/研究開発
- 対象業務
- データ入力・転記/台帳・マスタ管理
- 主な課題
- 入力作業が多い/情報が見つからない/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/工数削減/検索時間短縮
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 必須
01導入前 / 導入後の業務フロー
- 委託先から試験報告書がメールで届く(郵送の場合はスキャンする)
- 担当者が報告書を開き、どの依頼に対する結果かを確かめる
- 試料名を、社内の試料コードと突き合わせる
- 試験方法の呼び名を、社内の試験方法コードと突き合わせる
- 試験条件(温度、湿度、荷重、試験速度、前処理)を読み取って書き写す
- 測定値と単位を読み取り、社内の標準単位に電卓で換算する
- 規格値や社内の管理値の範囲に入っているかを見る
- 判定、試験日、試験者、使用機器を転記する
- 試験データベースに入力して保存し、原本PDFを共有フォルダへ置く
- 自動委託先からのメールを受信フォルダに振り分け、添付PDFを保管先へ置く
- 自動原本PDFを読み取り専用で保存し、ページ画像とテキストの構造を取り出す
- 自動表、段落、選択マーク、手書きの箇所、単語ごとの読み取り信頼度を受け取る
- 【AI】 報告書のどこが試料・試験方法・試験条件・測定値・判定かを、社内の項目に割り当てる
- 自動値と単位のセットから、換算表を使って社内の標準単位へ換算する
- 自動規格値の範囲、同じ試料の過去の測定値と比べ、桁がずれていないかを見る
- 自動委託先名と試験方法名を別名表で名寄せし、社内のコードを当てる
- 自動試験データベースへ「下書き」の状態で登録する
- 人担当者が、信頼度の低い値と警告の付いた値を中心に確認し、「確定」にする
- 自動確定した結果が検索の対象に入り、次の試験を依頼する前に引けるようになる
各工程の詳しい説明を読む
- 委託先から試験報告書がメールで届く(郵送の場合はスキャンする)
- 担当者が報告書を開き、どの依頼に対する結果かを確かめる
- 試料名を、社内の試料コードと突き合わせる
- 試験方法の呼び名を、社内の試験方法コードと突き合わせる
- 試験条件(温度、湿度、荷重、試験速度、前処理)を読み取って書き写す
- 測定値と単位を読み取り、社内の標準単位に電卓で換算する
- 規格値や社内の管理値の範囲に入っているかを見る
- 判定、試験日、試験者、使用機器を転記する
- 試験データベースに入力して保存し、原本PDFを共有フォルダへ置く
問題は6つあります。
(a)単位の取り違えが起きる。 MPaとN/mm2は同じ値ですが、kgf/mm2は違います。ppmと質量パーセントは1万倍違います。電卓で1件ずつ換算しているため、桁を1つ間違えても誰も気づきません。 気づくのは、その値を使って設計した部品が壊れたときです。
(b)試験条件が落ちる。 測定値だけを入力して、「23℃・50%RHで48時間調湿した後」という条件を書き写さない担当者がいます。条件の無い測定値は、後から見ても比較に使えません。
(c)表記が機関ごとに違う。 同じ試験が「引張強さ」「引張強度」「Tensile Strength」「JIS K 7161準拠 引張試験」と書かれます。社内のコードに直す作業が、担当者の記憶に頼っています。 担当者が変わると、同じ試験が別のコードで登録されます。
(d)入力されないまま残る報告書がある。 担当者のメールに届き、担当者のフォルダに保存され、そこで止まります。データベースを検索しても出てこないため、社内には「その試験をした記録」がありません。
(e)同じ試験を二度発注する。 (d)の結果です。数か月後に、同じ試料の同じ試験が発注されます。 費用と納期を二度使います。
(f)確認が形だけになる。 22分の大半が転記です。転記に集中していると、規格値を外れた測定値が目の前を通り過ぎます。 報告書に「不合格」と書かれていたのに気づかれなかった、ということが起こり得ます。
- 【自動】 委託先からのメールを受信フォルダに振り分け、添付PDFを保管先へ置く
- 【自動】 原本PDFを読み取り専用で保存し、ページ画像とテキストの構造を取り出す
- 【自動】 表、段落、選択マーク、手書きの箇所、単語ごとの読み取り信頼度を受け取る
- 【AI】 報告書のどこが試料・試験方法・試験条件・測定値・判定かを、社内の項目に割り当てる
- 【自動】 値と単位のセットから、換算表を使って社内の標準単位へ換算する
- 【自動】 規格値の範囲、同じ試料の過去の測定値と比べ、桁がずれていないかを見る
- 【自動】 委託先名と試験方法名を別名表で名寄せし、社内のコードを当てる
- 【自動】 試験データベースへ「下書き」の状態で登録する
- 【人】 担当者が、信頼度の低い値と警告の付いた値を中心に確認し、「確定」にする
- 【自動】 確定した結果が検索の対象に入り、次の試験を依頼する前に引けるようになる
自動化されるのは「読み取る」「項目に割り当てる」「換算する」「比べる」「名寄せする」「登録する」の6つです。残るのは、読み取った値が原本と合っているかを人が確かめることです。
判定(合格・不合格)はAIに決めさせません。 報告書に書かれた文字列をそのまま転記します。規格値との比較も、換算後の値と規格値表を機械が比べるだけです。「この値は合格と言ってよいか」を生成AIに尋ねる作りにはしません。
単位換算もAIにさせません。 生成AIに「MPaに直して」と頼むと、多くの場合は正しい答えが返ります。多くの場合、では困ります。 換算表に係数を書き、機械で掛ける作りにすれば、間違いは換算表の1行を直すだけで全件が直ります。
02今回想定するシステム構成
委託先(外部の試験機関 6社)
└─ 試験報告書PDF(メール添付 / 郵送 → スキャン)
│
▼【トリガー】受信フォルダにPDFが置かれたとき
Power Automate
│
├──▶ 原本PDFを保管先へ保存(以後は読み取り専用)
│
├──▶ Azure AI Document Intelligence(レイアウトモデル)
│ 表 / 段落 / 選択マーク / 手書きの判定 / 単語ごとの信頼度
│ *様式が固定の委託先はカスタム抽出モデルを併用
│
├──▶ Claude API ── 社内の項目への割り当て(JSONで返す)
│ 値と単位は報告書に書かれたまま。換算も判定もさせない
│
├──▶ Python ── 単位換算 / 規格値との比較 / 過去値との桁の比較 / 名寄せ
│ 参照:単位換算表 / 試験方法マスタ(別名表)/ 試料マスタ /
│ 規格値・管理値の一覧 / 同じ試料の過去の測定値
│
└──▶ 社内の試験データベースへ「下書き」で登録
│
▼
担当者が確認して「確定」にする ──【人】
│
▼
検索の対象に入る → 依頼を起票する前に過去の結果を引く ──【人】| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | Azure AI Document Intelligence | Google Document AI、AWS Textract |
| 生成AI | Claude API | OpenAI API、Gemini API |
| 集計 | Python | Google Apps Script |
| 連携 | Power Automate | Make、n8n |
原本PDFの保管先と試験データベースは、社内の既存のものを使います。新しく用意するのは、読み取りと割り当てと換算の部分だけです。
読み取りにAzure AI Document Intelligenceを置いているのは、試験報告書が表の集まりだからです。 レイアウトモデルは、テキスト、テーブル、選択マーク、ドキュメント構造を抽出します。テーブルは行と列の数、行スパン、列スパンとともに返り、各セルには行と列のインデックスと、そのセルが列見出しとして認識されたかどうかの情報が付きます。結合セルのある表や、回転した表の抽出にも対応していると公式に書かれています。
選択マーク(チェックボックス)は、境界の多角形、信頼度、選択状態(selected / unselected)とともに返ります。判定欄がチェックボックスの報告書があるため、この機能が要ります。 応答には、各テキスト行が手書きスタイルかどうかの分類も、信頼度スコアとともに含まれます。試験者が余白に書き足した注記を、印字された値と同じ扱いにしないために使います。
対応するファイル形式はPDF、各種画像、Office文書です。PDFとTIFFは最大2,000ページ、ファイルサイズは有料(S0)レベルで500MB、無料(F0)レベルで4MBです。パスワードでロックされたPDFは、提出前にロックを解除する必要があります。 outputContentFormat=markdown を指定すると、表がHTMLテーブルとして表現されたMarkdownで受け取れます。生成AIに渡すときは、この形式のほうが表の構造が保たれます。
Python を置いているのは、単位換算と桁の検知を機械で行うためです。 表を引いて掛け算をするだけの処理で、AIを使いません。どの言語で書くかより、換算表が正しいかどうかが結果を決めます。
03どうやって実装するのか
処理の起点を決める
受信フォルダにPDFが置かれたときを起点にします。委託先からのメールを受信ルールで専用のフォルダへ振り分け、添付ファイルを保管先へ保存した時点で処理が始まります。Power Automate の「ファイルが作成されたとき」に相当する起動です。
共有の受信用アドレスを先に作ってください。 担当者個人のアドレスに届き続ける限り、この仕組みは動きません。委託先へ送付先の変更を依頼するのが、実装より先の作業です。 郵送で届く分は、受け取った人がスキャンして同じフォルダに置きます。
もう1つの起点として、試験依頼を起票したときを置きます。依頼番号と想定の納期を先に作り、納期を過ぎても報告書が届かない依頼を毎週まとめて知らせます。 届いていない依頼と、取り込まれていない報告書は、どちらも「記録が無い」状態です。二度発注は、この2つから生まれます。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 試験報告書 | 報告書番号、発行日、試料名、試験方法、試験条件、測定値と単位、判定、試験日、試験者、使用機器 | 委託先からのPDF |
| 試験依頼の台帳 | 依頼番号、試料、目的、委託先、依頼日、納期、費用 | 社内の試験データベース |
| 試料マスタ | 試料コード、材質、ロット、社内の呼び名と委託先へ伝えた呼び名 | 社内の試験データベース |
| 試験方法マスタ | 試験方法コード、規格番号、委託先ごとの呼び名の別名表 | 研究開発部が作る表 |
| 単位換算表 | 単位の表記、標準単位、係数、オフセット | 研究開発部が作る表 |
| 規格値・管理値の一覧 | 試験方法と試料区分ごとの下限・上限 | 品質管理部の基準 |
| 過去の測定値 | 同じ試料・同じ試験方法の履歴 | 社内の試験データベース |
| 委託先マスタ | 委託先名、別名、試験所名 | 購買・研究開発部 |
単位換算表がこの構成の要です。 「MPa」「N/mm2」「kgf/mm2」「ppm」「mg/kg」「質量%」「wt%」「℃」「℉」のように、同じ量の違う書き方を全部並べ、標準単位と係数を書きます。 温度はオフセットが要るため列を分けます。換算表に無い単位は、換算せずに人へ回します。 推測で換算する作りにすると、一度の間違いが全件に広がります。
試験方法の別名表は、委託先ごとに列を持たせます。 同じ引張試験が、公的機関では規格番号で、民間の受託会社では「引張強度測定」と書かれます。最初から全部は埋まりません。 無い呼び名が出たら、人が確認して追記します。
データの取得方法を決める
原本の保存: 受信したPDFを、まず読み取り専用で保管先に置きます。この原本は以後、誰も書き換えません。 ファイル名ではなく、報告書番号と委託先とハッシュ値で管理します。
読み取り: 保存したPDFをレイアウトモデルに渡します。ページ数の多い報告書では、pages クエリパラメーターで特定のページ番号やページ範囲を指定できます。約款や社印のページを外して、測定値のあるページだけを渡せます。
返ってくるJSONから、tables(行数・列数、各セルの rowIndex columnIndex columnSpan、kind が columnHeader かどうか)、paragraphs(テキストと pageHeader などの役割)、selectionMarks(選択状態と信頼度)、styles(isHandwritten と信頼度)、words(単語ごとの confidence)を取り出します。単語ごとの信頼度を必ず持ち帰ってください。 後で「この測定値は人が見るべきか」を決める材料になります。
委託先ごとの様式を学習させる場合: 件数の多い委託先には、カスタム抽出モデルを作れます。同じ様式の例が5つあれば始められると公式に書かれています。 様式が固定の委託先向けのカスタムテンプレート(トレーニング1〜5分)と、同じ情報でページ構成が変わる委託先向けのカスタムニューラル(構造化・半構造化・非構造化に対応、30分から12時間)の2種類があり、まずニューラルを試すよう書かれています。 ニューラルでは、バリエーションごとに少なくとも5つのラベル付きサンプルを加えることが勧められています。 委託先が複数なら、カスタム分類モデルで先に様式を振り分け、それぞれの抽出モデルへ回せます。
ただし、最初からカスタムモデルを作らないでください。 レイアウトモデルと生成AIの組み合わせで足りるかを先に見ます。月に数件の委託先のためにモデルを作っても、割に合いません。
AIへ渡す前に整形する
- PDFの種別の判定とロックの解除 … テキストが埋め込まれたPDFか、スキャン画像かを見ます。公式にも、可能な場合はテキストベースのPDFを使うとあります。ロックされたPDFは提出前に解除が必要で、ここで止まる件を人へ回す経路を作ります
- ページの絞り込み … 表紙、目次、約款のページを外します
- 表の復元 …
rowIndexとcolumnIndexから表を組み直し、columnSpanのあるセルを展開します。複数ページにまたがる表は、分析後にページをまとめて1つの表に後処理します - 数値と単位の分解 … 「12.4 MPa」「12.4N/mm²」を、値と単位に正規表現で分けます。全角数字、上付きの2乗、
℃の1文字表記を先にそろえます - 信頼度と手書きの印付け … 各フィールドに、その値を構成する単語の信頼度の最小値を持たせ、
isHandwrittenが真の範囲に重なるものに印を付けます - 委託先の特定 …
pageHeaderpageFooterの役割が付いた段落と、委託先マスタの別名を突き合わせます
4番目で、値と単位を必ずセットのまま持ちます。 ここで換算しません。換算は、項目の割り当てが済んだ後に、換算表を引いて行います。
AIに処理させる
計算処理にさせること:
| 処理 | 内容 |
|---|---|
| 表の復元と値の分解 | 行と列のインデックスから表を組み直し、結合セルを展開し、文字列を数値と単位に分ける |
| 単位換算 | 換算表の係数とオフセットを掛けて、標準単位へ直す |
| 規格値との比較 | 換算後の値が、規格値・管理値の範囲に入っているか |
| 桁の比較 | 同じ試料・同じ試験方法の過去の値の中央値と比べ、10倍・0.1倍に近ければ警告を出す |
| 名寄せの一次照合 | 委託先名・試験方法名を、別名表と完全一致で引く |
| 信頼度のしきい値判定 | 単語の信頼度が基準を下回るフィールドに印を付ける |
生成AI(Claude API)にさせること:
| 処理 | 内容 |
|---|---|
| 項目の割り当て | 報告書のどの見出し語・どのセルが、社内のどの項目にあたるか |
| 試験条件の抽出 | 表の外の文章に書かれた温度・湿度・荷重・試験速度・前処理を拾う |
| 測定値の区別 | 個々の測定値、平均値、最大・最小、n数を読み分ける |
| 判定の転記 | 判定欄の文字列をそのまま写す(「適合」「合格」「規格内」など) |
| 別名の候補 | 別名表に無い試験方法名について、規格番号を根拠に社内コードの候補を挙げる |
| 当てはまらない項目 | 社内のどの項目にも入らない試験項目を、そのまま書き出す |
2番目が、表だけを見る仕組みとの差です。 「試験片は23℃・50%RHで48時間調湿した後、試験速度50mm/minで実施した」という1文は、表のどこにも入っていません。この文が落ちると、測定値だけが残って比較に使えなくなります。
3番目も見落とされやすい部分です。 表に5つの数字が並び、下に1つの数字がある形は珍しくありません。上の5つが個々の測定値で、下が平均値です。 区別せずに取り込むと、平均が6件目の測定値として登録されます。
6番目が、新しい試験方法の受け皿です。 社内の試験データベースに項目の無い試験を委託することがあります。無理に近い項目へ入れさせず、「当てはまらない」として出させます。
指示内容を固定する
あなたは、外部の試験機関から届いた試験報告書を読み取り、
社内の試験データベースの項目に割り当てる担当者です。
【厳守事項】
- 測定値と単位は、報告書に書かれているとおりの文字列で返してください。
単位の換算をしないでください。「12.4 N/mm2」を「12.4 MPa」に直さないでください。
値と単位は必ずセットで返し、単位が書かれていない場合は unit_as_written を
空文字にし、data_gaps に「単位の記載なし」と入れてください。
- 判定(judgement_as_written)は、報告書の判定欄に書かれた文字列を
そのまま写してください。あなたが合否を判断しないでください。
判定欄が無い報告書では空文字にしてください。
- 報告書に書かれていない値を推測で埋めないでください。
書かれていない項目は null にし、data_gaps に項目名を入れてください。
- 各測定値が、個々の測定値か、平均値か、最大値か、最小値かを stat に入れてください。
判断できない場合は "unknown" にしてください。
- 試験条件は、表の中だけでなく本文の文章からも拾ってください。
温度、湿度、荷重、試験速度、前処理、試験片の形状と寸法、養生の時間が対象です。
- 各項目について、何ページのどの見出し語から取ったかを
source_page と source_label に入れてください。
- 社内の項目に当てはまらない試験項目は、無理に近い項目へ入れず、
unmapped_items にそのままの見出し語と値を入れてください。
- 試験方法は、下の別名表に一致すれば method_code を入れてください。
一致しなければ method_code を null にし、規格番号は standard_no に入れてください。
別名表に無い呼び名を、似ているという理由で当てないでください。
【試験方法の別名表】
{method_aliases}
【試料マスタの候補(依頼番号から引いた行)】
{sample_candidates}
【報告書(レイアウト解析の結果。表はHTMLテーブル)】
{report_markdown}
【手書きと判定された範囲】
{handwritten_spans}
「換算をしないでください」の1行は、必ず入れてください。 この指示が無いと、生成AIは親切に単位をそろえて返します。そろえた結果が正しいかどうかを、後から確かめる手段がありません。 書かれたままの文字列で返させれば、原本と1文字ずつ比べられます。
「判定欄が無ければ空文字」も必須です。 これが無いと、測定値を見て「合格」と書いてきます。報告書に書かれていない判定がデータベースに入るのが、この業務でいちばん危ない事故です。 同じく「似ているという理由で当てないでください」は名寄せの事故を防ぎます。「引張試験」と「引裂試験」は1文字違いで、別の試験です。 手書きの範囲を渡すのは、読み違いが起きやすく後から書き足された可能性もある値を、別に扱うためです。
出力形式を固定する
{
"report_no": "",
"lab_name_as_written": "",
"report_date": "",
"request_no": "",
"sample": {"name_as_written": "", "sample_code": null, "lot_as_written": ""},
"tests": [
{
"method_as_written": "",
"standard_no": "",
"method_code": null,
"conditions": [
{"name": "", "value_as_written": "", "unit_as_written": "", "source_page": 0}
],
"results": [
{
"item_as_written": "", "value_as_written": "", "unit_as_written": "",
"stat": "individual | mean | max | min | unknown", "n": null,
"source_page": 0, "source_label": "",
"source_kind": "table | text | selection_mark"
}
],
"judgement_as_written": "",
"tested_on": "",
"tester_as_written": "",
"instrument_as_written": ""
}
],
"unmapped_items": [],
"data_gaps": []
}
Claude API では、output_config.format に type: "json_schema" とスキーマを渡すと、応答をスキーマに沿った形に制約できます。stat と source_kind は enum で固定し、オブジェクトには additionalProperties を false に設定します。公式の説明では、文字列の長さの制約(minLength maxLength)、数値の範囲の制約(minimum maximum)、正規表現の pattern はスキーマでは使えません。 値の形の検査は、受け取った後にPythonで行います。
value_as_written を数値型ではなく文字列型にしているのは意図的です。「<0.01」「N.D.」「検出せず」のような、数値でない測定値が実際に返ってくるためで、 数値型にすると欠損になるか、0に丸められます。受け取ったJSONに、機械が次の列を足してから登録します。value_std / unit_std(換算表を引いた標準単位の値と単位)、conversion_factor(使った係数とオフセット)、spec_min / spec_max / in_spec(規格値の範囲と範囲内かどうか)、digit_flag(過去の中央値と比べて10倍・0.1倍に近いか)、ocr_confidence / handwritten、そして review_required(規格値の範囲外・桁の警告・低い信頼度・手書きのいずれかに当たるか) です。
conversion_factor を必ず残してください。 どの行がどの係数で換算されたかが分かれば、換算表を直したときに遡って直せます。換算後の値だけを残すと、間違いに気づいた時点で全件を報告書から読み直すことになります。
システムへ連携する
社内の試験データベースへ、次の3つの単位で登録します。
| テーブル | 1行の単位 | 主な列 |
|---|---|---|
| 試験結果 | 測定項目1つ | 依頼番号、試料コード、試験方法コード、測定項目、書かれたままの値と単位、標準単位の値、統計区分、信頼度、警告、原本のページ |
| 試験条件 | 条件1つ | 依頼番号、試験方法コード、条件名、書かれたままの値と単位、標準単位の値 |
| 報告書 | 報告書1通 | 報告書番号、委託先、発行日、試験日、試験者、使用機器、判定、原本へのリンク、取り込み状態 |
「書かれたままの値と単位」の列を必ず持ってください。 不具合の調査で報告書と突き合わせるとき、標準単位の値しか無いと原本と一致しません。取り込みは「下書き」の状態で入ります。 確定していない行も検索の結果に出ますが、「未確認」と表示されます。確定していないことが見えるほうが、データベースに存在しないよりはるかに安全です。 依頼番号で依頼台帳と結び付け、依頼番号を書かない委託先の分は、試料名と試験方法と発行日から候補を挙げて人が選びます。紐付かない報告書を放置すると、それが埋もれる報告書になります。
検索は、二度発注を止めるために作ります。 試験を依頼する画面で試料コードと試験方法コードを入れると、過去の同じ組み合わせの結果と、まだ結果の届いていない依頼の両方が、試験条件つきで出るようにします。条件が違えば再測定が必要ですが、それを判断できるのは条件が記録されているからです。 原本PDFへのリンクは、報告書単位ではなく試験結果の1行ごとに、ページ番号まで持たせます。
人が確認する
全件を人が確認します。ただし、見る範囲を絞ります。
フィールド信頼度は、予測が正しいことの推定確率を0から1までの値で示します。公式の説明では、0.95という値は20回中19回は予測が正しい可能性が高いことを示すとされ、「正確性が非常に重要なシナリオでは、信頼度を使って、予測を自動的に受け入れるか、人間によるレビューのためにフラグを付けるかを決めることができる」と書かれています。 試験の測定値は、まさにそのシナリオです。
確認の優先順位を4つに分けます。
- 必ず人が見る … 信頼度が基準を下回る値、手書きと判定された値、桁の警告が出た値、規格値の範囲を外れた値、判定が不合格の件
- 並べて見る … 同じ試験方法の測定項目をまとめ、標準単位の値を一覧で見る。桁の違う値は並べると目で分かります
- 別名表に追記する …
method_codeが null の試験方法、委託先マスタに無い委託先 - 人が決める …
unmapped_itemsの試験項目を、新しい項目として足すか参考記録にするか
信頼度の読み方に注意が要ります。 公式には、読み取り結果の信頼度と、キーと値の抽出結果の信頼度は別のもので、読み取り結果の信頼度は抽出結果の信頼度に影響しないため、両方を確認する必要があると書かれています。カスタムモデルではテーブル・行・セルの信頼度が返り、まずテーブル全体を見て、次に行、最後にセルへ降りる順序が勧められています。 結合セルは信頼度が低く出ることが期待されると明記されているため、表が崩れた箇所はこの値で拾えます。
確認を速くする設計が効きます。
- 原本PDFの該当ページと、取り込んだ値を左右に並べて表示する
- 警告の付いた値だけを上に集める
- 同じ試料の過去の測定値を、その場に一緒に出す
- 人が直した箇所を色で残し、誰がいつ直したかを記録する
- 「書かれたままの値」と「換算後の値」を隣り合わせで出す
最後の1つが、単位の事故を止める最後の砦です。 「12.4 N/mm2」と「12.4 MPa」、あるいは「1.27 kgf/mm2」と「12.4 MPa」が隣に並んでいれば、換算表が正しいことがその場で分かります。換算後の値しか見えない画面では、確かめようがありません。
例外に対処する
| 起きること | 対応 |
|---|---|
| PDFがパスワードでロックされている | 委託先へ確認する列を作り、人が解除して置き直す |
| 報告書が紙でしか届かない | 受け取った人がスキャンして同じフォルダへ置く。確認を厚くする |
| 罫線の無い表が崩れる | 取れなかった範囲を data_gaps に入れ、人が原本を見て入れる |
| 1つのPDFに複数の試料・試験がある | tests を配列で受け取り、試料が複数なら分けて登録する |
| 単位が換算表に無い | 換算せず、書かれたままの値だけ登録して人へ回す。推測で換算しない |
| 単位が書かれていない | 換算せず data_gaps に入れる。標準単位を自動で当てはめない |
| 判定欄が無い | 判定は空のまま登録する。規格値との比較結果は別の列に入れる |
| 試験方法が別名表に無い | method_code を null で登録し、人が追記してから確定する |
| 社内の項目に無い試験項目 | unmapped_items に入れ、新設するか参考記録にするかを人が決める |
| 訂正版・再発行が届く | 元を残して新しい版として登録し、元の版に「訂正あり」の印を付ける |
| 測定値が「N.D.」「<0.01」 | 文字列のまま保存し、数値の列は空にする。0で埋めない |
| ページ数やサイズが上限を超える | ページ範囲を指定して分けて読み取る。分けられなければ人へ |
記録を残す
この記録は、単位の事故と二度発注を後から追うための材料になります。
- 原本PDFとそのハッシュ値、受信日、委託先、報告書番号
- 読み取りの生の結果(表、段落、選択マーク、手書き判定、単語ごとの信頼度)
- 生成AIが返したJSONそのもの(換算前、書かれたままの値と単位)
- 換算に使った係数とオフセット、換算前後の値
- 警告の内容(信頼度、桁、規格値の範囲、手書き)と、人がどう判断したか
- 人が直した項目と、直す前の値(誰がいつ直したか)
- 別名表・換算表に追記した内容と、その日付
- 検索で過去の結果が見つかり、発注を取りやめた件数
「人が直した項目と、直す前の値」を必ず残してください。 どの委託先のどの項目でよく直されているかが分かります。特定の委託先の特定の項目で修正が続くなら、その委託先にだけカスタムモデルを作るか、報告書の様式を相談する根拠になります。
そして、発注を取りやめた件数が出てくるまでは、二度発注が止まったかどうかを誰も言えません。
04実装レベルの3段階
半自動化の時点で、22分が9分程度になります。 読む・名寄せする・換算する・書き写すが消えるためです。本格構成で7分になりますが、最後の2分を削るのは、様式の決まった委託先で確認そのものが軽くなるからです。 まず半自動化まで作ってください。 カスタムモデルは、月の件数が多く、様式が固定で、表が崩れる委託先に限って作ります。6社すべてにモデルを作る必要はありません。 依頼起票時の過去検索は、本格構成の中でいちばん効果が大きい部分です。 工数の数字には表れませんが、二度発注が止まるのはここです。 作るのは、半自動化で結果がたまってからにします。中身の薄いデータベースを検索しても、何も出てきません。
05工数削減シミュレーション
導入後 40件 × 7分 ÷ 60 = 4.7 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 強度試験、成分分析、耐久試験、環境試験などを外部の試験機関に委託していて、報告書が月20件以上届く企業。委託先が3社以上あり、報告書の様式が機関ごとに違う場合。社内に試験データベースや試験結果の台帳があり、そこへ手で入力している場合。過去に同じ試験を二度発注したことがある、または過去の試験結果を探せずに再測定した経験がある場合。
- 委託先が1社で、その機関から測定値をCSVや所定の電子様式で受け取れる場合(読み取りの工程そのものが要らない)。報告書が月数件で、担当者が全部覚えていられる規模。社内に試験結果をためる場所が無く、報告書をフォルダに置くだけの運用になっている場合(先に項目を決めたデータベースを作るほうが効果が大きい)。規制対応で報告書の原本性そのものに要件がかかり、電子化の手順が別に定められている業務。
07最小構成で試す方法
- 直近3か月の報告書から、委託先6社分をそれぞれ3〜4件ずつ、計20件選ぶ
- Document Intelligence Studio で、20件をレイアウトモデルにかける(結果タブでJSON出力を見る)
- 20件に出てくる単位を全部書き出し、社内の標準単位と係数を並べた換算表を作る
- 20件に出てくる試験方法の呼び名を全部書き出し、社内コードとの別名表を作る
- Markdown形式の出力を生成AIのチャット画面に貼り、上のプロンプトで項目に割り当てさせる
- 出た結果を、担当者が原本と1件ずつ照らし合わせる
見るのは次の3点です。
| 見る点 | 判断 |
|---|---|
| 測定値と単位が、書かれたとおりに取れているか | 1件でも換算されて返ってきたら、プロンプトの縛りを強める |
| 試験条件が、表の外の文章からも拾えているか | 拾えないなら、条件の書かれ方を委託先ごとに確かめ、プロンプトに例を足す |
| 表が崩れる委託先がどこか | 崩れる先は、カスタム抽出モデルを作る候補にする |
あわせて、単位の一覧を目で確かめてください。 20件では出そろいません。過去1年の報告書を開き、単位の欄だけを拾い読みしてください。 換算表の抜けは、後から必ず事故になります。
二度発注の答え合わせもここでできます。 過去2年の依頼台帳から、同じ試料コードと同じ試験方法の依頼を機械的に抜き出します。条件まで同じものが見つかれば、それが二度発注です。
ワークフローを組まずに、ここまでは試せます。所要は2〜3日です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 生成AIが単位を換算して返してくる | プロンプトで「換算しない」と明示し、値と単位を別のキーで返させる。換算は換算表で行う |
| 生成AIが判定欄の無い報告書に合否を書く | 「判定欄が無ければ空文字」と明示し、規格値との比較結果は別の列に持つ |
| 換算表に無い単位が出て止まる | 止めるのが正しい。推測で換算せず、人へ回す列を作る |
| 測定値が「N.D.」「<0.01」で数値にならない | 値を文字列で受け取る。数値の列は空にし、0で埋めない |
| 平均値が測定値として登録される | 統計区分(individual / mean / max / min)を必ず返させる |
| 試験条件が落ちる | 表だけでなく本文からも拾わせ、条件が空の試験は確定できない作りにする |
| 試験方法の名寄せが似た名前に当たる | 別名表に一致しなければ null。「似ている」で当てさせない |
| パスワード付きPDFで処理が止まる | 提出前のロック解除が必要。委託先へ確認する経路を最初から作る |
| 委託先が担当者個人のアドレスに送り続ける | 共有アドレスを作り、委託先へ送付先の変更を依頼する。これが実装より先 |
| 訂正版が元の報告書を上書きする | 版として追加し、元の版に印を付ける。上書きしない |
| 換算後の値しか残っていない | 書かれたままの値と単位、使った係数を必ず同じ行に残す |
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 外部試験機関が発行した試験報告書、試料の名称と組成、社内の規格値・管理値、試験者の氏名。未発表の製品の試料名や配合が含まれます。
- 委託先との守秘義務の範囲 … 試験報告書には、自社と委託先の双方に守秘の義務がかかっていることがあります。外部のAIサービスへ送ってよいかは、委託契約と秘密保持契約の条文で決まります。 技術の話より先に、法務と購買に確認してください。再委託や第三者提供の制限がある場合、読み取りを社内で完結させる構成が必要になります
- 未発表の試料の情報 … 開発中の材料の配合や試料名が報告書に書かれます。学習に使わないことが契約で保証されるサービスを選びます
- 試験者の氏名 … 外部機関の試験者名は個人情報です。取り込むなら、社内の誰が見られるかの範囲を決めます
- 規格値・管理値を外へ出さないこと … 規格値との比較は機械が行う設計のため、規格値の一覧を生成AIへ送る必要はありません。 前処理の段階で外してください
- 原本を書き換えないこと … 原本PDFは読み取り専用で保管します。取り込んだデータは写しです。 値が食い違ったときに正しいのは、常に原本です
- 判定を機械に決めさせないこと … 合否は報告書に書かれたものの転記に限ります。規格値との比較結果を「判定」の列に入れないでください
- 換算の根拠を残すこと … 換算後の値だけを残すと、後から原本と突き合わせられません。書かれたままの値、単位、使った係数を同じ行に残します
- 処理を行う場所 … カスタムニューラルモデルのトレーニングが使えるリージョンは限られています。国内で処理する必要がある場合は、リージョンの一覧を確認してください
- 自動実行してよい範囲 … 読み取り、割り当て、換算、規格値との比較、下書き登録までです。確定の操作、別名表への追記、当てはまらない試験項目の扱いの決定は人が行います
誤りが起きた場合のリスクは、単位の取り違えによる誤った測定値の登録、条件の欠けた測定値の登録、報告書に無い判定の登録、そして守秘義務のある報告書の外部送信です。単位の取り違えは設計で防げます。換算を機械に限り、書かれたままの値を必ず残してください。
10まず何から始めるか
1週目:報告書を集めて、様式と単位を数える
直近3か月の報告書を集め、委託先ごとの件数と様式の数を数えます。同じ委託先でも、試験の種類によって様式が変わります。 あわせて、出てくる単位と試験方法の呼び名を全部書き出します。この2つの一覧が、換算表と別名表のもとになります。
2週目:換算表と別名表を作り、20件で読み取りを試す
単位換算表(表記・標準単位・係数・オフセット)と、試験方法の別名表(委託先ごとの呼び名・社内コード・規格番号)を作ります。ここは研究開発部と品質管理部の合意が要る作業で、技術の話ではありません。 Studio で20件をレイアウトモデルにかけ、表が取れる委託先と崩れる委託先を分けます。
3週目:割り当てのプロンプトと出力の形を決める
上のプロンプトを自社の項目名に合わせて書き換え、20件で試します。換算された値が返ってこないこと、判定欄の無い報告書で判定が空になることを、必ず確かめてください。 信頼度のしきい値と、桁の警告の基準もここで決めます。
4週目以降: 受信から下書き登録までを組み、2か月運用します。この間、人が直した項目を全部記録してください。 どの委託先のどの項目が弱いかが見えてきます。
2か月目以降: 依頼台帳との紐付けと、未着報告書の督促を足します。同時に、過去2年分の報告書を遡って取り込んでください。 検索が効くのは、過去のデータが入ってからです。
4か月目以降: 依頼を起票する画面に、過去の結果の検索を組み込みます。ここで初めて、二度発注が止まります。 同じ組み合わせの結果が出たら、発注の前に担当者が見る流れにし、取りやめた件数を記録してください。 この構成の効果は、削減した10.0時間ではなく、この件数に表れます。
6か月目以降: 人が直した記録を振り返り、修正の多い委託先にだけカスタム抽出モデルを作ります。修正が特定の項目に偏っているなら、委託先に様式を相談するほうが早いこともあります。 ここまで来ると、この仕組みは報告書を入力する道具から、試験の発注そのものを見直す道具になります。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
レイアウトモデルがテキスト・テーブル・選択マーク・構造を抽出すること。各セルに行と列のインデックスと columnHeader かどうかが付き、結合セルや回転した表に対応すること。選択マークが選択状態と信頼度を、各テキスト行が手書き判定と信頼度を返すこと。段落に pageHeader などの役割が付くこと。pages でページ範囲を指定でき、outputContentFormat=markdown で表をHTMLテーブルとして出力できること。PDFとTIFFは最大2,000ページ、有料(S0)500MB・無料(F0)4MB、パスワードロックは解除が必要 | Microsoft Learn: ドキュメント レイアウト分析 | 2026-09-24 |
| カスタム抽出モデルが同じ様式の例5つから始められること。テンプレートは一貫したビジュアルテンプレートに依存し、ニューラルは構造化・半構造化・非構造化に対応すること。トレーニングがテンプレート1〜5分、ニューラル30分から12時間で、まずニューラルを試すよう勧められていること。カスタム分類モデルで種類を先に判別できること | Microsoft Learn: カスタム ドキュメント モデル | 2026-09-24 |
| バリエーションごとに少なくとも5つのラベル付きサンプルを加えることが勧められること。表形式フィールドでテーブル・行・セルの信頼度が得られること。リージョンの一覧に東日本が含まれること。10時間の無料モデルトレーニングが利用でき、超える分はジョブごとに最短30分として実際の時間で課金されること | Microsoft Learn: カスタム ニューラル ドキュメント モデル | 2026-09-24 |
| フィールド信頼度が0から1で、0.95は20回中19回は予測が正しい可能性が高いことを示すこと。正確性が非常に重要なシナリオでは、信頼度で自動承認か人間によるレビューかを決められること。読み取り結果の信頼度は抽出結果の信頼度に影響しないため両方を確認する必要があること。テーブル信頼度はテーブル・行・セルの順に見ることが勧められ、結合セルは低い値になることが期待されること | Microsoft Learn: 正確性スコアと信頼度スコアの解釈 | 2026-09-24 |
output_config.format に type: "json_schema" を渡すと応答をスキーマに沿った形に制約でき、enum は使えるが additionalProperties は false が必要で、minLength maxLength minimum maximum pattern は使えないこと | Claude Docs: Structured outputs | 2026-09-24 |
社内の試験データベースへの書き込み方法、委託先ごとの報告書の様式、単位換算表と試験方法の別名表の中身は、企業ごとに異なります。この部分は利用環境に応じた個別の設計が必要です。 試験報告書を外部のAIサービスへ送ってよいかは、委託先との秘密保持契約と委託契約の条文によります。法務および購買部門に確認してください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0212)についてのご相談はこちらから。
