1
0

【初心者向け】Bedrock+Difyでお手軽にLLMアプリを作ってみる

Last updated at Posted at 2024-09-29

Bedrock+Difyでお手軽にLLMアプリを作ってみる

DifyはオープンソースのLLMアプリ開発プラットフォームです。

Difyを使うことでアプリ開発の専門知識がなくても簡単にLLMアプリを作ることができます。

今回はEC2インスタンス上にDifyをインストールし、
EC2からAmazon Bedrockの基盤モデルを呼び出すことでLLMアプリを作ってみました。

システム構成

構築するシステムの構成は以下の通り。

overview.drawio.png

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 > モデルアクセス
を選択します。

モデルアクセスをリクエストしたのち、アクセスのステータスが
「アクセスが付与されました」の表示になるまで数分待ちます。

スクリーンショット 2024-09-29 18.24.43.png

コンソールの左ペインの
基盤モデル > ベースモデル
を選択すると、ベースモデルの詳細が表示されます。

各モデルについてModel IDが表示されています。利用したいモデルのModel IDをコピーしておきます。

スクリーンショット 2024-09-29 18.28.27.png

Difyでのモデルプロバイダーの設定

ALBのエンドポイントにアクセスしてDifyの管理者コンソールを開きます。

「設定」画面から「モデルプロバイダー」を選択し、
「Bedrock」を追加します。

スクリーンショット 2024-09-29 18.45.31.png

セットアップ画面が開くので

  • AWS Region: Asia Pacific (Tokyo)
  • Available Model Name: マネジメントコンソール上で確認したModel ID
    を入力して保存します。

スクリーンショット 2024-09-29 18.46.48.png

今回はEC2インスタンスにIAMロールを設定しているため、Access KeyおよびSecret Access Keyは空欄でOKです。

LLMアプリの作成&公開

Difyのコンソールからお好きなアプリを作成して公開します。

スクリーンショット 2024-09-29 18.51.11.png

スクリーンショット 2024-09-29 19.04.36.png

まとめ

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内蔵のものは止めた方が良さそうです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0