Dify オンプレミス版に Amazon Bedrock/Nova Cross-Region 推論を組み込む方法(多分クラウド版も同じ)
最近Difyに大きい可能性を感じている今日この頃です。気の合う仲間たちと名古屋や福岡でこんなイベントをやる予定です。
リレー形式でAWS→Dify→TiDB→Postman→LINEと講師が入れ替わり一つの環境を作り上げる駅伝形式のハンズオンです。
この記事ではタイトルの通り、Difyパートの手順ですが、それ単独でも成立するように作っています。
RAGの構築方法などが知りたい方は以下の記事を参考にしてください。
RAG と オンプレミスベクトルストア
Difyオンプレミス版を使うことで、RAGにおけるベクトル検索データベースに様々なデータソースを利用可能です。実はこれは意外と需要が高いと思っています。そもそもRAGとはインターネットに出せないものを生成AIが取り扱えるようにする技術です。Difyはクラウド版でももちろんRAGを構築可能ですが、例えばサポートチームが持つお客様とのメールのやり取りや大量の個人情報など、クラウドサービスに出したくない情報もあるのではないかと思います。Difyクラウド版ではベクトルストアは抽象化されますが、オンプレミス版を使うことで管理を独立させ、独自のセキュリティを施したデータベースを使うことが可能になります。
さっそくやってみる
この記事では、Dify オンプレミス版をEC2で起動し、Bedrock/Novaでチャットができるまで、です。
0.環境構築
まずはVPC/Public SubnetにEC2をインストールしインターネット経由でアクセスできるようにします。
手順は割愛しますが、デフォルトVPCに起動すればOKです。(特殊環境じゃない限りデフォルトVPCのサブネットはすべてPublicです)
t2.medium 以上、EBSは20GBを指定しておきます。OSはAmazon Linux 2023を使います。
SecurityGroupのインバウンドは0.0.0.0/0 から22,80,443を許可します。
リージョンはオレゴンを使います 後ほど解説しますが、Dify オンプレミス版が現在Novaのapac cross-region推論に対応していないためです。
1. Docker関連インストール
EC2が起動したらまずはDocker関連コンポーネントをインストールします。Difyオンプレミス版はDockerイメージが提供され起動もとても簡単です。
sudo dnf install git -y
sudo dnf install docker -y
sudo systemctl start docker
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
2. Dify オンプレミス版のインストールと起動
git clone https://github.com/langgenius/dify.git
cd dify/docker
sudo docker-compose up -d
起動が完了したらsudo docker ps
で起動しているコンテナ一覧が表示されれば完了です。コンテナの数はバージョンで異なるようですのであまり気にしなくて大丈夫です。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dd338feff96d nginx:latest "sh -c 'cp /docker-e…" 56 seconds ago Up 51 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp docker-nginx-1
686a393af33a langgenius/dify-plugin-daemon:0.0.6-local "/bin/bash -c /app/e…" 56 seconds ago Up 49 seconds 0.0.0.0:5003->5003/tcp, :::5003->5003/tcp docker-plugin_daemon-1
d1405d5d029c langgenius/dify-api:1.1.3 "/bin/bash /entrypoi…" 56 seconds ago Up 52 seconds 5001/tcp docker-api-1
5ab2b7c17040 langgenius/dify-api:1.1.3 "/bin/bash /entrypoi…" 56 seconds ago Up 53 seconds 5001/tcp docker-worker-1
6c0773be68f5 redis:6-alpine "docker-entrypoint.s…" 58 seconds ago Up 55 seconds (healthy) 6379/tcp docker-redis-1
788056f4a660 langgenius/dify-web:1.1.3 "/bin/sh ./entrypoin…" 58 seconds ago Up 55 seconds 3000/tcp docker-web-1
eb784e6d0684 ubuntu/squid:latest "sh -c 'cp /docker-e…" 58 seconds ago Up 55 seconds 3128/tcp docker-ssrf_proxy-1
14d0a7a520de langgenius/dify-sandbox:0.2.11 "/main" 58 seconds ago Up 55 seconds (healthy) docker-sandbox-1
8c7b15e3735f semitechnologies/weaviate:1.19.0 "/bin/weaviate --hos…" 58 seconds ago Up 54 seconds docker-weaviate-1
ba3a177dc365 postgres:15-alpine "docker-entrypoint.s…" 58 seconds ago Up 54 seconds (healthy) 5432/tcp docker-db-1
3. Dify へログインと初期化
EC2のPublicIPにアクセスを行い、初期のアカウント登録を行います。
以下の画面が出ればログイン完了です。
4. Amazon Bedrock へ Amazon Nova Liteの組み込み
オレゴンンですので気を付けて下さい
Bedrockマネージメントコンソール左ペインからモデルアクセス
をクリックします。
モデルアクセスを変更
をクリックします。
Nova Lite
をクリックします。どうも一度有効化するとこの画面からは外せないようなので、私のスクショは少し異なっていますが気にせずクリック!して次へ
→送信
を押します。
NovaはAmazon純正モデルなので一瞬で利用可能となるはずです。
5. Amazon Nova Cross-Region推論 プロファイルIDの入手
DifyからAmazon NovaをBedrock経由で呼び出す場合、Cross-Region推論が必須です。これはおそらくDifyクラウド版自体もAWS上で動作しており別リージョンからの呼び出しが想定されるので、そういう仕様となっているようです。
ちなみにDifyクラウド版はAWS+TiDB+Cloudflareで構成されています。まぁ、私が好きになるのも当たり前といえば当たり前かもしれません。
ではBedrockマネージメントコンソールからCross-region Inference
をクリックします。
以下のInference profile ID
をコピーしておきます。
(全員同じ値になるのですが一応、Cross-region Inferenceへの理解を深めるために一応)
6.IAMユーザーの作成
Bedrockに組み込むIAMのクレデンシャルを作成します。IAMユーザーの作成自体はこの手順からは割愛しますが、以下のポリシーをアタッチしておきます。
セキュリティ認証情報タブ
からアクセスキーを作成してメモっておきます。
これでAWS側の準備が完了です。
7.Difyでモデルプロバイダーの設定(Bedrock組み込み)
次にDifyにAWS環境を組み込みます。プロファイルから設定
をクリックします。
モデルプロバイダー
をクリックします。
Bedrock
を見つけてインストール
をクリックします。
セットアップ
をクリックします。
IAMクレデンシャルを入力したあと以下の値を入力します。
AWS Region:Oregon
Bedrock Endpoint URL:bedrock.us-west-2.amazonaws.com
Available Model Name:us.amazon.nova-lite-v1:0
保存
をクリックします。
緑色になればOKです!
8.ChatBotの起動
いよいよテストです!
スタジオ
→チャットボット
→最初から作成
をクリックします。
チャットボット
に適当な名前を入れて作成します。
起動したら正しいモデルを選択します。
以下のモデルだと動作しません。(Cross-region Inference用ではないため)
以下が正しいモデルです。
情報が古いけどちゃんと動いています!!!
Discussion