🦭

GCP上にDify環境を構築して社内生成AIチームで活用する

2024/12/19に公開

はじめに

近年、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の推奨環境を確認し適正なマシン構成をを選択します。

alt text

ブートディスクの設定

ブートディスクはContainer-Optimized OSを選択します。
alt text

ファイアフォールの設定

ファイアフォールの設定でHTTP/HTTPSトラフィックを許可します。
alt text

外部IPアドレスの設定

ネットワークインターフェースの設定で外部IPアドレスが静的外部IPアドレスになるように設定します。
alt text

インスタンスを作成

作成ボタンをインスタンスを作成し、インスタンスが作成されたことを確認します。
alt text

サービスアカウントを作成する

IAMと管理からサービスアカウントからサービスアカウントを作成し、サービスアカウントのロールに「VertexAI管理者」を付与します。

Dify環境を構築する

docker composeを利用してDifyサーバー環境を構築します。
作成したインスタンスにSSHで接続するするために、ssh keygenでキー作成して.pubファイルを登録します
alt text

ローカル端末の~/.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

管理者のアカウントを設定する

接続すると管理者アカウント設定画面が表示されます。アカウントを設定してログインします。
alt text

ログインできました。
alt text

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に変換した値
    alt text

まとめ

チームで利用できるDify環境によって、生成AIを効率的に検証することができるようになりました。現在は生成AIチームと生成AIを活用したプロダクトの開発をしているメンバーに試験的に利用してもらっています。今後も、社内DXの推進や顧客価値の向上に向けた取り組みを進めていきたいと考えています。

Rehab Tech Blog

Discussion