Difyは生成AIを対象とした開発プラットフォームで、AIを搭載したアプリケーションをローコードで作成できます。
Difyには様々な機能がありますが、その中でもオープンソースのクローラーFirecrawl連携する機能があります。Firecrawlと連携させると、WebをクローリングしてRAGを構築できるようになります。
本稿では、DifyとFirecrawlを両方ローカル環境にDocker Composeで立ち上げて、連携させます。Docker Composeのoverrideの設定を使うことで、同じネットワークに所属させます。
環境
- Docker version 27.3.1, build ce12230
- Docker Compose version v2.29.7
- Dify 0.12.1
- Firecrawl 2024年12月4日時点のコミット
41d85920
を利用
Difyの構築
まずDifyをGitHubからcloneして適切な断面にチェックアウトしておきます。
ネットワークの設定を変更します。dify側のDocker Composeのサービスのうちapi
を、firecrawl_backendというネットワークに所属させます。
services:
api:
networks:
- firecrawl_backend
- ssrf_proxy_network
- default
networks:
firecrawl_backend:
external: true
あわせて、ローカル環境でwell-known ポートを使われるのが好きではないので、適当な値に変更しておきます。
EXPOSE_NGINX_PORT=9999
EXPOSE_NGINX_SSL_PORT=9998
Firecrawlの構築
FirecrawlをGitHubからcloneして、.envを以下のように設定します。
USE_DB_AUTHENTICATION=false
FirecrawlにはメモリとCPUの使用量を見て動作を止める設定があるので、必要に応じて緩和します。特にDifyとFirecrawlの両方を同時起動するとメモリを結構使用するため、この設定がないと安定して動かない場合があります。
筆者の環境(16GB RAM Chromebook)では必要で、Cant accept connection
というエラーが表示されました。
services:
worker:
environment:
MAX_CPU: 1
MAX_RAM: 1
DifyとFirecrawlの連携
準備ができたら、DifyとFirecrawlを起動します。
- http://localhost:9999 でDifyが起動していること
- http://localhost:3002/admin//queues でfirecrawlが起動していること
を確認します。
必要に応じて以下な感じで、DifyのAPIがFirecrawlと同じネットワークに入れているかを確認します。
$ docker network inspect firecrawl_backend | grep -C 5 firecrawl-api
$ docker compose exec api curl firecrawl-api-1:3002
正常に起動できていることを確認できたら、Difyの画面で「データソース」からFirecrawlの設定をします。
Base URL http://firecrawl-api-1:3002
を設定するのがポイントです。Difyのコンテナ側から見てFirecrawlのAPIサービスに接続できるホストを指定します。
API Keyの入力は必須ですが、今回Firecrawl側でキーは設定していないので、適当な文字列でOKです。
あとは、必要なURLを入力してクロールを実行します。
これで、ローカル環境にDocker Composeで立ち上げたDifyとFirecrawlを連携させることができました。
あとは、Difyを利用した通常のRAGと同様の手順で、クローリングした結果をもとにベクトルデータベースへ格納し、検索ができるようになります。
DifyはRAG関連機能のGUIが充実しているのが特徴だと思っています。Firecrawl連携のようにRAG周辺の機能をうまく使うことで、さまざまな場面でRAGを導入しやすくなると思っています。