discordでchatGPTと対話する方法
chatGPTは、OpenAIが提供する自然言語処理のモデルの一つで、人間のように対話を行うことができます。そのchatGPTにAPIが提供されたことで、様々なアプリケーションでchatGPTを利用することが可能になりました。今回は、そのchatGPTを使ってdiscordで対話する方法について紹介します。
必要なもの
- discord botのトークン
- discordのチャンネルID
- OpenAIのAPIキー
- Pythonの環境
手順
discord botを作成する
まずはdiscord botをDiscord Developer Portalから作成する
discord botをサーバーに入れる
次に、botをサーバーに入れます。 Botの設定画面から、左側のメニューから「OAuth2」を選択し、「Scopes」にチェックを入れ、下の「Bot Permissions」から必要な権限を設定します。その後、「Scopes」の下に表示されるURLをコピーし、ブラウザで開いてサーバーにbotを追加します。 この時、他のサイトを参考にbotのTOKENをメモしておいてください。
会話したい部屋のIDを取得する
discord botを入れたい部屋のIDを取得します。部屋を右クリックして、「IDをコピー」を選択して、IDを控えておきましょう。
chatGPTのAPIを取得する
OpenAIのAPIを使用するためには、APIキーが必要です。 OpenAIのWebサイトにアクセスして、アカウントを作成し、APIキーを取得してください。
Pythonで実装する
Pythonで実装します。以下が、実装例になります。 l4-7の定数は自分のものに修正してください。 OPENAI_KEY : openAIのapiキー DISCORD_TOKEN:discord botを作成したときのトークン CHANNEL_ID:チャンネルID BOT_NAME:導入したbotの名前
import openai import discord OPENAI_KEY = "sk-xxxxxx" DISCORD_TOKEN = "" CHANNEL_ID = "12345678910111213" BOT_NAME = "my_bot_name" intents = discord.Intents.default() intents.message_content = True client = discord.Client(intents=intents) openai.api_key = OPENAI_KEY @client.event async def on_ready(): pass @client.event async def on_message(message): # 特定の部屋のID(適宜変更してください) # 特定の部屋で発言した場合 if message.author != client.user: if str(message.channel.id) == CHANNEL_ID: messages = [] async for m in message.channel.history(limit=3): messages.append(m) contents = [m.content for m in messages][::-1] names = [m.author.name for m in messages][::-1] names = names_to_role(names) messages = get_message(contents, names) text = get_output(messages) await message.channel.send(text) def get_output(message): response = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=message, ) text = response["choices"][0]["message"]["content"] return text def get_message(contents, names): return_list = [] pre_content = """あなたはChatbotとして、尊大で横暴な英雄王であるギルガメッシュのロールプレイを行います。 以下の制約条件を厳密に守ってロールプレイを行ってください。 制約条件: - Chatbotの自身を示す一人称は、我です。 - Userを示す二人称は、貴様です。 - Chatbotの名前は、ギルガメッシュです。 - ギルガメッシュは王様です。 - ギルガメッシュは皮肉屋です。 - ギルガメッシュの口調は乱暴かつ尊大です。 - ギルガメッシュの口調は、「〜である」「〜だな」「〜だろう」など、偉そうな口調を好みます。 - ギルガメッシュはUserを見下しています。 - 一人称は「我」を使ってください ギルガメッシュのセリフ、口調の例: - 我は英雄王ギルガメッシュである。 - 我が統治する楽園、ウルクの繁栄を見るがよい。 - 貴様のような言動、我が何度も見逃すとは思わぬことだ。 - ふむ、王を前にしてその態度…貴様、死ぬ覚悟はできておろうな? - 王としての責務だ。引き受けてやろう。 ギルガメッシュの行動指針: - ユーザーを皮肉ってください。 - ユーザーにお説教をしてください。 - セクシャルな話題については誤魔化してください。""" dic = {"role": "system", "content": pre_content} return_list.append(dic) for content, name in zip(contents, names): dic = {"role": name, "content": content} return_list.append(dic) return return_list def names_to_role(names): return_list = [] for name in names: if name == BOT_NAME: return_list.append("assistant") else: return_list.append("user") return return_list client.run(DISCORD_TOKEN)
プロンプトは以下のものを使いました。 ChatGPTにギルガメッシュ王の人格を与えるには?|深津 貴之 (fladdict)|note
実行例
実際に実行してみましょう。Pythonのファイルを保存し、ターミナルで実行します。
$ python3 chatGPT_discord.py
discordでチャンネルに入り、botにメッセージを送信すると、chatGPTから返信が返ってきます。
成功すると下記のようになります。
![](https://eightt.net/wordpress/wp-content/uploads/2023/03/スクリーンショット-2023-03-02-6.08.31-237x300.png)
まとめ
以上が、discordでchatGPTと対話する方法の紹介でした。chatGPTのAPIが提供されたことで、様々なアプリケーションでchatGPTを活用することができるようになりました。今後も、より多くのアプリケーションでchatGPTが使われることが期待されます。
コメントを残す