1
2

More than 1 year has passed since last update.

ChatGPT APIを使ったDiscord返答ボットの作成

Last updated at Posted at 2023-03-03

概要

3月になり、ついにChatGPT API(gpt-3.5-turbo)が発表された。以前のGpt-3(Davinci-003)と比較すると性能は向上し、コストが約1/10となっている。そこで、質問応答をするDiscordBotを作成する。
(実はQiita初投稿)

対象読者

  • JavaScriptをある程度理解している
  • Node.js,VSCodeをあらかじめインストールしている
  • Discord.jsの基本的な事を理解している
    もし開発環境が整っていないのであればdarakeeeさんのサイトを参考に構築してみてください

開発環境

MacOS Ventura(13.2.1)
VSCode(1.76)

ライブラリのインストール

APIを利用するにはライブラリをインストールする必要があるため、npmコマンドを使用し以下のコマンドを実行する。

$ npm install openai

また、.envファイルを用いるため、dotenvもインストールする

$ npm install discord.js dotenv

OpenAIのAPIキー取得

以下のサイトにアクセスし、アカウントが既にある場合はログイン、無い場合は新規作成をし、secret keyを取得する

.envファイルの作成

下のような形で.envファイルを作成する

OPENAI_API_KEY=OpenAIで発行したAPIキー
BOT_TOKEN=Discord botのトークン

index.jsの中身

詳しい説明は省略する。詳細はOpenAIのドキュメンテーションを参照

require('dotenv').config();
var fs = require("fs");

const { Client, GatewayIntentBits } = require('discord.js');
const Discord = require("discord.js");
const client = new Discord.Client({intents: Object.values(Discord.IntentsBitField.Flags)})
const { Configuration, OpenAIApi } = require("openai");
const configuration = new Configuration({
  apiKey: process.env.OPENAI_API_KEY,
});
const openai = new OpenAIApi(configuration);

//起動確認
client.once('ready', () => {
    console.log(`${client.user.tag} Ready`);
});


client.on("ready", async () => { //スラッシュコマンドの作成
  const chat = [{
      name: "gpt", //コマンド名
      description: "質問したら答えが返ってきます", //コマンドの説明
      "options": [ //引数の作成
        {
          "type": 3,
          "name": "質問",
          "description": "質問したい文を入れてください",
          "required": true
        }
      ]
  }];
  await client.application.commands.set(chat);
});


client.on('interactionCreate', async interaction => {
  if (!interaction.isCommand()) return;

  const command = interaction.commandName;

  if (command === 'gpt') {
    const question = interaction.options.getString('質問');
    console.log(question); // 質問がコンソールに出力される

    (async () => {
      const completion = await openai.createChatCompletion({
         model: "gpt-3.5-turbo", //言語モデル
         messages: [{ role: "user", content:`${question}`}],
        });
      console.log(completion.data.choices[0].message.content); //コンソールに出力
      await interaction.reply(`${question}\n>>${completion.data.choices[0].message.content}\r\n`);
  })();
  }
});

client.login(process.env.BOT_TOKEN); //Discordログイン

結果

以下の画像のようになったimage.png
ssss.png
ChatGPTと同じような動きをしており、正常に動作している。
明らかにGPT-3の時よりもスムーズな会話ができる。

質問等あれば私のTwitterに送っていただければ回答します。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2