🤗

GPT-3(ChatGPT)が動くDiscord botをノーコードで作ってみたよ

2023/01/21に公開1

こんにちは。さいP( @_saiP )です。

連日話題沸騰中の GPT-3 (ChatGPTで使用されている自然言語処理モデル) を Slack で動かしているツイートを Twitter で見かけまして、「弊社で社内チャットとして使用している Discord でも同じことが出来ないかな~」と思い試してみました。

今回はノーコードのオートメーションツール Make (旧 Integromat )を使用します。Zapier や IFTTT のようなツールです。

【本文中ではMakeを使用していますが、Pipedreamのほうが良さそうでした】

やりたいこと

  • Discord の特定のチャンネルに投稿された全ての新着メッセージを取得する
  • GPT-3 の API にプロンプトを送信する
  • GPT-3 の API レスポンスを Discord の元のチャンネルに bot として投稿する
  • GPT-3 自身のメッセージにはレスポンスしない(無限ループって怖くね?)

準備するもの

  • Make のアカウント(無料でOK)
  • OpenAI のアカウント(API クレジットが残っているもの)
  • Discord のアカウント(対象のサーバーの管理者権限があるもの)

まずはおもむろにMakeでシナリオを作成する


まっさらな世界

Makeに登録すると↑のような画面が出てくるので、でっかい+アイコンをクリックして Discord を選びます。


ここでは Watch Channel Message を選ぶ

すると、以下のような画面になるので Connection から「Add」を選び、Discord のアカウントと連携します。

Discord からメッセージを取得するには OAuth 2.0認証 が必要になります(ここで2時間費やしました)。
「Show Advanced Setting」のチェックボックスを入れてください。入力欄が縦に長くなります。

「Bot Token」と「Client ID」、「Client Secret」が必要になるので、Discord からゲットしてきましょう。

Discord で Application を作成する。

https://discord.com/developers にアクセスし、右上の「New Application」ボタンからアプリを作成します。


左側メニューから「OAuth2」を選び、

  • CLIENT ID を Make の 「Client ID」欄にコピペ
  • CLIENT SECRETは「Reset Secret」ボタンからコピーして Make の 「Client Secret」にコピペ

しましょう。

そして、 Redirects セクションに以下の 2 つの URL を追加します。

https://www.integromat.com/oauth/cb/discord
https://www.make.com/oauth/cb/discord


こんな感じ

次に、左側メニューの「Bot」→「Add Bot」を選択し、Botを作成します。

少し下にスクロールするとある Privileged Gateway Intents セクションの権限のうち 「MESSAGE CONTENT INTENT」を ON にしておきましょう。Botがメッセージを取得するのに必要です。


ナイスなスクリーンネームとアイコンを設定したら、「Reset Taken」ボタンをクリックするとBot Takenが表示されます。

  • Bot Taken を Make の「Bot Token」欄にコピペ

しましょう。

Make の 3 つの欄が埋まったら Bot Permissions はそのままで Save しましょう。
無事に Discord と連携できたら、Bot を常駐させたいチャンネルと Limit (一回の実行で取得する新着メッセージの上限数)を設定します

なお、Watch Channel Messages はそのチャンネルの最初まで遡って取得してきてくれるので、Bot は新しく作成したチャンネルに導入するのをおすすめします。

OpenAI GPT-3 と接続する

メッセージが取得できたら、GPT-3 に Prompt として渡します。

Connection に必要な API Key と Organization ID はそれぞれ https://beta.openai.com/account/api-keyshttps://beta.openai.com/account/org-settings で生成・確認することができます。

Model は text-davinci-003 (GPT-3) を選択、Promptには Discord の Content アイテムを指定しましょう。

画像のように、前後に返答の口調や前提条件、文脈などを入れておくと多様な回答が期待できます。

Bot のメッセージには動作しないように、画像のようなFilterを設定しておきます。
(Condition には Bot の Username を指定しておきました)

レスポンスを Discord に投稿する

GPT-3の回答は choices[].text で取得できるので、 Discord の Message 欄に入力します。

このとき <@{{author.id}}> とすると、発言者にメンションすることができます。

無料プランでは15分に1回しか実行できません。

https://www.make.com/en/pricing

月額9ドルの有料プランだと1分おきに実行できるようですが、リアルタイム感はあまりありません・・・。

もっといい方法があれば教えてください。
Pipedreamを使用したら改善されました!

Discussion

kiiyonkiiyon

こんにちは!こちらの連携に挑戦して見ているのですが、makeでdiscordのテキスト情報を受け取ることができません・・・!

「Discord からメッセージを取得するには OAuth 2.0認証 が必要になります(ここで2時間費やしました)。」

さいPさんの文章中にも書かれている、こちらが原因かとは思うのですがどのように解決したでしょうか?もしよろしければぜひ教えていただきたいです(泣)