5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DifyAdvent Calendar 2024

Day 3

Dify Community版を使うときのTips

Last updated at Posted at 2024-12-02

Difyを知ったのが9月、そこから Community 版(OSS版)を使い始めて、それほどたってませんが、ここまでで知ったTipsをいくつか紹介します。

アップロードサイズを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ホスト上で別コンテナとして実行します。

docker_ngrok.png

-itオプションが付いているのでコマンドラインに以下のようなメッセージが表示されたら、Forwardingに指定されたURLを開くことで、Dify画面が表示されるようになります。

ngrok_docker.png

これで、ローカル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記事を読むと良いと思います。

aws_dify.png

..実は自分はこの記事を試していません..この記事読む前に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.newReplit Agentが成長して「ほげほげするDifyアプリを作って」に対応できるようになったら..とか、 Captain Agent のようなAgentを生成するAgentがでてきたら..とかを考えると..

..生成AI界隈って、勉強するほどアホをみる..のかな?!

以下、ご参考まで。

5
1
1

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
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?