生成AI初心者がDifyを使って占い&性格診断botを作ってみた

## 生成AI初心者がDifyを使って占い&性格診断botを作ってみた
タイトルにもある通り、Difyを使って占い&性格診断botを作ってみたので、
その過程と感想を書きたいと思います。

## なんで「占い&性格診断bot」なの？
先日、初対面の人が多い飲み会に参加した際、
ある参加者が動物診断をして場を盛り上げていました。
その体験がとても楽しく、これがきっかけで自分も作ってみようと思いました。
その人は特に占い師などなんでもなく、
自分で勝手に動物のイメージから
「この動物が好きなあなたはこんな性格ですね」と当てていました笑
そこからMBTI16タイプ診断も流行っており発展していき、
その場にいる人の診断結果を聞いて話を広げ盛り上がりました🎉

**飲み会に参加して気づいたことは以下の点です。**

- みんな自分がどんな人なのか興味を持っている人が多い。
- 共通点が見つけやすかったりで〇〇診断やそれに似た占いって飲み会の話題づくりにイイ
- 簡単に診断できるツールあったら良くない？🤔
- 占いとかMBTIとか動物診断とか世の中にありすぎる...一度に全部出てきたら楽！
- 飲み会で楽しめる提案までしてくれたら最高やん？

**「よし、作ってみよう！」という気持ちになりました！！**

アプリ開発の経験が全くない初心者の私は、まずChatGPTを頼りにしています。
ChatGPTにサポートしてもらいながら、
最近生成AIでDifyが流行ってきているそうなのでDifyを使って作成してみます。

## Difyって何？
> DifyはオープンソースのAIアプリ開発プラットフォームです。Backend as ServiceとLLMOpsの理念を融合し、開発者が迅速にAIアプリケーションを構築できるようにします。同時に、プログラミングが得意でない方でも、自分のアイデアをすぐにAIアプリにできる直感的なインターフェースを提供しています。

引用元：https://docs.dify.ai/ja-jp

難しい用語がたくさんあります🥲
こういう時はChatGPTを使用して簡単にしてもらいます笑
![スクリーンショット 2024-11-30 15.59.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/02ef29de-74a5-1ba5-3710-97961e7984a4.png)

なるほど！私でもできそうです。
ということで、Difyを使ってみることにしました。
実際に作ってみた過程を紹介します。
Difyの使用方法はSaasとローカル環境での環境を作成して使用する方法があります。
今回はSaasでの使用とAWS公式が出している[Dify での生成 AI アプリケーション構築ワークショップ](https://catalog.us-east-1.prod.workshops.aws/workshops/95a3c231-2064-4a33-9a3d-624b7c11aaa6/ja-JP)を使用して2つのパターンで作成してみました。


## 1 SaasでのDify使用
### 1.1 Difyのアカウント作成
[Dify公式サイト](https://dify.ai/jp)にある「始める」を選択します。
![スクリーンショット 2024-11-30 16.47.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/2e7b866b-6d07-f33a-e41c-7ba476228776.png)


アカウント作成画面でアカウントを作成します。
私はGoogleアカウントを使用したかったので「Googleで続行」を選択しました。
![スクリーンショット 2024-11-30 16.50.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/899a3ae3-e957-caff-8045-2d60326992f9.png)

自分のアカウントでログインします。
![スクリーンショット 2024-11-30 16.56.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/19683d65-296b-0ef1-a607-2ca5210f5874.png)

![スクリーンショット 2024-11-30 16.57.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/50be548f-be8b-dc57-61b9-173f0ab15ee3.png)


![スクリーンショット 2024-11-30 16.58.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/96b54dc5-b8da-f4eb-7608-e1e3cd2010e3.png)


アカウントが作成されました。
現在のプランを確認するため、右上にある「アップグレード」を選択します。
（ないと思いますが、勝手に有料プランとかになっていたら怖いので）
![スクリーンショット 2024-11-30 16.58.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/bc0228e9-01f1-fde0-b316-ae14542d959f.png)

様々なプランが表示されますが、
「サンドボックス」で「現在のプラン」と書いてありますので無料プランです。
プランによってできることが異なるようです。今回は無料プランで進めることにします。
![スクリーンショット 2024-11-30 16.59.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/4252ea97-3a7e-47b8-e226-c3e35e2b2c66.png)

### 1.2 チャットボットの開発
今回はチャットで情報を送って結果が返ってくるようにしたいので「チャットボット」を選択します。
「チャットボットのオーケストレーション方法」...?
この用語の意味がわかりませんが、
「❔」マークにカーソルを合わせると説明が表示されるようなので確認してみます。
![スクリーンショット 2024-11-30 17.09.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/f26bdbef-52c8-c020-ecba-42fa3d8cc80f.png)

「基本」が初心者向けらしいので初心者向けで行きましょう。
![スクリーンショット 2024-11-30 17.14.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/f786f0a0-a187-a10e-cad0-65e6c94fb3cd.png)

「アプリとアイコンと名前」はわかりやすいように
「占い&性格診断チャットbot」にします。
「説明」を記載します。どんなアプリなのかわかりやすいようにしておきます。
![スクリーンショット 2024-11-30 17.19.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/f961190d-d5e2-695a-5de9-b60c1f2be97e.png)

「アプリとアイコンと名前」にあるアイコンを選択すると変更できるようです。
ここではChatGPTにアイコンを作成してもたった画像を使用します。
下記のように伝えて作成してもらいました。
```
占い&性格診断ツールを作成しています。アイコンを作成したいです。
ファンタジー感を出して紫とピンクと黄色をベースに作成してください。
```
使用したい画像を選択して「OK」を選択します。

![スクリーンショット 2024-11-30 17.20.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/e3627199-d23d-11ba-d446-75788b2135da.png)
![スクリーンショット 2024-11-30 17.21.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/870feb2c-171a-3f43-4a9a-8443a78865d0.png)

アイコンが更新されました。右下にある「作成する」を選択します。
![スクリーンショット 2024-11-30 17.21.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/18b931d2-db36-ab62-71c9-1b6bc03e96b1.png)


アプリの側ができたみたいです。
あとはどういう動きをしてもらいたいか決めてもらいます。

手順でプロンプトワードを記載するようですが、
プロンプトってあまりわかってないし、記載方法もよくわかりません。
そこで、直感的に作成できる「自動」機能を使用します。
右上にある「自動」を選択します。
![スクリーンショット 2024-11-30 17.21.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/343bdbe3-56f2-c245-fd5a-fb8ec23584c7.png)

プロンプト生成器の「指示」にどういう動作をしてほしいのか書けば良いみたいです。
![スクリーンショット 2024-11-30 17.30.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/a308d393-eaea-1d53-9622-ef2947ff9bd4.png)

こんな感じで指示することにします。
```
これは占い&性格診断ができるツール
質問者がチャット上で何かコメントしたら、初めに占いを実施したいか性格診断をしたいか質問者へ会話形式で確認する。
次に質問者の情報を取得する。
質問者が入力するものは下記
下記情報を入力してもらうように会話形式で誘導する。
・名前
・生年月日
・好きな動物
・好きな色
・趣味
・仕事
・MBTI診断結果（わかる人のみ）で入力

入力してもらった情報を元に結果を出力。
結果は名前診断や動物占いなど世の中に溢れている情報を検索し、質問者に合う回答を行う。
占いであれば、「名前診断」「仕事運」「恋愛運」「総合運」の各項目を質問者から得た情報に合うものを探し出して出力する。
性格診断であれば「仕事」「恋愛」「総合」「友達」「その他人間関係」の各項目を質問者から得た情報に合うものを探し出して出力する。
結果の出し方は博多弁で出すこと。
```
![スクリーンショット 2024-11-30 17.40.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/8d461030-309c-2ee6-1bd7-c7ab01bbcbc6.png)

プロンプトが生成されたようです。
どんな処理になっているのか処理になっているのか手順を確認します。
ここでイメージした指示結果になってない場合は、指示を更新して「生成」を選択すると再度「生成されたプロンプト」が更新されます。ここでイメージ通りの処理になっているか確認します。
![スクリーンショット 2024-11-30 17.42.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/b0ca111c-b82a-6eff-98a6-0419e2b98a36.png)

右上の「公開する」を選択して「アプリを実行」を選択します。
新しいタブで開くことをおすすめします。
元の画面に戻れない可能性があり、
設定した手順のプロンプトが消えてしまう可能性があります。
一度経験しましたが、ブラウザの戻る機能も使えず困りました。
![スクリーンショット 2024-11-30 17.50.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/8ac7e572-1021-ee80-1253-0ddb62031ddb.png)

なんだかできてそうです！！「チャットを開始」を選択します。
![スクリーンショット 2024-11-30 17.51.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/dc7ed739-2d10-1ae2-926c-07a998aa17a3.png)

何も出てこないですが、とりあえず占いしたいと伝えてみます。
![スクリーンショット 2024-11-30 17.52.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/f711bbb8-3d01-6cf6-0475-5d99565974b5.png)

期待していた結果と異なります。指示をもう少し明確にした方が良さそうです。
![スクリーンショット 2024-11-30 17.53.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/64ec336d-f48c-0b04-5947-ead0acc6297f.png)

先ほどの設定画面に戻って、いくつか変更を加えてみます。
ユーザー入力フィールドを選択してチャットできる画面に戻りコメントしてみます。
![スクリーンショット 2024-11-30 18.14.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/8212811c-00bb-b60b-a50a-d637ce5e4ba9.png)

ユーザー入力フィールドは内容を入力しないといけないようです。
入力すると進めるようになるようです。
![スクリーンショット 2024-11-30 18.14.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/75471e74-5b23-c3be-05fe-faa3b9558184.png)

ユーザー入力フィールドは内容を入力して
![スクリーンショット 2024-11-30 18.15.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/6f89b613-1837-1575-e1ef-dede848380bd.png)

こんにちは！！！　おおおお！正常に動作しました！
![スクリーンショット 2024-11-30 18.16.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/44ab4784-2ca4-3bb5-3320-4a61e4115120.png)

占いしたいです！
![スクリーンショット 2024-11-30 18.17.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/ff688f1b-a68d-182a-bc88-c3dc5593bc55.png)

質問に答えていきます。
![スクリーンショット 2024-11-30 18.17.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/d711979a-15d7-3ead-f347-7564b0aaa573.png)

![スクリーンショット 2024-11-30 18.18.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/411e9cf6-6686-1e3d-d42c-a51674ba8e29.png)

結果出ました！！！！！！ちゃんと博多弁になっているところもあったりなかったり。
一部不完全な点はありますが、概ね期待通りの結果が得られました！
保存は右上の「公開する」を選択し、「更新」を選択すれば完了です。
![スクリーンショット 2024-11-30 18.18.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/41b7c463-a567-9293-d646-6caafc85d914.png)

お試しで無料版で試したので、メッセージクレジットがなくなってしまいました。。。。
無料版はここで終了です。
![スクリーンショット 2024-12-13 16.37.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/c51da243-b31e-2cad-ffa3-6aca6627c3ec.png)


## 2.自分でDify環境を作成

### 2.1 AWSで環境構築
AWS公式が出している[Dify での生成 AI アプリケーション構築ワークショップ](https://catalog.us-east-1.prod.workshops.aws/workshops/95a3c231-2064-4a33-9a3d-624b7c11aaa6/ja-JP)をそのまま実施してください。
環境ができます。ワークショップの中ではDifyで開発できる「チャットボット」「テキストジェネレーター」「エージェント」「ワークフロー」の開発方法も説明されているため実施すると理解が深まります。
基本的な知識を得た上で、次のステップに進みましょう。

### 2.2 チャットボットの開発
最初から作成を選択します。
![スクリーンショット 2024-12-13 16.48.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/cb8b7998-d9ae-02c3-f360-e8d5c1c9d5fd.png)
「チャットボット」「基本」「アプリのアイコンと名前」を記載し、必要であれば「説明」を記載して「作成する」を選択します。
![スクリーンショット 2024-12-13 16.48.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/036d6ff8-382d-db50-fc5b-a5226b8acd83.png)

自動でプロンプトを生成してもらいます。

![スクリーンショット 2024-12-13 16.57.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/57d75ca3-35d0-44f0-3961-6df1995bc6e7.png)

エラーが出ました。使用できないモデルを選択してしまったようです。
![スクリーンショット 2024-12-13 16.58.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/a75b2ff8-58e3-d4e3-956c-f082a460ca99.png)

今回は「Claude 3 Haiku」を使用します。
![スクリーンショット 2024-12-13 16.58.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/0817a3e3-8ac6-b546-6f6c-1f170b9b42f2.png)
![スクリーンショット 2024-12-13 16.58.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/c54e4bb2-1b07-37dd-946f-b97992fb1fd5.png)

再度プロンプトを生成したところ、正常に動作しました。
右下の「適用」ボタンを選択して次に進みます。
![スクリーンショット 2024-12-13 16.58.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/1a7d4239-97b2-253b-4b84-6964ddd72d62.png)

手順や、変数などを変更しながら微調整を行い、
デバックとプレビューで動作を確認します。
![スクリーンショット 2024-12-13 15.53.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/cc89a67c-a56e-5633-1227-2b6e27e0c1ae.png)

記載した手順は下記です。
```xml
<prompt_template>
<instructions>
1. まず 質問者から以下の情報を入力してもらってください:
   - {{user_name}}: 名前
   - {{user_birthdate}}: 生年月日
   - {{user_favorite_animal}}: 好きな動物
   - {{user_favorite_color}}: 好きな色
   - {{user_hobby}}: 趣味
   - {{user_occupation}}: 仕事
   - {{user_mbti}}: MBTI診断結果（わかる人のみ）
2. 占いを実施したいか性格診断をしたいかを質問者に確認してください。
3. 入力された情報を元に、占いの場合は「名前診断」「仕事運」「恋愛運」「総合運」の各項目を、性格診断の場合は「仕事」「恋愛」「総合」「友達」「その他人間関係」の各項目を、質問者に合う回答を「博多弁」で出力してください。
回答をする際には項目別に改行して回答すること。
4.出した結果によってできる盛り上がるゲームの提案を3つしてください。
例えば、忘年会などで会話のネタになるようにしたいです。
ルール説明も含めてお願いします。
出力には、XML タグは含めないでください。
</instructions>

<example>
質問者: ユーザー入力フィールドを記載
AI: はい、占いをしましょう。フィールドの記載ありがとうございます。

占い結果は下記です。
</prompt_template>
```
問題なければ右上の「公開」「更新」で保存します。
アプリを実行を選択するとアプリ画面で操作できるようになります。
![スクリーンショット 2024-12-13 16.01.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/06b6d87d-a367-8cd5-edc9-cb9ac46d2bd9.png)

こちらがアプリ画面です。早速使ってみます。
必要な情報を入力して「start Chat」を選択します。
![スクリーンショット 2024-12-13 16.02.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/e180ca14-b30b-ec75-6cd2-efc8215005c7.png)

今回は性格診断を選択します。
![スクリーンショット 2024-12-13 16.02.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/c41afd98-1523-b98c-fcff-176f51e55f11.png)

結果が出ました！！！
博多弁の使用には改善の余地がありますが、診断内容は想定通りでした。
さらに、ゲームの提案まで含まれており、満足のいく結果となりました。
![スクリーンショット 2024-12-13 16.03.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/50ee78b6-f12a-1b0f-26de-3a010740c1dc.png)
![スクリーンショット 2024-12-13 16.03.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3938214/8981c750-98b8-bd44-73cf-1c4613d0bca5.png)

## まとめ
Difyで色々試したいのであれば、環境を構築してやった方がやりやすいです。
ですが、注意点として料金がかかるので考慮が必要です。
ちょっと触ってみたいなぁ で済むのであればDifyのSaaSで無料版でいいかなと思います。

AWSでDify環境を構築した際、Elastic IPアドレスを関連づけるとEC2を再起動しても
接続するIPアドレスが変わらないため展開しやすいと思います。
（Elastic IPアドレスを関連づけていないとEC2を再起動するとIPが変わってしましますので、
起動時に毎度IPを確認しないといけないです。）

生成AI初心者からすれば実行したいことを整理して、
プロンプトを作成してくれるのはいいなと思いました。
ChatGPTでも会話形式で、作成したいオリジナルのチャットボットの開発ができる
**GPTs**というのがあります。

::: note
明確に作成したいチャットボットが決まっている→Dify
:::

::: note
明確に決まっていないがなんとなく決まっている→GPT
:::
なのかなぁと個人的には思いました🤔

できることがまだまだあるのでDifyを触って慣れていこうと思います。