【Google Cloud】Vertex AIでSlack生成AIチャットボットを実装してみた

Google Cloud

2024.6.19

Topics

はじめに

こんにちは、フクナガです。以前、こういった記事を執筆しました。
【Slack APIタイムアウト対策】Cloud FunctionsでSlackへの返答とCloud Pub/Subへの追加を実装
【やってみた】Gemini 1.5 ProをColab EnterpriseでVertex AI経由で呼び出してみた

SlackからCloud Functionsを利用する方法、Vertex AIの呼び出し方を学んだ、ということは…?

次の記事はもうわかりますよね?

そう、Slackチャットボットの実装です!!
なにかと話題の言語モデル「Gemini」を呼び出すSlackチャットボットを実装していきましょう!

構築するアーキテクチャ

今回は、実装後に皆さんが様々なアレンジを加えやすいように必要最低限の実装にとどめます。

完成イメージ

Slackでこんなやり取りができるチャットボットを構築していきます!

実装

1. Cloud FunctionsでSlackチャットボットを作成する

こちらの記事の実装部分を参考にしてください。

関連記事
【Slack APIタイムアウト対策】Cloud FunctionsでSlackへの返答とCloud Pub/Subへの追加を実装

Slackでメッセージを送って、返ってくる状態になっていたら次の手順に進めます。

2. Cloud FuntionsコードからVertex AIを呼び出すようにコードを変更する

(1) Cloud Functionsコンソールで「サブスクライバー」用の関数を開く

私は、「fukunaga-slack-subscriber」という名前でサブスクライバー用関数を作成していましたので、そちらを使っていきます。

(2) Cloud Functionsコンソールで「ソース」タブを選択し、「編集」を押下する

(3) Cloud Functionsのmain.py、requirements.txtを編集する

下記の記事を参考に、コードを実装しました!!

関連記事
【やってみた】Gemini 1.5 ProをColab EnterpriseでVertex AI経由で呼び出してみた

  • requirements.txt
    functions-framework==3.*
    google-cloud-pubsub
    requests==2.25.1
    google-cloud-aiplatform
    
    

  • main.py

    
    import base64
    import functions_framework
    import requests
    import json
    
    import vertexai
    from vertexai.generative_models import GenerativeModel, Part
    
    PROJECT_ID = "プロジェクトIDを入力"
    REGION = "リージョンを入力"
    
    # Triggered from a message on a Cloud Pub/Sub topic.
    @functions_framework.cloud_event
    def hello_pubsub(cloud_event):
      vertexai.init(project=PROJECT_ID, location=REGION)
    
      # モデルを読み込み
      model = GenerativeModel('gemini-1.5-pro-preview-0409')
    
      WEB_HOOK_URL = "SlackのWebhook URLを入力"
    
      # Slackから入力された文字列をプロンプトとして変数に格納
      prompt = base64.b64decode(cloud_event.data["message"]["data"]).decode()
    
     # 生成AIモデルを呼び出し、プロンプトを入力する
      response = model.generate_content(prompt)
    
     # Slackに元の質問と生成AIからの回答を送信する
      requests.post(WEB_HOOK_URL, data=json.dumps({
        #メッセージ
        "text" : "元の質問は:" + prompt + "\n" + "回答:" + "\n" + response.text,
        }))
    
      return question
    
    

(4) Cloud Functionsコンソールの「保存して再デプロイ」を押下する

しばらく経つとデプロイが完了します。

試してみた

実際に、Slackから生成AIに対し、質問を投げてみます!

実行に失敗してしまいました!
エラーメッセージを確認すると、メモリ不足という内容が出力されていました。

Cloud Functionsのランタイムから「割り当てられるメモリ」と「CPU」を変更します。

「ランタイム、ビルド、接続、セキュリティの設定」から、メモリなどの設定を変更可能です。

変更し、デプロイが完了後もう一度試してみます。

無事に回答が返ってきました!!

まとめ

Geminiを呼び出すSlackチャットボットをCloud FunctionsとVertex AIを用いて実装してみました。

お気づきの方がいらっしゃるかもしれませんが、実は今の状態だと完成度60%です。
そう、生成AI最大の魅力である「会話を続けること」が今の状態だとできません。

気軽にSlackチャットボットが実装できることを今回の記事でお伝え出来たと思いますので、次回の記事で実用的なチャットボット実装についてご紹介していこうと思います!!

テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!

フクナガ

インフラエンジニア歴5年のフクナガです。2024 Japan AWS Top Engineers選出されました! 生成 AI 多めで発信していますが、CI/CDやIaCへの関心も高いです。休日はベースを弾いてます。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら