小売店のスタッフが客から聞かれたあいまいな言葉で、商品の説明・売場の場所・過去の問い合わせ記録を探し、根拠付きで答える
売場で客から「壁の穴をふさぐやつ」「去年の冬にあった梅の飲み物」のようなあいまいな言葉で聞かれたら、スタッフが業務用の端末にその言葉を入れ、候補の商品を売場の場所・在庫・根拠の記録付きで受け取ります。
- 生成AI
- ChatGPT/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- 小売
- 対象部門
- カスタマーサポート
- 対象業務
- 問い合わせ対応/情報検索
- 主な課題
- 人手が足りない/属人化している/情報が見つからない
- AIで行う処理
- 検索(RAG)
- 主な効果
- 対応スピード向上/教育コスト削減/検索時間短縮/機会損失防止
- 導入難易度
- ★★★☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 客から商品を聞かれ、用途や見た目を聞き取る
- 思い当たる品名で、業務用の端末を引く
- 引けなければ、その部門の担当を探して聞くか、内線で聞く
- 担当が分かれば、通路と棚を聞いて客を案内する
- 分からなければ、売場を一緒に歩いて探す
- 見つからなければ、取り寄せできるかを調べるか、お詫びする
- 自動毎晩、商品マスタの変更と棚割の記録を取り込み、商品の説明文から意味のベクトルを作って検索基盤に登録する
- 自動毎晩、各店舗の問い合わせ記録から、客の言葉と解決した商品の組を取り込む
- 人毎月、本部が言い換え辞書の追加の候補を見て、採用したものを辞書に足す
- 人スタッフが、客の言葉をそのまま端末に入れる
- 自動言い換え辞書と意味の近さの両方で、商品と過去の問い合わせ記録を探す
- 自動Claude が、候補の商品を3件まで並べ、根拠と、絞り込むための聞き返しを1つ書く
- 自動候補ごとに、その店の通路・棚・段と在庫数を付けて端末に返す
- 人スタッフが聞き返しを客にして、商品を決めて案内する
- 人解決した商品か「見つからなかった」を端末で1回押す
各工程の詳しい説明を読む
- 客から商品を聞かれ、用途や見た目を聞き取る
- 思い当たる品名で、業務用の端末を引く
- 引けなければ、その部門の担当を探して聞くか、内線で聞く
- 担当が分かれば、通路と棚を聞いて客を案内する
- 分からなければ、売場を一緒に歩いて探す
- 見つからなければ、取り寄せできるかを調べるか、お詫びする
(a)客の言葉と品名が重ならない。 2番目で引けるのは、品名を知っているときだけです。「穴ふさぎ」で引いても「補修材」は出てきません。 半角カナの略称の品名では、カタカナの表記の揺れ(「ドライバー」と「ドライバ」)でも外れます。
(b)答えがベテランの頭の中にある。 3番目で聞く相手は、いつも同じ数人です。その人が休みの日は、同じ質問に答えられません。 パート・アルバイトが入れ替わるたびに、売場を一から覚え直しています。
(c)同じ質問が店をまたいで繰り返される。 「上履きを洗うやつ」は、どの店でも春に聞かれます。ある店のノートに答えがあっても、隣の店のスタッフは知りません。
(d)探している間に客が帰る。 5番目で売場を歩き回る間、客は待っています。見つからないまま帰った客の数は、どこにも記録されていません。
取り込み(毎晩と毎月)
- 【自動】 毎晩、商品マスタの変更と棚割の記録を取り込み、商品の説明文から意味のベクトルを作って検索基盤に登録する
- 【自動】 毎晩、各店舗の問い合わせ記録から、客の言葉と解決した商品の組を取り込む
- 【人】 毎月、本部が言い換え辞書の追加の候補を見て、採用したものを辞書に足す
客に聞かれたとき
- 【人】 スタッフが、客の言葉をそのまま端末に入れる
- 【自動】 言い換え辞書と意味の近さの両方で、商品と過去の問い合わせ記録を探す
- 【自動】 Claude が、候補の商品を3件まで並べ、根拠と、絞り込むための聞き返しを1つ書く
- 【自動】 候補ごとに、その店の通路・棚・段と在庫数を付けて端末に返す
- 【人】 スタッフが聞き返しを客にして、商品を決めて案内する
- 【人】 解決した商品か「見つからなかった」を端末で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 |
| 生成AI | Claude API(候補の整理と聞き返しの文) | Gemini API、OpenAI API |
| 連携 | AWS Lambda(取り込み、棚割と在庫の付与、端末への返却) | AWS Step Functions |
| 端末 | 既存の業務用の端末と在庫の仕組み | ― |
在庫の仕組みと棚割の記録は、読むだけです。 この構成から在庫や棚割を書き換えることはありません。書き込むのは、問い合わせ記録への「解決した商品」の1行だけです。
日本語の解析は、kuromoji で行います。 Amazon OpenSearch Service では、kuromoji の日本語解析の機能がすべてのドメインに入っています。 追加で選べる機能として Sudachi も一覧に載っており、日本語向けとして推奨と書かれています。どちらにするかは、最小構成の段階で自社の品名で試して決めます。
2つの探し方の点数は、検索パイプラインでそろえます。 公式のドキュメントでは、hybrid 検索はキーワードの検索と意味の検索を組み合わせるもので、検索のときに動く検索パイプラインがそれぞれの点数を共通の尺度にそろえて合わせます。 そろえ方の既定は min_max、合わせ方の既定は arithmetic_mean です。
03どうやって実装するのか
処理の起点を決める
取り込みと検索で、起点が2つあります。
取り込みは毎晩です。 商品マスタの新規・廃番・説明文の変更、棚割の変更、前日の問い合わせ記録を読み込みます。棚替えは閉店後に行われることが多く、翌朝の開店までに新しい棚が引ければ足ります。
言い換え辞書の更新は月に1回です。 毎晩足すと、誤った言い換えが翌日には全店に広がります。月に1回、本部が候補をまとめて見て、採用したものだけを足します。
検索は、スタッフが端末に言葉を入れて送ったときに動きます。 客の前に立ったまま使うので、送ってから数秒で返ることを目標にします。 Claude の呼び出しが遅れたときは、検索の結果だけを先に表示します(例外処理)。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 商品マスタ | JANコード、品名(半角カナの略称)、正式名、規格、メーカー、部門、説明文、用途の項目、廃番の印 | 商品マスタ |
| 棚割の記録 | 店舗、JANコード、通路番号、棚、段 | 棚割の記録 |
| 在庫 | 店舗、JANコード、在庫数、取り寄せの可否 | 在庫の仕組み |
| 問い合わせ記録 | 店舗、日時、客の言葉、解決した商品のJANコード、または「見つからなかった」 | 端末の記録(導入後)、問い合わせノート(導入前) |
| 言い換え辞書 | 「穴ふさぎ, 補修材, パテ」のような同じ意味の言葉の組 | 本部が整える |
質を決めるのは、商品の説明文です。 意味の近さで探すとき、比べる相手は説明文です。説明文が空の商品は、品名の略称だけで比べることになり、客の言葉には届きません。 取り込みのときに、説明文が空の商品の数を部門ごとに数えます。
問い合わせ記録は、導入前のノートも取り込みます。 店ごとに書き方は違いますが、「客の言葉」と「最後の商品」の2つが拾えれば使えます。
データの取得方法を決める
商品マスタ、棚割、在庫は、既存の仕組みから毎晩の書き出しを受け取ります。在庫だけは、検索のたびにその店のその商品の数を引き直します。 夜の在庫数では、昼に売り切れた商品を「在庫あり」と答えることになるためです。
索引は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件までを候補の材料にします。「見つからなかった」の記録は候補にしませんが、同じ言葉で何度も見つからなかったことは、答えに添えます。 スタッフは、その質問が店で答えられていない種類だと分かります。
AIへ渡す前に整形する
- 品名の半角カナをそろえる … kuromoji の解析は、最初に
cjk_widthの文字の処理で半角カナを全角カナに、全角英数を半角に変えます。品名の略称は、この処理で客の言葉と同じ文字になります - 長音の揺れをそろえる … kuromoji の解析は、4文字以上のカタカナの語の末尾の長音(ー)を取ります(「ドライバー」と「ドライバ」が同じになる)
- 説明文が空の商品に印を付ける … 部門ごとの件数を本部に返します
- 廃番を外す …
discontinuedの商品は検索の絞り込みで外します。在庫が残っている店のために、索引からは消しません - 問い合わせ記録の個人の情報を外す … 取り寄せの記録に書かれた客の名前や電話番号は、取り込みで消します
- 辞書の候補を作る … 毎月、「見つからなかった」の記録と、解決したが辞書に当たらなかった記録を集めます
1番目と2番目は、自分で処理を書かなくても kuromoji の解析の中で行われます。 公式のドキュメントでは、kuromoji の解析は cjk_width、辞書による分割、活用形を基本形に戻す処理、助詞などの除去、長音の除去、英字の小文字化をこの順に行うとされています。
AIに処理させる
AIの仕事は、検索で出た商品と問い合わせ記録を読んで、候補を3件に絞り、根拠と聞き返しを書くことだけです。 商品を探すのは検索基盤で、売場と在庫を付けるのは Lambda です。
| させること | 中身 |
|---|---|
| 候補の絞り込み | 検索結果の上位から、客の言葉の用途・見た目に合うものを3件まで選ぶ |
| 根拠の書き出し | 候補ごとに、説明文の一節か、過去の問い合わせ記録の番号を添える |
| 聞き返しの1文 | 候補を分けるための質問を1つ(「屋内用ですか、屋外用ですか」) |
| 見つからない旨 | 合う商品が無ければ「候補なし」と書き、近い部門を1つ挙げる |
| させないこと | 理由 |
|---|---|
| 検索結果に無い商品の提案 | 店に無い商品を案内することになる |
| 効き目・安全性の説明 | 医薬品の選び方や電気工事の可否は資格者が答える |
| 売場の場所の記述 | 通路と棚は Lambda が棚割の記録から付ける。AIに書かせると古い棚を答える |
| 在庫の有無の記述 | 在庫数は在庫の仕組みの値をそのまま出す |
| 値段の記述 | 売価は店と時期で変わる。端末の価格表示に任せる |
3行目が、いちばん起きやすい失敗です。 問い合わせ記録に「3番通路にあった」と書かれていると、AIはそれを写します。棚替えの後では、その通路に商品はありません。 売場の場所は、AIの文章の外で、その日の棚割から付けます。
2行目も外せません。 ドラッグストアの売場で「喉が痛いときの」と聞かれたとき、効き目の説明を端末の答えから読み上げることは、資格者の相談の代わりになりません。 該当する部門の商品なら、答えに「薬剤師・登録販売者へ」と必ず添えます。
指示内容を固定する
あなたはホームセンターの売場で、スタッフが客の質問に答えるのを手伝う係です。
渡された検索結果だけを根拠にしてください。一般的な商品の知識で補わないでください。
【客の言葉】{asked_text}
【検索結果】
products:商品の候補(品名、規格、部門、説明文)
inquiries:過去に似た言葉で聞かれ、解決した商品の記録
【書くこと】
1. 候補を3件まで。JANコード、品名、なぜ候補か(説明文の一節か、問い合わせ記録の番号)
2. 候補を分けるための聞き返しを1文だけ
3. 合う商品が無いときは「候補なし」と書き、近い部門を1つ
【厳守事項】
- 検索結果に無い商品を書かないでください。
- 売場の場所(通路・棚)、在庫、値段を書かないでください。別の仕組みが付けます。
- 問い合わせ記録に書かれた通路や棚を写さないでください。
- 効き目、安全性、使ってよいかの判断を書かないでください。
医薬品・医療機器・農薬・電気工事に関わる候補には「資格者に確認」と添えてください。
- 端末の画面は小さいので、1件を40文字以内でまとめてください。
「問い合わせ記録の通路や棚を写さない」を明記しないと、AIは親切に場所を書きます。 根拠として渡した記録の中に場所が書かれているためで、禁じないと、検索結果の中のいちばん具体的な情報として前に出てきます。
検索結果は、Claude の検索結果ブロックで渡します。 商品1つ、問い合わせ記録1件をそれぞれ1つの search_result にし、source にJANコードか記録の番号を入れます。答えの候補が、どの商品と記録から来たかを端末で辿れます。
出力形式を固定する
商品の検索は、次のように組みます。
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 で資格者への引き継ぎを画面の色で出せることです。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 商品マスタ・棚割の記録 | 毎晩の書き出し | 商品、説明文、店ごとの棚 |
| 在庫の仕組み | 検索のたびの照会 | その店のその商品の在庫数と取り寄せの可否 |
| 業務用の端末 | 画面からの呼び出し | 客の言葉を受け、候補を返し、解決した商品を受け取る |
| Amazon OpenSearch Service | 索引への登録と検索 | 商品の索引、問い合わせの索引、点数の正規化 |
| Amazon Bedrock | ML Commons のコネクタ | 説明文と客の言葉のベクトル |
| Claude API | Lambda からの呼び出し | 候補の整理と聞き返し |
人が確認する
この構成の確認は、条件付きです。 売場の案内は、スタッフが商品を手に取って客に見せるところで確かめられます。候補が外れていても、客がその場で違うと言えば済みます。
- 聞き返しを客にする … 候補が複数あるとき、画面の1文で客に聞きます
- 商品を手に取って見せる … 棚で実物を確かめ、客に見せます
needs_qualifiedの候補は資格者へ … 医薬品などは、薬剤師・登録販売者に引き継ぎます- 解決したかを押す … 解決した商品か「見つからなかった」を押します
4番目を省かないでください。 この1回が、次のスタッフの検索の根拠と、毎月の辞書の候補になります。押されなかった質問は、解決したのかどうかが分かりません。 押された割合を店ごとに見て、低い店には使い方を伝え直します。
1件あたり2分を目安にします。 画面を読んで聞き返しをするのに数十秒、棚で実物を確かめて解決を押すのに残りの時間です。
本部は毎月、辞書の候補を確かめます。 「見つからなかった」が多い言葉と、解決したが辞書に当たらなかった言葉を並べ、採用する言い換えを決めます。 1つの言い換えが全店に効くので、ここは必ず人が決めます。
例外に対処する
| 起きること | 対応 |
|---|---|
| 候補が0件 | 「候補なし」と近い部門を返す。記録は「見つからなかった」に残す |
| 候補の在庫が0 | 取り寄せの可否を付けて返す。他店の在庫は別の画面で引く |
| 棚割に無い商品(催事の売場など) | 「売場の記録なし」と返し、部門の担当を表示する |
| 廃番の商品だけが当たる | 後継の商品が商品マスタにあれば添える。無ければ「取扱い終了」 |
| Claude の呼び出しが遅い・失敗 | 検索結果の上位3件を、場所と在庫付きでそのまま表示する |
| 医薬品などの候補 | needs_qualified を立て、効き目の説明を出さない |
| 客の言葉が品番や品名そのもの | 既存の品番・品名の照会の結果を先頭に出す |
| 客が外国語で聞いた | スタッフが聞き取った日本語で入れる。客の言葉の原文は記録に残す |
5行目で検索結果をそのまま出すのは、客の前で待たせないためです。 AIの整理が無くても、候補と売場は出ます。
記録を残す
- 客の言葉、検索の結果、Claude の答え、返した場所と在庫
- スタッフが押した解決の結果(解決した商品、または見つからなかった)
- 辞書の候補と、本部が採用・不採用にした記録
- 店ごと・部門ごとの「見つからなかった」の件数
2つ目は、商品の説明文を直す材料にもなります。 同じ商品がいつも問い合わせ記録の側からしか拾われないなら、その商品の説明文に客の言葉が入っていないということです。
最後の行は、品揃えの見直しの材料になります。 同じ言葉で「見つからなかった」が続くなら、探し方の問題ではなく、その店に置いていない商品を客が求めているということかもしれません。月に1回、部門の担当に返します。
04実装レベルの3段階
半自動化で、①の端末で引けずに担当を探す時間は大きく減ります。 ただし、売場の場所と在庫は別の画面で引きます。本格構成で1件2分になり、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化で1か月使うと、説明文が空の部門と、辞書に足すべき言葉が先に見つかります。そこを直してから問い合わせの索引を足すほうが、候補の質が早く上がります。
05工数削減シミュレーション
導入後 1,800件 × 2分 ÷ 60 = 60 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 品目数が数万を超えるホームセンター・ドラッグストア・家電量販店のチェーンで、客から用途や見た目で商品を聞かれることが多く、答えられるのが売場を長く担当しているスタッフに限られている場合。パート・アルバイトの比率が高く、入れ替わりのたびに売場を覚え直している場合。商品マスタに説明文や特徴の項目があり、店ごとの棚割の記録がある場合。AWS を使っており、検索基盤と取り込みの処理を同じ環境で動かせる場合。
- 品目数が数千に収まり、スタッフが売場をすべて覚えていられる場合。棚割の記録が無く、商品がどの棚にあるかを仕組みで引けない場合。客の質問の多くが商品の効き目や安全性の判断(医薬品の選び方、電気工事の可否など)で、資格を持つ人が答えるべき場合。なお、薬剤師・登録販売者が答えるべき相談と、商品の使い方の安全に関わる判断は、この構成の答えで代えません。
07最小構成で試す方法
- 1つの店舗の問い合わせノートから、客の言葉と最後に見つかった商品の組を30件書き出す
- その30件の商品が属する部門の商品マスタを、品名・規格・説明文の列で表計算に書き出す
- 手元のAIサービスに商品の表を貼り、客の言葉を1つずつ入れて「この表の中から候補を3件まで挙げ、なぜ候補かを説明文の一節で示し、絞り込むための質問を1つ書いてください。表に無い商品は挙げないでください」と指示する
- 当時見つかった商品が3件に入るかを見る
| 出てきた内容 | 判断 |
|---|---|
| 30件の多くで、当時の商品が3件に入る | 索引と hybrid 検索の構築に進む |
| 表に無い商品や一般的な商品名を挙げる | 指示の書き方で直る。構成は有効 |
| 説明文が空で、品名の略称しか手がかりが無い | 説明文の整備が先。 検索の問題ではない |
3行目は、部門によって大きく違います。 説明文が整っている部門から始め、空の多い部門は、問い合わせ記録の側で拾えるかを先に見ます。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 半角カナの品名が客の言葉に当たらない | kuromoji の解析で全角にそろえる |
| 説明文の意味でしか拾えない商品が下に沈む | 片方にしか出ないと点数が半分。weights で意味の側を重くする |
| 辞書を更新しても検索が変わらない | 検索の解析で updateable: true にする。索引の解析では効かない |
| S3 のファイルを替えても辞書が変わらない | S3 に上げるだけでは更新されない。 パッケージを更新して適用する |
| 古い棚を案内する | 場所は棚割の記録から付け、AIに書かせない |
| 夜の在庫数で「在庫あり」と答える | 在庫は検索のたびに引き直す |
| 誤った言い換えが全店に広がる | 辞書は月1回、本部が確かめて足す |
| 医薬品の効き目を画面から読み上げる | 効き目を書かせず、資格者への引き継ぎを出す |
2行目が、この構成でいちばん気づきにくい失敗です。 品名に当たる商品と説明文の意味だけで当たる商品が並ぶと、前者がいつも上に来ます。 客の言葉は品名と重ならないことが多いので、最初から重みを確かめてください。
4行目は、最初の更新でよく起きます。 AWS の公式の説明では、S3 に新しい版を上げてもパッケージは自動では更新されず、ドメインはそれぞれ自分の写しを持ちます。更新と適用を手順に入れておいてください。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 商品マスタ、棚割、在庫(社内の情報)、そして問い合わせ記録の中の客の言葉です。取り寄せの記録には、客の名前や電話番号が書かれていることがあります。
- 問い合わせ記録から個人の情報を外す … 取り込みで名前と電話番号を消します。索引に入るのは、客の言葉と解決した商品だけです
- 資格者の相談の代わりにしない … 医薬品、医療機器、農薬、電気・ガスの工事に関わる候補は、効き目や使ってよいかを出さず、資格者に引き継ぎます
- 辞書の変更を記録する … 誰がいつどの言い換えを足したかを残します。1つの誤りが全店の検索に効きます
- 客の言葉をAIの学習に使う設定にしない … 利用する生成AIのデータの扱いを確かめます
- 在庫と売価の判断を画面の答えに任せない … 在庫は仕組みの値、売価は価格表示に任せます
誤りが起きた場合のリスクは、違う商品や古い棚を案内することと、資格者が答えるべき相談に画面の答えで応じることの2つです。 前者は棚で実物を見せる確認と棚割の付与で、後者は needs_qualified と指示の禁止で防ぎます。
10まず何から始めるか
1週目:説明文の空きを数える
部門ごとに、説明文が空の商品の数を数えます。空の多い部門は、最初の対象から外します。
2週目:30件で試す
1店舗の問い合わせノートの30件で、手元のAIサービスに候補を挙げさせます。表に無い商品を挙げていないかを最優先で見ます。
3週目:辞書の最初の版を作る
ベテランのスタッフに、客によく言われる言い換えを部門ごとに挙げてもらい、言い換え辞書の最初の版にします。採用の基準と、本部で誰が確かめるかを決めます。
4週目:商品の索引と hybrid 検索を作る
説明文の整った部門で、商品の索引と hybrid 検索を作ります。30件の客の言葉で、当時の商品が上位に出るかを見て、weights を調整します。
2か月目: 端末の画面と、棚割・在庫の付与をつなぎ、1店舗で使います。3か月目以降: 問い合わせの索引と解決の記録を足し、全店に広げます。新人のスタッフが、ベテランを探さずに客の言葉から売場まで案内できるようになり、毎月の辞書の更新が回り始めた時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
kuromoji の解析が cjk_width(半角カナを全角に)、search の分割、基本形への変換、助詞などの除去、ストップワード、4文字以上のカタカナの末尾の長音の除去、小文字化をこの順に行うこと | OpenSearch Documentation: Kuromoji analyzer | 2026-10-07 |
synonym_graph が複数語の言い換えを扱え、synonyms か synonyms_path で規則を指定すること | OpenSearch Documentation: Synonym graph token filter | 2026-10-07 |
言い換えなどの辞書のファイルをパッケージとして S3 から取り込めること。updateable が検索の解析にだけ使え、有効なら索引の更新が自動で行われること。S3 に新しい版を上げても自動では更新されないこと | Amazon OpenSearch Service: Importing and managing packages | 2026-10-07 |
| kuromoji の日本語解析がすべてのドメインに含まれ、Sudachi が日本語向けとして推奨される追加の機能として載っていること | Amazon OpenSearch Service: Plugins by engine version | 2026-10-07 |
hybrid 検索がキーワードの検索と意味の検索を組み合わせ、検索パイプラインで点数をそろえて合わせること。取り込みの text_embedding の処理でベクトルを作ること。hybrid クエリに filter を置いて先に絞れること | OpenSearch Documentation: Hybrid search | 2026-10-07 |
正規化の既定が min_max、合わせ方の既定が arithmetic_mean であること。重みを省くと等しい重さになり、片方にしか出ない文書の点数が半分になること。weights の合計が1.0であること | OpenSearch Documentation: Normalization processor | 2026-10-07 |
Amazon OpenSearch Service から Amazon Bedrock の Cohere Embed を、IAM のロールを持たせたコネクタでつなげること。多言語が要る場合に cohere.embed-multilingual-v3 を使えること | OpenSearch Documentation: Semantic search using Cohere Embed on Amazon Bedrock | 2026-10-07 |
検索結果ブロック(source・title・content)で、渡した結果を出典とする引用付きの答えが返ること | Claude Docs: Search results | 2026-10-07 |
医薬品などの相談への対応は、自社の資格者の体制に従ってください。 本記事は公開仕様で確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-0851)についてのご相談はこちらから。
