ChatGTPとDifyを使って、「ご意見・お問い合わせに回答しますちゃん」作ってみた。


## 問い合わせの回答、即答できますか？


わたしは商業施設の管理の仕事をしているので、頻繁にお客様からテナントやイベント、その他施設のお問い合わせがあったり、ご意見をいただいたりします。
問い合わせに対して即答するにはその施設に詳しくないといけません。
それが例えば**ホームページの内容を網羅しているLINEBot**なら、問い合わせにそのまま答えることができるのではと作ってみようと思いました。
今回はChatGPTを活用して、**お客様のご意見・お問い合わせの返答を考えてくれるLINEBot**を作成しましょう。

### ChatGPTってすごい
ChatGPTって、調べものをするだけっていう印象だったのですが、文章の校正をしたり、プログラムを書いてもらったりとなんでもかんでもできちゃうんです。

こんな感じにね

![ChatGPTの文.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/36d0d5fe-fe1b-7ae0-c8f2-f9919f22b99b.jpeg)
<br>
この辺は実際にやってみると面白いです。
そのままコピペして使えるプログラムも出してくれるので、プログラミングのことを知らない人でも作れちゃいます。
<br>
### MakeにChatGPTを組み込む
とりあえず、MakeにOpenAIモジュールを入れて、ChatGTPが答えてくれるっていう感じで組んでみました。

Makeのフロー図
![お客様の声フロー図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/4e351057-92ed-e25e-cdb8-1275ddb51082.jpeg)

ChatGPTの条件をこんな感じにしました。
![お客様の声条件付け.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/6e693d13-2c01-db54-5c50-73d8872c29ce.jpeg)


これで完成！　って言いたいところなのですが、いろいろ触ってみると問題点がポツポツと出てきます。
### 実際に動かしてみると問題点が

条件付けの「商業施設」を実際存在する商業施設名に変えてみて、実存するテナントがどこにあるか尋ねてみたのですが、「～は出店しておりません」と答えられました。
これでは使いものにならんやないか！（それなりに使える）

### Difyで知識取得ができるらしい
なにかしらデータベースを付けてあげることはできないだろうかといろいろ検索したところ、**[Dify](https://dify.ai/jp) というもので知識取得なるものがあるようです。**
さっそく見てみました。
![dify初期.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/cb071ee7-e07c-b06b-588b-8891b9cc01c0.jpeg)

フロー図みたいになっていて、やっていることはMakeと似たような感じですね。


スプレッドシートとかエクセルから知識取得させようと、試してみたのですが、なかなかうまくいかず。
ウェブサイトから知識取得もできるみたいなので、それを試したところ知識を入れられました。

知識を入れるときは、ナレッジタブから入れられます。
![改Dify　ウェブサイトから学習.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/a31584d4-d7d4-7cbf-4b0b-74f52ad2d15d.jpeg)

今回はとある商業施設のHPから知識を入れようと思います。

:::note warn
**手探りで触っている部分も多いので、解説が違ったら教えてください！**
:::

**Limit**とあるところは多分参照元をいくつまで学習できるか。
**Max depth**はリンク先のリンク先をどれだけ深堀できるか。
多くしすぎると時間かかったり、制限かかってエラー吐くと思います。
※情報量が多いと課金が必要みたいです。

### Difyのフロー作り
知識を入れたらこんな感じでフローを組みました。

![改Difyフロー改.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/c72c2082-a436-dd32-40bc-3bd56aa80c41.jpeg)


何度か（何度も）試行錯誤して、当初の目的としていたショップ情報が出やすいようにショップリストのページも入れてます。
作りながら簡単にテストできるのでトライ＆エラーがしやすいです。
また、**アプリとしてWEB上に公開することもできるの**で、正直LINEBotに組み込む必要もないです（笑）
<br><BR>
### MakeにDifyで作ったものを組み込む
必要ないといいつつも、やりますよ。
Difyを採用したのには理由があります。
**APIにできるのでMakeにつなぐことができる**のです。
早速ChatGPTに聞いてみました。

![ChatGPT文.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/ef225f82-dbe5-57de-99a4-818cb2363140.jpeg)


細かい設定についてまではわかりづらかったので、下記記事を大変参考にさせていただきました。

https://qiita.com/cog1t0/items/00a9e608925578e0cf44


ということで全体フロー。
![Make全体フロー.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/7e6e1770-e35a-aec3-3e23-4c8c1582a67b.jpeg)

HTTPモジュールはこんな感じに設定して

![Make　HTTP設定.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/020064f7-5d41-30f8-c79c-8bb0c2a7383d.jpeg)

HTTPモジュールだけ起動すると、こんな感じにJSONサンプルが取れるので、


![JSONデータはここ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/b3c4756c-7b66-272b-aed2-64afb3d42ab9.jpeg)

JSONモジュールでジェネレートするだけ！

:::note alert
**3行で説明してますが、ここが一番時間掛かりました**
:::
何度もエラー吐いてはどこだと探して、例えばHTTPモジュールのURLとMethodは地味に気づきにくかったです。Difyでワークフローじゃなかったら、URLの後ろの部分が変わってくると思います。
ChatGPTはプログラムだけで完結するものは結構得意そうですが、MakeやDifyみたいにフローを作るタイプのものはこちらもある程度理解していないと難しいです。
<BR>
そんなこんなで出来上がったLINEBotがこんな感じ。
<img width="400" alt="改　LINEBOT画面.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800173/a74a0697-af87-d940-2a5c-54b29747a425.jpeg">


実用化できれば、問い合わせとか各段に減りそうです。
ここだけの話ですが、世の中には問い合わせの電話番号は調べられるのに、お店のことを調べられない人もいるみたいなので、これくらい手厚い問い合わせページがあると便利ですよね。


### おわり

今回はこのくらいで。
作ったLINEBotを職場の人に見せたら、
「テナント用とかも作れそうだよね」
と言われたので、配布している端末にそういう機能を付けたいです。

思った以上に長くなってしまったかもしれません。
このアイデアが出たわたしの記事もあるので併せてどうぞ。

https://note.com/matsumuraj20614/n/n0904108592e7?sub_rt=share_pb 

まだまだいろんなことに手を出していくので、温かく見守ってください。



初稿：2024/7/24
２稿：2024/7/27　（一部カットと細かいところの修正）