見出し画像

DifyでローカルLLMを使ってみよう!


Difyで選択できるLLMモデル

Difyは特定のモデルに縛られることなく様々なモデルを利用することが出来ます。新しいモデルにもすぐに対応してくれるのも嬉しいポイントです。

新しいモデルもすぐに使えるようになる

今回はOpenAIやGoogleなどのモデルではなく、ローカルで利用なLLMをDifyで使えるようにする手順をご紹介します。

LMStudioを準備しよう!

実行環境

Windows11(RAM 32GB)
WSL2 ubuntu
Dify:0.6.5(Docker)
LMStudio:0.2.21
cursor

LMStudioとは?

LM Studioは、大規模言語モデル(LLM)を手軽に試せるツールです。プログラミングの知識がなくても、GUIベースの操作でLLMを使った文章生成や会話ができます。(by Perplexity)
LMStudioの嬉しい点としては、GPUが無くてもローカルLLMが動かせることです。また、LMStudioにはサーバ機能があるため、Difyのようなツールとノーコードで連携することができます。
しかし、必要なRAMが16GB以上となっており増強が必要な場合もあります。筆者も32GBのメモリ購入して増強しました。

LMStudioの要件(2024/05/01時点)

LMStudioをインストール

公式HPより自身の環境にあったインストーラをダウンロードしてインストールしてください。

インストール後、アプリを起動すると以下のような画面が表示されたらインストール完了です。

モデルの準備

では、ローカルLLMを登録してみましょう。今回は「
Aratako/LightChatAssistant-4x7B-GGUF/LightChatAssistant-4x7B_Q4_K_M.gguf」を使ってみます。
検索バーに「LightChatAssistant」と入力して検索結果が表示されたら「LightChatAssistant-4x7B_Q4_K_M.gguf」をダウンロードしてください。
サイズが15GBとかなり大きいのでPCの容量に気を付けてください。

ダウンロードに多少時間がかかる

ダウンロードが完了したらローカルサーバー(↔のアイコン)から「Select a model to load」から先ほどダウンロードしたモデルを選択してください。

メモリが足りないとここのロードで落ちてしまう

問題なくロードが出来ると自動的にサーバがスタートします。
以下の画面のように表示されているとひとまずOKです。
LMStudioの作業の準備は完了です。

WSLのIPアドレスを取得する

WSLのDockerで起動しているDifyと接続するため、WSLのIPアドレスを取得します。筆者の環境はWindowsなのでWindowsベースの手順となります。
Windowsのタスクバーにある「検索」からコマンドプロンプトを検索し、起動してください。

コマンドプロンプトを起動したら以下のコマンドを実行して、IPアドレスを表示させます。

ipconfig
イーサネット アダプター vEthernet (WSL (Hyper-V firewall)):

   接続固有の DNS サフィックス . . . . .:
   リンクローカル IPv6 アドレス. . . . .: XXXX::XXXX:XXXX:XXXX:XXXX
   IPv4 アドレス . . . . . . . . . . . .: XXX.XXX.XXX.XXX
   サブネット マスク . . . . . . . . . .: XXX.XXX.XXX.XXX
   デフォルト ゲートウェイ . . . . . . .:

コマンドプロンプトに「WSL (Hyper-V firewall)」があると思いますので、「IPv4 アドレス」のIPアドレスをコピーしてメモしてください。

DifyにローカルLLMを登録しよう!

ここからはDifyの作業になります。Difyの設定の「モデルプロバイダー」を表示しOpenAI-API-compatibleから「Add model」を選択してください。

以下のように入力欄が表示されますので以下のように入力して保存してください。API Keyは無くても多分動きます。

Model Name       : 任意の名前
API Key          : lm-studio
API endpoint URL : http://{コマンドプロンプトから取得したIPアドレス}:1234/v1

エラーが出ずに保存が出来れば完了…ではないです。
このままだと登録はされていますが、「使える状態」にはなっていません。
この状態でチャットアプリからモデルを選択しようとしても、登録したはずのモデルが表示されません。

そのため、Docker Compose down/upで再起動します。ターミナルで以下のコマンドを実行して再起動してください。
※これが正しい手順かは現状不明です。とりあえず使えるようにすることを優先にしています。

cd dify/docker
docker compose down
docker compose up -d

これで準備完了です!

DifyでローカルLLMを使ってみよう!

では早速使ってみましょう!
簡単なチャットボットを作って、モデルを探してみましょう。
Open-AI-API-compatibleに先ほど登録したモデルが表示されるので選択してください。

無事にモデルが選択できるようになっています

モデルを設定したらいつものごとく「カレーの作り方」を聞いてみます。
PCのファンがガンガン回っているのを聞きながら待っていると、以下のように回答が返ってきます。
これでDifyでローカルLLMが使えるようになりました!

ローカルLLMの精度に驚いてます

おわりに

今回、コマンドプロンプトでIPアドレスを取得する手順があったと思いますが、地味つまったポイントがそこでした。筆者は最初は以下のようにLMStudioで表示されている「http://localhost:1234/v1」をAPI endpoint URLに入れていましたが、接続エラーとなってしまいました。
コミュニティやGithubのissueを調べて総合した結果、localhostの代わりにWSLのIPアドレスを入れる必要があることに気づくことが出来ました。

厳密にはdockerのルーティングなどがあるようですが、この点についてはまだ十分に理解ができておらず引き続きの学習が必要です。
LLMに聞けば簡単に解決するのでは?と思っていろんなプロンプトで聞いてみましたが解決策に辿り着くことはできませんでした。
今回はコミュニティやGithubでのissue探しなど従来のエラー調査を行いましたが、従来の手法も新しい手法もどちらか一方に頼るのではなくハイブリッドに使い分けて進めていくことが早期解決の糸口になるのではと思った検証でした。