見出し画像

Dify(Windows ローカル版)用のバッチファイル ~Dify起動用、環境確認用、Dify更新用(0.6.13対応)~

こんにちは。
生成AIを楽しんでいますか?

生成AIの中でも、Difyはノーコードでアプリ開発ができる大変便利なツールです。ただ、ローカル環境だと少々厄介な問題があります。

バッチファイルを作った理由

ローカル環境では、WSL2、Docker、Ollamaなどの多層構造で構成されるため、起動やアップデート、エラー発生時の対応などが少々面倒なところがあります。

怠惰な私としては、より少ない作業で済ませたいと感じていました。
そこで、20年以上前からバッチファイルを作成してきた(怠惰な)経験を活かして、Dify関連の作業を簡略化するバッチファイルを作成しましたので、ご紹介します。

バッチファイルって何?という方もいるかもしれませんので、ここから解説します。
何せ50代のおっさんなので、今どきの常識が分からないのです(;^ω^)。「MS-DOSは使ってたよ」という方なら大丈夫でしょうけど。
Windows 95が出た当初にまだ産まれていない方は、どんな感じなのでしょうか?

ああ、ここまで書いてきてやっと気づきました。
Pythonですね。ローカルLLM界隈では、MacやLinuxが多数派で、Windowsは少数派ですから。
もはやPythonが共通言語になっているのでしょうけど、少数派の方の参考になれば嬉しいです。

Difyのローカル版実行環境

  • オペレーティングシステム: Windows 11 Home

  • RAM: 16.0 GB

  • プロセッサ: AMD Ryzen 5 4500 6-Core Processor 3.60 GHz

  • グラフィックス: GeForce RTX 3060 12GB

  • WSL2(Ubuntuを使用)

  • Docker Desktop

  • Ollama(Windows プレビュー版)

バッチファイルって?

バッチファイルは、Windowsのコマンドプロンプトで実行される一連のコマンドをまとめて自動的に実行するためのファイルです。ファイルの拡張子は通常「.bat」です。
一方、Pythonの場合はバッチファイルではなく、Pythonスクリプトと呼ばれます。Pythonスクリプトには実行したいPythonコードを記述し、ファイルの拡張子は「.py」となります。

要するに、複数のコマンドをまとめて書き込み、一度に実行するためのファイルということです。

バッチファイルの作成手順

  1. テキストファイルの作成:

    • デスクトップなどで右クリックして、新規作成→テキストドキュメントをクリックします。すると、「新規 テキスト ドキュメント.txt」というファイルが出来上がります。

  2. コマンドを記述する:

    • 実行したいコマンドをこのテキストファイルに記述します。

  3. ファイルを保存する:

    • ファイル名を「お好みの名前.bat」のようにして、拡張子を「.bat」として保存します。アイコンが歯車みたいなものに変われば成功です。

  4. バッチファイルを実行する:

    • 保存したバッチファイルをダブルクリックすると、記述されたコマンドが順番に実行されます。

バッチファイルの利点

  • 手作業の削減: 繰り返し作業を自動化することで、手間を省けます。

  • 一貫性の確保: 毎回同じ手順を実行するので、手順の抜けや間違いを防げます。

  • 時間の節約: 一度に多くのコマンドを実行できるため、手動で行うよりも早く処理が完了します。


それでは、作ったバッチファイルを紹介していきます。

Dify起動用バッチファイル

こんなことも面倒なのかよ!と突っ込まれそうですね(;'∀')。
Dockerが完全に立ち上がるタイミングが分からず、「まだかな?うーん、まだか…まだかなあ」と精神的な葛藤に耐えられなかった私の弱さが要因です( ノД`)シクシク…。

  • 絶対パスでDocker Desktop.exeを指定しているので、各自の環境に合わせて設定してください。

  • とりあえず、Dockerが立ち上がるまで15秒待機させています。

  • Google ChromeとMicrosoft Edgeの両方が立ち上がるようにしているので、不要な方を削除してください。

  • ローカル版のDifyのアドレス設定は、特に注意が必要です。沼にはまる可能性があります。ここでは「http://localhost/signin」と記載していますが、これは例であり、実際には成功しているアドレスに変更してください。

  • もし、ログイン画面が出たとしても、無反応の場合も多々あります。その際は、「F5」を数回押して画面を更新したり、IDを入れる欄などに一度カーソルをいれるなど、画面を更新させるとうまくいく可能性が高まると思います。

@echo off

:: Dockerを起動(絶対パスでDocker Desktop.exeを指定しているので、各自の環境に合わせて設定してください)
echo Starting Docker...
start "" "C:\Program Files\Docker\Docker\Docker Desktop.exe"

:: Dockerが完全に起動するまで15秒間待つ
timeout /t 15 /nobreak

:: DifyのAPIエンドポイントにアクセス
echo Accessing Dify API endpoint...

:: (1)Google Chromeと(2)Microsoft Edgeの両方が立ち上がるようにしているので、不要な方を削除してください。

:: (1)Google Chromeを起動してDifyのページを表示
echo Launching Google Chrome to display Dify page...
start chrome http://localhost/signin

:: (2)Microsoft Edgeを起動してDifyのページを表示
echo Launching Microsoft Edge to display Dify page...
start msedge http://localhost/signin

:: 完了メッセージ
echo Dify is up and running.
pause


Dify環境確認用バッチファイル

前述のように、ローカル環境のDifyは様々なアプリケーションで構成されています。
そのため、エラーが発生したときに問題を突き止めることが難しい場合があります。
次のコードは、Difyに関連する情報を入手するためのコマンドです。
各コマンドの役割については、コメントをご覧ください。

  • コマンド「nvcc --version」は、NVIDIA CUDA Toolkitのバージョン情報を表示します。CUIでCUDAをインストールしていた方の場合、エラーが発生することがあります(私の経験ではそうでした)。しかし、ローカルLLMを使用している際にGPUが稼働していれば特に問題はないでしょう。一方、GPUが稼働せずにCPUがフル稼働している場合は、NVIDIAの公式ウェブサイト(https://developer.nvidia.com/cuda-downloads)からダウンロードしてインストールしてください。コマンド「nvcc --version」も機能するようになります。

  • ollamaがインストールされていない場合は、ollamaに関するコマンドを削除してください。

@echo off

:: WSLのデフォルトディストリビューションをUbuntuに変更する(念のためのコマンド)
wsl --set-default ubuntu

:: WSLのディストリビューションとそのバージョンを表示する(Ubuntuに*マークが付いていること)
wsl --list --verbose

:: NVIDIAのGPUに関する情報を表示する
nvidia-smi

:: GPUの名前、ドライババージョン、メモリ総量をCSV形式で表示する
nvidia-smi --query-gpu=name,driver_version,memory.total --format=csv

:: NVIDIA CUDA Toolkitのバージョン情報を表示する
nvcc --version

:: Docker Hubやプライベートレジストリにログインする
docker login

:: Dockerのシステム全体の情報を表示する
docker info

:: すべてのDockerコンテナ(停止中のものも含む)の状態を表示する
docker ps -a

:: ローカルに存在するDockerイメージを一覧表示する
docker images

:: Ollamaのバージョン情報を表示する
ollama --version

:: Ollamaに関連するリスト(例えば、利用可能なモデルや設定など)を表示する
ollama list

:: バッチファイルの実行が終わった後もコマンドプロンプトを開いたままにしておく
cmd /k

このバッチファイルを実行すると、次のように各種情報が列記されます。

(実際にはまだまだ続きます)

これらを逐一確認することでエラーを突き止めることができるかもしれませんが、次の方法をおすすめします

  1. 上記の出力内容をすべてコピーする。

  2. ChatGPT-4などのAIツールにペーストする。

  3. 最後に「何か問題はあるか」とのプロンプトを加えて、AIを実行する。

要するに、AIに丸投げして問題点を洗い出すわけです。
GUIと違って、CUI上で出力させると、AIに簡単にコピペできるのが利点です。
もちろん、マルチモーダルAIであれば、画像を貼り付けて分析させることも可能ですが、複数の画像を必要とする状況だと手間がかかります。

(chatGPT4o使用例)

今回は、chatGPT4oを使用しています。結果は、次のようになりました(途中端折っています)。

(出力結果の最後の部分のみ抜粋)

このようにAIを使用することで、複雑なDifyの環境周辺の問題点を明らかにすることができます。
問題点があれば、それをさらにコピペしてAIに解決方法の助言を仰ぐことができます。
ただし、Difyは新しいツールのため、情報不足からハルシネーションが発生する可能性がありますので、GeminiやPerplexityなど、複数のAIを使用することをおすすめします。

Dify更新用バッチファイル

Difyは新しいツールであるため、頻繁にアップデートが行われています。このバッチファイルを作成しておくことで、簡単にアップデートができるようになります。

  • 絶対パスで、dockerフォルダに移動しているので、各自の環境に合わせて設定してください。

0.6.13バージョン

0.6.13へバージョンアップするには、手動によりバックアップをしておいた方が良いようです。
例えば、docker-compose.yaml、あるいは、difyフォルダを丸ごと名称を変えてコピーしていてもよいかもしれません。
なお、batファイルの名称の末尾が612となっていますが、0.6.13へのバージョンアップは可能となっています。

@echo off 

:: 移動するディレクトリを設定
cd C:\dify\docker

:: 現在の Docker コンテナを停止して削除
docker-compose down

:: 現在の変更を一時的に保存
git stash 

:: リモートリポジトリから最新の変更を取得し、再ベース化する
git pull --rebase 

:: 一時的に保存した変更を適用
git stash pop 

::最新版をgithubからダウンロードしてくる
git pull origin main

:: .env.exampleを.envに名称変更する。
cp .env.example .env 

:: Docker コンテナをバックグラウンドで起動
docker compose up -d

:: コマンドプロンプトを終了せず、一時停止する
pause

6.11バージョンまでの方法

@echo off 

:: 移動するディレクトリを設定
cd C:\dify\docker

:: 現在の Docker コンテナを停止して削除
docker-compose down

:: 現在の変更を一時的に保存
git stash 

:: リモートリポジトリから最新の変更を取得し、再ベース化する
git pull --rebase 

:: 一時的に保存した変更を適用
git stash pop 

:: Docker コンテナをバックグラウンドで起動
docker compose up -d

:: コマンドプロンプトを終了せず、一時停止する
pause

最後に

本記事の作成にあたり、sangmin.eth | Dify Ambassadorさん、ローカルLLMに向き合う会(Discord)の皆様、Dify.AI(Discord)の皆様から貴重な助言をいただきました。この場を借りて心より感謝申し上げます。

追伸
もし、本記事内で間違いがあれば、ご指摘いただけると幸いです(o。。)o


いいなと思ったら応援しよう!