【ローカル開発編】Amazon Bedrockを活用したSlackチャットボットの作り方を紹介 ー その1
2023-12-02
azblob://2023/12/01/eyecatch/2023-12-02-aws-bedrock-claude-slack-ai-chatbot-000.png

この記事はFIXER Advent Calendar 2023( FIXER Advent Calendar 2023 - Adventar ) 12月2日の記事です。

こんにちは、FIXERの村上です!

AWS re:Invent 2023、Swami氏のKeynote(基調講演)で、Anthropic社の「Claude v2.1(クロード)」が Amazon Bedrock上で利用可能になることが発表されました!


Claude v2.1は最大の200Kコンテキストをインプットすることができ、Claude v2.0 モデルと比べてハルシネーション事故が2倍ほど減少したということで11月下旬にSNSで話題にあがっていました。

【Anthropic】Introducing Claude 2.1

また、Amazon Bedrock Edition の中で日本語に対応しているのは Claude だけです。せっかく、日本語に対応している基盤モデルということで、最新AIチャットボットとしてSlack上で活躍してもらうために作成手順を紹介していきます!

既定のテンプレートをベースに実装してみたところ、このような回答を返してくれるチャットボットになりました。人間味のある表現が得意なようです。

本ブログではいくつかのパートに分けてシリーズ、投稿していきます。

今回はAWS Lambdaなどのコンピューティングサービスは使用せず、手元のPCから直接Bedrock APIを実行することを前提にしています。

イメージとしては、下記のとおりです。

■ 環境設定

表記されているバージョンに合わせる必要はございません。最新バージョンを利用ください。

名称本ブログで使用するバージョン
AWS CLI2.13.32
Python3.10.0(※)
AWS SDK for Python (Boto3)1.33.4
LangChain0.0.343
Ngrok3.4.0

Boto3やLangChainなどの環境設定は Amazon Titan基盤モデルのTitan Text G1 Lite/Express を試してみた を参考にください。

Slackとのチャレンジ認証やコールバック処理などは、外部公開されたエンドポイントが必要になるため、本ブログでは Ngrok を使用します。

【Ngrok】Install ngrok

※ Pythonのバージョンは3.10.Xにしてください。他のバージョンでは動作しないことがあります。

1.Amazon Bedrock を利用するための事前設定

2023年12月1日時点では、Claude v2.1 は 米国西部 (オレゴン)リージョンのみ対応しています。

1-1. Claude の利用申請

リージョンは、オレゴン(us-west-2)を選択します。
Bedrockコンソール画面にアクセスして、「Claude」と「Claude Instant」の利用申請を行います。
 

1-2. Bedrock API の操作設定

IAMポリシーの発行や資格情報ファイルの設定は、Amazon Titan基盤モデルのTitan Text G1 Lite/Express を試してみた の『1. Bedrock API を操作するための準備』を参考にください。
 

2.Slack Appの作成と設定

2-1. Slack App の作成

https://api.slack.com/apps にアクセスして、「Create New App」をクリックします。

クリック後、

  • Create an app → From an app manifest 
  • Pick a workspace to develop your app → "Slackワークスペース"
  • Enter app manifest below → YAML

の順に選択していきます。YAMLには、下記の構成情報を定義したマニフェストをコピペします。

XMLdisplay_information:
  name: BedrockAPI_Claude
  description: "null"
  background_color: "#000000"
features:
  bot_user:
    display_name: BedrockAPI_Claude
    always_online: false
oauth_config:
  scopes:
    bot:
      - app_mentions:read
      - channels:history
      - channels:join
      - chat:write
      - im:history
settings:
  event_subscriptions:
    request_url: https://null
    bot_events:
      - app_mention
      - message.channels
  org_deploy_enabled: false
  socket_mode_enabled: false
  token_rotation_enabled: false

ペースト後、作成していきます。

次に Install to Workspace をクリックして、Slack ワークスペースにアクセスする権限をリクエスト許可を行います。

画面の案内に従い、許可します。

2-2. Signing Secret と Bot User OAuth Token の取得


Signing Secret をメモする。

  • Basic Information > App Credentials の Signing Secret から確認できます。

Bot User OAuth Token をメモする。

  • OAuth & Permissions > OAuth Tokens for Your Workspace の Bot User OAuth Token から確認できます。

3.Bedrock API サーバの初期設定と起動

今回は、こちらのソースコードを使ってサーバを起動します。

> git clone https://github.com/murakami-koki/AWS.SlackBot.Bedrock.git

> cd AWS.SlackBot.Bedrock/part1

3-1. 環境変数 の設定

「2-2. Signing Secret と Bot User OAuth Tokenの取得」 にてメモした資格情報を環境変数に追加します。
下記のコマンドを実行します。

> export SLACK_SIGNING_SECRET=<your-signing-secret>

> export SLACK_BOT_TOKEN=xoxb-<your-bot-token>

3-2. ローカルホスト の起動

下記のコマンドを実行します。

> python3 app.py

3-3. 外部公開サーバ の起動

ローカルホストで起動されたエンドポイントを外部公開します。
下記のコマンドを別タブなどを開いて実行します。

> ngrok http 3000

オレンジ枠の https://<UUID>.ngrok.io をコピーします。

次に Event Subscriptions > Request URL にペーストします。末尾に /slack/events を付けてください。

4.動作確認

Slackチャンネルに @Bedrock_Claude を招待してください。
招待後、チャットしてみましょう!

■ 最後に

最後まで読んでいただき、ありがとうございます!

re:Invent 2023 の 3日間に渡る Keynote では、生成AI関連の新規サービスや機能追加が発表されているので、このチャットボットもどんどん進化できますね。

次回は、少しソースコードを改修してAWS Lambdaにデプロイし、動かしてみます!