はじめに
近年、生成AIを業務に活用する動きが広がっています。
その中でも営業領域では、商品情報・過去の提案資料・カタログ・動画・FAQなど、多くの情報を扱う必要があります。
今回は、営業支援AIアプリの技術検証として、営業担当者が入力した質問や要望文から、関連する商品候補を検索し、商品情報や提案に必要な情報を表示するアプリの開発に取り組みました。
本記事では、アプリ開発の流れに加え、検索機能に用いたEmbedding API、ベクトル検索、類似度計算の考え方について紹介します。
開発した営業支援AIアプリの概要
今回開発したアプリは、営業担当者が顧客の要望を入力すると、関連する商品候補を表示する営業支援AIアプリです。
たとえば、営業担当者が以下のような文章を入力します。
段ボールの荷崩れを防ぎたい
すると、アプリは製品マスタ内の商品情報を検索し、意味的に近い商品候補を一覧で表示します。
表示する情報は、商品名だけではありません。
用途、対象荷物、推奨現場、特徴、注意事項、資料URL、動画URLなどもあわせて表示できる構成にしています。
このアプリの目的は、AIが営業担当者の代わりに最終判断を行うことではなく、営業担当者が提案候補を素早く探し、商談中に必要な情報へアクセスしやすくすることです。
アプリ開発に使用した技術構成
今回の検証では、アプリ側にはFlutterを使用しました。
Flutterは、1つのコードベースで複数のプラットフォームに対応できるフレームワークです。
今回はまず、Windowsデスクトップ上で動作するデモアプリとして開発しました。
主な技術構成は以下です。
・Flutter / Dart
・Python
・OpenAI Embeddings API
・Excel製品マスタ
・JSON検索インデックス
・cos類似度によるランキング処理
処理の大まかな流れは以下の通りです。
Excel製品マスタ
↓
Pythonで検索用テキストを生成
↓
Embedding APIで商品説明文をベクトル化
↓
商品情報とベクトルをJSON化
↓
FlutterアプリでJSONを読み込み
↓
入力文をEmbedding APIでベクトル化
↓
商品ベクトルと比較
↓
類似度順に候補を表示
商品マスタの前処理はPythonで行い、アプリ側では検索インデックスを読み込んで検索処理を行う構成にしています。
AI検索における課題
営業支援AIで重要になるのは、顧客の要望が必ずしも決まったキーワードで入力されるわけではないという点です。
たとえば、以下の文章は表現が異なります。
荷崩れを防ぎたい
荷物が崩れないようにしたい
段ボールを固定したい
崩れにくい梱包にしたい
従来のキーワード検索では、同じ単語が含まれているかどうかが重要になります。
そのため、「荷崩れ」という単語が入っていない文章は、関連性が高くても検索に引っかかりにくい場合があります。
一方、営業現場では顧客が必ずしも商品名や正確な専門用語を知っているわけではありません。
そのため、自然文の意味をもとに商品候補を探せる検索方式が必要になります。
Embedding APIによるベクトル検索の導入
そこで今回導入したのが、Embedding APIを用いたベクトル検索です。
Embeddingとは、文章を数値ベクトルに変換する技術です。
たとえば、以下のような文章を、
段ボールの荷崩れを防ぎたい
Embedding APIに入力すると、次のような数値の並びに変換されます。
[0.012, -0.045, 0.231, ...]
この数値は、単語数や文字数を表しているわけではありません。
文章全体の意味的な特徴を表すベクトルです。
ベクトル検索では、検索文と商品説明文をそれぞれベクトル化し、ベクトル同士の近さを計算します。
意味が近い文章同士は、ベクトル空間上でも近くなるため、キーワードが完全に一致していなくても関連する商品を検索できます。
ベクトル検索の仕組み
今回の検索処理は、大きく4段階に分かれます。
1. 商品情報を検索用テキストに変換
まず、Excelの製品マスタから商品情報を読み込みます。
商品名だけをベクトル化しても、検索精度は高くなりません。
そのため、商品ごとに以下の情報をまとめて、1つの検索用テキストを作成します。
・製品名
・シリーズ
・カテゴリ
・用途
・対象荷物
・推奨現場
・特徴
・推奨条件
・不向き、確認事項
・問い合わせ誘導文
・動画URL
・製品詳細URL
たとえば、1つの商品に対して次のような検索用テキストを作ります。
製品名:〇〇フィルム。
用途:段ボールの荷崩れ防止。
対象荷物:段ボールケース。
推奨現場:物流倉庫。
特徴:伸びがよく、荷崩れを抑えやすい。
注意事項:特殊形状の荷物は確認が必要。
このように、商品に関する情報を文章としてまとめることで、顧客の自然文要望と意味的に比較しやすくなります。
2. 商品説明文をベクトル化
次に、作成した検索用テキストをEmbedding APIでベクトル化します。
商品数が多い場合、検索のたびにすべての商品をベクトル化すると、処理時間とAPI利用量が増えてしまいます。そのため、商品説明文のベクトル化は事前に行い、結果をキャッシュとして保存します。
商品説明文
↓
Embedding API
↓
商品ベクトル
↓
JSONファイルに保存
今回の検証では、商品情報とEmbeddingベクトルをまとめた検索インデックスを作成し、Flutterアプリ側で読み込める形にしました。
3. 入力文をリアルタイムにベクトル化
営業担当者がアプリに要望文を入力したタイミングで、その入力文だけをリアルタイムにベクトル化します。
入力文:
段ボールの荷崩れを防ぎたい
↓ Embedding API
クエリベクトル:
[0.012, -0.045, 0.231, ...]
ここで重要なのは、検索時にはEmbeddingモデルを再学習しているわけではないという点です。
すでに学習済みのモデルを使い、入力文をベクトルに変換しているだけです。
4. 類似度を計算して候補を表示
最後に、入力文のベクトルと、事前に保存しておいた商品ベクトルを比較します。
比較には、cos類似度を使用します。
cos類似度は、2つのベクトルの向きがどれだけ近いかを表す指標です。
score = cos(入力文ベクトル, 商品ベクトル)
スコアが高い商品ほど、入力文と意味的に近い商品と判断します。
その結果、アプリでは類似度が高い順に商品候補を表示します。
1位:商品A score 0.82
2位:商品B score 0.76
3位:商品C score 0.69
ベクトル検索の強み
ベクトル検索の大きな強みは、表現の違いに対応できることです。
たとえば、以下の表現はすべて少しずつ違います。
荷崩れを防ぎたい
荷物を固定したい
崩れにくくしたい
梱包を安定させたい
キーワード検索では、同じ単語が含まれていないと検索に引っかかりにくい場合があります。
しかし、ベクトル検索では文章全体の意味をもとに比較するため、表現が異なっていても近い意味として扱うことができます。
また、商品名を知らない状態でも検索できる点もメリットです。
営業担当者や顧客が具体的な商品名を知らなくても、用途や困りごとを入力することで、関連する商品候補を探しやすくなります。
ベクトル検索の注意点
一方で、ベクトル検索には注意点もあります。
ベクトル検索は、意味的に近い候補を広く拾う技術です。
しかし、条件を厳密に一致させる技術ではありません。
たとえば、「透明」と「半透明」は意味的には近い表現です。
どちらも、
中身が見える
視認性がある
クリア系のフィルム
という近い文脈で使われます。
そのため、ベクトル検索では「透明フィルム」と入力した際に、「半透明フィルム」が候補として表示されることがあります。
これは意味検索としては自然な挙動です。
むしろ、近い意味を拾うためには必要な性質でもあります。
しかし、営業実務上は「透明」と「半透明」を別条件として扱う必要がある場合があります。
そのため、実運用では以下のような補完が必要になります。
・条件フィルタリング
・キーワード検索
・商品マスタの表記統一
・営業担当者による最終確認
ベクトル検索は候補を広く出す技術、条件検索は明確な条件を守る技術として、役割を分けることが重要です。
アプリへの組み込み方
今回のアプリでは、商品側のベクトルは事前に作成し、Flutterアプリから読み込めるJSONファイルとして保存しました。
検索時には、入力文だけをEmbedding APIでベクトル化し、アプリ内で商品ベクトルとの類似度を計算します。
この構成には、以下のメリットがあります。
・検索時に全商品を再ベクトル化しなくてよい
・処理時間を短縮できる
・API利用量を抑えられる
・商品情報とベクトルをまとめて管理できる
・検索結果に商品情報、資料URL、動画URLを紐づけやすい
また、新しい商品を追加する場合も、全商品を再ベクトル化する必要はありません。
新しく追加された商品、または説明文が変更された商品だけを再ベクトル化すれば、検索インデックスを更新できます。
まとめ
今回、営業支援AIアプリの技術検証として、Flutterによるデモアプリ開発と、Embedding APIを用いたベクトル検索を実装しました。
従来のキーワード検索では、顧客の自然な要望や言い換え表現に対応しにくい場合があります。
Embeddingを用いることで、文章全体の意味を数値ベクトルとして扱い、意味的に近い商品候補を検索できるようになります。
一方で、ベクトル検索は厳密な条件一致を保証するものではありません。
そのため、実運用では営業担当者の確認と組み合わせることが重要です。
今後は、検索精度の改善やUIの調整に加え、画像・動画・カタログなどの営業資料との連携も進めることで、営業現場でより使いやすいAI支援ツールへ発展させていきます。








