ChatGPTが応えてくれるSlackのbot作ったけどまじ簡単
ChatGPT.もともとOpen AIからAPIが提供されていたけどReference読んでも使うのめっちゃ難しかったけど,今回簡単に使えるAPIがリリースされたので使ってみた.まじ簡単🤩
使った技術
TypeScript, Node.js, Bolt(SlackのイベントをListenしてくれるSDK)
TypeScriptじゃなくても平気です.
また,今回の記事ではSlackのbotってそもそもどうやって実装するのか?みたいなことは割愛します🙇♂️
作ったもの
![](/_next/image?url=https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F303fda34-67cc-427e-a17f-804e9141fd22%2F114eef73-9e66-47e1-9a2a-7c40c6990cb1%2F%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588_2023-03-13_23.59.00.png%3FX-Amz-Algorithm%3DAWS4-HMAC-SHA256%26X-Amz-Content-Sha256%3DUNSIGNED-PAYLOAD%26X-Amz-Credential%3DAKIAT73L2G45HZZMZUHI%252F20240726%252Fus-west-2%252Fs3%252Faws4_request%26X-Amz-Date%3D20240726T225626Z%26X-Amz-Expires%3D3600%26X-Amz-Signature%3D139616a0dc0dae0719c13d4bf07191cd6273677f7bf4a812f74e4d9248603490%26X-Amz-SignedHeaders%3Dhost%26x-id%3DGetObject&w=3840&q=75)
こんな感じでメンションをつけたらスレッド内で回答してくれて,スレッド内の会話は記憶するようにしました.
実装
ChatGPTのAPIの実装箇所
node18からfetchが使用できますが,axiosを使いました.こんな感じでエンドポイントとBearer Tokenだけで実装できちゃう.
request bodyもとてもシンプルです.
{ role: string; content: string }のroleにはuserかassistantが来ます.
これを配列で受け付けているので,会話の配列を渡せば過去の会話も含めた回答をしてくれるわけです.
BoltのListener部分
トリガーはapp_mentionにしました.特定のチャンネル内でbotに対してメンションしたときにのみ応答します.こうすることで,いちいち反応しなくなるし,botの回答に対してスレッド内で気軽に他の人と話ができるので良さげです.
トリガー後にまず,スレッド内の投稿一覧を取得する必要があります.これはSlackのweb clientにあるconversations.repliesを使用して取得できます.
ここで取得したメッセージを整形してChatGPTのAPIに投げれば回答が帰ってくるという感じです.
おわり
というわけで,1〜2時間くらいでサクッとChatGPTが回答するSlackのbotを作ることができました🎉
スレッドの要約もこの実装を応用すれば簡単にできるでしょう.急に50件の返信とかなっているスレッドに召喚されたときはぜひともChatGPTに要約させたいですね😇
また,APIにはstreamというparameterがあり,これをtrueにすることで,回答の進行状況をストリーミングできるようなので,いずれやってみたいです!