Difyを知ったのが9月、そこから Community 版(OSS版)を使い始めて、それほどたってませんが、ここまでで知ったTipsをいくつか紹介します。
- アップロードサイズを50MBにする
- ローカルPC上に構築したDifyをインターネット上に公開する
- Difyの管理者用アカウントを初期化する
- Firecrawlをローカル環境内で使用する
- ReRankモデルをローカル環境内で使用する
- Dify Community版をAWS上に構築する
アップロードサイズを50mbにする
この方法は、比較的いろんなサイトとでもしょうかいされている、比較的有名なTipsです。
Docker Composeを使ってDify Community版を立ち上げている方は.env
ファイルの以下の箇所の設定を変更します。
UPLOAD_FILE_SIZE_LIMIT=50
Difyの環境変数は公式ドキュメントにも紹介されていますが、0.11.0の場合は50以上にしても反映されないようです。ただ、上限はドキュメントにはありませんので、今後変更されるのかもしれません。
ローカル環境内に構築したdifyをインターネット上に公開する
実はDifyの公式ドキュメントにも紹介があるのですが(今記事を書いている最中に知りました..)ngrokを使います。
ngrokはこのhttp://localhost/をHTTPSによる暗号化されたトンネルを作成して、インターネット上に公開します。
Dify Community版を使っている人の多くはDocker Composeを使っていると思います。そういったばあい、ローカルPCのポート80番がexposeされているとおもいます。そういう人は、Dockerコンテナによる起動が手っ取り早いです。
ngrokサイトでアカウントを登録しログイン後、DockerによるセットアップサイトのDeploy your app online というセクションにあるdocker run
コマンドをコピーして、Dify Community版がどうさしているDockerホスト上で別コンテナとして実行します。
-it
オプションが付いているのでコマンドラインに以下のようなメッセージが表示されたら、Forwardingに指定されたURLを開くことで、Dify画面が表示されるようになります。
これで、ローカルPC上のDifyでは外部からWebUIやAPI経由でDifyアプリが使えるようになります。
よくあるGASからDifyアプリをAPI経由でアクセスするサンプルなどがCommunity版でも動くようになります。
difyの管理者用アカウントを初期化する
Difyの管理者アカウントのパスワードを忘れた場合は、ログイン画面にあるパスワードリセットを行えばいいのですが、Community版を使っている人は、.env
でメールサーバ設定をしていないことがおおく、結局コンテナを最初から作り直している人が少なくありません。
ですが、Difyの管理者パスワードはflaskdocker compose
コマンドでリセットすることができます。
cd dify/docker
docker compose exec -it api flask reset-password
上記コマンドを入力すると管理者アカウントをCUIで再作成することができます。
実はこの方法もDify公式ドキュメントにのっていました。
firecrawlをローカル環境内で使用する
Dify0.11.0ではURLを指定したサイトからナレッジを作成する場合jina readerかfirecrawlのどちらかを選択します。
firecrawlはOSS版がありDockerコンテナとして動かすこともできます。
Difyが動作しているDockerホスト上で以下のコマンドを実行することでコンテナを起動させることができます。ただしdocker pull
に結構時間がかかります。
以下のコマンドは、firecrawlのAPIキーをfc-hogehoge
にした場合の実行例です。
git clone https://github.com/mendableai/firecrawl.git
cd firecrawl
cp ./apps/api/.env.example ./.env
sed -i 's/^USE_DB_AUTHENTICATION=true$/USE_DB_AUTHENTICATION=false/' .env
sed -i 's/^TEST_API_KEY=$/TEST_API_KEY=fc-hogehoge/' .env
docker compose up -d"
実用時には
.env
をもうすこししっかり確認して修正した方が良いと思ます。
上記コマンドでコンテナを起動したら、firecrawlのサイトのベースURLをhttp://<プライベートIPアドレス>:3002
、APIキーをコマンドで指定した文字列を設定すれば動作させることができます。
firecrawlはクローリングをおこなうので、使用する場合は相手側のサイトの負荷にも注意してください。
rerankモデルをローカル環境内で使用する
Difyでrerankモデルを使う場合、外部のAI APIサービスを使うことになりますがCohere(もしくは AWS Bedrock経由で)がほぼ一択なのではないでしょうか(もしあるならごめんなさい)。
(使用頻度はLLMよりは低いですが)モデルの希少性なのか Cohere の rerank モデルの値段はLLMの値段と同じくらい高いです。
なのでローカルでrerankモデルを動かして使用することをかんがえますがollamaにはすぐにollama pull
できるrerankモデルがありません。GGUFファイルを変換して..とかやればうごくとはおもいますが、自分のような令和の軟弱エンジニアには厳しい..
Ollamaにはありませんが、XinferenceにはWeb UI操作でrerankモデルを使えるようにできます。
なのでXinferenceをDockerコンテナとして起動させて使用することで Cohere にお金を払わずに使うことができます。
以下のdocker-compose.yamlファイルを作成し、data
ディレクトリを切った後、docker compose up -d
することでXinferenceが立ち上がります。
services:
xinference:
image: xprobe/xinference:latest
container_name: xinference
command: xinference-local -H 0.0.0.0
environment:
- XINFERENCE_HOME=/data
- XINFERENCE_LOG_LEVEL=info
restart: unless-stopped
ports:
- "9997:9997"
volumes:
- ./data:/data
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
ただ..上記の定義のさいごのほうにもあるとおり、GPUがないとXinferenceが起動できないようなのです。何度もCPUのみで上げようとしたのですが、コンテナ起動中にエラーになってしまって..
docker compose
で立ち上がったXinferenceのWeb UIは、http://localhost:9997/で開くことができます。
Web UIが開いたら上のタブでRERANK MODELS
左のタブでLAUNCH MODEL
でモデルを選択してlaunchすればDifyからXinference設定経由で使用することができます。
difycommunity版をaws上に構築する
ローカルPCを一切汚したくないというひとはAWSなどのクラウド環境で立ち上げようとする人もすくなくないでしょう。
AWSの中のひとが作成した以下のGitHub リポジトリを使用することで立ち上げることができます。
使い方はトップのREADME.mdの日本語文にあるとおり、リンク先のnote記事を読むと良いと思います。
..実は自分はこの記事を試していません..この記事読む前にCloudFormation化してしまったので..
このリポジトリにあるようにRedisやPostgresをElastic CacheやAuroraで上げてはいませんが、t3.2xlarge ひとつでも十分に動作します。
Dify Community版をつかってみると、公式ドキュメントになさそうな制約(..自分が見つけられないだけかもしれませんが..)がいくつかあって、たとえばワークスペースは1つだけとか、Difyアプリを30個以上つくれないとか..公式に確認はしていませんが..
なので、王道ルートの docker compose でDifyをたちあげようとする人は、基本スケールアップではなくスケールアウトでいくのかな..と。
なら2xlargeくらいのインスタンスで不足したら増やしていくので十分かな..と。
それに、Difyのリポジトリをのぞているとすぐに見つかる docker-compose.middleware.ymlを使ってコンテナをvolume 削除せずに上げ直せばAPIサーバとしてもうごかせるようですし(必要なときにUIのはいったcomposeファイルで上げ直す、とか)。
このあたりは、みなさんがやろうとしていることの非機能要件によるかな..とおもいます。
以上です。
ps
今は Dify はホットですが、bolt.newやReplit Agentが成長して「ほげほげするDifyアプリを作って」に対応できるようになったら..とか、 Captain Agent のようなAgentを生成するAgentがでてきたら..とかを考えると..
..生成AI界隈って、勉強するほどアホをみる..のかな?!
以下、ご参考まで。