電子機器メーカーの購買部が部品の新規登録の依頼を受けたときに、抵抗値・容量・チップのサイズ・ねじの呼びの表記ゆれを正規化して既存の部品コードを探し、二重登録を防ぐ
設計から部品の新規登録の依頼が届いたときに、抵抗値・容量・定格・チップのサイズ・ねじの呼びを同じ書き方にそろえて既存の部品マスタを探し、同じ仕様の部品コードがすでにあるかを示します。登録するか既存のコードを使うかは、購買の担当が決めます。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 連携・自動化
- Python
- 対象業界
- 商社/製造
- 対象部門
- 購買
- 対象業務
- 台帳・マスタ管理/情報検索
- 主な課題
- 属人化している/情報が見つからない/確認ミスが多い
- AIで行う処理
- 検索(RAG)
- 主な効果
- 入力漏れ削減/属人化解消/検索時間短縮
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 設計者から登録の依頼の書式が届く
- 購買の担当が、1行ずつメーカー品番で部品マスタを完全一致で検索する
- 見つからなければ、品名の一部(「チップ抵抗」など)で検索し、出てきた一覧を目で見て値とサイズを比べる
- 値の書き方が違いそうなら、「10K」「103」と書き方を変えて検索し直す
- 同じ仕様の既存品があれば、設計者にそのコードを使うよう返す
- 無ければ、新しいコードを採番して登録する
- 人設計者が登録の依頼の書式に、メーカー名・メーカー品番・品名・仕様を書き、チップのサイズの表記の系(インチ/メートル)を選んで送る
- 自動依頼の行ごとに、仕様の文を規則で項目に分ける。規則で分けられない行は Claude API で項目に分ける
- 自動値を基本の単位の数値に直し、サイズをメートルの表記にそろえて、仕様のキーを作る
- 自動Amazon OpenSearch Service で、メーカー品番の正規化した一致、仕様のキーの一致、品名の文字の近さの順に既存品を探す
- 自動見つかった既存品を、項目ごとの一致・不一致で `same`(同一)/`equivalent`(メーカー違いの同等の候補)/`different`(別の部品)に分ける
- 人購買の担当が、候補の一覧で項目ごとの一致を見て、既存のコードを使うか新しく登録するかを決める
- 人決めた結果を記録する。表記ゆれで見つからなかったものは、同義語の辞書の追加の候補になる
各工程の詳しい説明を読む
- 設計者から登録の依頼の書式が届く
- 購買の担当が、1行ずつメーカー品番で部品マスタを完全一致で検索する
- 見つからなければ、品名の一部(「チップ抵抗」など)で検索し、出てきた一覧を目で見て値とサイズを比べる
- 値の書き方が違いそうなら、「10K」「103」と書き方を変えて検索し直す
- 同じ仕様の既存品があれば、設計者にそのコードを使うよう返す
- 無ければ、新しいコードを採番して登録する
(a)書き方を変えて何度も検索する。 4番目は、担当者が思いつく書き方の数だけくり返されます。思いつかなかった書き方で登録されている既存品は、見つかりません。
(b)値の桁を取り違える。 「1.0kΩ」と「10kΩ」、「1608」と「1068」のような見間違いは、一覧を目で追う3番目で起きます。取り違えて既存品を返すと、基板に違う値の部品が載ります。
(c)チップのサイズの系が分からない。 依頼に「0603」とだけ書かれていると、インチかメートルかは設計者に聞かないと分かりません。聞かずに推し量ると、大きさの違う部品が同じコードに寄ります。
(d)見落としが在庫と発注を割る。 同じ部品が別のコードで登録されると、在庫が別々に数えられ、片方が欠品なのに、もう片方が余っていることが起きます。
- 【人】 設計者が登録の依頼の書式に、メーカー名・メーカー品番・品名・仕様を書き、チップのサイズの表記の系(インチ/メートル)を選んで送る
- 【自動】 依頼の行ごとに、仕様の文を規則で項目に分ける。規則で分けられない行は Claude API で項目に分ける
- 【自動】 値を基本の単位の数値に直し、サイズをメートルの表記にそろえて、仕様のキーを作る
- 【自動】 Amazon OpenSearch Service で、メーカー品番の正規化した一致、仕様のキーの一致、品名の文字の近さの順に既存品を探す
- 【自動】 見つかった既存品を、項目ごとの一致・不一致で
same(同一)/equivalent(メーカー違いの同等の候補)/different(別の部品)に分ける - 【人】 購買の担当が、候補の一覧で項目ごとの一致を見て、既存のコードを使うか新しく登録するかを決める
- 【人】 決めた結果を記録する。表記ゆれで見つからなかったものは、同義語の辞書の追加の候補になる
2番目で、規則を先に使うのが、この設計の前提です。 電子部品の仕様の書き方には型があり、多くは正規表現で分けられます。規則で分けた結果は、同じ入力なら必ず同じになります。 生成AIは、規則で分けられない書き方の行だけに使います。
5番目の分け方は、規則で決めます。 同一か同等かを決めるのは項目の一致の組み合わせで、AIの判断ではありません。
02今回想定するシステム構成
登録の依頼(表計算) 部品マスタ(生産管理のシステム) │ 行ごとに取り出す │ 毎晩、全件を書き出す ▼ ▼ AWS Lambda ── 仕様を項目に分ける(規則 → 分けられない行は Claude API) │ 値を基本の単位に直し、サイズをメートルの表記にそろえる ▼ Amazon OpenSearch Service │ ① mpn_norm(メーカー品番の正規化) … 一致 │ ② spec_key(仕様のキー) … 一致 │ ③ name(品名。同義語の辞書・n-gram) … 文字の近さ、fuzzy ▼ AWS Lambda ── 項目ごとの一致を比べ、same/equivalent/different に分ける ▼ 【購買の担当が決める】── 既存のコードを返す/新しく登録する └──▶ 見つからなかった表記 ── 同義語の辞書の更新の候補(毎月)
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(normalizer、synonym_graph、fuzzy) | Azure AI Search、Vertex AI Search(Agent Search) |
| 生成AI | Claude API(規則で分けられない仕様の文を項目に分ける。構造化出力) | Azure OpenAI(Microsoft Foundry)、Gemini API |
| 連携 | AWS Lambda(Python。仕様の分解とキーの作成、候補の分け方) | AWS Step Functions |
| 保管 | Amazon S3(同義語の辞書、依頼と判定の記録) | ─ |
生産管理のシステムの部品マスタは、正本のままです。 この構成は、毎晩書き出した部品マスタを検索の索引に入れるだけで、部品マスタへの登録は、これまでどおり購買の担当が生産管理のシステムで行います。
土台は Amazon OpenSearch Service です。 公式のページでは、日本語の解析の Japanese (kuromoji) Analysis と ICU Analysis がすべてのドメインに含まれ、Sudachi Analysis は日本語に推奨されるオプションのプラグインとして載っています。品名の日本語は kuromoji で分け、値やメーカー品番は形態素解析に通さず、正規化した1つの値として持ちます。
値の比較には、normalizer を使います。 公式のページでは、normalizer は analyzer に似ているが1つのトークンだけを出すもので、文字の置き換えのような文字単位の操作しかできず、同義語の置き換えはできないとされています。使える文字フィルタは pattern_replace と mapping、トークンフィルタは lowercase、cjk_width(全角・半角)、ICU の icu_normalizer などです。メーカー品番のハイフンや空白を落とし、全角を半角にそろえるのに向いています。
03どうやって実装するのか
処理の起点を決める
処理の起点は2つあります。 1つは、設計者が登録の依頼を送ったとき。依頼の書式が共有の受付に置かれると、行ごとに処理が動きます。もう1つは、毎晩の部品マスタの書き出しで、前日に登録・変更された部品を索引に入れ直すときです。
索引の入れ直しを毎晩にするのは、その日に登録した部品を翌日の依頼で見つけるためです。 同じ部品の依頼が別の設計者から続けて届くことがあり、索引が古いと、前の日に登録したばかりの部品と重複させます。その日のうちに登録した部品は、登録の画面から索引にも1件ずつ足します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 登録の依頼 | 依頼番号、設計者、機種、行ごとのメーカー名・メーカー品番・品名・仕様、サイズの表記の系 | 依頼の書式 |
| 部品マスタ | 部品コード、品名、メーカー名、メーカー品番、仕様の欄、状態(使用中・廃止) | 生産管理のシステム(毎晩書き出し) |
| 同義語の辞書 | 品名の言い換え(「チップ抵抗」「厚膜チップ抵抗器」など) | 購買の担当が管理 |
| 単位と接頭辞の表 | p・n・μ(u)・m・k・M と、Ω・F・V・W の扱い | 構成の側で持つ |
| サイズの対応表 | インチの表記とメートルの表記の対応(0603⇔1608、0402⇔1005、0201⇔0603 など) | 構成の側で持つ |
質を決めるのは、下の2つの表です。 単位と接頭辞の表が欠けていると値を数値に直せず、サイズの対応表が無いとキーがそろいません。どちらも、部品の種類を増やすたびに購買の担当が足します。
データの取得方法を決める
部品マスタは毎晩、全件を書き出して、仕様のキーを作ってから索引に入れます。 既存品の仕様の欄も、依頼と同じ規則で項目に分けます。既存品の側で分けられなかったものは「キーなし」として入れ、品名の文字の近さでだけ探される扱いにします。
| 項目 | 索引の型 | 作り方 |
|---|---|---|
mpn_norm | keyword(normalizer 付き) | メーカー品番から空白・ハイフン・スラッシュを落とし、全角を半角、英字を大文字に |
spec_key | keyword | 種類+値(基本の単位)+許容差+定格+サイズ(メートル)を決まった順で並べる |
value_base | double | 値を基本の単位の数値に直したもの(範囲の検索に使う) |
size_metric | keyword | メートルの表記のサイズ |
name | text(kuromoji+同義語の辞書)/n-gram の副フィールド | 品名 |
status | keyword | 使用中/廃止 |
spec_key は、たとえば次のようになります。
抵抗 10kΩ ±1% 1/10W 1608 → RES|10000|F1|0.1W|1608
抵抗 10K 1% 0.1W 0603(inch) → RES|10000|F1|0.1W|1608
コンデンサ 0.1uF 50V X7R 1005 → CAP|1.0E-7|50V|X7R|1005
コンデンサ 104 50V B 0402(inch) → CAP|1.0E-7|50V|B|1005
ねじ M3×8 なべ 小ねじ SUS → SCR|M3|8|PAN|SUS
2行目と4行目は、文字が違っても1行目・3行目とキーが一致します。 4行目の温度特性の「B」と「X7R」は規格が違うので、キーは別のままにし、同等かどうかは担当が判断します。
AIへ渡す前に整形する
- 文字をそろえる … 全角を半角に、「μ」「u」を同じ記号に、「Ω」「ohm」を同じ記号にします
- 値と単位を分ける … 「10kΩ」を値10、接頭辞k、単位Ωに分け、基本の単位の数値10000にします
- 3桁の数字の表記を直す … 抵抗の「103」は 10×10の3乗=10000Ω、コンデンサの「104」は 10×10の4乗 pF=0.1μF として扱います。部品の種類が分からない行では直しません
- 分数の定格を直す … 「1/10W」を0.1Wにします
- サイズの系をそろえる … 依頼で選ばれた系に従ってメートルの表記に直します。系が選ばれていない4桁は、そのまま「系不明」にします
- ねじの呼びを分ける … 「M3×8」「M3-8」「M3X8」「M3x8L」を、呼び径M3と長さ8に分けます
- 規則で分けられない行を分ける … 規則に当たらなかった行だけを Claude API に渡します
3番目と5番目に「直さない」場合を書いているのが大事です。 「103」は抵抗なら10kΩですが、品番の一部や数量のこともあります。部品の種類が分からないまま直すと、関係のない数字が値になります。 サイズも、系が分からない4桁をどちらかに決め打ちすると、第1章の取り違えがそのまま起きます。
メーカー品番の正規化は、normalizer で索引の側に持たせます。 pattern_replace の文字フィルタで空白・ハイフン・スラッシュを落とし、cjk_width で全角を半角に、uppercase で大文字にそろえます。依頼の側の品番も、同じ normalizer を通して完全一致で比べます。
AIに処理させる
させるのは、規則で項目に分けられなかった仕様の文を、決まった項目に分けることだけです。 値を数値に直すこと、キーを作ること、同一かどうかを決めることはさせません。
| 見るもの | させること | 判断できないときの扱い |
|---|---|---|
| 仕様の文 | 種類・値・単位の接頭辞・許容差・定格・サイズ・温度特性・ねじの呼びに分ける | 書かれていない項目は null |
| 値の書き方 | 文に書かれた値と単位を、書かれたとおりに写す | 3桁の数字の表記は直さず、そのまま写す |
| サイズ | 4桁の数字をそのまま写し、系が文に書かれていれば写す | 系が書かれていなければ unknown |
数値への変換をAIにさせないのは、桁を誤ったときに見分けがつかないからです。 「4.7kΩ」を4700にするのは規則で確実にできます。AIに変換させて470と返ってきても、その数値は正しい形をしているので後段で止まりません。 AIには文字を項目に写させるだけにし、変換は規則の側で行います。
検索は3段で行い、上の段で見つかったら下の段は参考に回します。
| 段 | 照合 | 見つかったときの扱い |
|---|---|---|
| ① | mpn_norm の完全一致(term) | メーカー品番が同じ既存品。same の候補 |
| ② | spec_key の完全一致(term)、status: 使用中 | 仕様が同じ既存品。メーカーが同じなら same、違えば equivalent |
| ③ | name の match と fuzzy、value_base と size_metric の絞り込み | 文字の近い既存品。項目を比べて担当が見る |
③の fuzzy は、品名の打ち間違いを拾うためだけに使います。 公式のページでは、fuzzy は Damerau–Levenshtein の距離の範囲で似た語を探し、fuzziness の既定は AUTO、max_expansions の既定は50、prefix_length の既定は0です。値やサイズの項目には fuzzy を使いません。 「1608」と「1068」は距離1の近さで、fuzzy に任せると同じものとして拾います。
品名の言い換えは、同義語の辞書で吸収します。 公式のページでは、synonym_graph は複数語の同義語を扱え、検索の側の analyzer でだけ使うよう注意書きがあります。索引の側で使うと、複数語の同義語の後ろの語の位置がずれるためです。
指示内容を固定する
あなたは電子機器メーカーの購買部で、部品の登録の依頼に書かれた
仕様の文を、決まった項目に分ける立場です。
文に書かれていることだけを写してください。推測で埋めないでください。
【項目】
- category: resistor / capacitor / inductor / connector / screw / other
- value_text: 値(数字の部分)を書かれたとおりに
- prefix: 単位の接頭辞(p, n, u, m, k, M)。書かれていなければ null
- unit: 単位(ohm, F, H)。書かれていなければ null
- tolerance: 許容差を書かれたとおりに
- rated: 定格(電圧・電力)を書かれたとおりに
- size_digits: サイズの4桁の数字を書かれたとおりに
- size_system: inch / metric / unknown
- temp_char: 温度特性(X7R, B など)を書かれたとおりに
- thread: ねじの呼び径(M3 など)。ねじ以外は null
- length: ねじの長さ。ねじ以外は null
【厳守事項】
- 値を計算しないでください。「4.7k」を「4700」に直さないでください。
- 「103」「104」のような3桁の数字は、そのまま value_text に写し、
prefix と unit は null にしてください。読み替えないでください。
- サイズの系は、文に「inch」「インチ」「metric」「メートル」と
書かれているときだけ選んでください。それ以外は unknown です。
- 部品の種類が文から分からないときは other にしてください。
- メーカー品番の記号から仕様を読み取らないでください。
品番の読み方はメーカーごとに違います。
【仕様の文】{spec_text}
【品名】{part_name}
「103を読み替えない」と書くのは、AIがこの読み替えを知っているからです。 知っているので、抵抗かコンデンサかが文から分からなくても読み替えます。読み替えは部品の種類が決まってから規則の側で行います。
「品番の記号から読み取らない」も同じ理由です。 メーカー品番には値やサイズを表す記号が入っていることが多いですが、記号の割り当てはメーカーごとに違い、AIがもっともらしく読むと誤りに気づけません。
出力形式を固定する
Claude API の構造化出力で、次の形のJSONで受け取ります。 output_config.format に type: json_schema でスキーマを渡します。
{
"category": "resistor",
"value_text": "10",
"prefix": "k",
"unit": "ohm",
"tolerance": "1%",
"rated": "1/10W",
"size_digits": "0603",
"size_system": "unknown",
"temp_char": null,
"thread": null,
"length": null
}
スキーマの制約は、公式のページの範囲に合わせます。 構造化出力は JSON Schema の一部に対応し、enum や required、additionalProperties: false は使えますが、数値の minimum/maximum、文字列の minLength/maxLength には対応せず、使うと400エラーになります。 category・prefix・size_system は enum で縛り、値の範囲は規則の側で確かめます。
1つ目の理由は、規則で分けた行と同じ形にそろえられることです。 規則で分けた行もこの形で持ち、その後の数値への変換とキーの作成は、どちらから来た行でも同じ規則を通ります。
2つ目は、size_system: unknown を機械的に止められることです。 unknown の行は ② の段の照合に入れず、設計者に系を聞く印を付けます。
画面に出す候補の一覧は、次の形です。
{
"request_line": "R-2026-1015-07-03",
"spec_key": "RES|10000|F1|0.1W|1608",
"candidates": [
{"part_code": "", "stage": 2, "class": "same | equivalent | different",
"matched": ["category", "value", "tolerance", "rated", "size"],
"unmatched": ["maker"], "status": "使用中"}
],
"needs_input": ["size_system"]
}
matched と unmatched を並べるのは、担当がどこを見ればよいかを示すためです。 equivalent の候補では、unmatched にメーカーだけが入っていれば同等品の承認を見ればよく、許容差が入っていれば別の部品です。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 依頼の受付 | ファイルの到着で Lambda を起動 | 依頼の行を取り出す |
| 生産管理のシステム | 毎晩の書き出し(読み取りのみ) | 部品マスタを索引に入れる |
| Amazon OpenSearch Service | 索引と検索 | 3段の照合 |
| Claude API | API呼び出し | 規則で分けられない行の項目分け |
| Amazon S3 | 辞書と記録の保管 | 同義語の辞書、依頼と判定の記録 |
部品マスタには書き込みません。 新しいコードの採番と登録は、購買の担当が生産管理のシステムで行います。この構成が誤ってコードを作る経路を持たないことが、重複を減らす仕組みが重複を作らないための条件です。
同義語の辞書は、カスタムパッケージで扱います。 公式のページでは、S3 に置いた辞書をパッケージとして取り込んでドメインに関連付け、synonyms_path に analyzers/<パッケージのID> を指定します。検索の側の analyzer で updateable: true にしておくと、パッケージを更新したときに自動で反映されます。 索引の側の analyzer で使うと、閉じて開くか索引を作り直す必要があります。S3 に新しい版を置くだけでは更新されず、パッケージの更新と適用が要ります。
人が確認する
購買の担当は、すべての依頼の行について候補の一覧を見て決めます。 自動で既存のコードを設計者に返すことはしません。
needs_inputを先に見る … サイズの系が分からない行は、設計者に聞いてから照合をやり直しますsameを確かめる … メーカー品番と仕様のキーが一致していても、statusが廃止でないかを見ますequivalentを判断する … メーカー違いの同等品は、品質保証の承認や顧客の指定を確かめます。キーが一致しても、同じコードに寄せてよいとは限りません- ③の段だけの候補は、項目を比べる … 文字が近いだけの候補は、
unmatchedを見て別の部品かを確かめます - 見つからなかった表記を記録する … 担当が手で見つけた既存品があれば、その書き方を辞書の追加の候補に残します
3番目を省かないでください。 同じ値・同じサイズでも、顧客が特定のメーカーを指定している機種では、同等品に置き換えられません。
目標は、1行あたり4分です。 same の行は確かめるだけで1分ほど、equivalent と③の段の行は数分かかります。
例外に対処する
| 起きること | 対応 |
|---|---|
| サイズの系が分からない | ② の段に入れず、設計者に聞く。推し量らない |
| 部品の種類が分からない | 3桁の数字を直さず、③ の段だけで探す |
| 規則でも Claude API でも項目に分けられない | 項目を空にして③の段だけで探し、担当に回す |
| 既存品の仕様の欄が分けられない | 「キーなし」として入れ、品名でだけ探す |
| 同じ仕様のキーの既存品が複数ある | 全部を並べ、すでに重複していることを担当に知らせる |
| 一致した既存品が廃止 | 候補には出し、「廃止」を目立たせる。後継のコードは担当が調べる |
| 辞書の更新が反映されない | パッケージの適用の状態を確かめる。S3 に置いただけでは更新されない |
| Claude API が応答しない | その行を規則の結果だけで扱い、項目の空きを担当に示す |
5行目は、副産物として役に立ちます。 同じキーの既存品が複数あるのは、過去に重複して登録された証拠です。 これを集めると、まとめる候補の一覧になります。
記録を残す
- 依頼の行の原文と、規則か Claude API かの分け方の別、分けた項目、作った仕様のキー
- 3段のそれぞれで見つかった候補と、
matched/unmatched - 担当の決定(既存のコードを使う/新しく登録する)と、その理由の区分(同一、承認済みの同等品、別の部品)
- 担当が手で見つけた既存品と、そのときの書き方
- 同じ仕様のキーで複数の既存品が見つかった組
- 同義語の辞書の版と、適用した日付
4つ目が、辞書を育てる材料です。 毎月これを見て、「この書き方で見つからなかった」ものを同義語か前処理の規則に足します。 足した後に同じ書き方の依頼が見つかるようになったかを、翌月の記録で確かめます。
04実装レベルの3段階
半自動化で、1行12分が7分程度になります。 書き方を変えて検索し直す手間は無くなりますが、規則で分けられない行と、候補の見分けが担当に残ります。本格構成で4分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の記録で規則から漏れる書き方を見つけ、規則を足してから Claude API を入れるほうが、AIに渡す行が少なく済みます。
05工数削減シミュレーション
導入後 300件 × 4分 ÷ 60 = 20 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 基板の実装と組立を行う電子機器メーカー・EMS・電子部品の商社で、抵抗・コンデンサ・コネクタ・ねじなどの部品マスタが数万件あり、設計から毎月数百件の新規登録の依頼が届く場合。「10kΩ」「10K」「103」、「0.1μF」「100nF」「104」のような表記の違いで同じ仕様の部品が別のコードで登録され、在庫と発注が割れている場合。重複かどうかの確認が、部品に詳しい購買の担当の記憶に頼っている場合。
- 部品マスタが数千件以下で、メーカー品番の完全一致で重複が見つかる場合。設計が部品ライブラリから選ぶ運用が徹底していて、新規の登録がほとんど出ない場合。なお、メーカー違いの同等品を同じコードに寄せてよいか(品質の承認・顧客の指定)の判断は、この構成では代替できません。
07最小構成で試す方法
- 部品マスタから、抵抗とコンデンサの部品を書き出す(数千件)
- 過去3か月の登録の依頼から、後で重複と分かったものを含めて50行を選ぶ
- 依頼の50行と書き出した部品マスタの仕様の欄を、Python の規則で項目に分け、仕様のキーを作る
- 表計算で、依頼のキーと部品マスタのキーを突き合わせる
- 当時の担当の判断と比べ、重複を見つけられたか、別の部品を同じとしていないかを見る
この段階では OpenSearch も生成AIも使いません。 確かめるのは、仕様のキーで表記ゆれがどこまで吸収できるかです。
| 出てきた内容 | 判断 |
|---|---|
| 後で重複と分かった行が、キーで見つかる | 索引と3段の照合に進む |
| 規則で分けられない行が多い | その行を Claude API で分ける段を足す。構成は有効 |
| 部品マスタの側のキーが作れない部品が多い | マスタの仕様の欄の書き方が先。 古い部品から欄を分けて入れ直す |
| サイズの系が分からない行が多い | 依頼の書式に系の欄を足すのが先 |
3行目と4行目が出ることは珍しくありません。 どちらもAIの問題ではなく、書き方の決まりが無かったことの表れです。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 「103」を何にでも読み替える | 部品の種類が決まってから規則で直す。AIには読み替えさせない |
| チップのサイズの系を取り違える | 依頼の書式で系を選ばせ、分からなければ照合に入れない |
| 値の桁違いを同じとして拾う | 値とサイズには fuzzy を使わない。キーの完全一致で比べる |
| AIが数値への変換で桁を誤る | 変換は規則の側で行う。AIには書かれたとおりに写させる |
| 品番のハイフン・全角で一致しない | normalizer の pattern_replace と cjk_width で索引と検索の両方をそろえる |
| 同義語の辞書が反映されない | 検索の側の analyzer で updateable: true。パッケージの更新と適用を忘れない |
| 複数語の同義語で語順の検索が外れる | synonym_graph は検索の側の analyzer でだけ使う |
| キーが一致したので同じコードに寄せる | 同等品の承認と顧客の指定を確かめる。 寄せるかは担当が決める |
| 廃止の部品を返す | status を持たせ、廃止を目立たせる |
| 構造化出力のスキーマで400エラー | minimum/maximum・minLength を使わない。範囲は規則の側で確かめる |
上の4行が、この構成の失敗のほとんどです。 どれも「数字の扱いを文字の近さや推し量りに任せる」ことから起きています。値とサイズは規則と完全一致、文字の近さは品名だけ、と分けてあるかで、運用に乗るかが決まります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 部品マスタ(部品コード、メーカー、品番、仕様、状態)、登録の依頼(設計者、機種、使う部品)です。個人の情報は設計者の名前だけです。
- 新しい機種の部品構成を外へ出しすぎない … 登録の依頼には、発表前の機種の名前と使う部品が並びます。Claude API に渡すのは、規則で分けられなかった行の仕様の文と品名だけにし、機種の名前と依頼の全体は渡しません
- 部品マスタは読み取りだけにする … 書き出した写しを索引に入れるだけにし、生産管理のシステムへの書き込みの権限を、この構成に持たせません
- 同等品の判断を代わりにさせない … 同じキーの部品でも、品質保証の承認、顧客の指定、規制への適合(含有物質など)は、この構成では見ていません。 寄せるかどうかは担当と品質保証が決めます
- 辞書と規則の変更を記録する … 版と適用した日付を残し、変更の前後で判定を比べられるようにします
- 索引の閲覧を社内に限る … ドメインはVPCの中に置き、検索の画面は購買と設計の利用者に限ります
誤りが起きた場合のリスクは、違う部品を同じコードに寄せることと、同じ部品を新しいコードで登録することの2つです。 前者は基板に違う部品が載る誤りで、後者は在庫と発注が割れる誤りです。前者のほうが重いので、迷う候補は different 寄りに扱い、寄せる判断は人が行います。
10まず何から始めるか
1週目:依頼の書式を直す
登録の依頼の書式に、サイズの表記の系(インチ/メートル)の欄と、部品の種類の欄を足します。あわせて、単位と接頭辞の表と、チップのサイズの対応表を作ります。
2週目:50行で試す
過去3か月の依頼から、後で重複と分かったものを含めて50行を選び、Python の規則で仕様のキーを作って部品マスタと突き合わせます。重複を見つけられたか、別の部品を同じとしていないかを最優先で見ます。
3週目:見分けの決まりを決める
same/equivalent/different をどの項目の一致で分けるかを、購買と品質保証で決めます。 メーカー違いの同等品を同じコードに寄せてよい条件も、ここで決めます。
4週目:索引を作る
OpenSearch に部品マスタを入れ、メーカー品番の normalizer、仕様のキー、品名の kuromoji と同義語の辞書を設定します。この時点では3段の照合の候補を一覧に出すだけにし、分け方は出しません。
2か月目: 規則で分けられない行に Claude API を足し、same/equivalent/different の分け方を出します。3か月目以降: 担当が手で見つけた書き方から同義語の辞書と規則を毎月足し、1行12分が何分になったかを実測します。手で見つける行が毎月減っていき、同じキーの重複の組をまとめ終えた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Japanese (kuromoji) Analysis と ICU Analysis がすべてのドメインに含まれ、Sudachi Analysis が日本語に推奨されるオプションのプラグインであること | AWS: Plugins by engine version in Amazon OpenSearch Service | 2026-10-15 |
同義語の辞書を S3 からパッケージとして取り込み、synonyms_path に analyzers/<ID> を指定すること。updateable: true が検索の側の analyzer でだけ働き、パッケージの更新時に自動で反映されること。S3 に新しい版を置くだけでは更新されないこと。索引の側の analyzer では閉じて開くか索引の作り直しが要ること | AWS: Importing and managing packages in Amazon OpenSearch Service | 2026-10-15 |
normalizer が1つのトークンだけを出し、文字単位の操作に限られ、同義語の置き換えができないこと。使える文字フィルタ(pattern_replace、mapping)とトークンフィルタ(lowercase、uppercase、cjk_width、icu_normalizer など) | OpenSearch: Normalizers | 2026-10-15 |
synonym_graph が複数語の同義語を扱い、検索の側の analyzer でだけ使うべきこと(索引の側では後ろの語の位置がずれること) | OpenSearch: Synonym graph token filter | 2026-10-15 |
pattern_replace の文字フィルタが正規表現で文字を置き換え・削除し、トークンに分ける前の正規化に使えること | OpenSearch: Pattern replace character filter | 2026-10-15 |
fuzzy が Damerau–Levenshtein の距離で似た語を探し、fuzziness の既定が AUTO、max_expansions の既定が50、prefix_length の既定が0であること | OpenSearch: Fuzzy query | 2026-10-15 |
構造化出力を output_config.format(type: json_schema)で指定すること。enum、required、additionalProperties: false に対応し、minimum/maximum、minLength/maxLength に対応せず400エラーになること | Claude: Structured outputs | 2026-10-15 |
メーカー違いの同等品を同じコードに寄せてよいかは、購買と品質保証で決めてください。 本記事は公式のページで確認できた範囲だけを扱っています。チップのサイズの表記や3桁の数字の表記の読み方は、使う部品メーカーのカタログで確かめてください。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1635)についてのご相談はこちらから。
