Media > AI活用ユースケース > カスタマーサポート > 小売店のスタッフが客から聞かれたあいまいな言葉で、商品の説明・売場の場所・過去の問い合わせ記録を探し、根拠付きで答える

小売店のスタッフが客から聞かれたあいまいな言葉で、商品の説明・売場の場所・過去の問い合わせ記録を探し、根拠付きで答える

実装ステータス:構成例 技術的に実現可能な構成として設計したもの。自社未検証

売場で客から「壁の穴をふさぐやつ」「去年の冬にあった梅の飲み物」のようなあいまいな言葉で聞かれたら、スタッフが業務用の端末にその言葉を入れ、候補の商品を売場の場所・在庫・根拠の記録付きで受け取ります。

サマリー
生成AI
ChatGPT/Claude/Gemini
AIサービス
Azure AI/Google Vertex AI/OpenSearch
対象業界
小売
対象部門
カスタマーサポート
対象業務
問い合わせ対応/情報検索
主な課題
人手が足りない/属人化している/情報が見つからない
AIで行う処理
検索(RAG)
主な効果
対応スピード向上/教育コスト削減/検索時間短縮/機会損失防止
導入難易度
★★★☆☆
実装レベル
本格構成
費用感
RAG・個別開発(大)
人間の確認
条件付き
現在工数
180h/月
AI導入後
60h/月
想定削減
67%
年間削減
1,440h
モデル条件による試算値です。実在企業の実績ではありません。

01導入前 / 導入後の業務フロー

導入前(Before)
  1. 客から商品を聞かれ、用途や見た目を聞き取る
  2. 思い当たる品名で、業務用の端末を引く
  3. 引けなければ、その部門の担当を探して聞くか、内線で聞く
  4. 担当が分かれば、通路と棚を聞いて客を案内する
  5. 分からなければ、売場を一緒に歩いて探す
  6. 見つからなければ、取り寄せできるかを調べるか、お詫びする
導入後(After)
  1. 自動毎晩、商品マスタの変更と棚割の記録を取り込み、商品の説明文から意味のベクトルを作って検索基盤に登録する
  2. 自動毎晩、各店舗の問い合わせ記録から、客の言葉と解決した商品の組を取り込む
  3. 人毎月、本部が言い換え辞書の追加の候補を見て、採用したものを辞書に足す
  4. 人スタッフが、客の言葉をそのまま端末に入れる
  5. 自動言い換え辞書と意味の近さの両方で、商品と過去の問い合わせ記録を探す
  6. 自動Claude が、候補の商品を3件まで並べ、根拠と、絞り込むための聞き返しを1つ書く
  7. 自動候補ごとに、その店の通路・棚・段と在庫数を付けて端末に返す
  8. 人スタッフが聞き返しを客にして、商品を決めて案内する
  9. 人解決した商品か「見つからなかった」を端末で1回押す
各工程の詳しい説明を読む
  1. 客から商品を聞かれ、用途や見た目を聞き取る
  2. 思い当たる品名で、業務用の端末を引く
  3. 引けなければ、その部門の担当を探して聞くか、内線で聞く
  4. 担当が分かれば、通路と棚を聞いて客を案内する
  5. 分からなければ、売場を一緒に歩いて探す
  6. 見つからなければ、取り寄せできるかを調べるか、お詫びする

(a)客の言葉と品名が重ならない。 2番目で引けるのは、品名を知っているときだけです。「穴ふさぎ」で引いても「補修材」は出てきません。 半角カナの略称の品名では、カタカナの表記の揺れ(「ドライバー」と「ドライバ」)でも外れます。

(b)答えがベテランの頭の中にある。 3番目で聞く相手は、いつも同じ数人です。その人が休みの日は、同じ質問に答えられません。 パート・アルバイトが入れ替わるたびに、売場を一から覚え直しています。

(c)同じ質問が店をまたいで繰り返される。 「上履きを洗うやつ」は、どの店でも春に聞かれます。ある店のノートに答えがあっても、隣の店のスタッフは知りません。

(d)探している間に客が帰る。 5番目で売場を歩き回る間、客は待っています。見つからないまま帰った客の数は、どこにも記録されていません。

取り込み(毎晩と毎月)

  1. 【自動】 毎晩、商品マスタの変更と棚割の記録を取り込み、商品の説明文から意味のベクトルを作って検索基盤に登録する
  2. 【自動】 毎晩、各店舗の問い合わせ記録から、客の言葉と解決した商品の組を取り込む
  3. 【人】 毎月、本部が言い換え辞書の追加の候補を見て、採用したものを辞書に足す

客に聞かれたとき

  1. 【人】 スタッフが、客の言葉をそのまま端末に入れる
  2. 【自動】 言い換え辞書と意味の近さの両方で、商品と過去の問い合わせ記録を探す
  3. 【自動】 Claude が、候補の商品を3件まで並べ、根拠と、絞り込むための聞き返しを1つ書く
  4. 【自動】 候補ごとに、その店の通路・棚・段と在庫数を付けて端末に返す
  5. 【人】 スタッフが聞き返しを客にして、商品を決めて案内する
  6. 【人】 解決した商品か「見つからなかった」を端末で1回押す

9番目が、この設計の分かれ目です。 押すだけで、客の言葉と解決した商品の組が問い合わせ記録に残ります。この記録が次の検索の根拠になり、毎月の辞書の候補になります。 書き残す手間が1回の操作で済まないと、ノートと同じように誰も書かなくなります。

3番目を人に残しているのは、辞書の誤りが全店の検索に効くためです。 「パテ」と「パテックス(接着剤)」を同じ言葉にすると、どの店でも違う商品が並びます。

02今回想定するシステム構成

構成図
【取り込み】商品マスタ/棚割の記録/問い合わせ記録
   ▼【トリガー】毎晩
AWS Lambda ── 品名の正規化、問い合わせ記録の整理
   ▼
Amazon OpenSearch Service
   ├─ 商品の索引(kuromoji、言い換え辞書、説明文のベクトル)
   └─ 問い合わせの索引(客の言葉、解決した商品)

【質問】スタッフが客の言葉を端末に入れる
   ▼
Amazon OpenSearch Service(検索パイプライン:点数の正規化)
   ├─ hybrid:match(言い換え辞書)+ neural(意味の近さ)
   └─ 問い合わせの索引:同じ言葉で解決した商品
   ▼
Claude API ── 候補3件と根拠、聞き返しを1つ
   ▼
Lambda ── その店の通路・棚・段と在庫数を付ける
   ▼
業務用の端末
役割想定する製品代替候補
検索基盤Amazon OpenSearch Service(kuromoji、synonym_graph、hybrid クエリと正規化)Azure AI Search、Vertex AI Search(Agent Search)
埋め込みCohere Embed Multilingual(Amazon Bedrock。ML Commons のコネクタで接続)Amazon Titan Text Embeddings
生成AIClaude API(候補の整理と聞き返しの文)Gemini API、OpenAI API
連携AWS Lambda(取り込み、棚割と在庫の付与、端末への返却)AWS Step Functions
端末既存の業務用の端末と在庫の仕組み―

在庫の仕組みと棚割の記録は、読むだけです。 この構成から在庫や棚割を書き換えることはありません。書き込むのは、問い合わせ記録への「解決した商品」の1行だけです。

日本語の解析は、kuromoji で行います。 Amazon OpenSearch Service では、kuromoji の日本語解析の機能がすべてのドメインに入っています。 追加で選べる機能として Sudachi も一覧に載っており、日本語向けとして推奨と書かれています。どちらにするかは、最小構成の段階で自社の品名で試して決めます。

2つの探し方の点数は、検索パイプラインでそろえます。 公式のドキュメントでは、hybrid 検索はキーワードの検索と意味の検索を組み合わせるもので、検索のときに動く検索パイプラインがそれぞれの点数を共通の尺度にそろえて合わせます。 そろえ方の既定は min_max、合わせ方の既定は arithmetic_mean です。

03どうやって実装するのか

Step1

処理の起点を決める

取り込みと検索で、起点が2つあります。

取り込みは毎晩です。 商品マスタの新規・廃番・説明文の変更、棚割の変更、前日の問い合わせ記録を読み込みます。棚替えは閉店後に行われることが多く、翌朝の開店までに新しい棚が引ければ足ります。

言い換え辞書の更新は月に1回です。 毎晩足すと、誤った言い換えが翌日には全店に広がります。月に1回、本部が候補をまとめて見て、採用したものだけを足します。

検索は、スタッフが端末に言葉を入れて送ったときに動きます。 客の前に立ったまま使うので、送ってから数秒で返ることを目標にします。 Claude の呼び出しが遅れたときは、検索の結果だけを先に表示します(例外処理)。

Step2

入力データを集める

データ中身取得元
商品マスタJANコード、品名(半角カナの略称)、正式名、規格、メーカー、部門、説明文、用途の項目、廃番の印商品マスタ
棚割の記録店舗、JANコード、通路番号、棚、段棚割の記録
在庫店舗、JANコード、在庫数、取り寄せの可否在庫の仕組み
問い合わせ記録店舗、日時、客の言葉、解決した商品のJANコード、または「見つからなかった」端末の記録(導入後)、問い合わせノート(導入前)
言い換え辞書「穴ふさぎ, 補修材, パテ」のような同じ意味の言葉の組本部が整える

質を決めるのは、商品の説明文です。 意味の近さで探すとき、比べる相手は説明文です。説明文が空の商品は、品名の略称だけで比べることになり、客の言葉には届きません。 取り込みのときに、説明文が空の商品の数を部門ごとに数えます。

問い合わせ記録は、導入前のノートも取り込みます。 店ごとに書き方は違いますが、「客の言葉」と「最後の商品」の2つが拾えれば使えます。

Step3

データの取得方法を決める

商品マスタ、棚割、在庫は、既存の仕組みから毎晩の書き出しを受け取ります。在庫だけは、検索のたびにその店のその商品の数を引き直します。 夜の在庫数では、昼に売り切れた商品を「在庫あり」と答えることになるためです。

索引は2つに分けます。

索引1件の単位主な項目
products商品1つ(全店共通)jan、name_kana、name_full、description、description_vec、department、discontinued
inquiries問い合わせ1件store、asked_text、resolved_jan、resolved、asked_at

棚割と在庫は索引に入れません。 店ごとに違い、日々変わるからです。検索で商品が決まってから、その店の通路と在庫を Lambda が引いて付けます。 商品の索引を全店で1つにできるので、30店舗の説明文のベクトルを店の数だけ作らずに済みます。

説明文のベクトルは、取り込みのときに作ります。 公式の手順では、取り込みのパイプラインに text_embedding の処理を置き、指定した項目の文章からベクトルを作って別の項目に入れます。 埋め込みのモデルは、Amazon Bedrock の Cohere Embed を ML Commons のコネクタでつなぎます。公式のチュートリアルでは、多言語が要る場合は cohere.embed-multilingual-v3 を使えるとされています。コネクタは、Bedrock を呼ぶための権限(IAM のロール)を持たせて作ります。

問い合わせの索引は、商品の索引と同じ客の言葉で別に引きます。 当たった記録を解決した商品のJANコードごとにまとめ、件数の多い順に3件までを候補の材料にします。「見つからなかった」の記録は候補にしませんが、同じ言葉で何度も見つからなかったことは、答えに添えます。 スタッフは、その質問が店で答えられていない種類だと分かります。

Step4

AIへ渡す前に整形する

  1. 品名の半角カナをそろえる … kuromoji の解析は、最初に cjk_width の文字の処理で半角カナを全角カナに、全角英数を半角に変えます。品名の略称は、この処理で客の言葉と同じ文字になります
  2. 長音の揺れをそろえる … kuromoji の解析は、4文字以上のカタカナの語の末尾の長音(ー)を取ります(「ドライバー」と「ドライバ」が同じになる)
  3. 説明文が空の商品に印を付ける … 部門ごとの件数を本部に返します
  4. 廃番を外す … discontinued の商品は検索の絞り込みで外します。在庫が残っている店のために、索引からは消しません
  5. 問い合わせ記録の個人の情報を外す … 取り寄せの記録に書かれた客の名前や電話番号は、取り込みで消します
  6. 辞書の候補を作る … 毎月、「見つからなかった」の記録と、解決したが辞書に当たらなかった記録を集めます

1番目と2番目は、自分で処理を書かなくても kuromoji の解析の中で行われます。 公式のドキュメントでは、kuromoji の解析は cjk_width、辞書による分割、活用形を基本形に戻す処理、助詞などの除去、長音の除去、英字の小文字化をこの順に行うとされています。

Step5

AIに処理させる

AIの仕事は、検索で出た商品と問い合わせ記録を読んで、候補を3件に絞り、根拠と聞き返しを書くことだけです。 商品を探すのは検索基盤で、売場と在庫を付けるのは Lambda です。

させること中身
候補の絞り込み検索結果の上位から、客の言葉の用途・見た目に合うものを3件まで選ぶ
根拠の書き出し候補ごとに、説明文の一節か、過去の問い合わせ記録の番号を添える
聞き返しの1文候補を分けるための質問を1つ(「屋内用ですか、屋外用ですか」)
見つからない旨合う商品が無ければ「候補なし」と書き、近い部門を1つ挙げる
させないこと理由
検索結果に無い商品の提案店に無い商品を案内することになる
効き目・安全性の説明医薬品の選び方や電気工事の可否は資格者が答える
売場の場所の記述通路と棚は Lambda が棚割の記録から付ける。AIに書かせると古い棚を答える
在庫の有無の記述在庫数は在庫の仕組みの値をそのまま出す
値段の記述売価は店と時期で変わる。端末の価格表示に任せる

3行目が、いちばん起きやすい失敗です。 問い合わせ記録に「3番通路にあった」と書かれていると、AIはそれを写します。棚替えの後では、その通路に商品はありません。 売場の場所は、AIの文章の外で、その日の棚割から付けます。

2行目も外せません。 ドラッグストアの売場で「喉が痛いときの」と聞かれたとき、効き目の説明を端末の答えから読み上げることは、資格者の相談の代わりになりません。 該当する部門の商品なら、答えに「薬剤師・登録販売者へ」と必ず添えます。

Step6

指示内容を固定する

あなたはホームセンターの売場で、スタッフが客の質問に答えるのを手伝う係です。
渡された検索結果だけを根拠にしてください。一般的な商品の知識で補わないでください。

【客の言葉】{asked_text}
【検索結果】
products:商品の候補(品名、規格、部門、説明文)
inquiries:過去に似た言葉で聞かれ、解決した商品の記録

【書くこと】
1. 候補を3件まで。JANコード、品名、なぜ候補か(説明文の一節か、問い合わせ記録の番号)
2. 候補を分けるための聞き返しを1文だけ
3. 合う商品が無いときは「候補なし」と書き、近い部門を1つ

【厳守事項】
- 検索結果に無い商品を書かないでください。
- 売場の場所(通路・棚)、在庫、値段を書かないでください。別の仕組みが付けます。
- 問い合わせ記録に書かれた通路や棚を写さないでください。
- 効き目、安全性、使ってよいかの判断を書かないでください。
  医薬品・医療機器・農薬・電気工事に関わる候補には「資格者に確認」と添えてください。
- 端末の画面は小さいので、1件を40文字以内でまとめてください。

「問い合わせ記録の通路や棚を写さない」を明記しないと、AIは親切に場所を書きます。 根拠として渡した記録の中に場所が書かれているためで、禁じないと、検索結果の中のいちばん具体的な情報として前に出てきます。

検索結果は、Claude の検索結果ブロックで渡します。 商品1つ、問い合わせ記録1件をそれぞれ1つの search_result にし、source にJANコードか記録の番号を入れます。答えの候補が、どの商品と記録から来たかを端末で辿れます。

Step7

出力形式を固定する

商品の検索は、次のように組みます。

GET /products/_search?search_pipeline=store-hybrid
{
  "size": 20,
  "_source": { "exclude": ["description_vec"] },
  "query": {
    "hybrid": {
      "filter": { "term": { "discontinued": false } },
      "queries": [
        { "multi_match": { "query": "壁の穴をふさぐやつ",
            "fields": ["name_full", "name_kana", "description"] } },
        { "neural": { "description_vec": {
            "query_text": "壁の穴をふさぐやつ", "model_id": "<model_id>", "k": 20 } } }
      ]
    }
  }
}

store-hybrid は、点数の正規化の処理を持つ検索パイプラインです。 公式のドキュメントでは、重みを省くと2つの検索が同じ重さになり、片方の検索にしか出なかった商品は、もう片方の点数が0として平均されるため、点数が半分になります。 品名に当たらず説明文の意味でしか拾えない商品が下がりすぎるときは、weights で意味の側を重くします。重みは足して1.0にする必要があります。

索引の解析は組み込みの kuromoji のままにし、言い換え辞書は検索のときだけ効く解析に置きます。

"analysis": {
  "filter": { "store_synonyms": { "type": "synonym_graph",
      "synonyms_path": "analyzers/F111111111", "updateable": true } },
  "analyzer": { "ja_search": { "type": "custom",
      "tokenizer": "kuromoji_tokenizer",
      "filter": ["cjk_width", "kuromoji_baseform", "kuromoji_stemmer",
                 "store_synonyms", "lowercase"] } }
}

updateable: true は検索の解析にだけ使えます。 AWS の公式の説明では、辞書のファイルをパッケージとして S3 から取り込んで更新し、検索の解析だけで updateable を有効にしていれば、索引の更新は自動で行われるとされています。毎月の辞書の更新で索引を作り直さずに済みます。

端末に返す形は、次のJSONです。

{
  "asked_text": "壁の穴をふさぐやつ",
  "candidates": [
    { "jan": "4900000000000", "name": "", "reason": "説明文:石膏ボードの小さな穴を埋める",
      "source": "product", "aisle": "12", "shelf": "B", "level": 3, "stock": 8 },
    { "jan": "4900000000001", "name": "", "reason": "問い合わせ記録 Q-2026-0412-03",
      "source": "inquiry", "aisle": "12", "shelf": "C", "level": 2, "stock": 0,
      "orderable": true }
  ],
  "ask_back": "穴の大きさは、指より小さいですか、大きいですか",
  "needs_qualified": false,
  "no_match": false
}

1つ目の理由は、aisle・shelf・level・stock をAIの文章と別の項目にできることです。 場所と在庫はその日の値を Lambda が入れ、AIの文章に紛れ込みません。

2つ目は、source で根拠の種類を見せられることです。 説明文から来た候補と、過去に同じ言葉で解決した記録から来た候補では、スタッフが客に勧めるときの確かさが違います。

3つ目は、needs_qualified で資格者への引き継ぎを画面の色で出せることです。

Step8

システムへ連携する

つなぎ先方式内容
商品マスタ・棚割の記録毎晩の書き出し商品、説明文、店ごとの棚
在庫の仕組み検索のたびの照会その店のその商品の在庫数と取り寄せの可否
業務用の端末画面からの呼び出し客の言葉を受け、候補を返し、解決した商品を受け取る
Amazon OpenSearch Service索引への登録と検索商品の索引、問い合わせの索引、点数の正規化
Amazon BedrockML Commons のコネクタ説明文と客の言葉のベクトル
Claude APILambda からの呼び出し候補の整理と聞き返し
Step9

人が確認する

この構成の確認は、条件付きです。 売場の案内は、スタッフが商品を手に取って客に見せるところで確かめられます。候補が外れていても、客がその場で違うと言えば済みます。

  1. 聞き返しを客にする … 候補が複数あるとき、画面の1文で客に聞きます
  2. 商品を手に取って見せる … 棚で実物を確かめ、客に見せます
  3. needs_qualified の候補は資格者へ … 医薬品などは、薬剤師・登録販売者に引き継ぎます
  4. 解決したかを押す … 解決した商品か「見つからなかった」を押します

4番目を省かないでください。 この1回が、次のスタッフの検索の根拠と、毎月の辞書の候補になります。押されなかった質問は、解決したのかどうかが分かりません。 押された割合を店ごとに見て、低い店には使い方を伝え直します。

1件あたり2分を目安にします。 画面を読んで聞き返しをするのに数十秒、棚で実物を確かめて解決を押すのに残りの時間です。

本部は毎月、辞書の候補を確かめます。 「見つからなかった」が多い言葉と、解決したが辞書に当たらなかった言葉を並べ、採用する言い換えを決めます。 1つの言い換えが全店に効くので、ここは必ず人が決めます。

Step10

例外に対処する

起きること対応
候補が0件「候補なし」と近い部門を返す。記録は「見つからなかった」に残す
候補の在庫が0取り寄せの可否を付けて返す。他店の在庫は別の画面で引く
棚割に無い商品(催事の売場など)「売場の記録なし」と返し、部門の担当を表示する
廃番の商品だけが当たる後継の商品が商品マスタにあれば添える。無ければ「取扱い終了」
Claude の呼び出しが遅い・失敗検索結果の上位3件を、場所と在庫付きでそのまま表示する
医薬品などの候補needs_qualified を立て、効き目の説明を出さない
客の言葉が品番や品名そのもの既存の品番・品名の照会の結果を先頭に出す
客が外国語で聞いたスタッフが聞き取った日本語で入れる。客の言葉の原文は記録に残す

5行目で検索結果をそのまま出すのは、客の前で待たせないためです。 AIの整理が無くても、候補と売場は出ます。

Step11

記録を残す

  • 客の言葉、検索の結果、Claude の答え、返した場所と在庫
  • スタッフが押した解決の結果(解決した商品、または見つからなかった)
  • 辞書の候補と、本部が採用・不採用にした記録
  • 店ごと・部門ごとの「見つからなかった」の件数

2つ目は、商品の説明文を直す材料にもなります。 同じ商品がいつも問い合わせ記録の側からしか拾われないなら、その商品の説明文に客の言葉が入っていないということです。

最後の行は、品揃えの見直しの材料になります。 同じ言葉で「見つからなかった」が続くなら、探し方の問題ではなく、その店に置いていない商品を客が求めているということかもしれません。月に1回、部門の担当に返します。

04実装レベルの3段階

最小構成:商品の表をAIサービスに貼り、客の言葉で候補を挙げさせる / 説明文で客の言葉に届くかの確認
半自動化:上記+商品の索引で、言い換え辞書と意味の近さの hybrid 検索を端末から引く / 商品の探し出し
本格構成:上記+問い合わせの索引、候補の整理と聞き返し、棚割と在庫の付与、解決の記録 / 探し出しから案内の材料までの全体

半自動化で、①の端末で引けずに担当を探す時間は大きく減ります。 ただし、売場の場所と在庫は別の画面で引きます。本格構成で1件2分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化で1か月使うと、説明文が空の部門と、辞書に足すべき言葉が先に見つかります。そこを直してから問い合わせの索引を足すほうが、候補の質が早く上がります。

05工数削減シミュレーション

前提値(モデル条件)
対象人数
450 名
月間件数
1,800 件
1件あたり現在時間
6 分
1件あたり導入後時間
2 分
現在  1,800件 × 6分 ÷ 60 = 180 時間/月
導入後 1,800件 × 2分 ÷ 60 = 60 時間/月
月間削減時間
120h
削減率
67%
年間削減時間
1,440h
年間金額換算(時間単価2,000円)
288万円
モデル条件による試算であり、実際の効果は業務内容・運用方法によって異なります。

自社条件で導入効果を整理したい方へ

このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。

AI活用について相談する

06向いている企業・向いていない企業

向いている
  1. 品目数が数万を超えるホームセンター・ドラッグストア・家電量販店のチェーンで、客から用途や見た目で商品を聞かれることが多く、答えられるのが売場を長く担当しているスタッフに限られている場合。パート・アルバイトの比率が高く、入れ替わりのたびに売場を覚え直している場合。商品マスタに説明文や特徴の項目があり、店ごとの棚割の記録がある場合。AWS を使っており、検索基盤と取り込みの処理を同じ環境で動かせる場合。
向いていない
  1. 品目数が数千に収まり、スタッフが売場をすべて覚えていられる場合。棚割の記録が無く、商品がどの棚にあるかを仕組みで引けない場合。客の質問の多くが商品の効き目や安全性の判断(医薬品の選び方、電気工事の可否など)で、資格を持つ人が答えるべき場合。なお、薬剤師・登録販売者が答えるべき相談と、商品の使い方の安全に関わる判断は、この構成の答えで代えません。

07最小構成で試す方法

  1. 1つの店舗の問い合わせノートから、客の言葉と最後に見つかった商品の組を30件書き出す
  2. その30件の商品が属する部門の商品マスタを、品名・規格・説明文の列で表計算に書き出す
  3. 手元のAIサービスに商品の表を貼り、客の言葉を1つずつ入れて「この表の中から候補を3件まで挙げ、なぜ候補かを説明文の一節で示し、絞り込むための質問を1つ書いてください。表に無い商品は挙げないでください」と指示する
  4. 当時見つかった商品が3件に入るかを見る
出てきた内容判断
30件の多くで、当時の商品が3件に入る索引と hybrid 検索の構築に進む
表に無い商品や一般的な商品名を挙げる指示の書き方で直る。構成は有効
説明文が空で、品名の略称しか手がかりが無い説明文の整備が先。 検索の問題ではない

3行目は、部門によって大きく違います。 説明文が整っている部門から始め、空の多い部門は、問い合わせ記録の側で拾えるかを先に見ます。

08実装時につまずきやすいポイント

問題対策
半角カナの品名が客の言葉に当たらないkuromoji の解析で全角にそろえる
説明文の意味でしか拾えない商品が下に沈む片方にしか出ないと点数が半分。weights で意味の側を重くする
辞書を更新しても検索が変わらない検索の解析で updateable: true にする。索引の解析では効かない
S3 のファイルを替えても辞書が変わらないS3 に上げるだけでは更新されない。 パッケージを更新して適用する
古い棚を案内する場所は棚割の記録から付け、AIに書かせない
夜の在庫数で「在庫あり」と答える在庫は検索のたびに引き直す
誤った言い換えが全店に広がる辞書は月1回、本部が確かめて足す
医薬品の効き目を画面から読み上げる効き目を書かせず、資格者への引き継ぎを出す

2行目が、この構成でいちばん気づきにくい失敗です。 品名に当たる商品と説明文の意味だけで当たる商品が並ぶと、前者がいつも上に来ます。 客の言葉は品名と重ならないことが多いので、最初から重みを確かめてください。

4行目は、最初の更新でよく起きます。 AWS の公式の説明では、S3 に新しい版を上げてもパッケージは自動では更新されず、ドメインはそれぞれ自分の写しを持ちます。更新と適用を手順に入れておいてください。

09セキュリティ・AIガバナンス上の注意点

この構成で扱うデータ: 商品マスタ、棚割、在庫(社内の情報)、そして問い合わせ記録の中の客の言葉です。取り寄せの記録には、客の名前や電話番号が書かれていることがあります。

  1. 問い合わせ記録から個人の情報を外す … 取り込みで名前と電話番号を消します。索引に入るのは、客の言葉と解決した商品だけです
  2. 資格者の相談の代わりにしない … 医薬品、医療機器、農薬、電気・ガスの工事に関わる候補は、効き目や使ってよいかを出さず、資格者に引き継ぎます
  3. 辞書の変更を記録する … 誰がいつどの言い換えを足したかを残します。1つの誤りが全店の検索に効きます
  4. 客の言葉をAIの学習に使う設定にしない … 利用する生成AIのデータの扱いを確かめます
  5. 在庫と売価の判断を画面の答えに任せない … 在庫は仕組みの値、売価は価格表示に任せます

誤りが起きた場合のリスクは、違う商品や古い棚を案内することと、資格者が答えるべき相談に画面の答えで応じることの2つです。 前者は棚で実物を見せる確認と棚割の付与で、後者は needs_qualified と指示の禁止で防ぎます。

10まず何から始めるか

1週目:説明文の空きを数える

部門ごとに、説明文が空の商品の数を数えます。空の多い部門は、最初の対象から外します。

2週目:30件で試す

1店舗の問い合わせノートの30件で、手元のAIサービスに候補を挙げさせます。表に無い商品を挙げていないかを最優先で見ます。

3週目:辞書の最初の版を作る

ベテランのスタッフに、客によく言われる言い換えを部門ごとに挙げてもらい、言い換え辞書の最初の版にします。採用の基準と、本部で誰が確かめるかを決めます。

4週目:商品の索引と hybrid 検索を作る

説明文の整った部門で、商品の索引と hybrid 検索を作ります。30件の客の言葉で、当時の商品が上位に出るかを見て、weights を調整します。

2か月目: 端末の画面と、棚割・在庫の付与をつなぎ、1店舗で使います。3か月目以降: 問い合わせの索引と解決の記録を足し、全店に広げます。新人のスタッフが、ベテランを探さずに客の言葉から売場まで案内できるようになり、毎月の辞書の更新が回り始めた時点で、この構成は完成です。


11関連ユースケース

12この仕組みを理解するための記事

13技術仕様の確認日・参考情報

技術仕様確認日:2026-10-07/最終更新:2026-10-07
確認した内容情報源確認日
kuromoji の解析が cjk_width(半角カナを全角に)、search の分割、基本形への変換、助詞などの除去、ストップワード、4文字以上のカタカナの末尾の長音の除去、小文字化をこの順に行うことOpenSearch Documentation: Kuromoji analyzer2026-10-07
synonym_graph が複数語の言い換えを扱え、synonyms か synonyms_path で規則を指定することOpenSearch Documentation: Synonym graph token filter2026-10-07
言い換えなどの辞書のファイルをパッケージとして S3 から取り込めること。updateable が検索の解析にだけ使え、有効なら索引の更新が自動で行われること。S3 に新しい版を上げても自動では更新されないことAmazon OpenSearch Service: Importing and managing packages2026-10-07
kuromoji の日本語解析がすべてのドメインに含まれ、Sudachi が日本語向けとして推奨される追加の機能として載っていることAmazon OpenSearch Service: Plugins by engine version2026-10-07
hybrid 検索がキーワードの検索と意味の検索を組み合わせ、検索パイプラインで点数をそろえて合わせること。取り込みの text_embedding の処理でベクトルを作ること。hybrid クエリに filter を置いて先に絞れることOpenSearch Documentation: Hybrid search2026-10-07
正規化の既定が min_max、合わせ方の既定が arithmetic_mean であること。重みを省くと等しい重さになり、片方にしか出ない文書の点数が半分になること。weights の合計が1.0であることOpenSearch Documentation: Normalization processor2026-10-07
Amazon OpenSearch Service から Amazon Bedrock の Cohere Embed を、IAM のロールを持たせたコネクタでつなげること。多言語が要る場合に cohere.embed-multilingual-v3 を使えることOpenSearch Documentation: Semantic search using Cohere Embed on Amazon Bedrock2026-10-07
検索結果ブロック(source・title・content)で、渡した結果を出典とする引用付きの答えが返ることClaude Docs: Search results2026-10-07

医薬品などの相談への対応は、自社の資格者の体制に従ってください。 本記事は公開仕様で確認できた範囲だけを扱っています。

実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。

自社の業務に使えるAI活用候補を整理します

このユースケース(UC-0851)についてのご相談はこちらから。

AI活用について相談する
目次