1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPT APIを用いたSlack botをAWSに移してみた。

Last updated at Posted at 2023-04-10

少し前に作成したChatGPT APIを用いたSlack botをAWSに移してみました。

サーバー周りの設定は難しいので、他の方の記事を参考にして頂いた方が良いと思いますが、この記事では、
・常にChatGPT APIを用いたSlack botを使えるようにする方法
・iPadからインスタンスのコンソールを操作する方法
を記載します。

手順としては、
⒈AWSのEC2インスタンスを起動する
⒉Termiusからインスタンスにアクセスする
⒊インスタンスにコードを置き実行中にする
です。

⒈AWSのEC2インスタンスを起動する

まず、AWSにアクセスして、アカウントを作成します。

アカウントを作成したら、検索するか、すべてのサービスを表示を押して、EC2 を選択して、ダッシュボードを開きます。※インスタンス作成は、アカウント作成時のルートユーザーで行うより、IAM ユーザーを作成して、IAM ユーザーでインスタンスを作成した方がセキュリティとしては、望ましいです。

EC2のダッシュボードが開いたら、ページの真ん中くらいにあるインスタンスを起動を押しインスタンスを作成します。

今回は、アプリケーションおよび OS イメージ (Amazon マシンイメージ)はubuntu、
インスタンスタイプは無料で使えるt2.micro、
にします。
あとは、キーペアを作成して、後ほど使うので、ダウンロードしてください。
他は好きなように設定して頂き、インスタンスを起動を押します。

インスタンスを起動を押して出てきたページの設定は任意で大丈夫です。

これで⒈AWSのEC2インスタンスを起動するは完了です。

⒉Termiusからインスタンスにアクセスする

作成したインスタンスにアクセスするため、Termiusをダウンロードして、Termiusを開きます。※この記事ではiPadからインスタンスにアクセスする方法を記載しています。

Termiusが開いたらアカウントを作成します。

アカウントを作成したら、左のメニューから、Hostsを押してNew Hostを作成します。

New Hostの設定では、以下のようにして、Save します。
・Aliasは好きな名前
・Hostnameは作成したインスタンスのパブリック IP アドレス(パブリック IP アドレスの取り方:AWSのEC2のダッシュボードから「実行中のインスタンス」を押す→作成したインスタンスを選択する→上のメニューの「接続」を押す→開かれたページからパブリック IP アドレスをコピーする)
・Use SSHをオンにする
・Usernameはubuntu(もし変更していたら変更したユーザー名)
・Key はダウンロードしたキーペアを設定

作成したHostをタップして、インスタンスに接続します。黒い背景に緑文字のコンソールが開かれたら成功です。
※初回、起動に時間がかかったり、アプリの再起動が必要な場合があります。

⒊インスタンスにコードを置き実行中にする

Termiusからインスタンスに接続します。

インスタンスに接続したら、ChatGPT APIを用いたSlack botに必要なインストールを下記のコマンドで行います。

aptのアップデート

sudo apt update

pipのインストール

sudo apt install python3-pip

slack boltのインストール

sudo pip install slack-bolt

openaiのインストール

sudo pip install openai

次にpythonのファイルを保存するディレクトリを作成します。

mkdir ディレクトリ名

作成したディレクトリに移動します。

cd ディレクトリ名

作成したディレクトリでファイルを作成します。

nano ファイル名

作成したファイルの中に下記のbotのコードを入れて、ctrl oでファイルを保存して、ctrl xでファイルを閉じます。
※Slackとopenaiのキーやトークンをあらかじめ入れておいてください。
※このSlack botにはSlack APIの設定も必要になります。
※詳しくはこちらをご覧ください。

import openai
from slack_bolt import App
from slack_bolt.adapter.socket_mode import SocketModeHandler
import os

os.environ["SLACK_BOT_TOKEN"] =  ""
os.environ["SLACK_SIGNING_SECRET"] = ""
os.environ["SLACK_APP_TOKEN"] =  ""

openai_api_key = ""

app = App(
    token=os.environ.get("SLACK_BOT_TOKEN"),
    signing_secret=os.environ.get("SLACK_SIGNING_SECRET")
)

openai.api_key = openai_api_key
assist1 = ""

@app.event("message")
def handle_message(event, say):
    global assist1
    text = event["text"]
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=[
            {"role": "system", "content": "任意の設定"},
            {"role": "assistant", "content": assist1},
            {"role": "user", "content": text},
        ]
    )
    assist1 = response["choices"][0]["message"]["content"]  # assist1を更新
    say(assist1)

if __name__ == "__main__":
    handler = SocketModeHandler(app,app_token=os.environ.get("SLACK_APP_TOKEN"))
    handler.start()

一度、上手くファイルが作成されているか下記のコマンドで確認します。

find ~

上手くファイルが作成されていたら、screenを作成します。

screen -S スクリーン名

screen内でpythonで作成したファイルを実行します。

python3 ファイル名.py

bolt run!的なやつが出力されたら上手くファイルを実行できています。

実行できていたらSlackにいるbotに話しかけてみてください。
下記のようになったら成功です!もうインスタンスから接続を切って大丈夫です。A231A74E-C151-43F2-A1B6-58C73F8ECA5F.jpeg

補足
⒈screenを切るには、下記のコマンドを使います。

実行中のscreenを表示

screen -ls

screenを切る

screen -X -S <セッションID> quit

⒉ファイルを削除するには、ファイルのあるディレクトリで下記のコマンドを使います。

rm ファイル名

最後に

これでいつでもChatGPT APIを用いたSlack botと話せるようになりました。

やっぱりチャットbotは常に起動している方が楽しいですね。
また何か作ってみます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?