ギフトの販売店が引き出物や内祝いの相談に、予算・用途・贈る相手から OpenSearch でカタログを引き、避けるべき品を除いた候補を出す
引き出物や内祝いの相談を受けたときに、用途・予算・個数・届ける日・贈る相手の様子から商品のカタログを引き、在庫と発送までの日数を添えた候補を出します。用途ごとに避ける品は、店の決まりの表で先に除きます。
- 生成AI
- Azure OpenAI Service/Claude/Gemini
- AIサービス
- Azure AI/Google Vertex AI/OpenSearch
- 対象業界
- EC/商社/小売
- 対象部門
- カスタマーサポート/営業
- 対象業務
- 問い合わせ対応/情報検索
- 主な課題
- 判断に時間がかかる/営業フォローが追いつかない/属人化している
- AIで行う処理
- 検索(RAG)
- 主な効果
- 対応スピード向上/属人化解消/機会損失防止
- 導入難易度
- ★★☆☆☆
- 実装レベル
- 本格構成
- 費用感
- RAG・個別開発(大)
- 人間の確認
- 条件付き
01導入前 / 導入後の業務フロー
- 電話やメールで、用途・予算・個数・届ける日・贈る相手の様子を聞き取る
- 紙のカタログと商品管理システムで、用途と予算に合う品を探す
- 用途ごとに避ける品に当たらないかを、担当者の記憶か先輩への確認で見る
- 在庫と発送までの日数、名入れ・のしの対応、賞味期限を商品管理システムで1点ずつ確かめる
- 3〜5点を選び、理由を添えてお客さまに伝えるか、メールで送る
- 自動毎晩、商品管理システムの書き出しを取り込み、商品の索引を更新する。在庫は1時間ごとに更新する
- 人担当者が相談の内容(聞き取りのメモかメールの本文)を画面に貼る
- 自動生成AIが用途・予算・個数・届ける日・相手の様子・避けたいもの・アレルギーを取り出す
- 自動用途から避ける品の決まりを表で引き、予算を価格の幅に、届ける日を発送までの日数に直す
- 自動避ける品を除き、価格・在庫・発送までの日数で絞ってカタログを引く
- 自動生成AIが上位の商品の記録を読み、相談の条件ごとに、どの欄に何が書かれていたかを写して候補にする
- 自動価格・在庫・発送までの日数・名入れとのしの対応を、商品の記録から候補に添える
- 人担当者が候補を確かめ、のしの表書きと贈る時期の作法を添えてお客さまに伝える
各工程の詳しい説明を読む
- 電話やメールで、用途・予算・個数・届ける日・贈る相手の様子を聞き取る
- 紙のカタログと商品管理システムで、用途と予算に合う品を探す
- 用途ごとに避ける品に当たらないかを、担当者の記憶か先輩への確認で見る
- 在庫と発送までの日数、名入れ・のしの対応、賞味期限を商品管理システムで1点ずつ確かめる
- 3〜5点を選び、理由を添えてお客さまに伝えるか、メールで送る
(a)避ける品を覚えている人しか提案できない。 香典返しには慶事を思わせる品を出さない、結婚の内祝いには「切る」「割れる」を連想させる品を出さない、といった決まりは、店の中でも人によって覚えている範囲が違います。 出してしまうと、お客さまの信頼をその場で失います。
(b)言葉を欄に置き換える作業が重い。 「日持ちする」は賞味期限の日数、「重くない」は重さ、「個包装」は説明文の中、と置き換えて1つずつ見ます。6,000点の中から、条件を満たすものを目で拾っています。
(c)予算・届ける日・在庫を別々に確かめている。 候補を選んでから在庫が無い、発送までの日数が足りない、名入れが間に合わないと分かり、選び直しになります。
(d)相談が重なると返事が遅れる。 1件20分かかるので、メールの相談への返事が翌日になることがあります。返事が遅いあいだに、お客さまは他の店に決めています。
- 【自動】 毎晩、商品管理システムの書き出しを取り込み、商品の索引を更新する。在庫は1時間ごとに更新する
- 【人】 担当者が相談の内容(聞き取りのメモかメールの本文)を画面に貼る
- 【自動】 生成AIが用途・予算・個数・届ける日・相手の様子・避けたいもの・アレルギーを取り出す
- 【自動】 用途から避ける品の決まりを表で引き、予算を価格の幅に、届ける日を発送までの日数に直す
- 【自動】 避ける品を除き、価格・在庫・発送までの日数で絞ってカタログを引く
- 【自動】 生成AIが上位の商品の記録を読み、相談の条件ごとに、どの欄に何が書かれていたかを写して候補にする
- 【自動】 価格・在庫・発送までの日数・名入れとのしの対応を、商品の記録から候補に添える
- 【人】 担当者が候補を確かめ、のしの表書きと贈る時期の作法を添えてお客さまに伝える
4番目と5番目が、この設計の分かれ目です。 避ける品は、AIに「ふさわしいか」を判断させるのではなく、店の決まりの表で除外します。 表は経験の長い担当者が作り、変えるときも表を直します。
8番目を残すのは、作法の案内が店の信用そのものだからです。 のしの表書き、香典返しを贈る時期、地域の習わしは、お客さまの事情を聞いた担当者が伝えます。
02今回想定するシステム構成
商品管理システム ── 毎晩の書き出し(商品)、1時間ごと(在庫) ▼ AWS Lambda(取り込み) ▼ Amazon OpenSearch Service │ kuromoji の分かち書き │ 商品の言い換え辞書(検索のときに広げる) │ 用途タグ・避ける品のタグ・価格・在庫・発送までの日数・賞味期限・重さ ▼ 【担当者が相談の内容を貼る】 ▼ Claude(Amazon Bedrock)── 相談から条件を取り出す(JSON) ▼ AWS Lambda ── 避ける品の決まりの表を引き、予算・届ける日を数値に直す ▼ OpenSearch の bool クエリ(filter で価格・在庫・日数、must_not で避ける品) ▼ Claude(Amazon Bedrock)── 商品の記録を読み、条件ごとの根拠を写して候補にする ▼ 【担当者が確かめ、作法を添えてお客さまへ】
| 役割 | 想定する製品 | 代替候補 |
|---|---|---|
| 検索基盤 | Amazon OpenSearch Service(kuromoji、synonym_graph、bool クエリ、range) | 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の原本、避ける品の決まりの表、要望の言葉の表) | 社内のファイルサーバー |
商品管理システムと受注のシステムは置き換えません。 商品の正本は商品管理システムにあり、この構成は検索のための写しを持つだけです。注文の登録は、これまでどおり担当者が受注のシステムで行います。
土台は Amazon OpenSearch Service です。 日本語の分かち書きをする kuromoji のプラグインはすべてのドメインに入っています。この構成では意味の近さの検索(ベクトル)を使いません。 相談の条件のほとんどは価格・日数・タグで表せ、言葉で探すのは説明文の一部だけだからです。
最初の準備は、避ける品の決まりの表と、要望の言葉の表を作ることです。 前者は用途ごとに除く品のタグ、後者は「日持ち」「軽い」「個包装」のような相談の言葉を、どの欄の条件に直すかの表です。どちらも経験の長い担当者の知識を表にする作業です。
03どうやって実装するのか
処理の起点を決める
取り込みは定時、検索は担当者が相談の内容を貼ったときに動きます。 商品の情報は毎晩、在庫は1時間ごとに更新します。在庫だけ間隔を短くするのは、引き出物のように数十個単位の相談では、昼のうちに在庫が足りなくなることがあるからです。
取り込みは、商品管理システムが書き出したCSVが S3 に置かれたことをきっかけに Lambda を動かします。商品の書き出しは全件、在庫は差分で取ります。 商品の廃番や価格の改定を差分で追うと、索引に古い情報が残ります。
検索は、担当者が相談の画面に聞き取りのメモかメールの本文を貼り、「候補を出す」を押したときに動きます。電話の相談は、担当者が聞き取りながら画面のメモ欄に打ちます。 通話の録音を文字にする部分はこの構成に入れません。
入力データを集める
| データ | 中身 | 取得元 |
|---|---|---|
| 商品の記録 | 商品番号、商品名、説明文、分類、税込価格、用途タグ、避ける品のタグ、重さ、賞味期限の日数、個包装か、名入れの可否と日数、のしの対応、アレルゲン | 商品管理システムの書き出し |
| 在庫と発送 | 在庫数、発送までの日数、取り寄せの品か | 商品管理システムの書き出し |
| 避ける品の決まりの表 | 用途ごとに除く避ける品のタグ(例:香典返し → 慶事の品) | 相談窓口が作って S3 に置く |
| 要望の言葉の表 | 「日持ち」「軽い」「個包装」「年配向け」などの言葉と、直す先の条件(賞味期限の日数が何日以上、重さが何g以下など) | 相談窓口が作って S3 に置く |
| 相談の内容 | 聞き取りのメモ、メールの本文 | 担当者が画面に貼る |
質を決めるのは、2行目までの商品の記録のタグと、3行目と4行目の表です。 用途タグと避ける品のタグが付いていない商品は、絞り込みで正しく扱えません。新しい商品を登録するときに、タグを付ける欄を必須にします。
贈る相手の名前と住所は入力に入れません。 候補を出すのに要らないので、担当者がメモに書かないよう画面に注意を出し、貼られた本文からも電話番号とメールアドレスの形の文字列を消してから生成AIに渡します。
データの取得方法を決める
| 取るもの | どこから | 何に使うか |
|---|---|---|
| 商品の全件 | S3 に置かれたCSV | 索引の作り直し |
| 在庫の差分 | 1時間ごとのCSV | 在庫数と発送までの日数の更新 |
| 避ける品の決まりの表 | S3 の表 | 用途から除外の条件を作る |
| 要望の言葉の表 | S3 の表 | 相談の言葉を数値の条件に直す |
| 商品の言い換え辞書 | OpenSearch Service のパッケージ | 「バスタオル」「フェイスタオル」「今治」などの言い換えを検索のときに広げる |
言い換え辞書は、OpenSearch Service のパッケージとして登録します。 テキストの辞書を S3 から取り込んでドメインに関連付け、analyzers/<パッケージID> を synonyms_path に指定します。検索用の分析器に updateable を付けておくと、季節の商品の入れ替えで辞書を足したときに、索引を作り直さずに反映されます。
在庫の差分は、商品番号で索引の文書を部分的に更新します。商品の全件の作り直しと在庫の更新が同じ時間に重ならないよう、全件の作り直しは新しい索引を作って別名を付け替える形にします。
AIへ渡す前に整形する
- 相談の本文から個人の情報を消す … 電話番号、メールアドレス、郵便番号の形の文字列を消します。氏名は消し切れないので、画面で書かないよう案内します
- 用途を店の区分に寄せる … 生成AIが取り出した用途を、店の区分(結婚内祝い、引き出物、出産内祝い、香典返し、快気祝い、法人記念品)の中から選ばせます
- 予算を価格の幅に直す … 「5,000円くらい」は4,500円から5,500円のように、幅の取り方を店の取り決めとして Lambda に書きます
- 頂いた額だけが分かっている場合 … 「3万円頂いた」は、お返しの目安の割合を担当者が確かめてから予算を入れ直します。自動で予算にしません
- 届ける日を日数に直す … 届ける日から今日までの営業日を数え、発送までの日数の上限にします
- 要望の言葉を条件に直す … 「日持ち」は賞味期限の日数が何日以上、「軽い」は重さが何g以下、のように要望の言葉の表で直します
4番目を自動にしないのは、お返しの割合に決まった答えが無いからです。 相手との関係や地域で変わり、お客さまが「半分くらい」と言っても、実際の予算は別の事情で決まることがあります。 頂いた額から予算を計算して検索すると、お客さまが考えていない価格帯の候補が並びます。
6番目で、表に無い言葉は条件にしません。 「おしゃれな」「喜ばれる」は数値に直せないので、説明文に対する言葉の検索にだけ使います。
AIに処理させる
させるのは2つです。相談の内容から条件を取り出すことと、見つかった商品の記録から理由を写すことです。
| 段 | させること | させないこと |
|---|---|---|
| 条件の取り出し | 用途を店の区分から選ぶ。予算・個数・届ける日・相手の様子・避けたいもの・アレルギーを相談の言葉のまま取り出す。要望の言葉を表の一覧から選ぶ | 頂いた額から予算を計算する。表に無い要望の言葉を作る |
| 理由の写し | 候補の商品の記録のどの欄に、相談の条件に当たる言葉がどう書かれていたかを写す | 記録に無い特長を書く。贈り物としてふさわしいかを判断する |
| 並べ替え | 相談の条件にいくつ当たったかで並べる | 避ける品の判断。のしの表書きの決定 |
要望の言葉を、表の一覧から選ばせるのが要です。 構造化出力のスキーマで、要望の言葉を enum(決まった値の一覧)にします。一覧に無い言葉はスキーマの上で返せないので、AIが新しい条件を作ることがありません。 一覧に当たらない要望は other_requests に言葉のまま入れさせ、説明文の検索にだけ使います。
理由の写しでは、商品の記録の文字列をそのまま写させます。 「年配の方にも食べやすい」と書かれていれば、それを写します。写した文字列は Lambda で商品の記録と照らし、見つからなければその理由を消します。
指示内容を固定する
条件の取り出しの指示:
あなたはギフトの専門店の相談窓口で、お客さまの相談の内容から、
商品を探すための条件を取り出す担当です。
【取り出す項目】
- purpose:用途。次の区分から1つ選ぶ。
wedding_return(結婚内祝い)/wedding_favor(引き出物)/
birth_return(出産内祝い)/funeral_return(香典返し)/
recovery_return(快気祝い)/corporate(法人記念品)/unknown
- budget_text:予算について話された言葉をそのまま
- received_amount_text:頂いた額について話された言葉をそのまま
- quantity:個数。分からなければ null
- delivery_text:届ける日・持ち帰りかについて話された言葉をそのまま
- recipient_text:贈る相手の様子について話された言葉をそのまま
- requests:要望の言葉を、決められた一覧から選ぶ
- other_requests:一覧に当たらない要望を、話された言葉のまま
- avoid_text:避けたいと言われたもの
- allergy_text:アレルギーについて話された言葉
【厳守事項】
- 頂いた額から予算を計算しないでください。
received_amount_text に言葉のまま入れてください。
- 用途が相談の内容から分からなければ unknown にしてください。
予算や相手の様子から推し量らないでください。
- 相談に出てこない条件を足さないでください。
- 贈り物としての作法や、避けるべき品についての意見を書かないでください。
- 相手の名前・住所・電話番号を出力に入れないでください。
【相談の内容】{consultation_text}
候補の理由の写しの指示:
あなたは相談窓口で、検索で見つかった商品の記録を読み、
相談の条件に当たる理由を写す担当です。
【相談の条件】{conditions_json}
【検索で見つかった商品の記録】{hits_json}
【やること】
1. 商品ごとに、相談の条件(相手の様子・要望・避けたいもの以外の希望)の
どれに当たるかを見る
2. 当たった条件ごとに、記録のどの欄(name / description / tags)に
何と書かれていたかを、記録の文字列のまま写す
3. 当たらなかった条件は not_found とする
【厳守事項】
- 記録に書かれていない特長を書かないでください。
- 写す文字列は記録の文字列のままにしてください。言い換えないでください。
- 価格・在庫・発送の日数・賞味期限は、こちらで添えるので書かないでください。
- 贈り物としてふさわしいか、のしをどうするかは書かないでください。
1つ目の「頂いた額から計算しない」を書かないと、半分の額を予算として返します。 その数字が正しいかどうかではなく、担当者が確かめていない予算で検索されることが問題です。
2つ目の「価格は書かない」は、ずれを防ぐためです。 価格は Lambda が記録から添えます。AIが写すと、改定前の価格や税抜きの価格を取り違えたときに見分けがつきません。
出力形式を固定する
条件の取り出しは、次の形のJSONで受け取ります。Bedrock の Converse API の outputConfig.textFormat に JSON スキーマを渡します。
{
"purpose": "funeral_return",
"budget_text": "",
"received_amount_text": "1万円",
"quantity": 30,
"delivery_text": "四十九日の前の週に届くように",
"recipient_text": "年配の方が多い",
"requests": ["long_shelf_life", "individually_wrapped"],
"other_requests": ["かさばらないもの"],
"avoid_text": "",
"allergy_text": "小麦がだめな方が1人いる"
}
requests の値は、要望の言葉の表と同じ一覧(long_shelf_life、lightweight、individually_wrapped、name_printing、for_elderly、for_families など)を enum にします。
検索は、この条件を Lambda が次の bool クエリに組み立てます。
| 句 | 中身 |
|---|---|
filter | 用途タグ、価格の幅(range の gte・lte)、在庫数が個数以上、発送までの日数が上限以下、要望の言葉から直した条件(賞味期限の日数、重さ) |
must_not | 避ける品の決まりの表で引いたタグ、アレルギーで除くアレルゲン、お客さまが避けたいと言ったもの |
should | 相手の様子と一覧に当たらない要望の言葉に対する、商品名と説明文の multi_match |
避ける品を must_not に、価格や日数を filter に置くのは、点数に関わらせないためです。 どちらも当たるか当たらないかの条件で、filter と must_not は点数に加わらず、結果が使い回されて速くなります。 並び順は should の当たり具合だけで決まります。
filter があると、should は1つも当たらなくても候補に出ます。 相手の様子の言葉が説明文に1つも無くても、価格と用途が合う商品は並びます。候補が少なすぎることを防ぐための置き方です。
候補の一覧は、次の形で受け取ります。
{
"candidates": [
{
"item_no": "",
"reasons": [
{ "condition": "recipient | other_request",
"status": "matched | not_found",
"field": "name | description | tags",
"quote": "" }
]
}
]
}
Bedrock の構造化出力は数値の範囲や文字列の長さの制約に対応していません。 個数や予算の範囲の確かめは、Lambda の側で行います。
システムへ連携する
| つなぎ先 | 方式 | 内容 |
|---|---|---|
| 商品管理システム | 夜間と1時間ごとのCSVの書き出し | 商品の全件と在庫の差分を S3 に置く |
| Amazon OpenSearch Service | Lambda から索引の作成と検索 | 索引の作り直し、在庫の更新、bool クエリ |
| Amazon Bedrock(Claude) | Lambda から Converse API | 条件の取り出し、理由の写し |
| 相談の画面 | 社内のネットワークからのみ開ける画面 | 相談の内容を貼り、候補を見る |
| 受注のシステム | 書き込みなし | 担当者がこれまでどおり登録する |
受注のシステムへは書き込みません。 候補はあくまで提案の材料で、お客さまが決めた品を登録するのは担当者です。
人が確認する
候補をそのままお客さまに送ることはしません。 担当者が次の順で確かめます。
- 取り出した条件を見る … 用途の区分、予算、届ける日。用途が
unknownなら、お客さまに聞き直します - 頂いた額が書かれていたら、予算を入れ直す … お返しの目安を担当者が確かめて、予算の欄に入れて引き直します
- 除いた品の件数を見る … 避ける品の決まりで何点除かれたかが画面に出ます。0点なら用途の区分の取り違えを疑います
- 候補の価格・在庫・日数を見る … 記録から添えた値で確かめます
- 作法を添えて伝える … のしの表書き、贈る時期の目安、地域の習わしを、担当者の言葉で添えます
3番目を省かないでください。 香典返しの相談で除かれた件数が0なら、用途が別の区分になっています。避ける品が混ざった候補を出すのは、この構成でいちばん避けたい失敗です。
目標は1件6分です。 条件を確かめ、候補から3〜5点を選び、作法を添えて返事にするまでの時間です。
例外に対処する
| 起きること | 対応 |
|---|---|
用途が分からない(unknown) | 検索せず、担当者に聞き直しを促す |
| 予算が分からない | 価格の幅をかけずに引き、価格帯ごとに分けて出す |
| 頂いた額だけが分かっている | 予算を空にして画面に出し、担当者の入力を待つ |
| 候補が0件 | 要望の言葉から直した条件を1つずつ外して引き直し、外した条件を画面に出す |
| 在庫が個数に足りない | 取り寄せの品として別にまとめ、取り寄せの日数を添える |
| 届ける日に間に合う品が無い | 発送までの日数の条件を外した結果を別に出し、「届ける日に間に合わない」と印を付ける |
| 写した理由が商品の記録に無い | その理由を消し、件数を記録する |
| タグが付いていない商品 | 用途タグか避ける品のタグが空の商品は、絞り込みの対象から外し、登録の担当に一覧で知らせる |
| 言い換え辞書の更新が反映されない | updateable を付けていない分析器では、索引を閉じて開き直すか作り直す |
下から2行目が大事です。 避ける品のタグが空の商品を候補に入れると、must_not で除かれずに出てきます。タグが付いていないことは「避けなくてよい」ことではないので、出さない側に倒します。
記録を残す
- 相談ごとの取り出した条件、直した価格の幅と日数、除いた品の件数とタグ
- 送った bool クエリと、返ってきた商品番号と点数
- 生成AIの出力の全文と、商品の記録と照らして消した理由
- 担当者が選んだ候補と、お客さまが決めた品
- 避ける品の決まりの表・要望の言葉の表・言い換え辞書の版
除いた品のタグを残すのは、後から「なぜこの品が出なかったか」を説明するためです。 お客さまから「あの商品は無いのか」と聞かれたときに、決まりで除いたのか、在庫が無かったのかを分けて答えられます。
一覧に当たらなかった要望の言葉は、毎月まとめて見ます。 繰り返し出てくる言葉は、要望の言葉の表に足す候補です。
04実装レベルの3段階
最小構成では件数がさばけません。 表を手で絞るので、確かめるための段階です。 半自動化で、①の探す時間と②の確認がほぼ無くなります。 避ける品が除かれた状態で、予算と届ける日に合う品だけが並ぶからです。本格構成で③④が減り、この段階が本記事の想定です。 段階を飛ばさないでください。 半自動化の1か月で、タグの付いていない商品と、表に無い要望の言葉がそろいます。それを直してから理由の写しを足すほうが、候補の質を見分けやすくなります。
05工数削減シミュレーション
導入後 240件 × 6分 ÷ 60 = 24 時間/月
自社条件で導入効果を整理したい方へ
このユースケースを自社に当てはめた場合の前提値と削減見込みを、業務ヒアリングをもとに整理します。
06向いている企業・向いていない企業
- 引き出物・出産内祝い・香典返し・快気祝い・法人の記念品などのギフトを、店舗と電話・メールの相談窓口で扱い、月に数百件の相談を受けている販売店・カタログギフトの会社・百貨店のギフトサロン。数千点の商品から用途・予算・届ける日に合う品を出せるのが経験の長い担当者だけで、新しい担当者の提案に時間がかかっている場合。商品の情報を商品管理システムから書き出せ、AWS を使える担当か委託先がいる場合。
- 扱う商品が数十点で、担当者が全点を覚えている場合。相談がほとんど通販サイトの画面で完結し、人が提案する場面が無い場合。商品の情報が紙のカタログだけで、価格・在庫・発送の日数をデータで持っていない場合(先にデータ化から始めます)。なお、贈り物としてふさわしいか、のしの表書きや贈る時期の作法をどう案内するかの判断は、この構成では代替できません。店の決まりに沿って商品の記録を探して示すまでです。
07最小構成で試す方法
- 先月の相談から30件を選ぶ(うち数件は、香典返しや結婚の内祝いで避ける品に気を付けたものを入れる)
- 経験の長い担当者に、その30件で出した候補と、避けた品を聞き取る
- 商品管理システムから、価格・用途・賞味期限・重さ・在庫の列を書き出す
- 手元の生成AIの画面に相談の内容を貼り、「用途・予算・個数・届ける日・相手の様子を、話された言葉のまま取り出してください。頂いた額から予算を計算しないでください」と指示する
- 取り出した条件で、書き出した表を手で絞る。避ける品は担当者が作った仮の表で除く
- 当時の候補が残るか、避けた品が除かれているかを突き合わせる
30件は必ずやってください。 索引を作る前に、「条件とタグで絞れば、経験の長い担当者に近い候補になるのか」を確かめます。
| 出てきた内容 | 判断 |
|---|---|
| 当時の候補が絞った結果にほぼ残った | 索引の構築に進む |
| 頂いた額から予算を計算して返した | 指示の書き方で直る。構成は有効 |
| 避ける品のタグが商品に付いておらず、除けない | 商品の記録の側の問題。 タグ付けが先 |
3行目が出ることは珍しくありません。 失敗ではなく、経験の長い担当者が頭の中で付けていたタグが、商品の記録には無かったということです。 30件で除けなかった品の一覧が、そのままタグ付けを始める商品の一覧になります。
あわせて、担当者どうしで避ける品の判断が分かれた例を記録してください。 同じ相談で、ある担当者は避け、別の担当者は出していた品があれば、表を作る前に店としての扱いを決める必要があります。
08実装時につまずきやすいポイント
| 問題 | 対策 |
|---|---|
| 避ける品が候補に混ざる | タグが空の商品を絞り込みの対象から外す。 除いた件数を画面に出す |
| 用途の取り違えで決まりが外れる | 用途が分からなければ unknown にさせ、検索しない |
| 頂いた額から予算を計算する | 指示で禁じ、received_amount_text に言葉のまま入れさせる |
| 要望の言葉をAIが作る | スキーマで enum にする。一覧外は other_requests へ |
| 在庫が昼のうちに足りなくなる | 在庫は1時間ごとに更新し、確定は受注のシステムで確かめる |
| 言い換え辞書を索引の分析器に入れて、句の検索が外れる | synonym_graph は検索の分析器だけに使う |
| 季節の商品の言い換えが反映されない | 検索の分析器に updateable を付ける |
| 価格の幅が担当者ごとに違う | 幅の取り方を Lambda に書き、店の取り決めにする |
| 届ける日に間に合わない品が出る | 営業日で数え、名入れの日数も足して上限にする |
| 理由に記録に無い特長が書かれる | 写した文字列を商品の記録と照らして消す |
上の2行が、この構成の失敗のほとんどです。 どちらも避ける品の扱いで、お客さまの信頼をその場で失う種類の誤りです。 決まりの表とタグの付け方を、店の仕事として持ち続けることが前提です。
下から2行目も早く効いてきます。 名入れの品は、発送までの日数に名入れの日数が加わります。商品の記録の発送までの日数が名入れなしの値なら、名入れを希望する相談では Lambda で足してから上限と比べます。
09セキュリティ・AIガバナンス上の注意点
この構成で扱うデータ: 商品の情報と在庫、相談の内容(用途・予算・贈る相手の様子・アレルギー)、そして相談に書かれうるお客さまと贈る相手の氏名・住所・電話番号です。
- 個人の情報を生成AIに渡さない … 候補を出すのに氏名・住所は要りません。電話番号・メールアドレス・郵便番号の形の文字列を消してから渡し、画面でも書かないよう案内します
- アレルギーの情報の扱い … 健康に関わる情報です。除外の条件に使ったら、相談の記録には「除外あり」とだけ残し、内容は受注のシステムの側で扱います
- 香典返しの相談の扱い … 亡くなった方の情報が書かれることがあります。ログは相談窓口の担当だけが見られる場所に置きます
- 作法の案内を候補の一覧に任せない … のしの表書きや贈る時期の案内は、担当者がお客さまの事情を聞いて伝えます
- アレルゲンの記載を保証しない … 候補に添えるアレルゲンは商品の記録の写しです。最終の確認は、商品の表示と販売元の情報で担当者が行います
誤りが起きた場合のリスクは、避ける品を候補に出すことと、アレルゲンを含む品を除き損ねることの2つです。 どちらもタグが付いていない商品から起きます。タグが空の商品を出さない側に倒すことを、設計で守ります。
10まず何から始めるか
1週目:避ける品の決まりの表を作る
経験の長い担当者2名に聞き取り、用途ごとに除く品の区分を表にします。店で迷った例も一緒に集めます。
2週目:30件で試す
先月の相談から30件を選び、生成AIの画面で条件を取り出し、書き出した表を手で絞ります。当時の候補が残るか、避けた品が除かれているかを突き合わせます。
3週目:売れ筋の商品にタグを付ける
売れ筋の数百点に、用途タグと避ける品のタグを付けます。あわせて、要望の言葉の表(「日持ち」は賞味期限の日数が何日以上、など)を作ります。
4週目:索引を作って絞り込みで引く
OpenSearch Service のドメインに kuromoji の分析器と数値・タグの欄を持つ索引を作り、夜間と1時間ごとの取り込みをつなぎます。この時点では理由の写しは入れません。
2か月目: 言い換え辞書と一覧外の要望の言葉を回し、タグの付いていない商品を毎週減らします。3か月目以降: 理由の写しを足し、1件20分が何分になったかを実測します。タグの付いていない商品がほぼ無くなり、除いた件数が0の相談が出なくなった時点で、この構成は完成です。
11関連ユースケース
12この仕組みを理解するための記事
13技術仕様の確認日・参考情報
| 確認した内容 | 情報源 | 確認日 |
|---|---|---|
| Japanese(kuromoji)Analysis がすべてのドメインに入っていること。Sudachi Analysis が日本語向けの任意のプラグインであること | AWS: Plugins by engine version in Amazon OpenSearch Service | 2026-10-15 |
言い換えの辞書を S3 から取り込んでドメインに関連付け、analyzers/<ID> を synonyms_path に指定できること。updateable が検索の分析器にだけ使え、付けていれば辞書の更新が自動で反映されること。付けていなければ索引を閉じて開くか作り直すこと。別名で索引を付け替えられること | AWS: Importing and managing packages in Amazon OpenSearch Service | 2026-10-15 |
kuromoji の分かち書きに normal・search(既定)・extended の区分があり、ユーザー辞書を指定できること | OpenSearch: Kuromoji tokenizer | 2026-10-15 |
synonym_graph を検索の分析器だけに使うよう書かれ、索引のときに使うと句の検索が外れうること | OpenSearch: Synonym graph token filter | 2026-10-15 |
bool クエリの filter と must_not が点数に加わらず結果が使い回されること。must か filter があると minimum_should_match の既定が0で、should が当たらなくても結果に出ること | OpenSearch: Boolean query | 2026-10-15 |
range の検索で gte・gt・lte・lt を使えること | OpenSearch: Range query | 2026-10-15 |
Converse API の outputConfig.textFormat で JSON スキーマに沿った出力が得られ、enum が使えること。数値の範囲・文字列の長さの制約に対応せず400になること | AWS: Structured outputs(Amazon Bedrock) | 2026-10-15 |
贈り物としてふさわしいか、のしの表書きや贈る時期をどう案内するかは、相談の担当者がお客さまの事情を聞いて決めてください。 本記事は上記の公式ページで確認できた範囲だけを扱っています。
実装ステータス:構成例。 公開仕様に基づいて設計した構成であり、当社で実際に構築・検証したものではありません。工数の数値はモデル条件による試算です。
自社の業務に使えるAI活用候補を整理します
このユースケース(UC-1719)についてのご相談はこちらから。
