概要
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ログイン
結果
以下の画像のようになった
ChatGPTと同じような動きをしており、正常に動作している。
明らかにGPT-3の時よりもスムーズな会話ができる。
質問等あれば私のTwitterに送っていただければ回答します。