【個人開発】AIがおすすめの飲食店を教えてくれるLINEチャットボットを作りました

# AI美食探訪というアプリを開発しました

Line上でやりとりできるAIチャットアプリです。
メッセージを送信すると、条件にあったお店を紹介してくれます。
(一応テスト版という状態です。実運用での入力データを集めること、それを精度向上に役立てることを目的としています)


ここからLineの友達追加ができます。
スマホの通常のカメラで読み取れます。
![qr20240512113623589.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/473706/08192e49-ec0b-a136-9290-e4ef463bb7a0.png)

こちらからでも🙆‍♂

https://liff.line.me/1645278921-kWRPP32q/?accountId=234luzuw

ぜひ試してみて、フィードバックをいただけると大変嬉しいです。

お問い合わせ用

https://docs.google.com/forms/d/e/1FAIpQLSdLV7zaDC9U8YoiVPXwg3mpx_7pRwg2zshPgxIR3iBfzAN0Pg/viewform



LPも制作しました。

https://ai-bishoku-tanbou.com/index.html

## 使い方の例
![output.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/473706/1cb4cc02-d143-74a5-9885-0a9555767ba5.gif)

`新宿駅の素敵なイタリアンを教えて`という入力に対して

```
おすすめのイタリアンレストランは以下の2つです：

1. **good spoon Handmade Cheese & Pizzeria ルミネ新宿店**
   - **評価: 3.36**
   - **URL:** [店舗リンク](https://tabelog.com/tokyo/A1304/A130401/13255547/)
   - **おすすめ理由:** チーズ専門店併設のイタリアンレストランで、素材にこだわった手作りチーズやピザが楽しめます。新宿駅からも徒歩圏内でアクセスも便利です。

2. **マンゴツリーカフェ ルミネ新宿**
   - **評価: 3.33**
   - **URL:** [店舗リンク](https://tabelog.com/tokyo/A1304/A130401/13030311/)
   - **おすすめ理由:** 本格的なタイ料理をカジュアルに楽しめるカフェです。新宿駅から徒歩1分という好立地にあり、タイ料理が好きな方におすすめです。
```

## 技術スタック

| カテゴリ            | 技術                                   |
|---------------------|----------------------------------------|
| フロントエンド      | LINE(messaging API)                 |
| バックエンド        | Golang 1.22         |
| 設計               | クリーンアーキテクチャ         |
| データベース        | CloudSQL(MySQL) Firestore             |
| サーバー            | Cloud Run                   |
| クラウドインフラ    |Google Cloud      |
| コンテナ | Docker            |
| CI/CD               | GitHub Actions


![AI美食探訪フロー図.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/473706/f90f5895-33cc-9c6e-edb4-7e4cabacfc9f.png)

### フロントエンド
[LINE messaging api](https://developers.line.biz/ja/services/messaging-api/)を利用して
LINE側とバックエンドのやり取りをしています。

### バックエンド
言語はGoを選定しました。静的型付け言語なので、デプロイしてから動作しないことに気がつくといったことが無く
、とても快適に開発ができています。
クリーンアーキテクチャで設計ができたのもGoodポイントで、大掛かりな修正をしても影響範囲が限定されるので、最小限の確認で良いのと、バグりにくいというメリットを感じています。

### データベース
CloudSQL(MySQL)とNoSQL(Firestore)の両方を使用しています。
可能であれば、Firestoreのみにしたいのですが、カラムに対して`含むもの`という検索をしたい場合、Firestoreは適していないようです。そのため、RAGに用いるマスタデータのみMySQLに配置し、将来的なFirestoreへの移行を見越してそれ以外のデータはFirestoreで扱うようにしています。

### サーバー
Cloud Runを使用しています。無料枠がたくさんあり、とても簡単にデプロイできるので愛用しています。


## AWSではなくGCPを選んだ理由
本来、私はAWSユーザーであるため、今回のようなものを作成しようとした場合、
Lambda + RDS + DynamoDBというインフラ構成が真っ先に思いつきますし、このプロダクトも最初はその構成で実装していました。

### 料金的な問題
結論、なぜGCPにしたのかというと、GCPのほうがだいぶお安く済むからです。
というのも、Lambda + RDSの構成にした場合
- LambdaをVPC内に配置し、Nat ゲートウェイを用意する
- RDS PROXYを用意する

これらの用意が必須となり、RDSの料金に加えてざっくり1万円程かかります。

一方GCPでは、内部的にどうなってるかは別として、Cloud Runとデータベースの間にProxyを配置する必要がないため、シンプルにデータベースの料金と、Cloud Runの膨大な無料枠を超過した分のみの支払いをすればよく、相対的に安いのです。


### 一つだけAWSを使っている
LPのホスティングにはS3を使用しています。
こちらも無料枠が充実しているため、重宝しています。

## これから作る機能
### 課金
ゆくゆくはマネタイズを目指しています。
デモ版として多くの人にご利用いただき、フィードバックを下に改善をして、2024/6の上旬には正式版としてリリースしようと考えています。

:::note warn
無課金ユーザーの1ヶ月間での最大送信数には制限があります。デモ版では月に20件となっています。
正式版では変更される場合があります。
:::


### 連続した会話
本家ChatGPTのように過去会話の内容を元に新たな回答を生成するようにしたいです。
例えば、AIが生成した回答に対して、
ユーザーが
`もっと価格帯が低いお店を教えて`
と送信した際に、前回の回答よりも低価格なお店を提案することです。

Slackなどのようにスレッド上であれば、実現しやすいのですが、LINEでどうすれば良い体験で実装できるのかを検討中です。


### RAGの精度向上
今のところ、自前で作成したなんちゃってRAGなので、精度がいまいちだったりします。
LangChain等を使って精度の向上を目指しています。


## 最後に

重ねてにはなりますが、ぜひ試しに使ってみていただきたいです。
皆さんの入力データを基に、精度向上と体験改善につなげます。

![qr20240512113623589.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/473706/08192e49-ec0b-a136-9290-e4ef463bb7a0.png)

https://liff.line.me/1645278921-kWRPP32q/?accountId=234luzuw


https://docs.google.com/forms/d/e/1FAIpQLSdLV7zaDC9U8YoiVPXwg3mpx_7pRwg2zshPgxIR3iBfzAN0Pg/viewform



https://ai-bishoku-tanbou.com/index.html