Bedrock+Difyでお手軽にLLMアプリを作ってみる
DifyはオープンソースのLLMアプリ開発プラットフォームです。
Difyを使うことでアプリ開発の専門知識がなくても簡単にLLMアプリを作ることができます。
今回はEC2インスタンス上にDifyをインストールし、
EC2からAmazon Bedrockの基盤モデルを呼び出すことでLLMアプリを作ってみました。
システム構成
構築するシステムの構成は以下の通り。
ALBでクライアントからのHTTPSリクエストを受け付け、
後段のEC2インスタンスにHTTPでリクエストを転送します。
(DifyにはNginxが内蔵されているのでALBは必ずしも必要ではないです。証明書周りの設定を簡単にするためにALBを立てています。)
EC2インスタンスにはDifyと、Difyの実行に必要なDockerとDocker Composeをインストールしておきます。
EC2インスタンスからBedrockのAPIを叩けるように、
EC2にはbedrock:InvokeModel*
を許可ポリシーに加えたIAMロールをアタッチします。
公式のガイドによると、Difyのインストールには
CPU >= 2 Core
RAM >= 4 GiB
が必要になるので、EC2のインスタンスタイプはt3.mediumとします。
構築手順
AWSリソースのデプロイ
構築するリソースは全てCloudformationで作成しました。
以下のテンプレートを用いて各種スタックを作成していきます。
DifyについてはEC2インスタンスを起動する際に
以下のユーザデータを実行してインストールするようにしています。
#!/bin/bash
# Install Docker
yum install docker git -y
usermod -a -G docker ec2-user
systemctl enable docker
systemctl start docker
# Install docker-compose
mkdir -p /usr/local/lib/docker/cli-plugins
curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
# Install Dify
cd /usr/local
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d
インストール手順は以下を参照しました。
一点、注意点として、上記コマンドを実行すると
- Nginx
- PostgreSQL
- Redis
- Webaviate
といった複数のサービスがコンテナ上で起動します。
各種サービスの起動に用いられる環境変数はdify/docker/.env
に記載されています。
実際にアプリケーションを公開・運用する際はdify/docker/.env
に記載された変数を適宜チューニングする必要がありそうです。
Bedrockでの基盤モデルの有効化
AWSのマネジメントコンソールからBedrockの基盤モデルを有効化します。
Bedrockのコンソール画面から
Bedrock configurations > モデルアクセス
を選択します。
モデルアクセスをリクエストしたのち、アクセスのステータスが
「アクセスが付与されました」の表示になるまで数分待ちます。
コンソールの左ペインの
基盤モデル > ベースモデル
を選択すると、ベースモデルの詳細が表示されます。
各モデルについてModel IDが表示されています。利用したいモデルのModel IDをコピーしておきます。
Difyでのモデルプロバイダーの設定
ALBのエンドポイントにアクセスしてDifyの管理者コンソールを開きます。
「設定」画面から「モデルプロバイダー」を選択し、
「Bedrock」を追加します。
セットアップ画面が開くので
- AWS Region: Asia Pacific (Tokyo)
- Available Model Name: マネジメントコンソール上で確認したModel ID
を入力して保存します。
今回はEC2インスタンスにIAMロールを設定しているため、Access KeyおよびSecret Access Keyは空欄でOKです。
LLMアプリの作成&公開
Difyのコンソールからお好きなアプリを作成して公開します。
まとめ
AWSのリソースの作成から初めてわずか数時間でLLMアプリを作成することができました。
さらに作り込むなら
- DB周りのサービスをAWSのマネージドサービスに置き換える
- PostgreSQL: Amazon Aurora PostgreSQL
- Redis: ElastiCache for Redis
- Webaviate: Amazon Aurora PostgreSQL + pg_vector
- DifyのサーバをPrivate Subnetに配置し、BedrockにはVPCエンドポイント経由でアクセスする
- Knowledge base for Amazon Bedrockを使ってRAGぽいものを作ってみる
などができそうです。また、Webサーバ(nginx)やベクターDB(Webaviate)は外部サービスを利用するならDify内蔵のものは止めた方が良さそうです。