OpenAI API + Slack Bolt なんちゃってChatGPTを作る!

はじめに

ChatGPTの凄まじさで世間が騒がしくなって久しいですが、この度社内ツールとしてSlackからChatGPTを利用できるようにするBotを開発してみました。

他の人も見える環境で使うことにより、他の人がどのように使っているのかなどの参考になり、ChatGPTの利用を促進する狙いがあります!

今回の開発は同期の 内山 くんと共同で行ったため、記事執筆も二人で行っております。

また、今回はこちらの記事とは別に、実装について詳しく述べた 別の記事 があります。SlackのBotや、OpenAI APIの実装についての興味がある方は、そちらをご覧ください。 当記事ではこのBotの目的、完成品の評価などを行います。

目次

  1. できたもの
  2. 使用例
  3. 工夫点
  4. 課題点・感想

できたもの

Botを招待したチャンネルで、メンションすると会話スタートになります!

メンション後最初のプロンプトを入力できます。 それからのAIとの対話は、スレッド内で行われ、スレッド内での会話は全て、以前の会話としてAIから認識され、それを踏まえた回答を返します。

AIcall

AiCalled

ThreadTalking

スレッド内で連続で会話可能

使用例

スレッド内で会話

example1

使用例1

example2

使用例2

一般のChatGPTのように、以前の会話を記憶しながら複雑な質問に回答できます。

また、リクエストごとに以前の会話として送信しているので、後から編集してそれを踏まえた回答をさせることもできます。

複数人で使用可能

example3

使用例3(複数人での使用)

example4

使用例3(複数人での使用)

スレッド内で複数人で利用しても、AI側とユーザー側がしっかり認識されます。

これにより、共同でChatGPTを利用できます。

工夫した点

1つ目

現在、OpenAI APIのGPT3.5-turboを使用したBotはいろいろな方が制作しています。 ですが、記憶機能を使って作っている方は少ないように見受けられます。

今回のBotではスレッド限定で会話を記憶させるということを行いました。 記憶させるということは、トークンの消費も増えますし、会話の内容を毎回送る必要があります。 なので、そのスレッドのメッセージを全て取得する必要がある。 また、遡ってメンションされているかの確認も入るので、全てのスレッドの返信を拾う形にした。

2つ目

ChatGPTと異なり、動的にメッセージを出力することが出来ない為、OpenAI APIの返答には時間がかかります。 なので、ユーザーは正常にBotが動いているのか不安になると考えました。

そこで、まず「入力中…」と返信してからAPIの返答が来たら、編集で書き換える手法を取りました。

ユーザーが入力すると、その表記がでますが、Botでは実現出来なかったので、苦肉の策ですがこのような形を取りました。 また、「入力中…」というメッセージを削除してから新しく返信した方が、通知もいくしいいかなと思いましたが、メッセージを削除するメソッドが提供されていなかったのでこちらも断念。

intyping

入力中の表示

課題点

​ やはり、全てのメッセージを取得して判断しているところでしょうか。 活発なチャットだとAPIに対してそれなりの負荷がかかりそうです。 会話履歴のことを考えなければシンプルな実装で治りますが、記憶させるとなると実装がより複雑になってしまいました。

感想

今回、作成してみてSlackのボットの作り方を知ることが出来ました。 全体的にDiscordの方がBotの開発はしやすいと感じました。 今回はメッセージのみのやりとりになりましたが、今度はよりリッチなボットを作成したいと思います。 OpenAI APIに関してはあいかわらず使い勝手がよかったです。