ChatGPTのSlackアプリをBolt (renderホスティング)で作成
はじめに
ChatGPT (OpenAI )と通信するSlackアプリを用意してみました。
ChatGPTとしてのAPIは公開されていないようなので、OpenAIで用意されているGPT-3.5のモデルを使用しました。
ChatGPT FAQ | OpenAI Help Center
How can I implement this? Is there any implementation guide for this?
ChatGPT is being made available as a research preview so we can learn about its strengths and weaknesses. It is not available in the API.
ChatGPTのAPIは公開されていないとのこと。
Githubには、ChatGPTとのやり取りをヘッドレスブラウザで再現するツールが多く公開されていますが、一旦OpenAIで触ってみます。
Slackアプリ構成
バックエンド : Boltアプリ
- Slackアプリ開発で一般的なBoltJSを使用
- OpenAIのAPIとやり取りします。
言語モデル(OpenAI) : text-davinci-003
- Models referred to as "GPT 3.5"
- ChatGPTはGPT-3.5モデルとのことなので、GPT-3.5のモデルで使用されているtext-davinci-003を使用しました。
ホスティング先 : render
- Boltアプリのホスティング先は、GithubからCDしやすそうなrender.comにしてみました。
- freeプランがあります。
Slackアプリの作成
アプリ名はSlackGPTにしてみました。
Scopesの設定
- app_mentions:read
- chat:write
- im:write
Redirect URLsの設定
SlackアプリをOAuthでインストールために以下のURLを設定
Redirect URL
https://{BoltアプリのURL}/slack/redirect
※デフォルトのパスは/slack/oauth_redirect
ですが、
後述するBoltアプリのリダイレクトURLのパスを/slack/redirect
に変更すると、Slackアプリの設定でも/slack/redirect
に変更する必要がありました。
イベントの設定
Slackからのメンションを受信するため、app_mentionイベントを設定します。
Event Subscriptionsの項目で設定します。
Request URL
https://{BoltアプリのURL}/slack/events
Subscribe to bot events
- app_mention追加
参考
Boltアプリ (バックエンド)
ソース
ソースの内容は以下
サーバーを起動し動作するか確認しておきます。
npm i
node index.js
renderにBoltアプリをデプロイ
Githubと連携
Web ServicesからNodeアプリケーションを作成します。
GithubのBoltプロジェクトを選択し、連携します。
環境変数の設定
HOST_URL : BoltアプリのURL
OPENAI_API_KEY : OpenAIのAPIキー
SLACK_CLIENT_ID : App CredentialsのClient ID
SLACK_CLIENT_SECRET : App CredentialsのClient Secret
SLACK_SIGNING_SECRET: App CredentialsのSigning Secret
※HOST_URLはカスタムドメインを使用しない場合、先にデプロイしてみてURLを確認。
デプロイ設定
Build & Deploy
Build Command
npm i
Start Command
node index.js
ヘルスチェック
Health Check Path
/health-check
※ヘルスチェックを設定しておかないと、デプロイが失敗します。
ポート補足
※サーバーが開いているポートは意識する必要はないようです。
renderが自動的に開かれているポートを認識するようです。
参考
デプロイ
上記まで設定したらデプロイします。
AutoDeploy設定が有効になっていると、
Githubリポジトリのデプロイ対象ブランチにコミットするたびに、自動的にデプロイされます。
注意点
Render.comのコンソールに、Deploying..
と表示されたまま、失敗することがあります。
其の際はもう一度、「Manual Deploy」から再度デプロイしなおします。
この現象はfreeプラン限定で発生するのかもしれません。
終わりに
以下のURLを叩くとSlackアプリをインストールできました。
https://{BoltアプリのURL}/slack/install
Slackアプリ作成時に設定したワークスペースのみにインストールできます。
Embeddable Slack Buttonでは(reason: slack_oauth_missing_state)
が出てインストールできませんでした。
公開しないのであれば、OAuth設定はせず、Installed App Settingsから直接インストールで良いと思います。
また、render.comは簡単にCD環境が用意できて便利でした。
簡単な構成のアプリケーションでしたらrender.com良さそうです。
Discussion