shopifyとChatGPTで商品を全自動でレコメンドするチャットボットを作った
初めに
shopify admin api を使えば商品情報にアクセスできるので
それを用いて今回は enbedding API と組み合わせて
商品のレコメンドシステムを作ってみました。
最終的な見た目はこんな感じです。
フロー図
今回はshopiyのチュートリアルに沿って下記スタックで開発しています。
フレームワーク : Remix
DB: 高性能でオープンソースのリレーショナルデータベース管理システム。
ホスティング: Fly.io
Shopifyアプリってどんなことができるの?
ここで詳しく説明すると長くなってしまうので
めちゃくちゃ雑に説明すると shopifyアプリのインストールというのは
アプリのインストール = ストアの情報にアクセスするためのAPIの権限を貰う
という風に解釈してもらって大丈夫です。
今回はアプリをインストールすることで、商品情報にアクセスするためのトークンを発行しています。
enbedding とは?
enbeddingとは、単語や文章をを数値化(ベクトル化)することです。
それぞれの言葉の意味がどのくらい近いかを解析するための、ベクトル空間に置くことができます。
下に概念図を置いておきますが、例えば犬と猫は同じ動物なので近い距離にあるので
意味が似ている、ということになります。
今回のアプリでは、ユーザーからの質問をベクトル化し
コサイン類似度という指標を用いて最も近い商品をピックアップします。
例えば、「夕飯に食べる美味しいご飯は?」という質問は「カレー」というキーワードと
類似度が高いため、カレーがレコメンドされます。
これにより、商品情報をプロンプトに入れずともレコメンドを行うことができます。
Embedding APIにテキストをリクエストすると、[0.123, 0.0111, 0.121, ...]
のような
ベクトル配列が返却されます。これが多次元のベクトル空間を表しており、各次元が言葉の意味的特徴を捉えています。
これをDBに保存しておきます。
リクエストの流れ
- ユーザーからの質問を受け取る
- 質問をEmbedding APIでベクトル化
- データベース内の商品のベクトルとコサイン類似度を計算
- 類似度が高い商品をレコメンドとして提示
Embedding を使うメリデメ
メリット
ハルシネーションが起きづらい
Embeddingを使用すると、最も意味が近い商品を選出するため、商品データなどのソースに基づいてレコメンドを行うので誤生成が起きづらいです。
Embedding APIの使用料が安い
100万トークンあたり0.13ドルなので、日本語の場合は1文字 = 1トークンとなるので
文庫本1冊分が10万文字だとして全てベクトル化しても0.01ドル程度となります。
デメリット
計算量が多くなる
chatGPTの使用量自体は安いのですが、レコメンドの算出はアプリ側で行う必要があります。
商品全てに対してコサイン類似度を計算し、それを並び替えないといけないので
それなりの計算量になってしまいます。
レコメンドとしては適切ではないパターンがある
「大人」と「子供」は共に人間なのでenbeddingでは近い意味として算出されてしまいます。
しかし、「大人用の靴が欲しい」といった質問内容に対して、子供用の靴がレコメンドされてしまうことがあります。
まとめ
今のところ、「ちょっとリッチな検索フォーム」くらいの機能しかありませんが
対話機能を充実させるとか、発展させる余地はありそうです。
生成AIでの購買体験の向上はまだまだ色んなことができそうなので
使い道を模索していきたいです。
Discussion