GCP上にDify環境を構築して社内生成AIチームで活用する
はじめに
近年、ChatGPTをはじめとする生成AIの進化により、多くの企業が業務における生成AIの活用を推進しています。Rehabでも今期から社内生成AIチームを立ち上げて、社内の業務について生成AI活用を推進する取り組みを開始しました。
本記事では、社内生成AIチームの活動の一つとして実施した、GCP上でのDify環境の構築方法について紹介します。
ターゲット
生成AIの活用やDifyに興味がある方
生成AIチーム発足
Rehabの生成AIチームは、社内のDX推進や介護業界での生成AI活用に強い関心を持つメンバーで構成された社内の有志のチームで、チームの主な活動目的は大きく3つあります。
- 社内業務プロセスの効率化
- 介護業界におけるAI活用事例の模索
- 生成AI技術の知見共有と社内啓蒙活
まずは、社内での生成AI活用した業務効率化をメインにして活動をしています。生成AIチームの中の私の役割として、LLMに関する技術的な側面でのサポートすることです。
Dify環境を構築した理由
生成AIチームのメンバーが業務効率化のアイデアを効率的に開発・検証するための環境があると便利ではないかと考え、GCP上にDify環境を構築することにしました。Difyを採用した理由は以下になります。
- 様々なAIモデルをサポートしており、モデルの切り替が簡単にでき、柔軟なLLM連携が可能である。
- 扱うデータのセキュリティを社内でコントロールすることが可能であること、そしてRAG機能を搭載しているため、社内のナレッジを活用しやすい。
- ワークフロー機能によって、ビジネスやプロジェクトのニーズに合わせて、ローコードでAIアプリを作成することができるため、アイデアから数時間でプロトタイプの作成が可能である。
GCP上へのDify環境構築手順
ここからは、GCP上へのDify環境の構築について紹介したいと思います。
GCPインスタンスの作成
Difyを乗せるためのインスタンスを作成します。
マシン構成
GCP上のプロジェクトを選択してインスタンスを新規作成します。Difyの推奨環境を確認し適正なマシン構成をを選択します。
ブートディスクの設定
ブートディスクはContainer-Optimized OSを選択します。
ファイアフォールの設定
ファイアフォールの設定でHTTP/HTTPSトラフィックを許可します。
外部IPアドレスの設定
ネットワークインターフェースの設定で外部IPアドレスが静的外部IPアドレスになるように設定します。
インスタンスを作成
作成ボタンをインスタンスを作成し、インスタンスが作成されたことを確認します。
サービスアカウントを作成する
IAMと管理からサービスアカウントからサービスアカウントを作成し、サービスアカウントのロールに「VertexAI管理者」を付与します。
Dify環境を構築する
docker composeを利用してDifyサーバー環境を構築します。
作成したインスタンスにSSHで接続するするために、ssh keygenでキー作成して.pubファイルを登録します
ローカル端末の~/.ssh/configにHostを追加
Host instance_dify
HostName xxx.xxx.xxx.xxx
IdentityFile ~/.ssh/dify_rsa
User user_name
Port 22
sshで接続します
ssh instance_dify
dockerコンテナ環境を構築する
Difyリポジトリからcloneします
git clone git@github.com:langgenius/dify.git
docker-composeコマンドで起動できるようにするため、エイリアスを設定します。
echo alias docker-compose="'"'docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v "$PWD:$PWD" -w="$PWD" docker/compose:1.29.2'"'" >> ~/.bashrc
source ~/.bashrc
dockerを起動します。
cd dify/docker
docker-compose up -d
コンテナが起動していることを確認します。
docker ps -a
無事コンテナが起動しています。これでDify環境の構築が完了しました。
km@dify-test ~/dify/docker $ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d41640e2692a nginx:latest "sh -c 'cp /docker-e…" 9 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp, :::80->80/tcp, 0.0.0.0:443->443/tcp, :::443->443/tcp docker_nginx_1
e62f597675a3 langgenius/dify-api:0.7.3 "/bin/bash /entrypoi…" 9 minutes ago Up 9 minutes 5001/tcp docker_api_1
81b7fc6c611b langgenius/dify-api:0.7.3 "/bin/bash /entrypoi…" 9 minutes ago Up 9 minutes 5001/tcp docker_worker_1
33d2d4cc1b55 redis:6-alpine "docker-entrypoint.s…" 9 minutes ago Up 9 minutes (healthy) 6379/tcp docker_redis_1
00b04c7937a2 langgenius/dify-sandbox:0.2.7 "/main" 9 minutes ago Up 9 minutes (healthy) docker_sandbox_1
bc273d6c4044 ubuntu/squid:latest "sh -c 'cp /docker-e…" 9 minutes ago Up 9 minutes 3128/tcp docker_ssrf_proxy_1
51e4fef9745f langgenius/dify-web:0.7.3 "/bin/sh ./entrypoin…" 9 minutes ago Up 9 minutes 3000/tcp docker_web_1
494de7461b0b postgres:15-alpine "docker-entrypoint.s…" 9 minutes ago Up 9 minutes (healthy) 5432/tcp docker_db_1
Dify環境にログインする
ブラウザからDify環境に接続します。IPアドレスはインスタンスの外部IPアドレスを指定します。
http://xx.xx.xx.xx/install
管理者のアカウントを設定する
接続すると管理者アカウント設定画面が表示されます。アカウントを設定してログインします。
ログインできました。
Geminiが利用できるように設定する
Difyでは使用するLLMを簡単に切り替えることができます。使用したいモデルをモデルプロバイダーに登録する必要があります。今回は Vertex AIのサービスアカウントを設定して、Geminiが使えるようにします。
サービスアカウントキーの設定
先ほど作成した、サービスアカウントキーのjsonファイルをダウンロードして、base64に変換します。
# JSONファイルを読み込む
with open('./service_account_key.json', 'r', encoding='utf-8') as file:
json_data = json.load(file)
# JSONデータを文字列に変換
json_string = json.dumps(json_data)
# 文字列をバイト列に変換
json_bytes = json_string.encode('utf-8')
# バイト列をBase64にエンコード
base64_bytes = base64.b64encode(json_bytes)
# Base64のバイト列を文字列に変換
base64_string = base64_bytes.decode('utf-8')
print(base64_string)
Difyの設定画面からモデルプロバイダーを開いて、Vertex AIの設定を行います。
- Prroject ID:GCPのプロジェクト名
- Locatoin:インスタンスのロケーション
- Service Account Key:base64に変換した値
まとめ
チームで利用できるDify環境によって、生成AIを効率的に検証することができるようになりました。現在は生成AIチームと生成AIを活用したプロダクトの開発をしているメンバーに試験的に利用してもらっています。今後も、社内DXの推進や顧客価値の向上に向けた取り組みを進めていきたいと考えています。
Discussion