ねじ・ファスナーの商社の営業が、客先からの呼び径・長さ・材質のあいまいな問い合わせを OpenSearch で引き、合う品番の候補と外れた条件を並べる
客先から届く「M6のキャップ、ステン、長さ20くらい」のような問い合わせを、品名・呼び径・ピッチ・長さ・材質・表面処理に読み替え、品番の候補を探します。候補ごとに、合った条件と外れた条件、確かめる点を並べます。
- 生成AI
- Azure OpenAI Service/ChatGPT/Claude
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- 商社/建設/製造
- 対象部門
- 営業
- 対象業務
- 問い合わせ対応/情報検索
- 主な課題
- 問い合わせが多い/属人化している/確認ミスが多い
- AIで行う処理
- 検索(RAG)
- 主な効果
- 入力漏れ削減/対応スピード向上/属人化解消
- 導入難易度
- ★★★★☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 営業が問い合わせを受け、品名・呼び径・長さ・材質・表面処理・数量をメモする
- 呼び方を自分の知っている品名に読み替え、販売の管理の仕組みで品名と呼び径で引く
- 出てきた行から、長さ・材質・表面処理の合う品番を目で探す
- 合う品番が無ければ、条件を1つずつ緩めて引き直し、近い品番を探す
- ピッチ・ねじ部の形が書かれていなければ、客先に聞き返す
- 在庫と納期を確かめ、品番の候補と違う点を客先に返す
- 人営業が問い合わせの文か電話のメモを画面に貼り、検索のボタンを押す
- 自動生成AIが問い合わせから、品名・呼び径・ピッチ・長さ・材質・表面処理・ねじ部の形・数量を書かれたまま取り出す
- 自動Lambda が呼び径とピッチと長さを区分と数にそろえ、書かれていない区分を `unknown` にする
- 自動OpenSearch が品名(呼び方の辞書付き)と呼び径で絞り、長さの幅で絞り、材質・表面処理・ねじ部の形を名前付きの条件として点数を付ける
- 自動Lambda が候補ごとに、合った条件と外れた条件を `matched_queries` から並べ、確かめる点を作る
- 自動生成AIが候補と外れた条件を記録のまま並べ、客先への返事の下書きを作る
- 人営業が候補と確かめる点を見て、在庫と納期を確かめ、返事を送る
各工程の詳しい説明を読む
- 営業が問い合わせを受け、品名・呼び径・長さ・材質・表面処理・数量をメモする
- 呼び方を自分の知っている品名に読み替え、販売の管理の仕組みで品名と呼び径で引く
- 出てきた行から、長さ・材質・表面処理の合う品番を目で探す
- 合う品番が無ければ、条件を1つずつ緩めて引き直し、近い品番を探す
- ピッチ・ねじ部の形が書かれていなければ、客先に聞き返す
- 在庫と納期を確かめ、品番の候補と違う点を客先に返す
(a)呼び方の読み替えが記憶頼み。 2番目は、客先の呼び方を知っている営業にしかできません。読み替えを間違えると、在庫があるのに「ありません」と返します。
(b)ピッチの確かめ漏れ。 呼び径だけを聞いて並目の品番を返し、客先の機械が細目だったと後で分かることがあります。返品と再出荷の手間がかかり、客先の現場も止まります。
(c)外れた条件を伝え忘れる。 4番目で条件を緩めて見つけた品番を返すとき、どの条件を緩めたかを書き忘れると、客先は全部の条件が合っていると思って注文します。
(d)問い合わせが重なると返事が遅れる。 午前中に問い合わせが集中し、1件10分でも、1人が抱える問い合わせが10件を超えると、昼過ぎまで返事が出ません。
- 【人】 営業が問い合わせの文か電話のメモを画面に貼り、検索のボタンを押す
- 【自動】 生成AIが問い合わせから、品名・呼び径・ピッチ・長さ・材質・表面処理・ねじ部の形・数量を書かれたまま取り出す
- 【自動】 Lambda が呼び径とピッチと長さを区分と数にそろえ、書かれていない区分を
unknownにする - 【自動】 OpenSearch が品名(呼び方の辞書付き)と呼び径で絞り、長さの幅で絞り、材質・表面処理・ねじ部の形を名前付きの条件として点数を付ける
- 【自動】 Lambda が候補ごとに、合った条件と外れた条件を
matched_queriesから並べ、確かめる点を作る - 【自動】 生成AIが候補と外れた条件を記録のまま並べ、客先への返事の下書きを作る
- 【人】 営業が候補と確かめる点を見て、在庫と納期を確かめ、返事を送る
4番目で材質や表面処理を絞り込みにせず点数にするのは、外れた候補も見せるためです。 材質で絞ると、材質だけ違う在庫の品番が候補から消えます。客先にとっては「材質だけ違う品なら今日出せる」ことが役に立つ場合があります。 外れたことを必ず添えて出します。
7番目で返事を送るのは営業です。 外れた条件のある品で済ませるかを決めるのは客先で、ねじが用途に合うかを、この構成は判断しません。
02今回想定するシステム構成
品番の記録(品番・品名・呼び径・ピッチ・長さ・材質・表面処理・ねじ部の形・規格) 在庫の記録(品番ごとの在庫と入荷の予定) ▼【トリガー】毎晩の取り込み(品番の追加・在庫の変化) AWS Lambda ── 呼び径・ピッチ・長さを区分と数にそろえる ▼ Amazon OpenSearch Service │ 品番の索引:品名(kuromoji+呼び方の辞書)・呼び径・ピッチ・長さ(mm) │ 材質・表面処理・ねじ部の形・在庫の有無 ▼【人】営業が問い合わせを貼る AWS Lambda ├──▶ Claude(Amazon Bedrock)── 問い合わせを仕様の条件に読み替える ├──▶ OpenSearch ── 呼び方と呼び径で絞り、長さの幅で絞り、名前付きの条件で点数 ├──▶ matched_queries から合った条件と外れた条件、確かめる点 ├──▶ Claude(Amazon Bedrock)── 候補と外れた条件を記録のまま並べた返事の下書き ▼ 営業の画面 ──【人】在庫と納期を確かめて返す
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(synonym_graph、カスタムパッケージ、named queries、range) | Azure AI Search、Vertex AI Search(Agent Search) |
| 生成AI | Claude(Amazon Bedrock の Converse API、構造化出力) | Azure OpenAI(Microsoft Foundry)、OpenAI API |
| 連携 | AWS Lambda(取り込み、区分のそろえ、外れた条件の作成、検索の呼び出し) | AWS Step Functions |
| 保管 | Amazon S3(取り込みの写し、呼び方の辞書の元、問い合わせと候補と下書きの記録) | 社内のファイルサーバー |
販売の管理の仕組みには、この構成から書き込みません。 受注の入力と出荷の手配は、営業がいつもの画面で行います。
呼び方の辞書は、営業で作る表です。 客先の呼び方と、自社の品名の対応を並べます。辞書に入れない語の一覧も、同じ表で持ちます(第7章「データの取得方法」)。
03どうやって実装するのか
処理の起点を決める
起点は2つあります。毎晩の品番と在庫の取り込みと、営業の検索のボタンです。
取り込みは、販売の管理の仕組みから品番の追加と在庫の変化を書き出して、索引を更新します。索引の在庫は「あるか無いか」の目安にだけ使い、返事に書く数は必ず照会で取り直します。 日中の出荷で在庫は変わるからです。
検索のボタンは、営業が問い合わせを貼るか電話のメモを打ち込んだ後に押します。FAX は営業が読んで打ち込みます。 呼び方の辞書は、新しい呼び方が見つかるたびに表に足し、月に1回まとめて索引に適用します。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 問い合わせ | 客先の言葉のままの本文、または電話のメモ | 営業が貼る・打ち込む |
| 品番 | 品番、品名、呼び径、ピッチ、長さ(mm)、材質、表面処理、ねじ部の形(全ねじ・半ねじ)、規格 | 品番の記録 |
| 在庫 | 品番ごとの在庫の数、入荷の予定 | 在庫の記録(照会) |
| 呼び方の辞書 | 「キャップ」「キャップボルト」→六角穴付きボルト、「ステン」「SUS」→ステンレス などの言い換え | 営業で作る表 |
| 辞書に入れない語の一覧 | 「並目」と「細目」、「SUS304」と「SUS316」、ミリねじとインチねじなど、近くても別の品の語 | 営業で作る表 |
質を決めるのは、品番の記録のピッチと材質の項目です。 ピッチが空の品番は、並目か細目かを候補の時点で示せません。取り込みのときに空の数を数え、空の品番は画面に「ピッチの記録なし」と出します。
客先の会社名と担当者名は、生成AIに渡しません。 問い合わせの本文に書かれていれば伏せ、仕様の言葉と数量だけを渡します。
データの取得方法を決める
| 取るもの | どこから | どう取るか |
|---|---|---|
| 呼び方が合う品番 | 品番の索引 | must の match(name。検索の分析器で呼び方の辞書を使う) |
| 呼び径が合う品番 | 品番の索引 | filter の term(size) |
| 長さが幅に入る品番 | 品番の索引 | filter の range(length_mm) |
| 材質・表面処理・ねじ部の形・ピッチ | 品番の索引 | should の term(それぞれに _name を付ける) |
| 合った条件 | 検索の結果 | 各候補の matched_queries |
呼び方の辞書は synonym_graph で、検索の分析器にだけ使います。 OpenSearch の公式のドキュメントでは、synonym_graph は検索の分析器でだけ使うべきで、索引の分析器で使うと複数の語の同義語が後ろの語の位置をずらす、とされています。辞書は S3 に置き、OpenSearch Service のカスタムパッケージとして取り込んで、synonyms_path に analyzers/<パッケージの ID> を指定します。
辞書を更新するときは、S3 に置くだけでは足りません。 AWS の公式ページでは、S3 に新しい版を置いても OpenSearch Service のパッケージは自動では更新されず、パッケージを更新してドメインに適用する必要があるとされています。updateable: true は検索の分析器にだけ使え、後から検索の分析器を自動で更新したいときに要るとされています。
合った条件は、名前付きの検索で拾います。 公式のドキュメントでは、どの検索の句にも _name を付けられ、文書が一致すると、一致にかかわった句の名前が matched_queries の配列で返るとされています。材質・表面処理・ねじ部の形・ピッチの句に名前を付け、返ってこなかった名前を「外れた条件」とします。
GET /fasteners/_search
{
"size": 15,
"_source": ["item_no", "name", "size", "pitch", "length_mm", "material",
"surface", "thread", "in_stock"],
"query": { "bool": {
"must": [
{ "match": { "name": "キャップ" } } ],
"filter": [
{ "term": { "size": "M6" } },
{ "range": { "length_mm": { "gte": 18, "lte": 22 } } } ],
"should": [
{ "term": { "material": { "value": "sus304", "_name": "material" } } },
{ "term": { "thread": { "value": "full", "_name": "thread" } } },
{ "term": { "length_mm": { "value": 20, "_name": "length_exact" } } },
{ "term": { "in_stock": { "value": true, "_name": "in_stock" } } } ] } }
}
should の句は、一致しなくても候補から外れません。 公式のドキュメントでは、bool に must か filter があると minimum_should_match の既定は0で、should の句に一致しなくても文書は返るとされています。一致した should の句は点数を上げるので、条件の多く合う品番が上に来ます。
ピッチは、問い合わせに書かれているときだけ should に入れます。 書かれていなければ句を作らず、確かめる点に回します(第7章「前処理」)。
辞書に入れない語の一覧を、辞書を作るときに必ず見ます。 「並目」と「細目」を同じ語にすると、細目の問い合わせで並目の品番が同じ点数で出ます。呼び方が近くても品の違う語は、辞書の外に置きます。
AIへ渡す前に整形する
- 呼び径をそろえる … 「M6」「m6」「6mm」「M6」を
M6にします。インチの呼び(「3/8」「1/4」など)はinch_3/8のように別の区分にし、ミリねじと混ぜません - ピッチを区分にする … 「並目」「細目」「P1.0」を区分にします。書かれていなければ
unknownにし、並目と見なしません - 長さを数にする … 「長さ20」「L=20」「20mm」を 20 にし、「くらい」「前後」が付いていれば幅を付けます(既定は前後2mm)
- 材質と表面処理を区分にする … 「ステン」「SUS」はステンレスの区分にし、「SUS304」と書かれていればその区分まで細かくします
- ねじ部の形を区分にする … 「全ねじ」「全ネジ」を
full、「半ねじ」をhalfにします。書かれていなければunknownにします
2番目で並目と見なさないのが、第3章の(b)を防ぎます。 呼び径だけの問い合わせは多く、慣れた営業ほど並目と思い込みます。unknown の問い合わせには、確かめる点に「ピッチ(並目か細目か)」を必ず入れます。
4番目で「ステン」をステンレスの区分にとどめるのは、ステンレスの中の区分を推し量らないためです。 問い合わせが「ステン」だけなら、SUS304 も SUS316 も「材質は合う」と出し、確かめる点に「ステンレスの種類」を入れます。 品番の記録の材質の項目は、細かい区分のまま持ちます。
3番目の幅は、営業が画面で変えられるようにします。 長さの決まった品の注文で幅を広げすぎると、合わない長さの品番が上に来ます。
AIに処理させる
AIの仕事は2つです。 問い合わせを仕様の条件に読み替えることと、候補と外れた条件を記録のまま並べた返事の下書きを作ることです。
| させること | させないこと |
|---|---|
| 品名・呼び径・ピッチ・長さ・材質・表面処理・ねじ部の形・数量を書かれたまま取り出す | 書かれていないピッチや材質の種類を、品名や用途から推し量ること |
| 品名を、客先の書き方のまま渡す(辞書は検索の側で使う) | インチの呼びをミリに直すこと |
| 候補ごとに、外れた条件と確かめる点を記録のまま並べる | 外れた条件のある品で「代わりになります」と言うこと |
| 聞き返す項目をまとめる | 強度・耐食・締め付けの条件について書くこと |
「代わりになります」と言わせないのが、この構成でいちばん大事な線です。 材質が SUS316 から SUS304 に変わると、使う場所によっては錆びます。代わりで済むかを決めるのは、使う場所と条件を知っている客先です。 出すのは「材質が違います」という事実だけです。
インチをミリに直させないのも同じ理由です。 「3/8」を近いミリの呼び径に直すと、ねじ山の合わない品番が候補に出ます。
指示内容を固定する
1回目(問い合わせの読み替え)の指示です。
あなたはねじ・ファスナーの商社の営業で、客先からの問い合わせを整理する立場です。
【問い合わせ】から、品番を探すための条件を取り出してください。
【取り出すもの】
- name_raw: 品名。書かれたまま(「キャップ」など)
- size_raw: 呼び径。書かれたまま(「M6」「3/8」など)
- pitch_raw: ピッチ。書かれたまま。無ければ空
- length_raw: 長さ。書かれたまま(「20くらい」など)
- material_raw: 材質。書かれたまま(「ステン」など)
- surface_raw: 表面処理。書かれたまま。無ければ空
- thread_raw: ねじ部の形。書かれたまま。無ければ空
- qty_raw: 数量。書かれたまま
- missing: 書かれていない項目の名前
【厳守事項】
- ピッチ・材質の種類・ねじ部の形が書かれていなければ空にしてください。
品名や用途から推し量らないでください。
- インチの呼びをミリに直さないでください。書かれたまま写してください。
- 長さや数量を計算しないでください。
- 客先の会社名・担当者名は写さないでください。
【問い合わせ】{inquiry_text}
2回目(返事の下書き)の指示です。
あなたはねじ・ファスナーの商社で、客先への返事の下書きを作る立場です。
【候補】は品番の記録と、照会した在庫の数です。
【外れた条件】と【確かめる点】は、システムが作ったものです。
【書き方】
- 候補ごとに、品番・品名・呼び径・ピッチ・長さ・材質・表面処理・
ねじ部の形・在庫の数を、記録の値のまま書いてください。
- 【外れた条件】は候補ごとに、文言を変えずにそのまま書いてください。
- 【確かめる点】は最後にまとめて、文言を変えずに書いてください。
【厳守事項】
- 「代わりになります」「問題ありません」「同等品です」と書かないでください。
- 強度・耐食・締め付けについて書かないでください。
- 記録に無い数字を書かないでください。
【問い合わせの条件】{conditions}
【候補】{candidates}
【外れた条件】{unmatched}
【確かめる点】{check_points}
「外れた条件を文言を変えずに書く」が、2回目の指示の中心です。 AIは「材質が違います(記録:SUS304)」を「材質はステンレスです」のように丸めて書くことがあります。丸めると、外れた条件が合った条件に見えます。 写させて、後で照合します。
出力形式を固定する
Bedrock の Converse API の outputConfig.textFormat に JSON スキーマを渡し、2回目は次の形で受け取ります。
{
"inquiry_no": "",
"conditions": { "name": "", "size": "", "pitch": "coarse | fine | unknown",
"length_mm": 0, "material": "", "thread": "full | half | unknown" },
"candidates": [
{ "item_no": "", "name": "", "size": "", "length_mm": 0, "material": "",
"stock": "", "matched": [""], "unmatched": [""] } ],
"check_points": [""],
"draft": ""
}
AWS の公式ページでは、Converse API の outputConfig.textFormat に JSON スキーマを渡すと応答がスキーマに沿い、enum が使えるとされています。すべての object に additionalProperties: false が要り、数値の minimum・maximum は使えません。 ピッチとねじ部の形は enum で縛り、unknown を必ず選べるようにします。
1つ目の理由は、matched と unmatched を検索の結果と照合できることです。 unmatched は、検索で作った名前のうち matched_queries に無かったものです。下書きの unmatched が Lambda の作ったものと1つでも違えば、下書きを出さずに作り直します。
外れた条件の文は、次の規則で作ります。
| 名前 | 外れたときの文 |
|---|---|
material | 材質が違います(問い合わせ:〜/記録:〜) |
thread | ねじ部の形が違います(問い合わせ:〜/記録:〜) |
length_exact | 長さが違います(問い合わせ:〜/記録:〜) |
in_stock | 在庫がありません(入荷の予定:〜) |
確かめる点は、unknown の区分から次のように作ります。
| 区分 | 確かめる点 |
|---|---|
pitch が unknown | ピッチ(並目か細目か)をお知らせください |
| 材質がステンレスの区分だけ | ステンレスの種類をお知らせください |
thread が unknown | 全ねじか半ねじかをお知らせください |
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 販売の管理の仕組み | 毎晩の書き出し、在庫の照会(読み取りのみ) | 品番の索引の元、返事の数 |
| Amazon OpenSearch Service | Lambda からの登録・検索 | 品番の索引、呼び方の辞書のパッケージ |
| Amazon Bedrock | Converse API(Claude) | 読み替えと下書き |
| 営業の画面 | 社内の画面 | 問い合わせの貼り付け、候補と外れた条件、下書き |
返事の送信は、営業がいつものメールか電話で行います。 この構成から客先へ直接送る経路は作りません。
人が確認する
- 読み替えを見る … 呼び径・ピッチ・長さ・材質が、問い合わせのとおりに取り出されているかを確かめます
- 確かめる点を見る … ピッチや材質の種類が分からない問い合わせは、聞き返してから品番を決めます
- 外れた条件を見る … 外れた条件のある候補を返すときは、外れたことが下書きに残っているかを確かめます
- 在庫と納期を確かめる … 照会の数と入荷の予定を確かめて返します
3番目を省かないでください。 第3章の(c)はここで防ぎます。外れた条件を書かずに返すと、客先は全部の条件が合っていると思って注文します。
例外に対処する
| 起きること | 対応 |
|---|---|
| 品名が辞書で読み替えられず0件 | 呼び径と長さだけで引いた件数を示し、品名の言葉を画面に出す。辞書に足す候補として記録する |
| インチの呼び | インチの区分だけで引く。ミリの品番は出さない |
| ピッチの記録が無い品番が当たる | 「ピッチの記録なし」として出し、メーカーのカタログを確かめる |
| 全部の条件が合う品番が無い | 外れた条件の少ない順に出し、外れた条件を必ず添える |
| 図面の部品表で品番の書き方が客先独自 | 客先の品番を読み替えず、仕様の言葉だけで引く。客先の品番との対応は営業が確かめる |
| 照会と索引の在庫が違う | 照会の数を使い、索引は次の取り込みで直る |
| 構造化出力が返らない | 候補の一覧と外れた条件だけを出し、下書きは営業が書く |
4行目が、この構成でいちばん多い例外です。 外れた条件の少ない順に並べても、どの条件が外れてよいかは客先によって違います。 外れた条件を添えて候補を返し、選ぶのは客先に任せます。
記録を残す
- 問い合わせごとの、問い合わせの文(客先の名前を伏せたもの)、1回目の JSON、営業が直した箇所
- 検索の条件、候補、
matched_queries、外れた条件と確かめる点、2回目の JSON と照合の結果 - 返事で出した品番と、客先が注文した品番
- 呼び方の辞書と辞書に入れない語の一覧を更新した日と担当
3つ目は、辞書を育てる材料になります。 候補に出なかった品番を客先が注文していれば、どの呼び方で引けなかったかが分かります。
04実装レベルの3段階
半自動化で、1件10分が6分程度になります。 品番の検索と引き直しはほぼなくなりますが、確かめる点の洗い出しと返事を書く作業が残ります。本格構成で4分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化を1か月使うと、どの呼び方で引けなかったか、どの品番にピッチや材質の記録が無いかが残ります。辞書と記録を整えてから本格構成に進むほうが、候補が確かになります。
05工数削減シミュレーション
導入後 900件 × 4分 ÷ 60 = 60 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- ボルト・ナット・小ねじ・座金などの品番が数万あり、工場・工務店・設備業者からの問い合わせが毎月数百件ある、ねじ・ファスナーの商社。品番の記録には呼び径・長さ・材質・表面処理が入っているのに、客先の呼び方がばらばらで、品番を挙げるのがベテランの営業の記憶に頼っている場合。ピッチや材質の確かめ漏れで、違う品番を出荷したことがある場合。AWS を使える担当か委託先がいる場合。
- 品番が数百で、営業が全部の品番を把握している場合。品番の記録が品名の文字だけで、呼び径・長さ・材質が項目に分かれていない場合(先に品番の記録を整えます)。問い合わせの大半が客先の品番の指定で、仕様の言葉で探すことがほとんど無い場合。なお、ねじが用途に合うか(強度・耐食・締め付けの条件)の判断、図面の読み取り、代わりの品で済ませるかの判断は、この構成では代替できません。品番の記録から候補を探し、合った条件と外れた条件を記録のまま並べるまでです。
07最小構成で試す方法
- 先月の問い合わせから30件を選ぶ(呼び方の違うもの、ピッチの書かれていないもの、インチのものを混ぜる)
- それぞれについて、営業が当時返した品番と、聞き返した項目を書き出す
- よく出る2,000品番について、品名・呼び径・ピッチ・長さ・材質・ねじ部の形を表計算に書き出す
- 30件の問い合わせを手元のAIサービスに貼り、「品名・呼び径・ピッチ・長さ・材質を書かれたまま取り出してください。推し量らず、インチをミリに直さないでください」と指示する(客先の名前は伏せてから貼ります)
- 取り出した条件で表計算を引き、当時返した品番が見つかるかを見る
- ピッチが書かれていなかった問い合わせの数と、当時聞き返したかを数える
6番目で聞き返していない件が多ければ、確かめる点を出すことの効き目がそのまま見えます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の品番が見つかり、外れた条件も並べられた | OpenSearch の索引に進む |
| ピッチを推し量った・インチを直した | 指示の書き方で直る。構成は有効 |
| 品番の記録にピッチや材質が無いものが多い | 品番の記録の整備が先 |
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 並目の問い合わせで細目が同じ点数で出る | 並目と細目を辞書に入れない。ピッチは名前付きの条件で見る |
| ピッチが書かれていないのに並目で返す | unknown を残し、確かめる点を必ず入れる |
| インチの呼びでミリの品番が出る | インチを別の区分にし、ミリと混ぜない |
| 材質で絞って、材質だけ違う在庫が消える | 材質は should の名前付きの条件にし、外れた条件として出す |
| 辞書を S3 に置いたのに検索が変わらない | パッケージを更新し、ドメインに適用する |
| 外れた条件が丸められて合ったように見える | 文言のまま写させ、Lambda の文と照合する |
| 辞書を索引の分析器に入れて検索がずれる | synonym_graph は検索の分析器だけに使う |
上の3行は、検索がきれいに動いているように見えて起きる失敗です。 どれも違う品番が合った品番のように出ます。第8章の30件で、当時返した品番が出てくるか、確かめる点が出るかを必ず見てください。
4行目は、逆に候補が足りなく見える失敗です。 条件を全部 filter に入れると、材質だけ違う在庫の品番が候補から消え、「在庫なし」と返すことになります。どの条件を絞り込みにし、どの条件を名前付きの条件にするかは、営業と決めて表にしておきます。 呼び径と長さの幅は絞り込み、材質・表面処理・ねじ部の形は名前付きの条件、が本記事の既定です。
5行目から7行目は、辞書の運用にまつわる失敗です。 辞書の表を直したのに検索が変わらないとき、パッケージの適用を忘れていることがほとんどです。表を直した日と適用した日を、同じ記録に並べて残します。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 客先からの問い合わせ、品番と在庫の記録です。問い合わせには、客先の設備や製品の部品表の一部が含まれることがあります。
- 客先の情報を外す … 客先の会社名・担当者名は Claude に渡しません。図面や部品表をそのまま渡さず、仕様の言葉だけを渡します
- 用途に合うかを判断しない … 強度・耐食・締め付けの条件に合うかは、客先が決めます。下書きに書かせません
- 代わりを勧めない … 外れた条件のある品は、外れたことを添えて示すまでです
- 辞書の手入れの担当を決める … 誤った言い換えが入ると、違う品番が合ったように出ます。足す前に別の営業が確かめます
- 索引への接続を限る … OpenSearch のドメインには、Lambda と営業の画面だけが接続できるようにします
- 返した品番を残す … 返した候補と外れた条件、客先が注文した品番を残します
誤りが起きた場合のリスクは、ピッチや材質の違う品番を合った品番として返すこと、外れた条件を伝え忘れること、AIの文で代わりになると言い切ることの3つです。 unknown と確かめる点、名前付きの条件と照合、代わりを書かせない指示の3つで防ぎます。
10まず何から始めるか
1週目:品番の記録を見る
品番を書き出し、ピッチ・材質・ねじ部の形が空の品番を数えます。問い合わせの多い上位2,000品番から空を埋めます。
2週目:30件で試す
第8章のとおり、先月の問い合わせ30件で、当時返した品番が見つかるかを見ます。ピッチを推し量っていないか、インチを直していないかを最優先で見ます。
3週目:辞書と入れない語の一覧を作る
営業から客先の呼び方を集め、呼び方の辞書を作ります。並目と細目、ステンレスの種類、ミリとインチのように、辞書に入れない語の一覧も同時に作ります。
4週目:索引を作る
OpenSearch に品番の索引を作り、呼び方の辞書と名前付きの条件で引けるようにします。この時点では、確かめる点と下書きは使いません。
2か月目: 確かめる点の規則、在庫の照会、下書きと照合を足します。3か月目以降: 辞書で引けなかった呼び方の数、確かめる点を出した件数、ピッチや材質の違いによる返品の件数を毎月数えます。新しい営業が、ベテランと同じ候補と確かめる点を付けて返事を返せた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
synonym_graph を検索の分析器でだけ使うべきで、索引の分析器で使うと複数の語の同義語が後ろの語の位置をずらすこと | OpenSearch: Synonym graph token filter | 2026-10-28 |
辞書のファイルをパッケージとしてドメインに関連付け、synonyms_path で使えること。S3 に新しい版を置いても自動では更新されず、更新と適用が要ること。updateable: true が検索の分析器にだけ使えること | AWS: Importing and managing packages in Amazon OpenSearch Service | 2026-10-28 |
検索の句に _name を付けられ、一致にかかわった句の名前が matched_queries の配列で返ること | OpenSearch: Named queries | 2026-10-28 |
bool に must か filter があると minimum_should_match の既定が0で、should の句に一致しなくても文書が返り、一致した should の句が点数を上げること | OpenSearch: Boolean query | 2026-10-28 |
range の gte・lte などで項目の値の範囲を問えること | OpenSearch: Range query | 2026-10-28 |
Converse API の outputConfig.textFormat で JSON スキーマに沿った出力が得られ、enum が使えること。additionalProperties: false が要ること。数値の minimum・maximum に対応しないこと | AWS: Structured outputs(Amazon Bedrock) | 2026-10-28 |
ねじが用途に合うか、代わりの品で済ませるかは、客先と営業が使う場所と条件を確かめて判断してください。 本記事は上記の資料で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-2173)についてのご相談はこちらから。
