品目マスタへの新規登録の申請が出たときに、名称・型番・仕様の近い既存品目を検索して、重複登録と別名登録の候補を出す
品目マスタに新規登録の申請が出たときに、名称・型番・仕様の近い既存品目を検索し、重複登録・別名登録・別品目の候補を根拠付きで並べます。登録するか既存のコードを使うかは、マスタ担当者が決めます。
- 生成AI
- Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- 医療/商社/建設/製造
- 対象部門
- 情報システム/購買
- 対象業務
- 台帳・マスタ管理/情報検索
- 主な課題
- 属人化している/情報が見つからない/確認ミスが多い
- AIで行う処理
- 検索(RAG)
- 主な効果
- 入力漏れ削減/品質標準化/検索時間短縮
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 申請者が、名称・メーカー・型番・仕様・単位・使う部署をワークフローに入れて申請する
- マスタ担当者が、型番で品目マスタを検索する
- 見つからなければ、名称の一部、メーカー名、仕様の一部と、言葉を変えて何度も検索する
- 候補が見つかれば、その品目の仕様を開いて、申請と1項目ずつ比べる
- 同じ品物なら、申請者に既存のコードを使うよう返す。違えば新規に登録する
- 判断に迷うものは、申請者や詳しい担当者に聞く
- 人申請者がワークフローで申請する(名称・メーカー・型番・仕様・単位)
- 自動申請をきっかけに処理が動き、型番とメーカー名を表記のゆれをそろえた形に直す
- 自動生成AIが、仕様の文章を寸法・材質・規格などの項目に分ける
- 自動検索基盤で、型番の一致、名称の文字の一致、意味の近さを組み合わせて既存品目を検索し、上位20件の候補を出す
- 自動規則で、候補ごとに項目を1つずつ比べ、`same`(同じ品物の疑い)/ `alias`(書き方違いの疑い)/ `variant`(仕様が違う近い品物)/ `different` に分ける
- 自動申請と候補の比較表を、違う項目に印を付けてマスタ担当者に回す
- 人マスタ担当者が比較表を見て、既存のコードを使う/新規に登録する/申請者に確かめる、を決める
- 【人/自動】 既存のコードを使うときは、申請の名称を既存品目の別名として記録する
各工程の詳しい説明を読む
- 申請者が、名称・メーカー・型番・仕様・単位・使う部署をワークフローに入れて申請する
- マスタ担当者が、型番で品目マスタを検索する
- 見つからなければ、名称の一部、メーカー名、仕様の一部と、言葉を変えて何度も検索する
- 候補が見つかれば、その品目の仕様を開いて、申請と1項目ずつ比べる
- 同じ品物なら、申請者に既存のコードを使うよう返す。違えば新規に登録する
- 判断に迷うものは、申請者や詳しい担当者に聞く
(a)書き方が違うと見つからない。 型番の「ABC-123」と「ABC123」、メーカー名の「株式会社」の有無、名称の全角と半角。検索の語を変えて何度も試すのは、見つからないことを確かめる作業でもあり、終わりが決まりません。
(b)仕様の小さな違いを見落とす。 候補が見つかっても、長さ・径・材質・表面処理・規格のどれか1つが違えば別の品物です。急いでいると、名称が一致したところで同じ品物と判断してしまいます。 逆に、別の品物を同じと判断すると、現場に合わない部品が届きます。
(c)見分けが詳しい担当者頼み。 「この型番はメーカーが改番した後継品」「このねじは昔の名前で登録されている」といった知識は、在籍の長い担当者の記憶にあります。記憶で見つけた重複は、記録が残りません。
(d)重複は後から効いてくる。 同じ品物に2つのコードがあると、在庫が割れ、発注がまとまらず、棚卸で数が合いません。重複を後から統合するのは、登録のときに止めるより何倍も手間がかかります。
- 【人】 申請者がワークフローで申請する(名称・メーカー・型番・仕様・単位)
- 【自動】 申請をきっかけに処理が動き、型番とメーカー名を表記のゆれをそろえた形に直す
- 【自動】 生成AIが、仕様の文章を寸法・材質・規格などの項目に分ける
- 【自動】 検索基盤で、型番の一致、名称の文字の一致、意味の近さを組み合わせて既存品目を検索し、上位20件の候補を出す
- 【自動】 規則で、候補ごとに項目を1つずつ比べ、
same(同じ品物の疑い)/alias(書き方違いの疑い)/variant(仕様が違う近い品物)/differentに分ける - 【自動】 申請と候補の比較表を、違う項目に印を付けてマスタ担当者に回す
- 【人】 マスタ担当者が比較表を見て、既存のコードを使う/新規に登録する/申請者に確かめる、を決める
- 【人/自動】 既存のコードを使うときは、申請の名称を既存品目の別名として記録する
7番目の判断は人が行います。 候補の並びは、見つけにくい重複を見つけやすくするためのもので、同じ品物かどうかの判定ではありません。 後継品や互換品のように、仕様は同じでも別のコードで管理する事情があるものもあります。
8番目で別名を記録するのが、この構成を育てる工程です。 申請の書き方を既存品目に結び付けておけば、次に同じ書き方の申請が来たときに、いちばん上に出ます。
02今回想定するシステム構成
新規登録の申請(ワークフロー) ▼【トリガー】申請の提出 AWS Lambda ── 型番・メーカー名の表記をそろえる ├──▶ Claude API ── 仕様の文章を項目に分ける(構造化出力) ├──▶ Amazon Titan Text Embeddings V2 ── 名称と仕様の埋め込み ▼ Amazon OpenSearch Service(品目マスタの索引) │ ハイブリッド検索:型番の一致 + 名称の文字の一致 + 意味の近さ │ 正規化プロセッサーで点数をそろえて並べる ▼ AWS Lambda ── 項目ごとの規則の照合(same / alias / variant / different) ▼ 比較表 ──▶【マスタ担当者が判断】──▶ 品目マスタ(登録・別名の記録)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(ハイブリッド検索、日本語の解析) | Vertex AI Search(Agent Search)、Azure AI Search |
| 埋め込み | Amazon Titan Text Embeddings V2(Amazon Bedrock) | Cohere Embed |
| 生成AI | Claude API(仕様の文章の項目分け) | Gemini API |
| 連携 | AWS Lambda(申請を起点に処理を動かし、規則で照合する) | AWS Step Functions |
生産管理・購買のシステムと申請のワークフローは、新しく足すものではありません。 品目マスタは毎晩の書き出しで索引に写し、索引から品目マスタへは書き込みません。 書き出しと申請のワークフローとの連携は、製品によって違うため、利用環境に応じた個別の作りになります。
検索の土台は、Amazon OpenSearch Service です。 日本語の解析のためのプラグイン(kuromoji、ICU、日本語向けに勧められている Sudachi)と、ベクトル検索の k-NN、ニューラル検索のプラグインが使えます。文字の一致と意味の近さを1つの検索で組み合わせられることが、この構成に合っています。
組み合わせには、ハイブリッドクエリを使います。 複数の問い合わせの点数を1つにまとめる問い合わせで、中に入れられる問い合わせは最大5つです。 点数のまとめ方は、検索パイプラインの正規化プロセッサーで決めます。文字の一致の点数と意味の近さの点数は物差しが違うので、0〜1にそろえてから重みを付けて足します。
03どうやって実装するのか
処理の起点を決める
申請のワークフローで申請が提出されたことを起点にします。 提出から数十秒で比較表がマスタ担当者の画面に出るようにします。毎日まとめて処理すると、同じ日に同じ品物の申請が2件出たとき、互いに見つけられません。
そのため、申請中の品目も索引に入れます。 承認されるまでは「申請中」の状態を付けておき、同じ品物の申請が重なったときに候補として出るようにします。
品目マスタの索引は、毎晩の書き出しで更新します。新規に登録された品目と、別名が足された品目を、翌朝には候補として出せる状態にします。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 申請 | 名称、メーカー、型番、仕様の文章、単位、使う部署、申請者 | 申請のワークフロー |
| 品目マスタ | 品目コード、名称、メーカー、型番、仕様、単位、状態(有効・廃止・申請中)、別名 | 生産管理・購買のシステムの書き出し |
| 項目に分けた仕様 | 寸法、材質、表面処理、規格、色、容量など品目の分類ごとの項目 | 生成AIで作り、索引に持たせる |
| 表記ゆれの表 | メーカー名の略称と正式名、材質の書き方(SUS304/ステンレス304) | 自社で用意する一覧 |
| 品目の分類ごとの比較の規則 | どの項目が一致すれば同じ品物か | 自社で用意する一覧 |
質を決めるのは、いちばん下の比較の規則です。 ねじなら「種類・径・長さ・材質・表面処理・規格」、ホースなら「内径・外径・長さ・材質・耐圧」、手袋なら「材質・サイズ・枚数の単位」のように、分類ごとに「どの項目が一致すれば同じ品物か」を決めます。 最初は申請の多い分類から10個程度で始めます。
品目マスタの「別名」の列は、この構成で育てるものです。 申請の書き方を既存品目に結び付けた記録を、検索の対象に含めます。
データの取得方法を決める
品目マスタの索引は、次の項目を持たせて作ります。
| 項目 | 型 | 使い道 |
|---|---|---|
item_code | キーワード | 品目の識別 |
name | テキスト(日本語の解析) | 名称の文字の一致 |
aliases | テキスト(日本語の解析) | 過去の申請の書き方との一致 |
maker_norm | キーワード | 表記をそろえたメーカー名の一致 |
model_no_norm | キーワード | 表記をそろえた型番の完全一致 |
spec_text | テキスト(日本語の解析) | 仕様の文字の一致 |
spec_attrs | オブジェクト | 項目に分けた仕様(規則の照合に使う) |
embedding | ベクトル(1,024次元) | 名称と仕様の意味の近さ |
status | キーワード | 有効・廃止・申請中で絞り込む |
日本語の解析には、ICU の正規化で全角・半角をそろえ、kuromoji か Sudachi で語に分けます。 「ボルト」と「ボルト」が同じ語として扱われるようになります。
埋め込みは、Amazon Titan Text Embeddings V2 で作ります。 入力は最大8,192トークン(50,000文字)、出力は既定で1,024次元のベクトルです。英語に最適化されていて、日本語を含む多言語に対応するとされています。品目の名称と仕様は短い文なので、入力の上限は問題になりません。
検索は、ハイブリッドクエリに3つの問い合わせを入れます。
| 問い合わせ | 中身 | 重み |
|---|---|---|
| 型番の一致 | model_no_norm の完全一致と、maker_norm の一致 | 0.4 |
| 名称と別名の文字の一致 | name・aliases・spec_text への全文検索 | 0.3 |
| 意味の近さ | embedding へのベクトル検索 | 0.3 |
点数をまとめる検索パイプラインは、次のように作ります。
PUT /_search/pipeline/item-dup-pipeline
{
"description": "品目の重複候補の点数をそろえる",
"phase_results_processors": [
{
"normalization-processor": {
"normalization": { "technique": "min_max" },
"combination": {
"technique": "arithmetic_mean",
"parameters": { "weights": [0.4, 0.3, 0.3] }
}
}
}
]
}
weights の並びは、ハイブリッドクエリの queries に入れた問い合わせの順に対応します。問い合わせの順を入れ替えたら、重みの順も必ず入れ替えます。 入れ替え忘れると、型番の一致より意味の近さが重く扱われ、第1章の M6 と M8 のような候補が上に来ます。
重みは合計が1になるように決めます。 正規化プロセッサーで、点数を最小・最大でそろえる方式(min_max)と、重み付きの平均(arithmetic_mean)を使います。型番の一致の重みを高くするのは、型番が一致すれば、それだけで強い手がかりになるからです。 ハイブリッドクエリの filter で status を「有効」と「申請中」に絞ります。
AIへ渡す前に整形する
- 型番の表記をそろえる … 全角を半角に、英字を大文字に、ハイフン・スペース・スラッシュを取り除いた形を
model_no_normにします。元の型番もそのまま残します - メーカー名の表記をそろえる … 「株式会社」「(株)」を外し、表記ゆれの表で正式名に寄せます
- 単位をそろえる … 「1箱(100本入)」と「100本」のように、入数と単位を分けます
- 仕様の文章を項目に分ける … 生成AIで、品目の分類ごとの項目に分けます(次の小見出し)
- 品目マスタの側も同じ処理をする … 毎晩の書き出しのたびに、新しい品目と変わった品目だけ処理します
- 廃止の品目を分ける … 廃止の品目は検索の対象から外しますが、後継品の情報があれば、その品目の候補として出します
1番目で、元の型番を消さないでください。 表記をそろえた型番は検索のためのもので、マスタ担当者が比較表で見るのは、申請と既存品目の元の書き方です。 そろえた形だけを見せると、本当に同じ型番なのか、そろえたせいで同じに見えているのかが分かりません。
AIに処理させる
生成AIにさせるのは、仕様の文章を項目に分けることだけです。 探すのは検索基盤、比べるのは規則です。
| 担い手 | させること |
|---|---|
| Claude API | 申請と品目マスタの仕様の文章から、分類ごとの項目(寸法、材質、規格など)を取り出す |
| 埋め込みのモデル | 名称と仕様のベクトルを作る |
| Amazon OpenSearch Service | 型番・文字・意味の近さを組み合わせて候補を拾う |
| 規則 | 候補ごとに項目を1つずつ比べ、same / alias / variant / different に分ける |
規則での分け方は次のとおりです。
| 結果 | 条件 |
|---|---|
same | 表記をそろえた型番とメーカーが一致する |
alias | 型番は無いか一致しないが、比較の規則のすべての項目が一致し、名称の書き方だけが違う |
variant | 比較の規則の項目のうち、1つ以上が違う(径・長さ・材質など) |
different | 品目の分類が違う、または比較の規則の項目の半分以上が違う |
| させないこと | 理由 |
|---|---|
| 同じ品物かどうかの判定 | 数字の違いを意味の近さで丸める |
| 仕様の値の補完 | 「M6」と書いてあるだけの申請に、長さを推測で入れない |
| 単位の換算 | 「インチ」を「mm」に直すような換算は規則の側で行う |
| 後継品・互換品の判断 | メーカーの情報と社内の取り決めで決める |
1行目がいちばん大事です。 生成AIに「この2つは同じ品物か」と聞くと、名称と用途が近ければ「同じ」と答えがちです。径が6と8で違うことは書かれているのに、それを小さな違いとして扱います。 比べるのは規則で、生成AIは項目に分けるところまでにします。
指示内容を固定する
あなたは製造業の購買部で、品目マスタの仕様を整理する係です。
次の【仕様の文章】から、【品目の分類】ごとに決められた項目の値を取り出してください。
【品目の分類】{category}
【取り出す項目】{attribute_list}
(例:ねじ … 種類、呼び径、長さ、材質、表面処理、規格)
【名称】{name}
【型番】{model_no}
【仕様の文章】{spec_text}
【守ること】
- 書かれている値だけを取り出してください。書かれていない項目は value を空にし、
status を missing にしてください。
- 推測で埋めないでください。「M6」とだけあり長さが無ければ、長さは missing です。
- 数字と単位は、書かれているとおりに取り出してください。
単位を換算しないでください。「1/4インチ」を「6.35mm」にしないでください。
- 材質や表面処理の書き方をそろえないでください。「ステンレス」は「ステンレス」のまま
value に入れてください。そろえる作業は別の処理で行います。
- 1つの項目に値が2つ以上書かれている場合は、status を ambiguous にしてください。
- この品物が既存のどの品目と同じかは書かないでください。
- evidence には、その値を取り出した元の文字列をそのまま写してください。
「単位を換算しない」「書き方をそろえない」を明記しないと、親切にそろえます。 そろえた値が正しくても、元の書き方が消えると、マスタ担当者が申請と見比べるときに探せなくなります。 そろえるのは表記ゆれの表を持つ規則の側で、そろえた値と元の値を並べて持ちます。
「長さは missing」の例を具体的に書くのは、ねじやボルトで最も多い失敗だからです。 よく使われる長さを入れて埋めると、variant になるはずの候補が alias になります。
出力形式を固定する
項目分けは、Claude API の構造化出力で次の形にします。
{
"category": "ねじ",
"attributes": [
{ "name": "種類", "value": "六角ボルト", "status": "ok", "evidence": "六角ボルト" },
{ "name": "呼び径", "value": "M6", "status": "ok", "evidence": "M6" },
{ "name": "長さ", "value": "20", "status": "ok", "evidence": "×20" },
{ "name": "材質", "value": "SUS304", "status": "ok", "evidence": "SUS304" },
{ "name": "表面処理", "value": "", "status": "missing", "evidence": "" },
{ "name": "規格", "value": "", "status": "missing", "evidence": "" }
]
}
構造化出力は output_config.format に type: "json_schema" を指定して使います。オブジェクトには additionalProperties: false を付けます。status は ok / missing / ambiguous の列挙にします。
規則の照合の結果は、マスタ担当者の比較表として次の形で渡します。
{
"request_id": "",
"candidates": [
{
"item_code": "",
"name": "",
"model_no": "",
"status": "有効",
"search_score": 0.0,
"match": "same | alias | variant | different",
"diff_attributes": [ { "name": "呼び径", "request": "M6", "existing": "M8" } ],
"missing_in_request": ["表面処理"]
}
]
}
1つ目の理由は、diff_attributes で違う項目だけを見せられることです。 マスタ担当者は、候補ごとに仕様の全文を開かなくても、どこが違うのかを一目で読めます。
2つ目は、missing_in_request で申請の側の書き漏れを示せることです。 申請に表面処理が書かれていなければ、既存品目のどれと同じかは決められません。その場合は申請者に確かめるのが正しい対応で、構成の側で決めません。
3つ目は、search_score と match を分けていることです。 点数が高くても variant のことがあり、点数が低くても alias のことがあります。並び順は点数、判断の材料は規則の結果、と役割を分けます。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 申請のワークフロー | 申請の提出を起点に AWS Lambda を動かす | 申請の内容を受け取り、比較表を返す |
| 生産管理・購買のシステム | 品目マスタの毎晩の書き出し | 索引を更新する |
| Claude API | API呼び出し(構造化出力) | 仕様の文章の項目分け |
| Amazon Bedrock | API呼び出し | 名称と仕様の埋め込み |
| Amazon OpenSearch Service | ハイブリッドクエリ | 候補を拾う |
品目マスタへは、この構成から書き込みません。 登録と別名の記録は、マスタ担当者の判断を受けて、既存の登録の手順で行います。
人が確認する
人が見るのは、すべての申請です。ただし、見る場所は比較表に絞ります。
sameの候補があれば、元の型番とメーカーを見比べる … そろえた形で一致しただけでないかを確かめますaliasの候補は、比較の規則の項目を見る … すべて一致していれば、既存のコードを使うよう申請者に返しますvariantの候補は、違う項目が本当に違う品物を意味するかを見る … 寸法の違いは別品目、色の違いは社内の取り決め次第、などの判断ですmissing_in_requestがあれば、申請者に確かめる- 既存のコードを使うと決めたら、申請の名称を別名として記録する
1番目を省かないでください。 型番の表記をそろえると、まれに別のメーカーの同じ文字列の型番が一致します。メーカーまで一致しているかを必ず見ます。
判断に迷った申請は、その場で決めずに保留の印を付けます。 保留が週に数件たまったら、購買と設計の担当がまとめて見て、比較の規則に足すかを決めます。1件ずつその場で決めると、担当者ごとに判断が分かれ、規則に戻ってきません。
目標は、比較表を開いてから判断までを数分にすることです。 それより長くかかる申請が多い分類は、比較の規則の項目が足りないか、申請の仕様の書き方がそろっていません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 申請に型番が無い(汎用品など) | 型番の一致を除いた2つの問い合わせで検索する |
| 品目の分類が決まらない | 比較の規則が使えないので、候補を点数順に並べるだけにし、担当者が見る |
| 仕様の文章がほとんど無い | 項目が missing ばかりになる。申請者に仕様を書き足してもらう |
| 後継品・改番の品目が候補に出る | 廃止の品目の後継品の情報を添えて出す。判断は担当者 |
| 同じ日に同じ品物の申請が重なる | 申請中の品目も索引に入れ、互いに候補として出す |
| 埋め込みの呼び出しが失敗する | 型番と文字の一致だけで検索し、比較表に「意味の近さを使っていない」と出す |
| 候補が1件も出ない | 「見つからない」と出す。新規の登録が妥当な場合が多いが、担当者が分類だけは確かめる |
最後の行で、「見つからない」を「無い」と言い切らせないでください。 表記ゆれの表や別名が育つまでは、見つからないだけの重複が残ります。
記録を残す
- 申請の内容と、表記をそろえた型番・メーカー名
- 項目分けの結果(値、
status、evidence) - 検索の候補と点数、規則の照合の結果、そのとき使った比較の規則と表記ゆれの表の版
- マスタ担当者の判断(既存のコードを使う/新規に登録/申請者に確かめる)と、判断した人・日時
- 別名として記録した書き方
4つ目の判断の記録を、規則の見直しに使います。 variant と出たのに担当者が「同じ品物」と判断した組み合わせが多い項目は、比較の規則が厳しすぎるか、表記ゆれの表が足りません。
04実装レベルの3段階
半自動化で、1件15分が8分程度になります。 検索の言葉を変えて何度も試す作業は無くなりますが、候補ごとの仕様の比較は人に残ります。本格構成で4分になり、この段階が本記事の想定です。 残る4分は、比較表を見て判断し、必要なら申請者に確かめる時間です。 段階を飛ばさないでください。 半自動化の候補の並びを1か月見ると、どの分類で意味の近さが数字の違いを丸めているかが分かります。そこから比較の規則を作るほうが、規則の作りすぎを避けられます。
05工数削減シミュレーション
導入後 360件 × 4分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 部品・副資材・消耗品の品目マスタが数万〜数十万件あり、各部署から新規登録の申請が毎月数百件出る製造業・商社・病院など。同じ品物が別の名前や別の型番の書き方で何度も登録され、在庫や購買の集計が割れている場合。重複かどうかの確認が、品目に詳しいマスタ担当者の検索の工夫と記憶に頼っている場合。
- 品目が数千件以下で、型番の完全一致の検索で重複が見つかる場合。品目の登録をメーカーの標準のコード(JANコードなど)だけで行っており、名称の揺れが起きない場合。なお、重複として既存のコードに寄せるか、新しいコードを起こすかの判断は、この構成では代替できません。
07最小構成で試す方法
- 品目マスタから、申請の多い分類(ねじ、継手、消耗品など)を1つ選び、その分類の品目を数千件書き出す
- 過去に「重複だった」と分かった申請を20件、「新規だった」申請を20件選ぶ
- 手元のAIサービスで、20件の仕様の文章を項目に分けさせる(第7章の指示を使う)
- 表計算で、型番の表記をそろえた列を作り、検索と項目の比較を手で試す
- 当時の判断と突き合わせる
40件は必ずやってください。 組む前に、自社の品目の仕様の書き方で、項目に分けられるかを確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 項目に分けた結果で、当時の判断と同じ見分けができた | 検索基盤と規則を組む構成に進む |
| 項目分けで、書かれていない値を埋めた | 指示の書き方で直る。構成は有効 |
| 品目マスタの仕様の欄がほとんど空 | マスタの側の整備が先。 AIの問題ではない |
3行目はよく出ます。 その場合は、申請の多い分類だけでも、既存品目の仕様を項目に分ける作業から始めてください。
40件のうち、重複だった20件を何件見つけられたかを数えておきます。 当時の担当者が記憶で見つけた重複を、表記をそろえた型番と項目の比較でどこまで拾えるか。拾えなかった件が、表記ゆれの表と別名に足すべき最初の候補です。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 意味の近さで径や長さの違う品物が「同じ」に見える | 比べるのは規則。 生成AIや点数で判定しない |
| 項目分けで書かれていない値を埋める | 指示で禁じ、missing を返させる |
| 型番の表記をそろえて別メーカーの品物が一致する | メーカーの一致を条件に含め、元の型番を並べて見せる |
| 全角・半角の違いで見つからない | ICU の正規化で解析の段からそろえる |
| 単位の違いで別品目に見える | 入数と単位を分け、換算は規則で行う |
| 点数の物差しが違って並びがおかしい | 正規化プロセッサーで0〜1にそろえ、重みを付ける |
| 同じ日の重複申請を見落とす | 申請中の品目も索引に入れる |
| 「見つからない」を「無い」と扱う | 別名と表記ゆれの表が育つまでは、担当者が分類を確かめる |
| 比較の規則が分類ごとにばらばら | 申請の多い分類から10個程度に絞って始める |
| ハイブリッドクエリの順と重みの順がずれる | 問い合わせの順と weights の順を同じ設定の場所で管理する |
| 索引の更新が止まり、新しい品目が候補に出ない | 毎晩の書き出しの件数を記録し、0件の日に知らせる |
上の2行が、この構成の失敗のほとんどです。 どちらも「近いもの」を「同じもの」として扱う形をしています。品目マスタでは、似ていることより、違う項目が1つでもあることのほうが重い情報です。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 品目の名称・型番・仕様、メーカー名、使う部署。仕入先の単価や取引条件は扱いません。
- 単価や仕入先を索引に入れない … 重複の検索に単価は要りません。入れると、検索の画面から取引条件が見えるようになります
- 図面のある加工部品の仕様を外部へ渡す範囲を決める … 社内で設計した部品の仕様には、技術の情報が含まれます。市販品に限って生成AIに渡すか、渡す前に図面番号などを外すかを決めます
- 判断を担当者に残す … 既存のコードに寄せるか新規に登録するかは、在庫と発注に直接響きます。比較表は判断の材料で、判断そのものではありません
- 別名の記録を誰でも足せるようにしない … 誤った別名が足されると、以後の検索で誤った候補がいちばん上に出ます。別名を足すのはマスタ担当者に限ります
- 申請者の情報を検索の対象に含めない … 誰がどの品目を申請したかは、判断の記録には残しますが、索引には入れません。検索の画面から、部署ごとの購買の動きが読み取れる状態を作らないためです
- 索引への接続を社内に限る … 検索基盤への接続は、申請のワークフローと処理の関数からだけにします。品目マスタの全件がまとまった索引は、それ自体が持ち出されると困る一覧です
誤りが起きた場合のリスクは、別の品物を同じとして既存のコードに寄せることと、同じ品物を見落として重複を登録することの2つです。 前者は規則で違う項目を必ず見せることで、後者は候補を広めに拾って別名を育てることで防ぎます。
10まず何から始めるか
1週目:分類と比較の規則を決める
申請の多い分類を10個選び、それぞれ「どの項目が一致すれば同じ品物か」を購買と設計で決めます。色や包装の違いを同じとみなすかも、ここで決めます。
2週目:40件で試す
過去の重複だった申請20件と新規だった申請20件で、項目分けと手での比較を試します。書かれていない値を埋めていないかを最優先で見ます。
3週目:表記ゆれの表と索引の設計
メーカー名・材質・単位の表記ゆれの表を作り、品目マスタの索引の項目を決めます。
4週目:索引を作り、候補を出す
品目マスタを書き出して索引を作り、ハイブリッド検索で候補を出すところまで作ります。この時点では規則の照合を出さず、候補の並びだけを担当者が見ます。
2か月目: 項目分けと規則の照合を足し、比較表を出します。variant と担当者の判断が食い違う組み合わせを毎週数えます。3か月目以降: 申請のワークフローとつなぎ、1件15分が何分になったかを実測します。別名の記録が毎月たまり、規則と担当者の判断の食い違いが月に数件まで減った時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
ハイブリッドクエリが複数の問い合わせの点数を1つにまとめること。点数は検索パイプラインでまとめること。中に入れられる問い合わせは最大5つであること。filter で絞り込めること | OpenSearch Documentation: Hybrid query | 2026-10-07 |
正規化プロセッサーが問い合わせごとの点数を正規化してまとめること。min_max・l2・z_score の正規化と、arithmetic_mean などのまとめ方があること。weights は0〜1の値で、合計を1にすること | OpenSearch Documentation: Normalization processor | 2026-10-07 |
| Amazon OpenSearch Service で、Japanese (kuromoji) Analysis と ICU Analysis が使え、Sudachi Analysis が日本語向けに勧められていること。OpenSearch k-NN と Neural Search のプラグインがあること | AWS: Plugins by engine version in Amazon OpenSearch Service | 2026-10-07 |
Amazon Titan Text Embeddings V2(amazon.titan-embed-text-v2:0)の入力が最大8,192トークン・50,000文字、出力が既定1,024次元(512・256も可)であること。英語に最適化され、日本語を含む多言語に対応すること | AWS: Amazon Titan Text Embeddings models | 2026-10-07 |
Claude の構造化出力を output_config.format に type: "json_schema" を指定して使うこと。オブジェクトに additionalProperties: false を付けること。enum が使えること | Claude Docs: Structured outputs | 2026-10-07 |
既存のコードに寄せるか新規に登録するかの判断は、自社の購買と設計の取り決めに従ってください。 本記事は各製品の公式ドキュメントで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0669)についてのご相談はこちらから。
