はじめに
妻がやっているホテルの問い合わせ対応について、GPTで返信内容を生成すること試みる。
手法の検討
GPTを使ってホテルへの問い合わせの返信内容を自動生成するには、ホテルの独自情報を上手くGPTに与える必要がある。
代表的な方法としてプロンプトで毎回ホテル情報を渡す方法とRAG(情報検索付き生成)がある。
プロンプトでホテル情報を渡す
タイトルそのまんま。以下のようなイメージ
ホテル情報:
- ホテル名:ランタンホテル
- チェックイン:14:00、チェックアウト:12:00
- アーリーチェックイン:当日の空き状況によって可能(追加料金あり)
- 朝食:無料で含まれています(6:30〜10:00)
- 空港送迎:有料で手配可能(要予約)
お客様からの質問:「アーリーチェックインは可能ですか?」
→ 上記の情報に基づき、自然な返信文を日本語で作成してください。
✅ メリット:
実装が簡単
ファイルの情報をメンテナンスするだけでOK
⚠️ デメリット:
情報量が多くなると、プロンプトに入りきらなくなる(GPT-3.5で4,000トークン、GPT-4で8,000〜128,000まで可能)
RAG(情報検索付き生成)
RAGは「情報を全部渡すのではなく、必要な部分だけ探して渡す」というアプローチ。
この「探す(検索)」部分を、ベクトル検索(例:FAISSやWeaviate)で行う。
具体的なフローとしては、以下のようになる。
ホテルの詳細情報をあらかじめベクトルデータに変換(埋め込み)
問い合わせが来たら、最適な情報を検索
検索結果+問い合わせをGPTに渡して、自然な返信を生成
これにより、GPTは「記憶してない情報」でも検索して答えることができる。
こんなときに有効:
情報量が多い(何百ページ分など)
問い合わせの内容が多様・自由形式
部屋ごとの違い、周辺観光地情報、スタッフの紹介など
どっちを使う?
今回想定している情報量だと前者の方法で十分そうだが、一旦両方試して比較してみる。
また、いずれの手法にせよ、ホテル情報を自然言語でまとめたものは必要になるのでその準備を進める。
ホテル情報をまとめる
既にまとまっているホテル情報として、以下があった
- 問い合わせ対応のテンプレートがスプレッドシートにある
- FAQがWebサイトにある
ので、一旦これらをGPTに投げて、ホテル情報を上手く抽出してもらうことにする。
いい感じに結果が得られた↓
問い合わせへの回答を生成してみる
今回は「空港からホテルまでの移動手段を教えてください。また、無料の送迎サービスはありますか?」という問い合わせへの返信を行うケースで試してみる。
プロンプトにホテル情報を全て入れる方法
プロンプト
以下はLantern hotelに関する情報です。
~~~
~~~
お客様からの問い合わせ:
「~~~~~~~」
この情報に基づき、丁寧で温かみのある日本語の返信文を作成してください。
得られた結果
RAGを活用して必要な情報のみをプロンプトに入れる方法
※ ベクトル化の手法等はGPTに聞いたもののをそのままコピペして試したので割愛
プロンプト
上位のホテル情報を全て入れる方法と基本同じで、RAGで関連チャンクとして検索された情報のみを渡す形に変更。
得られた結果
先の方法と大きく変わりがない。結果としてプロンプトがほぼ同じわけなので当然か。
↓関連チャンク(検索結果)
- 送迎サービス: 空港送迎をご希望の場合は、4人乗り車で500,000ドンの料金で手配可能です。便名・到着時間・荷物の数を事前にご連絡ください。ドライバーは空港の所定の場所でネームボードを持ってお待ちしております(空港の出口は1箇所のみとなっております)。万が一ドライバーと合流できない場合や移動中に何かあった場合は、メールや電話で当ホテルのフロントスタッフまでお気軽にご連絡ください。。
- 空港からのアクセス: 空港からの移動には、MaiLinh(緑)やVinasun(白)のタクシーが安全で便利です。運賃は約220,000ドンです。個人タクシーのGrabアプリの利用も可能で、そちらは約150,000ドンです。ご滞在中のタクシー手配はフロントにて承ります。
- 空港からホテルまでのバス路線: バスでのアクセスも可能です。152番(5:15〜19:00, 20分間隔, 5,000VND)または109番(5:30〜22:15, 50分間隔, 15,000VND)をご利用ください。いずれも空港国内線のBターミナルからの乗車になります。下車はNew Worldホテル周辺で、そこから徒歩3分ほどで当ホテルです。スーツケース等の大きな荷物がある場合はもう一つの切符を買う必要があり、乗車賃は2倍になります。
まとめ
必要な情報が多くないのであればプロンプトに全て突っ込んでしまった方が楽。一方でAPIを使う場合はプロンプトが長いと料金が上がってしまうのと、そもそもプロンプトに入れられないほどの情報量を扱いたい場合はRAGが有効そう。