海外メーカーの試薬に付く英文のSDSを読み取り、化学物質台帳へ転記して、版の更新と保管場所の見直しが要るものを拾う
海外メーカーの試薬に付く英文のSDS(安全データシート)を読み取り、CAS番号・危険有害性の区分・保管条件・改訂日を化学物質台帳の項目にそろえて転記します。台帳の版と比べ、改訂されたものと保管場所の見直しが要るものを拾います。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- AWS Textract/Azure AI/Google Document AI
- 連携・自動化
- Python
- 対象業界
- 医療/教育/製造
- 対象部門
- 品質管理/研究開発
- 対象業務
- データ入力・転記/台帳・マスタ管理
- 主な課題
- 入力作業が多い/期限・対応漏れが起きる/確認ミスが多い
- AIで行う処理
- 読み取り(OCR)
- 主な効果
- 入力漏れ削減/品質標準化/工数削減
- 導入難易度
- ★★★☆☆
- 実装レベル
- 半自動化
- 費用感
- API連携(中)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 研究員が試薬の受け取りを購買システムに登録し、メーカーのサイトからSDSのPDFを取得して共有フォルダへ入れる
- 安全管理グループの担当者がPDFを開き、品名・品番・改訂日を確かめる
- 台帳で同じ品番を探し、あれば台帳の改訂日とSDSの改訂日を見比べる
- 新規または改訂されたものは、危険有害性の区分(Section 2)、成分とCAS番号(Section 3)、保管条件(Section 7)を読み、台帳へ写す
- 区分を見て、保管庫の一覧表と照らし、置いてよい庫かを確かめる
- 区分が変わったものや保管庫が合わないものは、研究員と安全担当へメールで連絡する
- 人研究員がSDSのPDFを受付フォルダへ入れる(購買システムの発注番号をファイル名に付ける)
- 自動保存をきっかけに、形式・ページ数・パスワードの有無を確かめる
- 自動OCRが文書のレイアウト(見出し・段落・表)と、問い合わせへの答え(改訂日・品番など)を返す
- 自動見出しでSectionごとに切り分け、Section 1・2・3・7・14・16を取り出す
- 自動生成AIが、Sectionごとの文と表から台帳の項目を埋め、根拠にした文字列を写す
- 自動CAS番号の検算をし、台帳の同じ品番と改訂日・区分・成分を比べる
- 自動区分を保管庫の決まりに当て、`new_entry` / `revised` / `unchanged` / `storage_review` / `needs_human` を付ける
- 人担当者が `unchanged` 以外を開き、差分と根拠を確かめて台帳への登録を承認する
- 人`storage_review` のものは研究員に移し替えを依頼し、完了の報告を受けて閉じる
各工程の詳しい説明を読む
- 研究員が試薬の受け取りを購買システムに登録し、メーカーのサイトからSDSのPDFを取得して共有フォルダへ入れる
- 安全管理グループの担当者がPDFを開き、品名・品番・改訂日を確かめる
- 台帳で同じ品番を探し、あれば台帳の改訂日とSDSの改訂日を見比べる
- 新規または改訂されたものは、危険有害性の区分(Section 2)、成分とCAS番号(Section 3)、保管条件(Section 7)を読み、台帳へ写す
- 区分を見て、保管庫の一覧表と照らし、置いてよい庫かを確かめる
- 区分が変わったものや保管庫が合わないものは、研究員と安全担当へメールで連絡する
(a)改訂に気づかない。 3番は品番が一致した時点で「台帳にある」と判断して終わりがちです。改訂日の比較は、忙しい月から省かれます。 その結果、危険有害性の区分が前の版のまま何年も残ります。
(b)見る場所がメーカーごとに違う。 SDSの項目立ては16のSectionで共通していても、改訂日が表紙にあるメーカー、最終ページのSection 16にだけあるメーカー、ヘッダーに印刷日と並んでいるメーカーがあります。印刷日を改訂日と取り違えることもあります。
(c)混合物の成分を写し漏らす。 溶液や混合物の試薬はSection 3に成分が複数並び、CAS番号と含有率を1行ずつ写す途中で1行飛ばします。 桁を1つ写し間違えても、台帳の側では気づけません。
(d)保管場所の見直しが連絡で止まる。 6番のメールが研究員に届いても、実際に試薬を移したかどうかを誰も追っていません。 区分が変わったという情報が、台帳にも保管庫にも反映されないまま残ります。
- 【人】 研究員がSDSのPDFを受付フォルダへ入れる(購買システムの発注番号をファイル名に付ける)
- 【自動】 保存をきっかけに、形式・ページ数・パスワードの有無を確かめる
- 【自動】 OCRが文書のレイアウト(見出し・段落・表)と、問い合わせへの答え(改訂日・品番など)を返す
- 【自動】 見出しでSectionごとに切り分け、Section 1・2・3・7・14・16を取り出す
- 【自動】 生成AIが、Sectionごとの文と表から台帳の項目を埋め、根拠にした文字列を写す
- 【自動】 CAS番号の検算をし、台帳の同じ品番と改訂日・区分・成分を比べる
- 【自動】 区分を保管庫の決まりに当て、
new_entry/revised/unchanged/storage_review/needs_humanを付ける - 【人】 担当者が
unchanged以外を開き、差分と根拠を確かめて台帳への登録を承認する - 【人】
storage_reviewのものは研究員に移し替えを依頼し、完了の報告を受けて閉じる
8番目で人が開くのは、変わったものだけです。 買い直しで同じ版のSDSが届いたものは、改訂日と成分が一致したことを一覧で流し見て終わります。月160件のうち、手で開くのは新規と改訂と見直しの分です。
7番目で「保管庫を変えるべきか」の結論は出しません。 出すのは、読み取った区分が今の保管庫の決まりに当たらないという事実です。どこへ移すかは、保管庫の空きや研究の事情を知っている人が決めます。
02今回想定するシステム構成
英文のSDS(PDF、メーカーのサイトから取得) ▼【トリガー】受付フォルダ(Amazon S3)への保存 AWS Lambda ── 形式・ページ数・サイズ・パスワードの確認 ▼ AWS Textract(StartDocumentAnalysis:LAYOUT/TABLES/QUERIES) │ 見出し・段落・表・問い合わせへの答えと信頼度 ▼ 完了の通知(Amazon SNS)→ AWS Lambda が結果を取る Python ── 見出しでSectionごとに切り分ける ▼ Claude API ── 台帳の項目を埋める │ ① 品名・品番・改訂日 ② 区分・注意喚起語 ③ 成分とCAS番号・含有率 ④ 保管条件 ▼ Python ── CAS番号の検算、台帳の版との比較、保管庫の決まりとの照合 ▼ 判定(new_entry / revised / unchanged / storage_review / needs_human) ▼ 【安全管理グループが変わったものだけ確認】 ├──▶ 化学物質台帳へ登録(承認後) └──▶ 研究員への移し替えの依頼(下書き)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| OCR | AWS Textract(StartDocumentAnalysis:LAYOUT/TABLES/QUERIES) | Azure AI Document Intelligence、Google Document AI |
| 生成AI | Claude API(Sectionごとの文と表から台帳の項目を埋める) | OpenAI API、Gemini API |
| 差異計算 | Python(CAS番号の検算、台帳の版との比較、保管庫の決まりとの照合) | 台帳データベースの比較の機能 |
| 連携 | AWS Lambda(保存と完了の通知を起点に処理を動かす) | Amazon EventBridge |
| 保管 | Amazon S3(SDS、読み取り結果、判定の結果) | 研究所のファイルサーバー |
化学物質台帳と保管庫の一覧表は、新しく足すものではありません。 最初の準備は、保管庫の決まりを「庫ごとに置いてよい区分」の表に書き直すことです。
OCRに AWS Textract を選ぶのは、SDSが英文だからです。 対応言語は英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語で、手書きの認識は英語だけ、縦書きには対応していません。 欧州のメーカーがドイツ語やフランス語の版を送ってきた場合も文字は読めますが、問い合わせ(Queries)は英語の文書だけが対象です。 英語の版を取り直すほうが確実です。
使う機能は、文書の分析の非同期版(StartDocumentAnalysis)です。 分析の種類は TABLES・FORMS・QUERIES・SIGNATURES・LAYOUT から選べ、本記事では LAYOUT・TABLES・QUERIES を使います。請求書向けの AnalyzeExpense は使いません。 SDSは見出しで区切られた長い文書だからです。
レイアウトの分析は、見出しを LAYOUT_SECTION_HEADER として返し、要素は読む順(左から右、上から下)に並びます。 「SECTION 3: Composition/information on ingredients」のような見出しを手がかりに、Sectionごとに切り分けられます。
SDSの16の項目立ては、米国の基準(OSHA の危険有害性周知基準)で決められています。 Section 16は「作成日または最終改訂日を含むその他の情報」です。ただし表紙やヘッダーにも日付を書くメーカーが多いので、両方を読みます。
03どうやって実装するのか
処理の起点を決める
受付フォルダ(Amazon S3)にPDFが保存されたことを起点にします。 試薬は毎日届くので、1日1回の定時処理にはしません。改訂で区分が変わったものを、研究員が使い始める前に見つけたいからです。
研究員が入れるファイルには、購買システムの発注番号をファイル名に付けてもらいます。発注番号があれば、どの研究室が・いつ・どれだけ買ったかを購買システムから引けます。 付いていないファイルは、処理を止めずに needs_human で受け、担当者が発注番号を足します。
処理が終わったファイルは処理済みの場所へ移します。移すのは、判定の一覧への書き出しまで成功したときだけです。 受付フォルダに残っている数が、そのまま未処理の数になります。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| SDS | PDF。メーカー、品番、受け取った日時 | 受付フォルダ |
| 読み取り結果 | レイアウトの要素(見出し・段落・表)、表のセル、問い合わせへの答え、信頼度 | AWS Textract |
| 発注の情報 | 発注番号、研究室、発注者、数量、納品日 | 購買システム |
| 化学物質台帳 | 品番ごとの品名、CAS番号と含有率、区分、注意喚起語、保管条件、保管庫、SDSの改訂日 | 化学物質台帳 |
| 保管庫の決まり | 庫ごとに置いてよい区分、置いてはいけない組み合わせ、施錠の要否 | 自社で整備する表 |
| メーカーの一覧 | メーカーごとの改訂日の書き方と置き場所、日付の書き方(月と日の順) | 自社で用意する一覧 |
質を決めるのは、下の3つです。 台帳に改訂日が無ければ版を比べられず、保管庫の決まりが表になっていなければ見直しを拾えません。メーカーの一覧の「日付の書き方」が無いと、「03/04/2026」を3月4日と4月3日のどちらで読むかが決まりません。
データの取得方法を決める
読み取りは、Lambda から StartDocumentAnalysis を呼んで始めます。 文書はS3の場所で指定し、完了の通知先にSNSのトピックを渡します。ClientRequestToken に受付のファイルごとの値を入れ、同じ文書の処理が誤って二重に始まらないようにします。 同じトークンなら同じ JobId が返ります。JobId は7日間しか有効でないので、完了を受けたらすぐに GetDocumentAnalysis で結果を取り、自社のバケットへ書き出します。
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 見出し | LAYOUT_SECTION_HEADER | Sectionごとの切り分け |
| 段落と箇条書き | LAYOUT_TEXT・LAYOUT_LIST | 区分、注意喚起語、保管条件の文 |
| 成分の表 | TABLE・CELL | CAS番号と含有率を行ごとに取る |
| ヘッダーとフッター | LAYOUT_HEADER・LAYOUT_FOOTER | 改訂日と印刷日の候補 |
| 問い合わせへの答え | QUERY・QUERY_RESULT | 改訂日、版、品番、注意喚起語 |
| 信頼度 | 各ブロックの Confidence | 読み直しの要否 |
問い合わせ(Queries)は、場所の決まらない値を拾うために使います。 「What is the revision date?」「What is the product number?」「What is the signal word?」のように英語の質問を渡し、Alias に REVISION_DATE のような名前を付けます。答えには信頼度が付き、見つからなければ空で返ります。 非同期の処理では1ページあたり30件まで問い合わせを渡せます。
改訂日は、問い合わせとSection 16の両方から取ります。 2つが一致しなければ needs_human にします。印刷日(Print Date)を改訂日として拾っていないかは、ここで分かります。
AIへ渡す前に整形する
- 形式の確認 … 扱えるのはJPEG、PNG、PDF、TIFFです。XFA形式のPDFには対応していません。 対応外のものはPDFに変換します
- パスワードの確認 … パスワードで保護されたPDFは読めません。 メーカーのサイトから取り直します
- ページ数とサイズの確認 … 非同期の処理はPDFで500MB・3,000ページまで。SDSなら収まります
- 解像度の確認 … 読み取れる文字の高さは15ピクセル以上で、150dpiで8ポイントの文字に当たります。成分の表や脚注の小さな文字が、この下限に近いことがあります
- 言語の確認 … 英語以外の版が入っていないかを見ます。英語以外なら英語の版を取り直します
- Sectionの切り分け …
LAYOUT_SECTION_HEADERの文字列に「SECTION」と番号があるものを境にします。番号が見つからない見出しは、項目名(Hazards identification など)で当てます - ヘッダーとフッターの除去 … 各ページに繰り返し出る品名や印刷日を、本文から外します。ただし改訂日の候補として別に残します
6番目はAIに任せません。 見出しの切り分けを生成AIに頼むと、ページをまたいだ表を2つのSectionに割ったり、逆に2つを1つにしたりします。境界はレイアウトの要素で機械的に決め、AIにはSectionの中身だけを渡します。
AIに処理させる
させるのは、Sectionごとの文と表から台帳の項目を埋め、根拠にした文字列をそのまま写すことだけです。
| 見るもの | 書き出す内容 | 判断できないときの扱い |
|---|---|---|
| Section 1 | 品名、品番、メーカー名 | 品番が複数あれば ambiguous |
| Section 2 | 危険有害性の区分と区分の番号、注意喚起語、危険有害性情報(H文) | 記載が無ければ「不明」 |
| Section 3 | 成分ごとの名称、CAS番号、含有率(範囲のまま) | 表が崩れていれば unreadable |
| Section 7 | 保管条件(温度、遮光、不活性ガス、避ける物質) | 記載が無ければ「不明」 |
| Section 14 | 国連番号、輸送の分類 | 記載が無ければ「不明」 |
| Section 16・ヘッダー | 改訂日、版、前の版からの変更点の記載 | 候補が複数なら ambiguous |
Section 3の含有率は範囲のまま写させます。 「10 - 20 %」を「15%」にしません。丸めた値を台帳に入れると、次の版と比べたときに変わっていないものまで差分に出ます。
| させないこと | 理由 |
|---|---|
| CAS番号の補完・修正 | 読めない桁を推測で埋めると、別の物質の番号になる |
| 区分の推定 | 成分から区分を考えさせない。書かれていなければ「不明」 |
| 保管庫の決定 | 決まりとの照合は Python で行い、移す先は人が決める |
| 国内の法令の該当性の判断 | 安全衛生の担当が決める |
| 改訂日と印刷日の選び分け | 候補を両方出させ、選ぶのは規則 |
1行目がいちばん起きやすい失敗です。 「7647-01-?」のように桁がつぶれたCAS番号を渡すと、それらしい番号に直して埋めます。CAS番号の右端の1桁は、番号全体が正しいかを確かめるための検査用の数字です。 検算は後段の Python で行うので、AIには読めたとおりに写させます。
指示内容を固定する
あなたは研究所の安全管理グループで、英文のSDSから化学物質台帳の項目を写す立場です。
渡すのは、OCRがSectionごとに切り分けた文と表です。そこに書かれたことだけを使ってください。
【写す項目】
- section1: product_name, product_number, manufacturer
- section2: hazard_classes(区分の名称と区分の番号の組), signal_word, h_statements
- section3: components(成分ごとに name, cas_no, concentration)
- section7: storage(温度, 遮光, 不活性ガス, 避ける物質)
- section14: un_number, transport_class
- dates: revision_date_candidates, version, print_date
【status の付け方】
- ok ......... 値が書かれており、そのまま写せた
- missing .... そのSectionに記載が無い。値は「不明」とする
- unreadable . 文字は検出されているが、値として確定できない
- ambiguous .. 候補が複数あり、1つに決められない
【厳守事項】
- 記載がなければ「不明」とし、status を missing にしてください。
他のSectionから推測して埋めないでください。
- CAS番号は読めたとおりの文字列で写してください。
桁を補う、ハイフンを足す、それらしい番号に直すことをしないでください。
- 含有率は書かれた範囲のまま写してください。中央の値に丸めないでください。
- 区分は書かれた名称と番号のまま写してください。
成分や物性から区分を推定しないでください。
- 日付は、改訂日・版・印刷日の候補を、書かれていた文字列と場所ごとに
すべて出してください。どれが改訂日かを1つに選ばないでください。
- 保管場所や、国内の法令に当たるかは書かないでください。
- evidence には、根拠にした文字列をそのまま写してください。
- SDSでない書類(分析証明書など)と判断した場合は、写さずに
document_type に種類を書いてください。
【Sectionごとの読み取り結果】{sections}
【問い合わせへの答え】{query_results}
「改訂日を1つに選ばない」と書かないと、最初に見つけた日付を選びます。 ヘッダーの印刷日が先に出てくるメーカーでは、毎回それが改訂日になり、全件が「改訂された」と判定されます。 選ぶのは規則の側(第7章の出力形式)です。
「区分を推定しない」も明記します。 何も言わないと、Section 2が空のSDSに対して成分から区分を考え、もっともらしい区分を埋めます。 それは台帳に載った瞬間に事実として扱われます。
出力形式を固定する
次の形のJSONで受け取ります。 Claude API の構造化出力(output_config.format にJSONスキーマを渡す)を使うと、スキーマどおりの形で返り、必須の項目が欠けません。
{
"sds_id": "",
"document_type": "sds",
"product": { "name": "", "number": "", "manufacturer": "" },
"dates": {
"revision_candidates": [ { "text": "", "location": "header | section16 | query" } ],
"version": "", "print_date": ""
},
"hazard_classes": [ { "class": "", "category": "", "status": "ok", "evidence": "" } ],
"signal_word": "",
"components": [
{ "name": "", "cas_no": "", "concentration": "", "status": "ok", "evidence": "" }
],
"storage": { "temperature": "", "light": "", "inert_gas": "", "incompatible": "" },
"un_number": "",
"verdict": "new_entry | revised | unchanged | storage_review | needs_human"
}
verdict はAIに埋めさせません。 後段の Python が次の規則で決めます。
| 条件 | verdict |
|---|---|
| 台帳に同じ品番が無い | new_entry |
| 改訂日の候補が一致し、台帳より新しい | revised |
| 改訂日・区分・成分が台帳と一致 | unchanged |
| 区分が今の保管庫の決まりに当たらない | storage_review(他の判定と併記) |
CAS番号の検算が合わない/改訂日の候補が食い違う/unreadable がある | needs_human |
1つ目の理由は、版の比較を規則で行えることです。 改訂日だけでなく、区分と成分の差分も Python で取ります。改訂日が同じなのに区分が違う、というメーカー側の差し替えも拾えます。
2つ目は、CAS番号の検算を機械で行えることです。 検査用の1桁は、右から2桁目に1、3桁目に2…と重みを掛けて足し、10で割った余りと一致します。CASの説明では 107-07-3 が例に挙がっており、1×7+2×0+3×7+4×0+5×1=33 で、余りの3が右端と一致します。 合わなければ読み違いです。
3つ目は、evidence で確認が速くなることです。 差分の行ごとに、SDSのどの文字列を根拠にしたかが並びます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 受付フォルダ(Amazon S3) | 保存の通知で Lambda を起動 | SDSの受け取り |
| AWS Textract | StartDocumentAnalysis/GetDocumentAnalysis | レイアウト・表・問い合わせへの答え |
| Claude API | API呼び出し | Sectionごとの項目の書き出し |
| 購買システム | 発注番号での読み取り | 研究室、発注者、数量 |
| 化学物質台帳 | 読み取りと、承認後の登録 | 版の比較と、承認されたものの書き込み |
| 判定の一覧 | 表への書き出し | 担当者が確認する一覧 |
台帳への書き込みは、担当者の承認の後だけです。 自動で書き込むと、改訂日の読み違い1件で、正しい版が古い版で上書きされます。書き込むときは前の版の値を履歴に残し、上書きしません。
購買システムは読み取りだけです。発注番号が見つからなくても、購買システムの側を直しに行きません。
人が確認する
人が開くのは unchanged 以外のものです。 unchanged は件数と品名を一覧で流し見ます。
needs_humanを先に見る … CAS番号の検算が合わないもの、改訂日の候補が食い違うもの。多くはSDSの画像を見れば数秒で決まりますrevisedの差分を確かめる … 区分・成分・保管条件のどこが変わったかを、evidenceとSDSの該当箇所で見ますnew_entryを登録する … 品名・CAS番号・区分を確かめて承認しますstorage_reviewを研究員へ依頼する … 移し替えの依頼の下書きを直して送り、完了の報告を受けて閉じます- 判定を覆したら記録する … どの項目を、どう直したかを残します
4番目の「閉じる」を省かないでください。 連絡しただけでは保管庫は変わりません(第3章の(d))。
目標は、160件をならして1件9分です。 同じ版の買い直しが半分ほどという想定で、それより開く件数が多い月は、メーカーの一覧の日付の書き方が足りていないことが多いです。
例外に対処する
| 起きること | 対応 |
|---|---|
| パスワードで保護されたPDF | 読めない。メーカーのサイトから取り直す |
| XFA形式のPDF | 対応していない。印刷してPDFにし直す |
| 英語以外の版が届いた | 問い合わせは英語のみ。英語の版を取り直す |
| 文字が小さすぎる | 15ピクセルが下限。下回るものは unreadable で人へ |
| 見出しの番号が見つからない | 項目名で当てる。当たらなければ needs_human |
| 成分の表がページをまたぐ | 前後のページの表を列の見出しでつなぐ。つながらなければ人へ |
| CAS番号の検算が合わない | needs_human。AIにもう一度読ませて直さない |
| 企業秘密として成分が伏せてある | 「不明」で写し、伏せてあることを evidence に残す |
| SDSでない書類が入った | document_type を見て、写さずに担当者へ戻す |
| OCRが応答しない | 受付フォルダに残す。処理済みへ移すのは成功時だけ |
7行目の「AIにもう一度読ませて直さない」が大事です。 読み直させると、検算が合う番号を作って返すことがあります。検算が合うことと、正しい物質の番号であることは別です。
記録を残す
- 元のSDSのPDFと、受け取った日時・発注番号
- OCRが返したJSONの全文(レイアウト・表・問い合わせへの答え)
- AIが返したJSONと、そのとき参照した台帳の行と保管庫の決まり
- 判定の結果と、版の差分
- 人が判定を覆した記録 … どの項目を、どう直したか
- 台帳へ登録した日時と承認者、上書きした前の版の値
storage_reviewの依頼日と完了日
「上書きした前の版の値」を残すのは、改訂の経緯を後から追えるようにするためです。 ある試薬の区分がいつ変わり、そのとき保管庫を移したかを、事故やヒヤリハットの後に確かめることがあります。
04実装レベルの3段階
最小構成は確かめるための段階です。 本記事の想定は半自動化です。 読み取りと台帳との差分の一覧が自動になり、1件30分が9分になります。本格構成に進むには、保管庫の決まりを表にする作業が先に要ります。
05工数削減シミュレーション
導入後 160件 × 9分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 海外メーカーの試薬を毎月百件以上購入し、英文のSDSをPDFで受け取っている企業の研究所・大学の研究室・病院の検査部門。化学物質台帳を表計算やデータベースで持ち、CAS番号・危険有害性の区分・保管場所を手で転記している場合。SDSの改訂に気づかず、古い版の内容のまま台帳が残っている場合。保管庫ごとに置いてよい物質の区分を決めている場合。
- SDSが日本語や中国語だけで届く場合(この構成のOCRは英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語しか読めず、問い合わせ(Queries)は英語の文書だけが対象です)。購入する試薬が月に十数件で、目視の転記で足りる場合。台帳を持たず、保管場所の決まりも無い場合。なお、国内の法令に照らした該当性の判断と、保管場所を最終的に決めることは、この構成では代替できません。
07最小構成で試す方法
- 先月届いたSDSから20件を選ぶ(うち数件は、買い直しで改訂日が変わっていたものを入れる)
- 20件について、台帳に今入っている値を書き出しておく
- PDFを1件ずつ手元のAIサービスに貼り付ける
- 「このSDSから、品名・品番・改訂日の候補・危険有害性の区分・成分ごとのCAS番号と含有率・保管条件を写してください。書かれていない項目は『不明』としてください。推測で埋めないでください。改訂日の候補は場所ごとにすべて出してください」と指示する
- 出てきた値を、台帳の値と突き合わせる
20件は必ずやってください。 版の比較の仕組みを組む前に、「改訂日を取り違えずに拾えるか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 改訂日の候補が場所ごとに出て、台帳との差分も合う | OCRと台帳の比較に進む |
| 印刷日を改訂日として出した | 指示の書き方とメーカーの一覧で直る。構成は有効 |
| CAS番号の桁が変わっている | 検算を後段に置く前提を確かめる。 AIに直させない |
2行目は珍しくありません。 目視で改訂を見落としていた理由の1つです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 印刷日を改訂日として拾う | 候補を場所ごとにすべて出させ、選ぶのは規則にする |
| 全件が「改訂された」と出る | 日付の書き方(月と日の順)をメーカーの一覧で決め打ちする |
| CAS番号の桁を推測で埋める | 読めたとおり写させ、検算は Python で行う |
| 検算が合わないものをAIに読み直させる | 読み直させない。人がSDSの画像で見る |
| 含有率を丸める | 範囲のまま写させる。丸めると差分が出続ける |
| 成分から区分を推定する | 推定を禁じ、記載が無ければ「不明」 |
| 見出しの切り分けをAIに任せる | レイアウトの要素で機械的に切る |
| 成分の表がページで切れる | 列の見出しでつなぎ直す |
| 英語以外の版で問い合わせが空になる | 問い合わせは英語のみ。英語の版を取り直す |
| 保管庫の決まりが文章のまま | 庫ごとの区分の表に書き直してから照合する |
| 移し替えの依頼で止まる | storage_review を完了まで一覧に残す |
| 台帳を自動で上書きする | 承認後だけ書き込み、前の版を履歴に残す |
上の2行が、この構成の失敗のほとんどです。 どちらも日付の扱いから出ています。改訂日を取り違えると、版の比較という本記事の中心がまるごと崩れます。
下から2行目と3行目は、運用に乗るかを決めます。 移し替えを完了まで追わなければ、台帳と保管庫が食い違ったまま残ります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 試薬の品名・成分・危険有害性の区分、研究室ごとの購入の記録、保管庫の場所です。個人情報はほとんど含みませんが、研究室ごとの購入の記録は、どのテーマを進めているかを外から推し量れる情報です。
- 外部へ渡す範囲を、SDSの中身に限る … 生成AIに渡すのはSectionごとの文と表だけです。発注番号、研究室名、発注者の名前は渡しません
- 台帳への書き込みを自動にしない … 承認の後だけ書き込みます。誤った区分が台帳に載ると、その区分で保管と取扱いが決まります
- この構成は法令の該当性の判断を代替しません … 国内の法令に照らしてどの物質がどの管理の対象になるかは、安全衛生の担当と専門家が決めることです。 この構成が出すのは、SDSに書かれていた区分と、台帳との差分だけです
- SDSの言語と原本を決めておく … 米国の基準ではSDSは英語で用意することとされ、他の言語の写しを持つことも認められています。社内で原本として扱うのが英文のPDFか、台帳の値かを先に決めてください
- 企業秘密で伏せた成分を推測させない … 伏せてある成分を、AIに推測させて埋めないでください
- 保存先の鍵を管理する … 非同期の分析では、結果を自社のバケットに出し、KMSの鍵で暗号化する設定ができます
誤りのリスクは、改訂の見落としと、誤った区分の登録の2つです。 どちらも「AIに選ばせない・埋めさせない」設計で防ぎます。
10まず何から始めるか
1週目:メーカーの一覧を作る
購入件数の多い上位20社のSDSを開き、改訂日がどこに、どの書き方で書かれているかを一覧にします。
2週目:20件で試す
先月のSDSから20件を選び、手元のAIサービスに貼り付けて台帳の項目を写させます。改訂日の候補を取り違えていないか、CAS番号の桁が変わっていないかを最優先で見ます。
3週目:保管庫の決まりを表にする
保管庫ごとに置いてよい区分と、置いてはいけない組み合わせを表に書き直します。 ここは安全衛生の担当と一緒に決めます。
4週目:受付から差分の一覧までをつなぐ
S3 の受付フォルダから StartDocumentAnalysis を呼び、Sectionごとに切り分け、台帳との差分を一覧に書き出すところまで作ります。この時点では台帳へ書き込まず、差分の一覧だけを見ます。
2か月目: CAS番号の検算と verdict を足し、needs_human の件数を毎週数えます。3か月目以降: 承認後の台帳への登録と、storage_review の依頼の下書きを足し、1件30分が何分になったかを実測します。改訂の見落としが無いことを1か月続けて確かめた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
StartDocumentAnalysis がS3の文書を非同期で分析し、完了をSNSに通知し、JobId で GetDocumentAnalysis から結果を取ること。ClientRequestToken で同じジョブの二重起動を防げること。JobId が7日間有効なこと。OutputConfig と KMSKeyId で自社のバケットへの出力と暗号化ができること | AWS: StartDocumentAnalysis | 2026-10-06 |
分析の種類が TABLES・FORMS・QUERIES・SIGNATURES・LAYOUT であること。QUERY と QUERY_RESULT(信頼度付き)のブロックが返ること。人の確認に使う Amazon Augmented AI が2026年7月に保守モードに入り新規の顧客を受け付けていないこと | AWS: AnalyzeDocument | 2026-10-06 |
レイアウトの要素(LAYOUT_TITLE・LAYOUT_HEADER・LAYOUT_FOOTER・LAYOUT_SECTION_HEADER・LAYOUT_TABLE・LAYOUT_TEXT など)と、読む順で返ること | AWS: Layout Response Objects | 2026-10-06 |
| 対応形式がJPEG・PNG・PDF・TIFFでXFA形式は不可、非同期のPDFが500MB・3,000ページまで、パスワード保護のPDFは不可、問い合わせが非同期で1ページ30件まで、対応言語が6言語で問い合わせは英語のみ、手書きは英語のみ、縦書き不可、文字の高さが15ピクセル以上(150dpiで8ポイント)であること | AWS: Set Quotas in Amazon Textract | 2026-10-06 |
| SDSが16の項目立てで、Section 16が作成日または最終改訂日を含むその他の情報であること。SDSは英語で用意し、他の言語の写しも持てること | OSHA: 29 CFR 1910.1200 Hazard Communication | 2026-10-06 |
| CAS番号が最大10桁で3つに区切られ、右端の1桁が番号全体の正しさを確かめる検査用の数字であること | CAS: CAS Registry | 2026-10-06 |
| 検査用の数字が決まった計算で求められ、107-07-3 が例に挙がっていること | CAS: Check Digit Verification | 2026-10-06 |
構造化出力を output_config.format で指定でき、スキーマどおりの形で必須の項目が欠けずに返ること | Claude Docs: Structured outputs | 2026-10-06 |
国内の法令に照らした管理の対象かどうかは、安全衛生の担当と専門家が判断してください。 本記事は上記の公開情報で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0506)についてのご相談はこちらから。
