Dify をローカルのDockerで立ち上げる手順の紹介
この記事ではDifyというOSSのワークフローの作成ツールをDocker環境で立ち上げる手順を紹介します。
DifyはZapierやIFTTTのように、ユーザーが手動で行っているルーチン作業を自動化することができます。 (実際はチャットボットや、エージェント作成機能とかもあるのと、ワークフローは現時点ではベータの機能です)
なぜ Dify が注目されるのか?
Zapierなどの競合サービスがある中で、なぜDifyが注目されているかについて、自分なりの考えです。
- ChatGPTなどのLLMとの連携がしやすく設計されており、他サービスよりも柔軟なワークフローを作りやすい
- Dockerで環境構築ができるように準備されており、従来よりもかなりコストを抑えて運用ができる
- OSSで圧倒的な開発速度でLLMの進化に追従しており、LLMで従来よりも柔軟にプロセスを組める
Difyの特徴
- 開発環境とセットアップ:
- Dockerを使用したローカル環境構築が可能で、約5分程度で稼働可能
- API統合と使用:
- RESTful APIとして公開可能。API keyによる認証もできます
- モデル選択と柔軟性:
- OpenAI GPT、Anthropic Claude、Google Gemini等、複数のLLMを選択可能
- RAG (Retrieval-Augmented Generation) 機能:
- Notionや、PDFやPowerPointなど多様な形式のドキュメントをインデックス化可能
- カスタマイズ性:
- FireCrawlやBingなどの外部ツールやデータソースの統合が可能
ローカルでの立ち上げ手順
現時点でのローカルでの立ち上げ手順です:
(手順は頻繁に変わるので、日本語の公式ドキュメント を確認してください)
# Difyのソースコードの取得
git clone https://github.com/langgenius/dify.git
cd dify
# docker ディレクトリへの移動
cd docker
# 環境変数の設定
cp .env.example .env
# Docker の起動
docker compose up -d
上記が終わって、 http://localhost
(Difyのローカル画面)にアクセスできたら成功です🎉
僕が試していた時は初回は画面からアカウントの作成等を行いました。
頻繁にソースコードが更新されるので、できれば毎回起動前にこちらをやっておくのがおすすめです。
cd docker && \
git pull origin main && \
docker compose down && \
docker compose pull && \
docker compose up -d
テキストジェネレーターの作成手順
画面からログインするとこんな画面が表示されます:
まずはChatGPTを使えるように設定:
この画面からAPI Keyを設定して使うModelを設定します:
(お金なかったのでChatGPT 4o Miniだけ許可しました🤣)
このようにチャットボット、テキストジェネレーター、エージェント、ワークフローが作れます:
とりあえず、テキストジェネレーターを作ってみました:
UIがわかりやすいし、デバックの仕組みが完備されてるので直感的に進められました。
ワークフローの作成手順
次にワークフローを試してみました。今回は会社名を入れたら、それについてChatGPTの知っている情報を教えてくれるフローです。まずはChatGPT 4o Miniが知ってそうな有名な会社さんについて答えてもらいました。
さらに、サイトをクロールしたかったのでFirecrawlというサービスを使いました。指定したサイトをクロールしてきてくれるサービスで、クラウド版とDocker版があります。
(今回はクラウド版を使ってますが、うまく行ったらOSSなのでDocker版で動かしたいと思っています)
クラウド版にサインアップしてFireCrawlでAPI Keyを取得してDify側に設定:
「ワークフロー > ノード > Scrape」で検索するとFirecrawlのノードが出てきますので「承認」を押して先ほどのAPI Keyを設定してください。
するとこのようにでURLをスクレイピングしてきて結果のデータを要約してくれます:
こんな感じで途中結果も確認できるのでデバックも捗ります:
DifyワークフローのDSLをAIに編集してもらう?
Claude 3.5 SonnetでDifyのDSLを生成できるという噂を見かけたので試してみました。
DifyのDSLをエクスポート:
ClaudeにエクスポートしたDSLを渡して、DSLの修正を指示してみました:
僕の環境・Claudeへの指示では、残念ながら適切なDSLを生成してくれませんでした orz
正直、DifyのDSL仕様ドキュメントを見つけることができず、DSLの仕様がClaude側でわからないので今回は仕方ないかなと思っています...
最近の妄想
DSLの編集の部分は残念な結果でしたが、今後変わりそうな気がします。
- おそらく将来はDifyの画面内でチャットをしながらワークフローを設定・改善していける可能性があるんじゃないかなと思います。これができるとワークフローの構築コストをかなり下げられそう✨
- ChatGPT APIでJSON Schema Mode(Structured Output)が最近できたので、よりアウトプットの出力を思い通りに加工したりも容易になりそう(ChatGPTをよりAPIっぽく使えそう)
Discussion