29
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Difyでローカル環境のチャットボットを作る

Last updated at Posted at 2024-05-13

はじめに

最近話題のDifyを触ってみました。

Difyとは?

Difyは、オープンソースの大規模言語モデル(LLM)アプリケーション開発プラットフォームです。
Backend-as-a-ServiceとLLMOpsの概念を組み合わせて、開発者が実稼働グレードの生成AIアプリケーションを迅速に構築できるようにします。
技術者でなくても、AI アプリケーションの定義とデータ操作に参加できます。

GUI操作でLLMのチャットボットやAPIが簡単に作れるようです。

動作環境

MacBook Pro(2020)
CPU: 2.3GHz クアッドコアIntel Core i7
メモリ: 32GB 3733MHz LPDDR4X
macOS: 14.4.1

環境構築

Gitに書いてある手順で構築を進めました。

git clone https://github.com/langgenius/dify.git
cd dify/docker
docker compose up -d

実際に触ってみる。

http://localhost/installにアクセスすると以下の画面になりました。
日本語に対応しているのは嬉しいですね。
スクリーンショット 2024-05-10 18.53.38.png

初期画面
スクリーンショット 2024-05-10 18.58.38.png

チャットボットを作成してみる。

今回は会社のHP情報をナレッジとして持たせてチャットボットを構築してみたいと思います。

モデルは先月に発表された小規模言語モデルのPhi-3を使用してローカルで動かしてみます。
本当はもう少し強めのモデルやAPIを叩きたいところですが、そんな予算やPCがないので...

モデルをDifyで利用できるようにする。

Difyでローカル環境のモデルを利用する方法はいくつかありますが、今回はOllamaを使用してみます。

インストールは以下を参照

MacOSでbrewを入れている方は以下の方法が早いかもしれません。
(私はこの方法で入れました。)

brew install ollama

モデルをOllamaで起動

ありがたいことにOllama用のphi3モデルが用意されているので、それを利用させてもらいます。

ollamaサーバーを起動

ollama serve

初回はモデルのDLに少し時間がかかります。

ollama run phi3:instruct

動作確認
スクリーンショット 2024-05-11 11.55.18.png

Difyの設定

続けてDify側の設定を行なっていきます。

ナレッジの作成

先にナレッジから設定を行なっていきます。

「ナレッジ」→「知識を作成」を選択します。
スクリーンショット 2024-05-11 12.04.29.png

現時点だとテキストファイルもしくはNotionからしか作成できないようです。
今回は会社のHP情報をテキストにまとめて利用することにしました。

スクリーンショット 2024-05-11 12.10.46.png

前処理は以下の通り設定しました。
スクリーンショット 2024-05-11 12.13.15.png

これで作成完了です。
スクリーンショット 2024-05-11 12.14.59.png

モデルを登録

次にDify上でPhi-3を扱えるように登録してきます。
「設定」→「モデルプロバイダー」→「Ollama」を選択します。
スクリーンショット 2024-05-11 12.17.04.png

以下のように設定しました。
スクリーンショット 2024-05-11 12.22.37.png

作成したものがモデルに追加されました。
スクリーンショット 2024-05-11 12.23.36.png

チャットボットの作成

必要な設定を行ったので実際にチャットボットの作成を行なっていきます。

「スタジオ」→「最初から作成」を選択します。
スクリーンショット 2024-05-11 11.59.46.png

チャットボットを選択して名前と説明を追加します。
スクリーンショット 2024-05-11 13.00.47.png

フローチャートのように順番に処理を作成して繋げて作るみたいです。
スクリーンショット 2024-05-11 13.02.29.png

「開始」の後ろに「知識取得」の処理を入れます。
スクリーンショット 2024-05-11 13.03.42.png

先ほど作成した会社のHP情報を追加してそれを取得するようにします。
スクリーンショット 2024-05-11 13.05.56.png

ちなみに右上の「▶️」で個別デバックもできました。
スクリーンショット 2024-05-11 13.08.20.png

LLMは以下のように設定してます。
スクリーンショット 2024-05-11 13.43.40.png

デバッグとプレビューから実行してみます。
スクリーンショット 2024-05-11 13.46.09.png

ちゃんと知識を取得して回答することができています。

ログのトレースもできるようなので、処理も詳細に追っていけそうです。
スクリーンショット 2024-05-11 13.49.43.png

その他機能について

API

以下のようなAPI仕様書も自動生成されていました。
スクリーンショット 2024-05-11 13.51.59.png

ログ

アクセス毎に細かく見れるみたいです。
スクリーンショット 2024-05-11 14.02.27.png

分析

ChatGPTなどのAPIで有料モデルを使う場合でもトークン消費量などが見られるのは嬉しいですね。
スクリーンショット 2024-05-11 13.59.28.png

おまけ

アプリ動作中のメモリの状態です。
スクリーンショット 2024-05-11 12.50.28.png
全体で25GBほど消費していて、このレベル(3.8b)ならギリ動くって感じでした。(もう少し頑張れば7bぐらいは動きそう)

感想

コードを一切書かずにここまでのことができるのはすごいと感じました。
GUIで処理フローを作るのが、langchainで構築するより直感的で分かりやすくとてもよかったです。
GPT-4とか触っていると感覚がおかしくなりますが、Phi-3もGPUなしのローカルで動かしていることを考えるとすごいと思いました。
回答は若干怪しいところもありますが、小規模パラメータにしてはなかなかの精度かと思います。
今後もローカル環境で動作する小規模ながら高精度なモデルが増えていくことに期待したいと思います。

29
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?