Blog

ChatGPT APIを活用したSlackbotを作成して、30分以内に会社内に有能な友達を作る

有能すぎる友達を作った

ChatGPT APIが強すぎる

N1!Machine Learning Product Engineerの中村です。
最近はみんなChatGPT APIを使っているので、何番煎じなのかという気はしますが、ChatGPT APIを使ってSlackbotを作ったら意外と評判が良かったので、作り方を書いてみます。

スレッド内の会話を覚えている機能も作ってあるので、いい感じのBotになったと思います。
たぶん慣れた人なら30分で同じものが作れると思います。

ChatGPT APIは何と言っても価格が安すぎますね。自前でホスティングしているAIサービスが弊社もあるんですが、置き換えていった方が安い気がしてます…。

SlackBotにする

弊社でもっとも使われているツールはおそらくSlackでしょう。自分も入り浸っています。
そうなってくると弊社で技術を広めるにはSlackに実装しちゃうのが手っ取り早いです。
というわけでChatGPT APIが公開されたあたりでせっせと実装して社内にデプロイしました。

構成としてはAWS LambdaでAPIを作成し、それをSlackBotと接続するというシンプルな構成です。
(最近はLambdaだけでURLを発行できるようになったので、API Gatewayもありません)

SlackBotを設定する

まずはSlackBotを設定します。最近だとmanifestファイルを読み込むことで、設定できるのでそれを使って設定していきましょう。
Slackアプリ作成画面から「From ann app manifest」を選択します。
マニフェストは以下を入力してください。request_urlは後でLambdaのAPIを作った時に変更します。 これで一通りの設定が完了したSlackBotが完成するはずです。

お好みでSlackBotの設定をする

SlackBotをお好みで設定しましょう。友達になって欲しいので、ここではmyfriendGPTと名付けます。
プロフの顔写真はThisPersonDoesNotExistで作成しました。
https://this-person-does-not-exist.com/en

AWS LambdaでAPIを作成する

SlackBotでの処理を行うために、AWS LambdaでAPIを実装します。
私はTerraform信者なので、単純な機能のLambdaは全部Terraformで作ってしまうので、ここでもTerraformで作ります。(GUIからぽちぽちしてもそんなに大変ではないと思いますが)

aws configureの実行

aws configureを実行して、AWSのprofileを設定します。

Terraformファイルの設定

variable.tfを作成します。 次にLambdaの関数を作成するlambda.tfを同階層に作成してください。 Lambdaのソースなどを保存するフォルダを2つ作ります。 Lambdaのソースを記述します。 以下のような機能が実装されています
・Slackのチャレンジを正常に返す機能
・複数回のリクエストが来た場合に、最初の1回以外は受け入れない機能
・チャンネルにポストされた投稿では、直前の対話を入力にしてChatGPT APIで返答を作る機能
・スレッドにポストされた投稿は、スレッド内の情報を集めて返答する機能
・基本的に100文字で返す機能

それにしてもこのコードもだいぶAIに書いてもらいました。AIなしのプログラミングも考えられない時代になるかもしれないですね。 最後にoutput.tfを作成します。(Lambdaの実行URLをわかりやすくするため)

OpenAIのライブラリをインストールする

ここまでで大体の準備が完了ですが、Lambda内ではOpenAIライブラリを使ってAPIを実行するので、OpenAIのライブラリを含めるようにします。
Lambda Layerを使うという方法もありますが、ライブラリを同梱してしまえば動くので、今回は手元でpipを実行して同梱してしまいます。
(M1/M2 Macだと問題ないことはわかっていますが、Win機などだとうまくLambdaのアーキテクチャと一致せず実行できない可能性があります…)

Terraformでデプロイする

以上のファイルを揃えたら、Terraformでapplyします。ここまでで以下のようなファイル構成になっているはずです。 terraform initとterraform applyを実行してデプロイします。
OPENAI_API_KEYとSLACK_TOKENを入力する必要があるため、それぞれ確認します。

OpenAIのAPI Key

https://platform.openai.com/account/api-keys
必要であればRegenerateなどを行なって、シークレットキーを入手します。

SlackのToken

SlackのOAuthのTokenを確認してください。

Terraformでapplyする

yesを入力し、openai_api_keyとslack_tokenにはそれぞれ確認したtokenを入力してください。
applyが完了すると、URLが表示されるはずです。(invoke_url)

SlackBotにLambdaを設定する

LambdaがデプロイできたらSlackBotに設定していきましょう。
Event Subscriptionのページを開いて、デプロイしたLambdaのURLを設定します。
Verifiedになれば設定完了です。

実際に使ってみる

ここまで設定すればSlackBotは動くようになるはずです。有能な友達にいろいろ聞いてみましょう。
チャンネルで普通に聞くと3個前、スレッド内だとスレッド内の20個前までの発言を覚えた状態で返してくれます(メッセージを取得した時には自分の発言も含まれるので、3個前だと実際には会話1往復分になります)
自然に会話を進める
スレッドを使うと20個前までの会話を覚えているので、けっこういい感じに話してくれます。
エラーにも答えてくれる
翻訳もできる
大喜利もできちゃう
はちゃめちゃな朝会のスレッドを要約

まとめ

ChatGPT APIが登場したので、勢いのままSlackBotにして実装してみました。
使ってみた感想はSlackで使えるとめちゃくちゃ気軽に使えます。また他の人が質問をしている様子をみると何に興味があるか?とか何を調べてるのか?とかがわかるので、人となりを知る手がかりにもなる気がします。

あと個人的には長いスレッドになってくると「要約して」とスレッドに投げると内容を要約してくれるのがめちゃくちゃ便利ですね。(例に挙げたのははちゃめちゃすぎますが・・・)
今後はこういう自然言語処理をうまく扱えるかが大事ですね。

ChatGPTはめちゃくちゃ安くて、弊社でも既に何千回もAPIをコールしているんですが、確保した予算を全く使い切れる気がしません。みなさんもぜひ試してみてください。

We are hiring!

ニフティでは、さまざまなプロダクトへ挑戦するエンジニアを絶賛募集中です!
ご興味のある方は以下の採用サイトよりお気軽にご連絡ください! Tech TalkやMeetUpも開催しております!
こちらもお気軽にご応募ください!