【実践】Dify + Amazon Bedrockで、ゼロからチャットボットと RAG を作る①

こんにちは、OSS よろず相談室の鹿島です。

今回は、DifyとAmazon Bedrockを連携させて、チャットボットとRAG(検索拡張生成)を構築する手順を解説します。
本記事はその第一弾として、まず土台となるDifyの環境構築を行います。

はじめに

Difyの概要や全体像については、弊社エンジニアの解説記事がありますので、ご参照ください。Difyの概要から構築、機能に至るまでDifyを丸ごと学べる記事になっています。

当記事では、クリーンなLinux環境(RHEL系を想定)を前提に、ゼロからDifyの実行環境を立ち上げる手順にフォーカスします。

すでにDockerなどのコンテナ環境をお持ちの方は、「ステップ3」から読み進めてください。

ステップ1:Docker環境のセットアップ

DifyはDockerコンテナとして提供されているため、最初にコンテナ実行環境であるDockerをインストールします。

今回はRHEL系のOSを想定し、dnfコマンドでDockerの公式リポジトリを追加・インストールします。

# Dockerリポジトリの追加
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# Docker関連パッケージのインストール
$ sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

インストール後、docker composeのバージョンを確認します。v2以上が表示されていればOKです。

$ docker compose version
Docker Compose version v2.37.3

ステップ2:Dockerの起動と動作確認

Dockerサービスを起動し、OS起動時に自動実行されるよう有効化します。

# Dockerの起動
$ sudo systemctl start docker

# Dockerの自動起動設定
$ sudo systemctl enable docker

正しくインストールできたかを確認するため、定番のhello-worldコンテナを実行してみましょう。「Hello from Docker!」と表示されれば成功です!

$ sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.

ステップ3:Difyのインストールと起動

いよいよDify本体を準備します。

まずgitをインストールし、Difyの公式リポジトリからソースコードをクローンします。

# gitのインストール
$ sudo dnf install git -y

# Difyのリポジトリをクローン
$ git clone https://github.com/langgenius/dify.git

次に、ダウンロードしたdify/dockerディレクトリへ移動し、設定ファイルのテンプレート (.env.example) をコピーして本番用の設定ファイル (.env) を作成します。

$ cd dify/docker
$ cp .env.example .env

💡ポイント
.envファイルには、後々APIキーなどの重要な情報を書き込むことになります。

以下のコマンドでDifyを起動しましょう。関連するコンテナが一括でバックグラウンド起動します。

$ docker compose up -d

少し待ってからdocker psコマンドでコンテナの状態を確認します。dify-apiやdify-webなどがSTATUS欄にUpと表示されていれば、正常に起動しています。

$ docker compose ps
# ↓こんな感じで複数のコンテナが表示されていればOK
CONTAINER ID   IMAGE                                       COMMAND                  CREATED        STATUS                 PORTS                                                                          NAMES
109f55191a6a   nginx:latest                                "sh -c 'cp /docker-e…"   46 hours ago   Up 3 hours             0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp   docker-nginx-1
0eeebd7d9fd8   langgenius/dify-api:1.4.3                   "/bin/bash /entrypoi…"   46 hours ago   Up 3 hours             5001/tcp                                                                       docker-api-1
527f9eba0c88   langgenius/dify-api:1.4.3                   "/bin/bash /entrypoi…"   46 hours ago   Up 3 hours             5001/tcp                                                                       docker-worker-1
7c53e1d71537   langgenius/dify-plugin-daemon:0.1.2-local   "/bin/bash -c /app/e…"   46 hours ago   Up 3 hours             0.0.0.0:5003->5003/tcp, [::]:5003->5003/tcp                                    docker-plugin_daemon-1
b8dc25d8f9d2   redis:6-alpine                              "docker-entrypoint.s…"   46 hours ago   Up 3 hours (healthy)   6379/tcp                                                                       docker-redis-1
439bdecdb34f   ubuntu/squid:latest                         "sh -c 'cp /docker-e…"   46 hours ago   Up 3 hours             3128/tcp                                                                       docker-ssrf_proxy-1
731465578b52   postgres:15-alpine                          "docker-entrypoint.s…"   46 hours ago   Up 3 hours (healthy)   5432/tcp                                                                       docker-db-1
80f9783bad96   langgenius/dify-sandbox:0.2.12              "/main"                  46 hours ago   Up 3 hours (healthy)                                                                                  docker-sandbox-1
cab12a5febe0   langgenius/dify-web:1.4.3                   "/bin/sh ./entrypoin…"   46 hours ago   Up 3 hours             3000/tcp                                                                       docker-web-1
ad28ed866ba2   semitechnologies/weaviate:1.19.0            "/bin/weaviate --hos…"   46 hours ago   Up 3 hours                                                                                            docker-weaviate-1

ステップ4:Difyにアクセス

ブラウザから http://<サーバーのIPアドレス> にアクセスし、Difyの初期設定画面を開きます。
http://<サーバーのホスト名またはIPアドレス>/apps

ユーザー登録画面が出ますので、アカウントを登録します。

そのアカウントでログインします。

ステップ5:モデルプロバイダの設定

チャットボットを作成する前に、頭脳となるLLM(大規模言語モデル)をDifyに設定する必要があります。このLLMの提供元をDifyでは「モデルプロバイダ」と呼びます。

まずは設定画面を見てみましょう。
画面右上のユーザ名をクリックして「設定」を選びます。

「モデルプロバイダー」を選択すると、追加可能なモデルプロバイダーの一覧が表示されます。
今回はAmazon Bedrockを選択してインストールします。

モデルプロバイダーとは、LLMの提供元(プロバイダー)のことです。
LLMとは、具体的な大規模言語モデル (例: GPT-4o, Gemini)のことです。

以下は、著名なモデルプロバイダーとLLMの一覧です。
名前を聞いたことがあるので、イメージしやすいのではないでしょうか。

モデルプロバイダー (提供元)LLM (具体的なモデル名)
OpenAIGPT-4o, GPT-4, GPT-3.5-turbo
GoogleGemini 1.5 Pro, Gemini 1.5 Flash
AnthropicClaude 3 Opus, Claude 3 Sonnet, Claude 3 Haiku
Amazon Bedrock(下記の様々なLLMを選択して利用可能)
・Amazon: Titan Text, Titan Multimodal Embeddings
・Anthropic: Claude 3 ファミリー
・Cohere: Command, Embed
・Meta: Llama 3
・Mistral AI: Mistral Large, Mistral 7B
・AI21 Labs: Jurassic-2 ファミリー
・Stability AI: Stable Diffusion

Amazon Bedrockを利用すると、Amazon が提供するLLM 以外にもAnthropic 社の Claude や Meta 社の Llama など、業界の主要なLLMを一つのプラットフォーム上で比較・利用できるという点が最大の特徴です。

おわりに

今回は、Linuxがある状態から、コンテナ環境、Difyの構築までの説明でした。
次回の【実践】Dify + Amazon Bedrockで、ゼロからチャットボットと RAG を作る②では、いよいよAmazon Bedrock側の設定と、DifyでBedrockのモデルを利用する設定について、詳しく解説していきます。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です