🦄

Google製LLM「PaLM2」と対話できるLINE Botを作ってみた

2023/10/11に公開

はじめに

この記事ではCloudRunとVertexAIで文章要約のLINE botを作成するハンズオンを書いています。
実行環境はCloudShellです。
具体的には以下の環境を想定しています。

  • docker --version
    • Docker version 24.0.6, build ed223bc
  • gcloud --version
    • Google Cloud SDK 447.0.0
    • alpha 2023.09.15
    • app-engine-go 1.9.75
    • app-engine-java 2.0.19
    • app-engine-python 1.9.105
    • app-engine-python-extras 1.9.101
    • beta 2023.09.15
    • bigtable
    • bq 2.0.98
    • bundled-python3-unix 3.9.16
    • cbt 0.16.1
    • cloud-datastore-emulator 2.3.1
    • cloud-run-proxy 0.4.0
    • core 2023.09.15
    • gcloud-crc32c 1.0.0
    • gke-gcloud-auth-plugin 0.5.6
    • gsutil 5.25
    • kpt 1.0.0-beta.44
    • local-extract 1.5.9
    • minikube 1.31.2
    • nomos 1.16.0-rc.2
    • package-go-module 0.4.0
    • pubsub-emulator 0.8.6
    • skaffold 2.7.0
  • git
    • git version 2.30.2

※少し内容のレベルを上げて続編を書きました。最近読んだ本を教えてくれるLINE botをGemini Proを使って作成してみた

LINE botの設定

プロバイダの設定

Createをクリックします。

line_palm1.png

名前はGenAIとします。
line_palm2.png

チャンネルの設定

Create a MessagingAPI Channelをクリックします。

line_palm3.png

設定項目がいくつかあります。以下のように設定してください。

項目 入力するもの
Channel type Messaging API
Provider GenAI
Company or owner's country or region Japan
Channel name PaLM2くん
Channel description VertexAIとCloudRunでLINE botを作成してみた
Category 個人
Subcategory 個人(その他)
Email address デフォルト

チェックボックスが2つありますのでチェックを入れます。

  • I have read and agree to the LINE Official Account Terms of Use
  • I have read and agree to the LINE Official Account API Terms of Use

Createをクリックします。確認画面が表示されたらOKをクリックします。
line_palm4.png

Messaging APIのシークレットキーをコピー

チャネル基本設定にあるチャネルシークレットをコピーします。

line_palm5.png

次にMessaging API設定チャネルアクセストークンを発行してコピーします。

line_palm6.png

デフォルトの設定の無効化とWebhookの設定

応答メッセージとあいさつメッセージをそれぞれ無効にするために編集をクリックします。

line_palm7.png

Webhookは有効にします。

変更前
line_palm8.png

変更後
line_palm9.png

Google Cloudの操作

プロジェクトを作成する

Google Cloud Consoleにログインします。

画面左上の逆三角形からプロジェクトを作成します。逆三角形をクリックします。

line_palm0-1.png

新しいプロジェクトをクリックします。

line_palm0-2.png

プロジェクト名はline-handson-test、場所は組織なしに設定します。
※ご利用の環境によって設定する場所が変わってくると思いますが、今回は個人でアカウントを作成された場合を想定しています。

最後に作成ボタンをクリックします。

line_palm0-3.png

CloudShellを開く

作成したプロジェクトに切り替えたあと、画面右上にあるボタンからCloudShellを開きます。

※CloudShellのボタン
line_palm10.png

APIの有効化

以下のサービスでAPIを有効化します。

  • ArtifactRegistry
  • VertexAI
gcloud services enable aiplatform.googleapis.com
gcloud services enable artifactregistry.googleapis.com

※参考:VertexAIをコンソール画面で有効にする場合
line_palm11.png

環境変数名を追加

プロジェクト名を環境変数に代入してシェル変数を作成しておきます。

export gcp_project="{プロジェクト名}"

リポジトリのクローン

リポジトリをクローンします。

git clone https://github.com/ymd65536/cloudrun_linebot.git

config.pyの修正

ディレクトリを変更します。

cd cloudrun_linebot/src

config.pyをsrcフォルダ内に作成します。

echo "" > config.py
vi config.py

LINE botのチャネルアクセストークンとシークレットを修正します。

token = "アクセストークン"
secret = "シークレット"

イメージをビルドする

linebot-appという名前でイメージをビルドします。

docker build -t linebot-app . --platform linux/amd64 --no-cache

イメージにタグをつける

ビルドしたイメージにタグをつけます。このタグはArtifactRegistryにあるイメージと同じタグである必要があります。

docker tag linebot-app:latest asia-northeast1-docker.pkg.dev/$gcp_project/linebot-sample/linebot-app:latest

※タグ付けされたイメージの確認方法

docker images

ArtifactRegistryでリポジトリを作成する

イメージをpushするためにArtifactRegistryにリポジトリを作成します。

gcloud artifacts repositories create linebot-sample --location=asia-northeast1 --repository-format=docker --project=$gcp_project

dockerの認証

ArtifactRegistryにイメージをpushする場合はdockerの認証を通す必要があります。
認証を通すため、以下のコマンドを実行します。

gcloud auth configure-docker

イメージのプッシュ

ArtifactRegistryにイメージをpushします。push先はasia-northeast1-docker.pkg.devです。

docker push asia-northeast1-docker.pkg.dev/$gcp_project/linebot-sample/linebot-app:latest

デプロイ

イメージのpushが完了しましたら、以下のコマンドを実行してCloudRunにコンテナをデプロイします。

gcloud run deploy --image asia-northeast1-docker.pkg.dev/$gcp_project/linebot-sample/linebot-app:latest --region asia-northeast1 --platform managed

デプロイが完了すると独自のエンドポイントURLが生成されます。
実行結果

$ gcloud run deploy --image asia-northeast1-docker.pkg.dev/$gcp_project/linebot-sample/linebot-app:latest --region asia-northeast1 --platform managed
Service name (linebot-app):  
Deploying container to Cloud Run service [linebot-app] in project [****] region [asia-northeast1]
OK Deploying... Done.                                                                                                                                                              
  OK Creating Revision...                                                                                                                                                          
  OK Routing traffic...                                                                                                                                                            
Done.                                                                                                                                                                              
Service [linebot-app] revision [linebot-app-00001-wv7] has been deployed and is serving 100 percent of traffic.
Service URL: https://*****.a.run.app

Webhook URLの設定

Messaging API設定にあるWebhook URLを設定します。
編集をクリックします。
line_palm14.png

エンドポイントの最後に/callbackと付けたものを入力し、更新をクリックします。
line_palm15.png

Webhookを有効にする

LINE botからWebhookを利用できるようにWebhookを有効にします。

変更前
line_palm16.png

変更後
line_palm17.png

疎通確認

検証をクリックします。
line_palm18.png

以下のように成功と表示されていれば、問題ありません。
line_palm19.png

動作確認

エンドポイントURLを開く

生成された独自のエンドポイントURLをブラウザで開きます。するとVertexAIからの応答が返ってきます。
line_palm12.png

LINE botにメッセージを送信して動作確認

QRコードを読み取ってLINE botを友達追加します。
line_palm13.png

どんなメッセージでも良いので送信してみましょう。

Tips

LINE botのシークレット情報について

今回はconfig.pyに書き込んでイメージの中に保存していますが、実際にはsecret managerを活用します。

おわり

Discussion