【Dify×Ollama】社内チャットbotを無課金で作成してみた



## こんな方に向けて書きます
#### ① Difyをお試しで使ってみたい方
#### ② 自社内のなれっじチャットbotがあれば便利な方
#### ③ プログラミングコードやAI領域の知識がまだ浅い方
※もちろん知識が深い方でも大丈夫ですが、初心者向けの記事のつもりです。
細かな表現の誤りなどはご容赦ください。


私は「今在籍している会社にあると絶対便利！」と思ったのですが、
セキュリティ上、クラウドインストールはもちろんできないし、
上司を説得するにはまず形にする必要があると思いましたので、
私用PCでかつ無料でという条件で作成を試みました。

また、難しい言葉などもいくつか出てきますが、私は現職でエンジニアでも何でもありません。
見かけ上難しそうなところもありますが、私にできたので安心してチャレンジされてください。


## 完成イメージ

あらかじめナレッジ文書（PDFやtxtなど）を指定し、チャットbotに質問をすると、返答が返ってきます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780099/a7f1644f-0d6d-b98e-dc2a-6611f759760d.png)

ちなみに本記事ではローカルPC環境で導入・作成していますので、社外への漏出などの心配がありません。

今回学習させた参考文書（論文）：
↓「AI脅威論の正体と人とAIとの共生」栗原 聡（慶應義塾大学）

https://www.soumu.go.jp/main_content/000740728.pdf

本当は自社ナレッジ資料でも作成しており、成功もしているのですが、
セキュリティ上の万が一を鑑みて今回qiitaにアップすることはやめておきます。



## 使用した環境・ツール

- OS:Mac 14.4.1
- チップ：Apple M2
- 使用アプリ
    - Dify...大規模言語モデルLLMアプリの開発プラットフォーム
    - Ollama...ローカルPCで動かせるLLMアプリケーション
    - Dockerデスクトップ...アプリをコンテナ化するプラットフォーム
    - ターミナル...Mac標準装備アプリ
    - Github...Difyを導入するコマンドがあるサービス

ざっくりすぎる説明ですみません。
「Difyとは？」「Ollamaとは？」といった疑問は調べるとすぐ出てきますし、
それらをご存知の方が本ブログに辿り着くと思いますので、今回は省略します。


https://dify.ai/jp

https://ollama.com/

https://www.docker.com/ja-jp/

https://github.com/langgenius/dify


### よく参考したブログ

以下の先人のみなさまのブログを参考にしました。


https://touch-sp.hatenablog.com/entry/2024/05/12/110240


https://qiita.com/Tadataka_Takahashi/items/ba832511bd4fd5cd46f1

全体の流れは上記2つのブログがわかりやすかったです。
既にわかりやすい記事がありますので、本投稿は０から全てを説明はしません。
ただ、上記を真似るだけではなかなかうまくいかず随所で調べる必要がありましたので、
そういった私が困ったことや自分の工夫を以下に載せていきます。


## 導入までの流れ（おすすめの順番）

1\. Dockerのインストール
2\. Difyのインストール
3\. Ollamaのインストール
4\. DifyとOllamaの連携
5\. Dify内でアプリ作成・なれっじの登録


下に詳しく書くのですが、私は3~4に一番苦戦しました。
5の操作自体は簡単なので、本投稿では省略しています。
記事内のいたる引用ブログでわかりやすい説明があります。


### 1\. Dockerのインストール

https://www.kagoya.jp/howto/cloud/container/dockerdesktop/


Dockerのインストール方法は、上記サイトがわかりやすいです。
もし難しければ、「docker　デスクトップ　インストール」などで調べましょう。
インストールまでできたら、デスクトップで開いておきます。
以降の手順は、Dockerをバックグラウンドで立ち上げていることが前提になります。



### 2\. Difyのインストール


https://docs.dify.ai/getting-started/install-self-hosted/docker-compose


Difyのインストール方法は、上記公式サイトがわかりやすいです。
正確にいうと、１でインストールしたDockerのなかにコンテナとして、
Githubからコピーして実行するのですね。


ところで大前提ですが、Mac初心者ユーザーの場合、
「ターミナル」の使い方をなんとなく知っておく必要があります。

DifyやOllamaのインストール方法はさまざまな記事がありますが、
ターミナルの役割・使用方法はほとんど省略されています。

ターミナルって何だ？となる方は、まずこちら以下をご覧ください。

https://tech-camp.in/note/technology/18730/


とりあえず開くと「えっコード書けないし。。。」となんだか難しそうに思えますが、
特に難しいことを覚える必要はありません。
すでにあるコードをほぼコピペで貼り付け、動かします。



Dockerを開き、以下の画像のように「docker-〇〇」が存在していたら完了です。
Difyがローカル環境で実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780099/6aa38981-e7d3-f4ef-6aef-dd4fa590f8af.png)



### 3\. Ollamaのインストール(私の苦戦箇所)

次にDifyのなかから、モデルプロパイダーとして、Ollamaを使用します。
まず、Difyをローカル環境で開きます。
Webサイト(http://localhost/apps)　
にアクセス後、初回はアカウントの登録・ログインが必要です。


無事開けたら、次にモデルを選択します。
Difyから選択できるモデルプロパイダーは、話題のChatGPTや話題のNVIDIAなどたくさんあります。
LLMと呼ばれる大規模言語モデル、大量のデータとディープラーニングによって構築された言語モデルは今たくさんあるのですね。

今回、なぜOllamaを選んだのかというと
Ollamaの最大の特徴「ローカル環境で実行できる」「無料」という点が大変魅力的だからです。
ChatGPTなどは、導入時に必要なAPIキーを取得するのに料金が発生してしまいます。
バージョンによっては無料で使用できるらしいのですが、
使用制限を超えた使用時の際請求できるよう「クレジットカードの登録が必要」などの条件が設定されているため、億劫になってしまいました。


Ollamaのインストール方法は以下のサイトがわかりやすいです。

https://qiita.com/t_kamiya78/items/ec9f62db9349b1804366


ただここで１点、私が大変困り、かつどのサイトにも説明がなかったこと。
OllamaをインストールしDifyで選択する際に、以下の画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780099/bc0109f1-6d37-e3d8-9813-7c6a161868d2.png)

この赤ラインを引いている「Base URL」という箇所。
これがわからずに、長時間詰んでいました。

上記先人たちのサイトを見ると、どれも簡単そうに「まあこうやな。」くらいの感覚で
記載されているのですが、私には同じコードではできない。
BaseURLの意味を調べて自分なりに修正したり、
ローカルネットワークのIPアドレスで試したりと色々試すも動かない。
２時間くらい苦戦していたので見すぎて、このアイコンにも腹が立ってきたころ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780099/3df02ccc-be6b-f22b-9cd1-c545453654d0.png)

最初はアイコンも可愛いじゃん！とか思っていたのに...。
「これはここで終了か…」と思っていたころ、なんとDifyの説明のなかに
「異なるモデルとの接続」＞「おラマ」＞「よくある質問」コーナーを発見。
↓英語表記ですが、日本語に訳して見ています。

https://docs.dify.ai/tutorials/model-configuration/ollama


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780099/74fd2456-4349-4f8a-2748-996cc1e84874.png)

絶対これや...！！！


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780099/92b36547-1219-5d6e-a5e8-715d64ba4fa6.png)


上記1,2を実行すると、Ollamaを無事に追加できました！
どうやら簡単にいうと、ローカル環境、特に今回のようにDockerを使用する場合は、
それに適合させる必要があったようです。

公式サイト様様...
ここまで丁寧に書いてくださっているのに、先にブログやまとめを読んでいた自分が恥ずかしい。
まずはマニュアルですね。
なんならDifyは日本語にも対応しているので、本当にありがたい。

これであとはチャットbotフローを選択、ナレッジを追加・指定するだけです。

https://qiita.com/Tadataka_Takahashi/items/ba832511bd4fd5cd46f1

上記ブログは終始参考にしています。


## まとめ・ビジネスへの活用

いろいろと試してみましたが、チャットbotとして使い勝手がいいかと聞かれると、
まだまだ課題があるように思えます。
もちろん１個人が無料で導入しているという条件下では、
それくらいが当たり前かもしれませんが...。


主には返答の精度面と、使用する環境（容量とバッテリーを使用する）面においてです。

ナレッジをいくつか投入し、質問を投げかけてみますが、まず返答にだいぶ時間がかかります。
最初の例の質問だけでも5分程度かかっている。
これはOllamaのモデルとしての性質やナレッジの質も関係しているので一概には言えませんが、
現場でこのスピード感ではまだまだですね。

返答もほとんど文脈判断でわかるのですが、３つに１つは「うーん惜しい。」という精度。
チャットbotとして使用する以上、スピード以上に答えの精度は重要と思われます。

またこのDifyを使用している間はかなりローカルPCに負担がかかっているようでした。
M2チップを使用している私のMacでも、動作が重くなりまたPC本体もかなり熱を上げていました。
LLMの実行には思っている以上に相当な負担がかかるようです。



ただ、
- Difyの使い勝手の良い機能性
- Ollamaのサービス提供範囲
- 初心者が調べるだけでここまで辿り着ける時代と環境

これらを実感することができました、はっきり言って異常だと思います。
こんな私でも、時代の進歩を感じることができました。
よく「AIに奪われる職種」なんて言い方をしますが、コールセンターや事務員などは近いうちに本当に無くせるでしょうね。私の会社へももし本格的に導入できるとしたら、かなり業務負担を減らすことができるのではないかと思いました。