はじめに
ChatGPTの凄まじさで世間が騒がしくなって久しいですが、この度社内ツールとしてSlackからChatGPTを利用できるようにするBotを開発してみました。
他の人も見える環境で使うことにより、他の人がどのように使っているのかなどの参考になり、ChatGPTの利用を促進する狙いがあります!
今回の開発は同期の 内山 くんと共同で行ったため、記事執筆も二人で行っております。
また、今回はこちらの記事とは別に、実装について詳しく述べた 別の記事 があります。SlackのBotや、OpenAI APIの実装についての興味がある方は、そちらをご覧ください。 当記事ではこのBotの目的、完成品の評価などを行います。
目次
できたもの
Botを招待したチャンネルで、メンションすると会話スタートになります!
メンション後最初のプロンプトを入力できます。 それからのAIとの対話は、スレッド内で行われ、スレッド内での会話は全て、以前の会話としてAIから認識され、それを踏まえた回答を返します。
使用例
スレッド内で会話
一般のChatGPTのように、以前の会話を記憶しながら複雑な質問に回答できます。
また、リクエストごとに以前の会話として送信しているので、後から編集してそれを踏まえた回答をさせることもできます。
複数人で使用可能
スレッド内で複数人で利用しても、AI側とユーザー側がしっかり認識されます。
これにより、共同でChatGPTを利用できます。
工夫した点
1つ目
現在、OpenAI APIのGPT3.5-turboを使用したBotはいろいろな方が制作しています。 ですが、記憶機能を使って作っている方は少ないように見受けられます。
今回のBotではスレッド限定で会話を記憶させるということを行いました。 記憶させるということは、トークンの消費も増えますし、会話の内容を毎回送る必要があります。 なので、そのスレッドのメッセージを全て取得する必要がある。 また、遡ってメンションされているかの確認も入るので、全てのスレッドの返信を拾う形にした。
2つ目
ChatGPTと異なり、動的にメッセージを出力することが出来ない為、OpenAI APIの返答には時間がかかります。 なので、ユーザーは正常にBotが動いているのか不安になると考えました。
そこで、まず「入力中…」と返信してからAPIの返答が来たら、編集で書き換える手法を取りました。
ユーザーが入力すると、その表記がでますが、Botでは実現出来なかったので、苦肉の策ですがこのような形を取りました。 また、「入力中…」というメッセージを削除してから新しく返信した方が、通知もいくしいいかなと思いましたが、メッセージを削除するメソッドが提供されていなかったのでこちらも断念。
課題点
やはり、全てのメッセージを取得して判断しているところでしょうか。 活発なチャットだとAPIに対してそれなりの負荷がかかりそうです。 会話履歴のことを考えなければシンプルな実装で治りますが、記憶させるとなると実装がより複雑になってしまいました。
感想
今回、作成してみてSlackのボットの作り方を知ることが出来ました。 全体的にDiscordの方がBotの開発はしやすいと感じました。 今回はメッセージのみのやりとりになりましたが、今度はよりリッチなボットを作成したいと思います。 OpenAI APIに関してはあいかわらず使い勝手がよかったです。