みなさんこんにちは。最近話題となっているDifyというツールについて調べてみました。
Difyとは
オープンソースの大規模言語モデル(LLM)アプリケーション開発プラットフォームで、Backend-as-a-ServiceとLLMOpsの概念が組み合わさったソフトウェアです。通常LLMの開発には複雑なコード作成が必要になりますが、技術者ではない開発者でも、本番レベルの生成AIアプリケーションをすばやく構築できるのが一番の特徴になります。
Difyを使うと何ができるの?
- ノーコードでAIアプリケーションを直感的に構築
- 50以上の組み込みツールを使ったAIエージェントを数クリックで構築できる
- GPT-4、Claude、Llama3など、アプリケーションの作成に使うことができる多様なLLMモデルをサポート
- RAG(Retrieval-Augmented Generation)エンジンにより、関連情報の検索・取得と高品質な回答生成が可能
- ワークフロー機能を使用し、グラフィカルな処理フローの設計が可能
サポートされる主要LLMモデルのプロバイダーとモデル
- OpenAI
- gpt3.5-turbo
- gpt4
- gpt4-Turbo
- gpt4-vision
- Azure OpenAI
- Anthropic
- claude-opus
- claude-sonnet
- claude-haiku
- Google
- gemini-1.5-pro
- gemini-pro
- gemini-pro-vision
- Cohere
- command-r
- command-r-plus
- Bedrock
- titan-text-g1
- Hugging Face
※上記に記載がない項目についても、たくさんのモデルをサポートしています
※LLMモデルについては、更新が早いためドキュメント化はされていません
※LLMプロバイダについては下記ページを参照のこと
利用方法
Difyを使うには、以下の2つの方法があります。
- クラウド版のDify Cloudを利用する方法
- セットアップ不要ですぐに使えるクラウドサービス。プランによって異なるが、ストレージ容量やチームで使うかどうかなどで、利用できるプランが変わる
- セルフホスティング(ローカル環境)でDifyを利用する
- Dockerを使ってローカル環境にDifyをインストールして利用する
- DockerDesktopが動作する環境、DockerVMが2vCPU、8GBメモリを利用できる環境
※料金ページについては、下記を参照ください
※ローカル環境のスペックについては、下記のローカル環境へのセットアップの項にあるURLを参照ください
ローカル環境へのセットアップ
セットアップ環境
- linuxの場合
- Docker 19.03 以降がインストールされていること
- Docker Compose 1.25.1 以降がインストールされていること
- Python 3.10 の環境が動作すること(手順ではAnacondaを利用)
- Node.js v18.x がインストールされていること
- NPM version 8.x.x がインストールされていること
※基本的には下記手順に沿って設定作業を実施しています
1. dockerタスク実行
レポジトリからファイルを取得して、dockerタスクを起動
git clone https://github.com/langgenius/dify.git
cd docker
docker compose -f docker-compose.middleware.yaml up -d
2. APIサーバの構築
Python環境の構築
anacondaでpython環境を新規作成
conda create --name dify python=3.10
※以前作成した環境に何か作業を行う場合は以下のコマンドを使用
conda activate dify
環境変数の設定
APIフォルダへ移動し、作成した秘密鍵を.env
ファイルに保存する
※openssl rand -base64 42の出力結果をと置き換えて次のコマンドを実行する
cd api
openssl rand -base64 42
sed -i 's/SECRET_KEY=.*/SECRET_KEY=<your_value>/' .env
Python環境の設定
依存関係のモジュールをセットアップする
pip install -r requirements.txt
APIサーバの起動
flask db upgrade
flask run --host 0.0.0.0 --port=5001 --debug
3. フロントエンドサーバの構築
npmのインストール
下記コマンドでインストールする
cd web
npm install
環境変数の設定
必要に応じて環境変数を設定します
- NEXT_PUBLIC_DEPLOY_ENV
- 開発環境の場合は "DEVELOPMENT"、本番環境の場合は "PRODUCTION" に設定
- NEXT_PUBLIC_EDITION
- セルフホスティングの場合は "SELF_HOSTED"、クラウドサービスを使用する場合は "CLOUD" に設定
- NEXT_PUBLIC_API_PREFIX
- コンソールアプリケーションのベースURLを設定します
- APIやWebアプリのドメインがコンソールのドメインと異なる場合は、WEBサービスのコンソールベースURLを指定
- 例)
http://cloud.dify.ai/console/api
- NEXT_PUBLIC_PUBLIC_API_PREFIX
- WebアプリのURLを設定します。WebアプリのドメインがコンソールやAPIのドメインと異なる場合は、WEBサービスのWebアプリベースURLを指定
- 例)
http://udify.app/api
- NEXT_PUBLIC_SENTRY_DSN
- Sentryを使用する場合は、SentryのDSN(Data Source Name)を設定
- Sentryを使用しない場合は空のまま
- NEXT_PUBLIC_SENTRY_ORG
- Sentryを使用する場合は、Sentryのオーガニゼーション名を設定
- Sentryを使用しない場合は空のまま
- NEXT_PUBLIC_SENTRY_PROJECT
- Sentryを使用する場合は、Sentryのプロジェクト名を設定
- Sentryを使用しない場合は空のまま
# For production release, change this to PRODUCTION
NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
# The deployment edition, SELF_HOSTED or CLOUD
NEXT_PUBLIC_EDITION=SELF_HOSTED
# The base URL of console application, refers to the Console base URL of WEB service if console domain is
# different from api or web app domain.
# example: http://cloud.dify.ai/console/api
NEXT_PUBLIC_API_PREFIX=http://localhost:5001/console/api
# The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
# console or api domain.
# example: http://udify.app/api
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5001/api
# SENTRY
NEXT_PUBLIC_SENTRY_DSN=
NEXT_PUBLIC_SENTRY_ORG=
NEXT_PUBLIC_SENTRY_PROJECT=
フロントエンドサーバの起動
コードをビルドし、Web サービスを開始する
npm run build
npm run start
アプリケーション実行
difyにログインすると下記のような画面が表示されます。ここでオリジナルのアプリケーションを構築するか、すでに登録してあるアプリケーションを動かすこともできます。
登録済みアプリケーションは探索の画面から探すことができます。
余談な話ですが・・
レポジトリからファイルを取得して、以下のコマンドでdockerタスクを起動するだけでも動作しました。
現実的にはこちらの方がよさそうですネ。。
git clone https://github.com/langgenius/dify.git
cd docker
docker compose up -d
まとめ
軽く触ってみた感じ、色々出来そうな雰囲気があります。自分で開発するよりは、すでにアプリケーションとして登録されているものを使う方がより早く自分がやりたいことをできそうですね。次はもう少しアプリケーションを触ってみて、その内容をまとめられればと思います。