自動車部品の卸が、整備工場からの注文の純正品番・社外品番・車種・型式から互換品を探し、在庫のある代わりの品を示す
整備工場からの注文で指定の品番が欠品しているとき、品番が無く車種と型式だけのときに、品番の表記をそろえたうえで互換表と適合表から代わりに使える品を探し、営業所ごとの在庫と適合の注記を添えて受注担当に示します。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- その他/商社/小売
- 対象部門
- 営業
- 対象業務
- 情報検索/比較検討
- 主な課題
- 営業フォローが追いつかない/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 対応スピード向上/検索時間短縮/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- メール・電話・FAXで注文を受け、販売管理システムで品番を引く
- 欠品か、品番が見つからなければ、部品メーカーの互換表のCSVを開いて品番で探す
- 当たらなければ、ハイフンや空白を抜いた形、末尾の枝番を外した形で探し直す
- 品番が無い注文は、車種と型式からカタログの適合表を引き、部品名で絞る
- 候補の品番を販売管理システムで引き、営業所ごとの在庫を見る
- 適合の注記(年式の範囲、グレード、装備の有無)を読み、整備工場に確かめることを書き出す
- 整備工場に電話かメールで、代わりの品と確かめたいことを伝える
- 自動毎晩、部品メーカーの互換表と適合表のCSVを取り込み、品番の表記をそろえて索引に入れる
- 人受注担当が、注文の文面(メールの本文、電話のメモ)を受注の画面に貼り、「代わりの品を探す」を押す
- 自動文面から、品番・車種・型式・エンジン型式・年式・部品名・数量を取り出す
- 自動品番があれば互換表で、無ければ型式と部品名で適合表から候補を探す
- 自動候補ごとに、販売管理システムから営業所ごとの在庫を引く
- 自動適合の注記と、整備工場に確かめるべきこと(年式、装備)を並べる
- 人受注担当が候補を選び、確かめることを整備工場に伝えて注文を確定する
各工程の詳しい説明を読む
- メール・電話・FAXで注文を受け、販売管理システムで品番を引く
- 欠品か、品番が見つからなければ、部品メーカーの互換表のCSVを開いて品番で探す
- 当たらなければ、ハイフンや空白を抜いた形、末尾の枝番を外した形で探し直す
- 品番が無い注文は、車種と型式からカタログの適合表を引き、部品名で絞る
- 候補の品番を販売管理システムで引き、営業所ごとの在庫を見る
- 適合の注記(年式の範囲、グレード、装備の有無)を読み、整備工場に確かめることを書き出す
- 整備工場に電話かメールで、代わりの品と確かめたいことを伝える
(a)品番の書き方で当たらない。 3番目が時間を食います。ハイフンの位置、空白、全角と半角、英字の大文字と小文字で、同じ品番が別の文字列になります。互換表はメーカーごとに書き方が違います。
(b)適合表の行をまたいで読み違える。 適合表は「型式・年式の範囲・エンジン型式・注記」が1行です。表を目で追うと、型式の行と年式の行を取り違えます。 取り付けられない品を送ると、返品と再配送で整備工場の作業が半日止まります。
(c)互換を探せる人が限られる。 「このメーカーの品番は、純正の末尾2桁を変えた付け方」と知っている受注担当は、探すのが速い。その人がいない営業所では、同じ注文に倍の時間がかかります。
(d)探している間に注文が逃げる。 1件に10分近くかかると、その間に整備工場は他社に電話します。
- 【自動】 毎晩、部品メーカーの互換表と適合表のCSVを取り込み、品番の表記をそろえて索引に入れる
- 【人】 受注担当が、注文の文面(メールの本文、電話のメモ)を受注の画面に貼り、「代わりの品を探す」を押す
- 【自動】 文面から、品番・車種・型式・エンジン型式・年式・部品名・数量を取り出す
- 【自動】 品番があれば互換表で、無ければ型式と部品名で適合表から候補を探す
- 【自動】 候補ごとに、販売管理システムから営業所ごとの在庫を引く
- 【自動】 適合の注記と、整備工場に確かめるべきこと(年式、装備)を並べる
- 【人】 受注担当が候補を選び、確かめることを整備工場に伝えて注文を確定する
7番目を人が行うのは、取り付けられるかを確かめる最後の手順だからです。 注記に「ABS付き車を除く」と書かれていれば、その車に ABS が付いているかを知っているのは整備工場です。
02今回想定するシステム構成
部品メーカーの互換表・適合表(CSV) ▼【トリガー】毎晩の取り込み AWS Lambda ── 品番の表記をそろえる、適合を1行ずつの組み合わせにする ▼ Amazon OpenSearch Service │ 品番:keyword + normalizer(pattern_replace・cjk_width・uppercase) │ 適合:nested(型式・年式の範囲・エンジン型式・注記) ▼【人】受注の画面で「代わりの品を探す」 AWS Lambda ├──▶ Claude(Amazon Bedrock)── 注文の文面から品番・車両・部品名を取り出す(構造化出力) ├──▶ OpenSearch ── 互換表で探す/適合表で探す/品番の打ち間違いの候補 ├──▶ 販売管理システム ── 営業所ごとの在庫 ▼ 受注の画面 ──【人】候補を選び、整備工場に確かめて確定
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(normalizer、nested、fuzzy) | Azure AI Search、Vertex AI Search(Agent Search) |
| 生成AI | Claude(Amazon Bedrock の Converse API、構造化出力) | Azure OpenAI(Microsoft Foundry)、Gemini API |
| 連携 | AWS Lambda(取り込み、受注の画面からの呼び出し、在庫の照会) | AWS Step Functions |
| 保管 | Amazon S3(部品メーカーから受け取ったCSVの原本) | 社内のファイルサーバー |
販売管理システムには、この構成から書き込みません。 在庫を読むだけで、受注の確定は受注担当がいつもの画面で行います。在庫は索引に入れず、探すたびに販売管理システムに問い合わせます。 在庫は1日に何度も変わり、毎晩の取り込みでは古くなるからです。
品番の表記は、normalizer でそろえます。 normalizer は1つの語だけを出すアナライザーのようなもので、keyword の項目に付けると、term の検索でも入力と索引の両方に同じ処理がかかります。 使えるのは文字単位の処理だけで、pattern_replace と mapping の文字フィルタ、cjk_width・lowercase・uppercase・trim などのフィルタが使えます。言い換えや語幹の処理はできません。
適合は nested でそろえます。 物の配列を普通に入れると、各項目の値が配列ごとにまとめて平らに持たれ、「型式がAで、かつ年式が2019年」という条件が、別々の行の値で満たされてしまいます。 nested にすると各行が別の隠れた文書として持たれ、同じ行の中で条件を満たすものだけが当たります。
03どうやって実装するのか
処理の起点を決める
起点は2つあります。毎晩の取り込みと、受注担当のボタンです。
毎晩の取り込みは、部品メーカーから受け取った互換表と適合表のCSVが S3 に置かれたことで動きます。メーカーごとに更新の頻度が違うので、置かれたファイルだけを入れ直します。 品番の切り替え(旧品番から新品番への変更)が入った表は、旧品番も残したまま新品番を足します。
ボタンは、受注担当が注文の文面を貼った後に押します。欠品が分かった時点で押すのが基本ですが、品番の無い注文では受けた時点で押します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 注文の文面 | メールの本文、電話を受けながら打ったメモ、FAXを見て打ち直したもの | 受注担当が貼る |
| 互換表 | 社外品の品番、ブランド、その品が代わりになる純正品番、品番の切り替えの履歴 | 部品メーカーのCSV |
| 適合表 | 品番、メーカー、車種、型式、年式の範囲、エンジン型式、駆動方式、注記(装備・グレード) | 部品メーカーのCSV |
| 部品名の表 | 部品の区分と、整備工場の呼び方(「パッド」「パット」「ブレーキパッド」) | 受注担当で作る表 |
| 在庫 | 品番ごとの営業所別の在庫数、入荷予定 | 販売管理システム |
質を決めるのは、互換表の「代わりになる純正品番」の列です。 社外品どうしの互換は、同じ純正品番の代わりになるかどうかでつなぎます。社外品のA社の品番で注文が来たら、A社の品が代わりになる純正品番を引き、その純正品番の代わりになるB社の品を探します。純正品番を軸にすると、メーカーが何社増えても表は1つで済みます。
部品名の表は、品番の無い注文のために持ちます。 整備工場の呼び方と部品の区分を対応させます。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 純正品番から代わりの品 | 部品の索引 | oem_part_nos に term(正規化した品番) |
| 社外品番から代わりの品 | 部品の索引 | 社外品の品番で引いた oem_part_nos をもう一度 terms で |
| 型式から候補 | 部品の索引 | nested の fitment に型式・年式の範囲・部品の区分、inner_hits で当たった行 |
| 打ち間違いの候補 | 部品の索引 | 正規化した品番に fuzzy(編集距離1、先頭5文字は固定) |
| 在庫 | 販売管理システム | 候補の品番ごとに、営業所別の在庫数と入荷予定 |
索引の設定と、品番から探す形は次のようになります。
PUT /parts
{
"settings": { "analysis": {
"char_filter": {
"partno_strip": { "type": "pattern_replace",
"pattern": "[\\s\\--‐ー・/]+", "replacement": "" }
},
"normalizer": {
"partno_norm": { "type": "custom", "char_filter": ["partno_strip"],
"filter": ["cjk_width", "uppercase"] }
}
} },
"mappings": { "properties": {
"part_no": { "type": "keyword", "normalizer": "partno_norm" },
"part_no_raw": { "type": "keyword" },
"brand": { "type": "keyword" },
"category": { "type": "keyword" },
"oem_part_nos": { "type": "keyword", "normalizer": "partno_norm" },
"superseded_by":{ "type": "keyword", "normalizer": "partno_norm" },
"fitment": { "type": "nested", "properties": {
"maker": { "type": "keyword" },
"model_code": { "type": "keyword", "normalizer": "partno_norm" },
"engine_code":{ "type": "keyword", "normalizer": "partno_norm" },
"year_from": { "type": "integer" },
"year_to": { "type": "integer" },
"note": { "type": "text" }
} }
} }
}
POST /parts/_search
{ "query": { "bool": { "filter": [
{ "term": { "oem_part_nos": "04465-12345" } } ] } },
"_source": ["part_no_raw", "brand", "category", "oem_part_nos", "superseded_by"] }
pattern_replace は分かち書きの前に文字を置き換えるフィルタで、空白やハイフンを消すのに使えます。 公式の例でも、電話番号の空白・括弧・ハイフンを取り除いています。cjk_width は全角の英数字を半角にするので、全角で打たれた品番も同じ形になります。
ただし pattern_replace は cjk_width より先に動きます。 全角のハイフンや空白は半角になる前に消す必要があるので、正規表現に全角の記号も入れておきます。
型式から探す形は次のとおりです。
POST /parts/_search
{ "query": { "bool": { "filter": [
{ "term": { "category": "brake_pad_front" } },
{ "nested": { "path": "fitment",
"query": { "bool": { "filter": [
{ "term": { "fitment.model_code": "ABC-XY10" } },
{ "range": { "fitment.year_from": { "lte": 2019 } } },
{ "range": { "fitment.year_to": { "gte": 2019 } } } ] } },
"inner_hits": { "_source": ["fitment.model_code", "fitment.engine_code",
"fitment.year_from", "fitment.year_to", "fitment.note"] } } }
] } } }
inner_hits を付けるのは、どの適合の行で当たったかを画面に出すためです。 nested の検索は親の文書を返すだけなので、何も付けないと注記がどの行のものか分かりません。受注担当が読むのは、当たった行の注記だけです。
AIへ渡す前に整形する
- 品番を正規化する … 索引では normalizer がそろえますが、Lambda の側でも同じ規則で正規化した値を作り、画面の表示とログに使います
- 元の表記を残す … 正規化した品番とは別に
part_no_rawに元の表記を残します。整備工場に返すときは元の表記で書きます - 適合表を1行ずつの組み合わせにする … 「2017〜2021年、型式A・B」のように1行に複数の型式が書かれた表は、型式ごとの行に分けます
- 年式を数値にする … 「H29.6〜」「2017/06〜」を西暦の年月の数値にそろえ、「〜現在」は終わりを空けずに当年にします
- 品番の切り替えをつなぐ … 旧品番には
superseded_byに新品番を入れ、旧品番で注文が来ても新品番に行き着くようにします - 注文の文面を取り出す … Claude で品番・車種・型式・年式・部品名・数量を取り出します(次の項)
3番目を軽く見ないでください。 1行に型式を並べたまま入れると、nested にしても、その行の中で型式と年式の組み合わせが崩れます。nested は「行」を守る仕組みで、行の作り方は取り込みの側の仕事です。
AIに処理させる
AIの仕事は、注文の文面から探すための材料を取り出すことだけです。 探すのも、在庫を引くのも、互換を決めるのも、表と検索の仕事です。
| させること | させないこと |
|---|---|
| 文面から品番を書かれたまま取り出す(複数あればすべて) | 品番の補正、桁の補い |
| 車種・型式・エンジン型式・年式を書かれたまま取り出す | 車種から型式を推し量ること |
| 部品名を部品名の表の区分に当てる | 表に無い区分を作ること |
| 取り付けの位置(前・後、左・右)と数量を取り出す | 書かれていない位置を決めること |
| 文面にあって探すのに足りない情報を挙げる | 互換・適合の判断 |
品番を補正させないのは、正規化の規則を1か所に置くためです。 AIが「0446512345」を「04465-12345」と直すと、直し方が規則と食い違ったときに追えなくなります。そろえるのは normalizer と Lambda の規則だけです。
「車種から型式を推し量らせない」が、いちばん大事な線です。 車種の名前が同じでも、型式が違えば適合が違います。型式が書かれていなければ、型式を整備工場に聞くことを missing_info に入れます。
指示内容を固定する
あなたは自動車部品の卸の受注担当を手伝う立場です。
整備工場からの注文の文面から、部品を探すための材料を取り出してください。
文面に書かれていることだけを使い、推測で補わないでください。
【取り出すもの】
- part_numbers: 文面にある品番を、書かれた表記のまま。複数あればすべて
- vehicle: 車種、型式、エンジン型式、年式(書かれた表記のまま)
- category: 部品名を【部品名の表】の区分のどれかに当てる。当てられなければ "unknown"
- position: 前・後、左・右。書かれていなければ "unspecified"
- quantity: 数量。書かれていなければ null
【厳守事項】
- 品番の桁を補う、ハイフンを足す・消す、似た品番に直すことをしないでください。
- 車種の名前から型式やエンジン型式を推し量らないでください。
型式が書かれていなければ、vehicle.model_code を空にして missing_info に入れてください。
- 年式が和暦でも西暦でも、書かれたまま写してください。換算しないでください。
- その部品がその車に付くかどうか、互換があるかどうかは書かないでください。
- 部品の区分が文面から決められないときは "unknown" にし、
missing_info に「部品の区分」と書いてください。
- 文面に複数の車の注文がある場合は、車ごとに orders を分けてください。
【部品名の表】{category_table}
【注文の文面】{order_text}
「年式を換算しない」も、正規化を1か所に置くためです。 和暦から西暦への換算は前処理の規則で行い、AIの出力は文面のままにします。
「車ごとに分ける」は、整備工場の注文の書き方に合わせています。 1通のメールに「A車のパッド、B車のワイパー」と書かれることは珍しくありません。
出力形式を固定する
Bedrock の Converse API の outputConfig.textFormat に JSON スキーマを渡し、次の形で受け取ります。
{
"orders": [
{ "part_numbers": [""],
"vehicle": { "maker": "", "model_name": "", "model_code": "",
"engine_code": "", "year_as_written": "" },
"category": "brake_pad_front | ... | unknown",
"position": "front | rear | left | right | unspecified",
"quantity": null,
"missing_info": [""] }
]
}
1つ目の理由は、探し方を機械で分けられることです。 part_numbers があれば互換表、無ければ model_code と category で適合表、どちらも無ければ検索をせずに missing_info を画面に出します。
2つ目は、category を表の区分に閉じられることです。 スキーマの enum に区分を並べ、表に無い区分が返らないようにします。
3つ目は、missing_info がそのまま整備工場への質問になることです。 「型式」「取り付けの位置」が並べば、受注担当はその2つを電話で聞くだけです。
画面に出す候補の一覧は、検索と在庫の結果から Lambda が作ります。
| 列 | 中身 |
|---|---|
| 候補の品番 | 元の表記(part_no_raw)とブランド |
| 当たり方 | 純正品番の互換/社外品番から純正品番を経由/型式の適合/打ち間違いの候補 |
| 適合の行 | 当たった行の型式・年式の範囲・エンジン型式 |
| 注記 | 当たった行の注記(装備・グレード) |
| 在庫 | 営業所ごとの在庫数と入荷予定 |
| 確かめること | missing_info と注記から作った質問 |
「当たり方」の列が、この一覧でいちばん大事な列です。 純正品番の互換で当たったものと、打ち間違いの候補で当たったものを、同じ重さで並べないためです。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| Amazon S3 | 互換表と適合表のCSVの置き場 | 置かれたことで Lambda が動く |
| Amazon OpenSearch Service | Lambda からの索引への登録と検索 | 部品の索引 |
| Amazon Bedrock | Converse API(Claude) | 注文の文面からの取り出し |
| 販売管理システム | 在庫の照会の口(読み取りのみ) | 営業所ごとの在庫と入荷予定 |
| 受注の画面 | 社内の画面に「代わりの品を探す」を足す | 文面の貼り付けと候補の一覧 |
受注の確定は、販売管理システムのいつもの画面で行います。 この構成が候補の品番を受注に書き込むと、整備工場に確かめる前に確定する経路ができます。
人が確認する
- 当たり方を見る … 純正品番の互換で当たったものから先に見ます。打ち間違いの候補は、整備工場に品番を確かめてから使います
- 注記を読む … 当たった行の注記に装備・グレードの条件があれば、整備工場に確かめます
- 元の表記で返す … 整備工場への返事は、元の表記の品番とブランドで書きます
- 外れを記録する … 整備工場から「付かなかった」と返ってきたら、その品番と型式を記録します
4番目は、互換表の誤りを部品メーカーに伝える材料になります。 互換表は部品メーカーのデータで、卸の側で直すものではありません。
例外に対処する
| 起きること | 対応 |
|---|---|
| 品番も型式も無い注文 | 検索をせず、missing_info を画面に出して整備工場に聞く |
| 品番が互換表に無い | 打ち間違いの候補を出し、「候補」と明示して品番を確かめる |
| 打ち間違いの候補が多すぎる | 先頭の固定の文字数を増やし、それでも多ければ候補を出さない |
| 旧品番で注文が来た | superseded_by の新品番で探し直し、旧品番から切り替わったことを画面に出す |
| 適合の行は当たるが注記に条件がある | 候補に出したうえで、「確かめること」に注記を入れる |
| 在庫の照会に答えが無い | 候補は出し、在庫の欄を「照会できず」にする |
| 構造化出力が返らない | 文面を受注担当が読み、品番を手で入れて検索だけを使う |
| 互換表と適合表で同じ品番の内容が食い違う | 両方を並べ、部品メーカーに問い合わせる一覧に入れる |
打ち間違いの候補は、編集距離を1に絞ります。 fuzzy の検索は編集距離の範囲で語を広げて探すもので、既定の広げる数は50、先頭の文字数を固定しないと広げる数が増えて重くなるとされています。品番は先頭がメーカーと部品の区分を表すことが多いので、先頭を固定します。
記録を残す
- 探すたびの、注文の文面、取り出した JSON、正規化した品番
- 当たった候補と当たり方、当たった適合の行
- 受注担当が選んだ候補と、選ばなかった候補
- 整備工場から「付かなかった」と返ってきた品番と型式
- 取り込んだ互換表と適合表の版(メーカーごとの受け取り日)
互換表の版を残すのは、外れたときにどの表で探したかを示すためです。 部品メーカーに問い合わせるときに、いつ受け取った表のどの行で当たったかが要ります。
04実装レベルの3段階
半自動化で、1件9分が5分程度になります。 表を引き直す時間は減りますが、文面から品番と型式を拾って打ち込む作業と、候補ごとに在庫を見る作業が残ります。本格構成で3分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の画面を1か月使うと、どのメーカーの表で当たらないことが多いか、どの型式の書き方で外れるかが先に分かります。取り込みの規則を直してから文面の取り出しを足すほうが、取り出しの誤りと表の誤りを分けて見られます。両方を一度に入れると、外れたときにどちらの問題かが分かりません。
05工数削減シミュレーション
導入後 600件 × 3分 ÷ 60 = 30 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 整備工場・板金工場・ガソリンスタンドに補修部品を配送している地域の部品商・卸で、純正部品と社外品(優良部品)を両方扱い、指定の品番が欠品したときに代わりの品を探す問い合わせが毎日ある場合。部品メーカーの互換表と適合表をデータで受け取っているが、品番の書き方がメーカーごとにばらばらで、探せるのが経験の長い受注担当だけになっている場合。AWS を使える担当か委託先がいる場合。
- 扱う品目が純正部品だけで、代わりの品を提案する場面がほとんどない場合。互換表と適合表をデータで持っておらず、紙のカタログだけで探している場合(先にデータの入手から始めます)。受注が月に数十件の規模。なお、その部品がその車に取り付けられるかの最終の判断、取り付けの可否と保安基準への適合の判断は、この構成では代替できません。互換表と適合表に書かれた内容を探して示すまでです。
07最小構成で試す方法
- 先月、代わりの品を探した注文から50件を選ぶ(品番あり・品番なしを半分ずつ)
- 受注担当に、それぞれ最終的にどの品を出したかを書き出してもらう
- 互換表のCSVの品番の列を、表計算でハイフン・空白を消し、全角を半角に、英字を大文字にした列を足す
- 50件の品番を同じ規則で直し、足した列で引いてみる
- 品番の無い25件は、手元のAIサービスに文面を貼り、品番・型式・部品名を取り出させて比べる
3番目と4番目だけで、効果の大半が分かります。 品番の表記をそろえるだけで当たる件数が増えれば、検索の仕組みに進む理由になります。2番目の書き出しは必ず先に済ませてください。 受注担当が実際に出した品が答えで、それと比べないと「当たった」の意味が決まりません。5番目では、AIが品番を直していないか、型式を推し量っていないかを最優先で見ます。
| 出てきた内容 | 判断 |
|---|---|
| 表記をそろえると当たる件数が増えた | OpenSearch の索引に進む |
| 品番の無い注文で、型式が取り出せない | 整備工場の書き方の問題。型式を書いてもらう依頼が先 |
| 互換表に、そもそも代わりの品が無い | データの入手が先。 部品メーカーに互換表を依頼する |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 全角のハイフンが残って当たらない | pattern_replace は cjk_width より先に動く。正規表現に全角の記号を入れる |
| normalizer で言い換えをしようとした | normalizer は文字単位の処理だけ。部品名の言い換えは text の項目で別に扱う |
| 型式と年式が別の行で当たる | 適合を nested にする。普通の配列は値が平らにまとめられる |
| 1行に複数の型式が書かれた表 | 取り込みで型式ごとの行に分ける |
| どの行で当たったか分からない | inner_hits を付けて、当たった行の注記を出す |
| 打ち間違いの候補が重い・多い | fuzzy の編集距離を1、先頭の文字数を固定する |
| 旧品番で当たらない | superseded_by で新品番につなぐ |
| AIが品番を直してしまう | 「表記のまま」を指示し、正規化は規則の側だけで行う |
| 在庫が古い | 索引に入れず、探すたびに販売管理システムに聞く |
上の3行が、この構成の失敗のほとんどです。 品番が当たらない失敗は目に見えますが、型式と年式が別の行で当たる失敗は、候補が出てしまうので気づけません。 索引を作ったら、年式の範囲の外の車で探して候補が出ないことを、いくつかの型式で必ず確かめてください。
下の2行も、早いうちに効いてきます。 AIが品番を直すと、正規化の規則と違う直し方が混ざり、同じ注文が日によって当たったり当たらなかったりします。 在庫を索引に入れると、朝の在庫で夕方の注文に答えることになります。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 整備工場の名前と注文の内容、預かっている車の車種・型式・年式、部品の品番と在庫、部品メーカーから受け取った互換表と適合表です。
- 注文の文面の個人の情報を落とす … 整備工場のメールに、車の持ち主の名前や車台番号が書かれていることがあります。探すのに要らない情報は、Claude に渡す前に伏せます
- 互換表の扱いを部品メーカーとの取り決めに合わせる … 互換表と適合表は部品メーカーのデータです。社外へ出さない、他社の仕組みに入れないなど、受け取ったときの条件を確かめておきます
- 取り付けの判断は人が行う … この構成は表に書かれたことを探すだけです。その車に付くかの最後の確認は、受注担当と整備工場が行います
- 打ち間違いの候補を確定に使わない … 候補のまま受注すると、違う品が届きます
- 取引先ごとの注文の傾向を外へ出さない … 探すたびのログには、どの整備工場がどの車を預かり、どの部品をいつ頼んだかが残ります。営業の材料として使う範囲を社内で決め、ログを見られる人を受注と営業の担当に限ります
誤りが起きた場合のリスクは、取り付けられない品を送って整備工場の作業を止めることです。 型式と年式の行を守る nested、当たり方の列、注記の確認の3つで防ぎます。
10まず何から始めるか
1週目:互換表と適合表を集める
扱いの多い部品メーカーから順に、互換表と適合表をCSVで受け取れるかを確かめます。データの受け取りの条件も、このときに確かめます。
2週目:50件で試す
第8章のとおり、表計算で品番の表記をそろえ、先月の50件で当たる件数を比べます。
3週目:取り込みの規則を作る
メーカーごとに、品番の列・型式の列・年式の書き方・注記の列を対応させる表を作ります。1行に複数の型式が書かれた表を、型式ごとの行に分ける規則もここで決めます。
4週目:索引を作る
OpenSearch に normalizer と nested の設定で索引を作り、品番と型式で探す画面を作ります。この時点では注文の文面からの取り出しは使わず、受注担当が品番と型式を打ち込みます。
2か月目: 在庫の照会と、注文の文面からの取り出しを足します。3か月目以降: 整備工場から「付かなかった」と返ってきた件数を毎月数え、1件9分が何分になったかを実測します。部品メーカーへの問い合わせの一覧が月に数件で落ち着いた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
normalizer が1つの語だけを出し、文字単位の処理だけができ、言い換えや語幹の処理ができないこと。term の検索で入力にも処理がかかること。使える文字フィルタ(pattern_replace・mapping)とフィルタ(cjk_width・lowercase・uppercase・trim など) | OpenSearch: Normalizers | 2026-10-15 |
pattern_replace が正規表現で文字を置き換え、分かち書きの前に入力をそろえられること。電話番号の空白・括弧・ハイフンを消す例 | OpenSearch: Pattern replace character filter | 2026-10-15 |
cjk_width が全角の英数字を半角に、半角のカタカナを全角にすること | OpenSearch: CJK width token filter | 2026-10-15 |
| 物の配列が平らにまとめて持たれ、同じ物の中の条件が守られないこと。nested の各物が別の隠れた文書として持たれ、普通の検索では当たらないこと | OpenSearch: Nested field type | 2026-10-15 |
nested の検索が親の文書を返し、inner_hits で当たった物を返せること。score_mode の既定が avg であること | OpenSearch: Nested query | 2026-10-15 |
fuzzy の検索が編集距離の範囲で語を広げ、fuzziness の既定が AUTO、max_expansions の既定が50、prefix_length の既定が0で、広げる数が多いと重くなること | OpenSearch: Fuzzy query | 2026-10-15 |
Converse API の outputConfig.textFormat で JSON スキーマに沿った出力が得られ、enum が使えること。数値・文字列の長さの制約に非対応で400になること | AWS: Structured outputs(Amazon Bedrock) | 2026-10-15 |
その部品がその車に取り付けられるかの判断は、受注担当と整備工場が、部品メーカーの資料を見て行ってください。 本記事は上記の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1639)についてのご相談はこちらから。
