ローコードでさくっと博多の説教AIおいちゃんを作ってみた

## はじめに

**※ほんのり大げさフィルターを通してます**

私の所属部署の室長は博多に在籍しています。

室長は時々、
「この歳になるとあまり叱られなくなり寂しい。たまには博多弁で叱られたい。」
と嘆いていました。

私が島流を覚悟して博多弁で叱っても良いのですが、あいにく私は博多弁が話せません。
似非の博多弁ではきっと激昂するでしょう。

そこで代わりとしてAIに叱ってもらうことにしました。


## AIチャットボットを作るには

色々と作り方はありますが今回は「さくっと作る」をテーマとします。

そこでオープンソースのLLMアプリ開発プラットフォームである「Dify」を使ってみることにしました。

### Difyとは
Difyは、生成AIを活用したアプリケーションを簡単に構築・運用できるプラットフォームです。ノーコードでの開発が可能で、OpenAIのGPT-4など複数の大規模言語モデル（LLMs）に対応しています。データ統合やカスタマイズ可能なUI、API連携などの機能を備え、ユーザーはブランドやユースケースに合わせた独自のAIアプリを短期間で作成できます。

[Dify.AI · 先進的なAIアプリケーションのためのイノベーションエンジン](https://dify.ai/jp)

Difyはクラウド版が提供されていますが、Dockerを使用してローカルマシンにインストールすることも可能です。
今回はローカルマシンで動作させることにします。


## ローカル環境構築方法

##### 実行マシン
MacBook Pro(Appleシリコン)

##### 事前インストール(下記がインストール済みであること)
- Homebrew
- Git

##### 実行環境
Podman
(Podmanは、コンテナを開発、管理、実行するためのオープンソースツールです。Red Hatエンジニアとオープンソース・コミュニティによって開発されました。)


#### 構築手順
#### 1.任意の場所にDifyをGithubからClone
```
% git clone https://github.com/langgenius/dify.git
```
#### 2.Podmanのインストール
```
% brew install podman podman-compose
```

#### 3.初期セットアップ&起動 
推奨値である2vCPU 8GBメモリでセットアップ 、
80番ポートを使えるようにrootfulとします。
```
% podman machine init --cpus 2 --memory 8192
% podman machine set --rootful
% podman machine start
```

#### 4.ネットワーク設定の追加
Podmanではdefaultというネットワークがない場合にエラーとなりますので追加しておきます。下記①と②の行を追加します。
```
% cd dify/docker
% vi docker-compose.yaml
```
```docker-compose.yaml
networks:
  # create a network between sandbox, api and ssrf_proxy, and can not access outside.
  ssrf_proxy_network:
    driver: bridge
    internal: true
  default:  # ①こちらを追加
    driver: bridge  # ②こちらを追加
```

#### 5.サービス起動
```
% podman compose up -d
```
これでローカル起動したDifyにブラウザからアクセスできます。

## Difyチャットボット作成手順

#### 1.管理者ユーザーの作成
ブラウザで下記にアクセスします。
http://localhost/install

ローカル環境ではメールアドレスは使いませんのでダミーでも良いです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/6dd6a3dd-e851-d5d9-cbf5-56fbc3f04a9b.png)

#### 2.ログイン
ブラウザで下記にアクセスしてサインインします。
http://localhost/signin
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/e0c05d7e-e304-0498-5eae-5de6eca54eab.png)

#### 3.アプリを作成する
[最初から作成]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/68b273b1-c2ef-22d1-cd90-7e8f87b81b36.png)

#### 4.チャットボットを作成する
下記を入力して[アプリのアイコンと名前]と[説明]を入力して[作成する]を選択します。
**※ちなみに[おいちゃん]とは博多弁で[おじさん]という意味です**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/b2830389-ead3-3913-0bb1-946185e67a43.png)

#### 5.LLMプロバイダーキーを設定
色々なLLMモデルを接続することが出来ますので[設定に移動]からモデルを設定します。
※今回はOpenAIにて契約したAPIキーを設定しています。
(OpenAI側のAPI取得手順は省略します)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/10c20470-3178-5b59-120b-88e4e9398ebf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/ec1ea5f3-0857-deac-69da-3262db2eb198.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/b1d911ce-de9f-fe69-abd7-1132d9a928ba.png)


#### 6.キャラクターの設定
AIには博多の説教おいちゃんキャラになってもらいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/6a8e8ee5-565c-e546-4a56-63080fdbf6f7.png)

## アプリを実行
右上の[公開する]から[アプリを実行]を選択します。
※モデルはお安めの[gpt-4o-mini]を選択しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/4767018b-ad9c-bc50-4c93-49e1173dc011.png)

## 試してみた
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/e62f0617-8fac-3d7a-b852-ef236cb75a30.png)
挨拶しただけで説教された！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/a7b7c1d7-4797-2578-0857-6c589aca45e6.png)
何を言っても怒られてしまいます・・・。良い感じです。

## 絶対に怒るおいさん VS 絶対に怒られない文を考えるAI
何を言っても怒るので怒られない言い方をAIに考えてもらうことにしました。

ここは最新モデルの推論能力が高いAI（ChatGPT-o1）にメッセージを考えてもらいます。
さてどちらが勝つでしょうか。

まずは1回目。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/989eb8f4-b39b-5eb9-39fc-035e22c5ac7c.png)

あれ？少しキャラが崩壊しましたね。
「言いよんねん！」関西寄り...?

後の文章は少し優しさが出てきましたね。
これはいける。
2回目。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963051/9d91e7c2-9b01-10b4-2820-019ef3e26efe.png)

おぉ、これはもう説教と言うよりお褒めの言葉ですよね。

ということで

- 絶対に怒るおいさん vs 絶対に怒られない文を考えるAI

結果は[**絶対に怒られない文を考えるAI（ChatGPT-o1）**]の勝ちです！

## さいごに
当初の目的とは少しずれてきましたが無事に説教を言ってくれるチャットボットが完成しました。
これを利用してもらえれば室長もきっと満足していただけるでしょう。

半分冗談も混ざっておりましたがいかがでしたでしょうか。
チャットボットを作る部分については5分くらいで形になりました。

Difyはもっと色々なサービスと連携させることも可能になっており、
ローコード（ほとんどノーコード）でもっといろいろなものを構築することが出来そうです。

もうちょっと色々検証してみます。