Vďaka skvelým modelom AI, ako sú GPT-3, GPT-J a GPT-NeoX, je veľmi jednoduché vytvoriť chatbota na serveri Discord. V tomto článku vám ukážeme, ako nakódovať vlastného konverzačného bota v Node.js pomocou GPT-J a GPT-NeoX prostredníctvom rozhrania NLP Cloud API.

Discord je široko používaná platforma na zasielanie správ. Čoraz častejšie sa stretávame s tým, že si ľudia vytvárajú vlastný server Discord pre svoj projekt, aby sa komunita mohla ľahko stretávať. Mnohé spoločnosti si skutočne vytvorili vlastný server Discord, aby podporili vlastnú komunitu používateľov.
Službu Discord môžete používať buď ako samostatný hostiteľ, alebo prostredníctvom webovej aplikácie Discord. Veľkou výhodou služby Discord je, že má rozsiahle rozhranie API na interakciu so serverom a je veľmi jednoduché vytvoriť chatbota, ktorý bude komunikovať s používateľmi na službe Discord.
Mnoho ľudí vytvára chatboty na službe Discord, aby používatelia mohli diskutovať s umelou inteligenciou o mnohých veciach. Je veľmi jednoduché integrovať chatbota do servera Discord. Pozrime sa, ako to urobiť!
Za posledné dva roky bolo vydaných niekoľko skvelých modelov AI: GPT-3, GPT-J a GPT-NeoX. Tieto modely sú veľmi pôsobivé a sú obzvlášť dobré pri riešení konverzačnej AI (t. j. chatbotov).
Pomocou týchto modelov môžete viesť skvelú diskusiu doslova o čomkoľvek a je pomerne jednoduché prispôsobiť modely konkrétnej situácii. Chatbota založeného na GPT môžete napríklad nakonfigurovať tak, aby bol empatický, sarkastický alebo dokonca dobre odpovedal na špecifické otázky týkajúce sa vášho odvetvia (lekárske, právne, marketingové atď.).
Jediným problémom je, že tieto modely si vyžadujú veľký výpočtový výkon, takže len málo ľudí si môže dovoliť ich nasadenie na vlastnom serveri. Služba NLP Cloud ponúka GPT-J aj GPT-NeoX prostredníctvom rozhrania API, takže v nasledujúcom príklade budeme tieto modely používať prostredníctvom rozhrania API služby NLP Cloud.
Predpokladajme, že ste si vytvorili konto na stránke Discord.com. Prejdite na portál pre vývojárov: tu. Vyberte položku "Nová aplikácia", pomenujte aplikáciu a vytvorte ju:

Teraz kliknite na tlačidlo "Pridať bota" a načítajte svoj token bota.
Posledný krok: prepojte svojho bota so serverom Discord. Ak to chcete urobiť, najprv kliknite na ponuku "OAuth2" a načítajte ID klienta:

Potom povoľte botovi prístup k serveru tak, že navštívite nasledujúcu adresu URL: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (CLIENT_ID nahraďte svojím vlastným ID klienta, ktoré ste získali predtým).
Na strane Discord je všetko v poriadku. Teraz načítajme token API služby NLP Cloud!
Predpokladajme, že ste si vytvorili konto v službe NLP Cloud. Jednoducho načítajte svoj token API na ovládacom paneli:

Potom si predplaťte paušálny plán, ktorý vám umožní prístup k modelom GPT-J a GPT-NeoX (prvých 100 tisíc tokenov je zadarmo, čo vám uľahčí testovanie).

Teraz môžete začať kódovať svojho Node.js bota!
Discord aj NLP Cloud majú klientov Node.js, takže vývoj bude veľmi jednoduchý.
Tu je prvá verzia:
const NLPCloudClient = require('nlpcloud');
const { Client, Intents } = require('discord.js');
// Load NLP Cloud token and Discord Bot token.
const nlpcloudToken = process.env.NLPCLOUD_TOKEN;
if (nlpcloudToken == null) {
console.error('No NLP Cloud token received');
process.exit();
}
const discordBotToken = process.env.DISCORD_BOT_TOKEN;
if (discordBotToken == null) {
console.error('No Discord bot token received');
process.exit();
}
// Initialize the NLP Cloud and Discord clients.
const nlpCloudClient = new NLPCloudClient('fast-gpt-j', nlpcloudToken, true)
const discordClient = new Client({intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES]});
let history = [];
discordClient.on("messageCreate", function(message) {
if (message.author.bot) return;
(async () => {
// Send request to NLP Cloud.
const response = await nlpCloudClient.chatbot(`${message.content}`, '', history);
// Send response to Discord bot.
message.reply(`${response.data['response']}`);
// Add the request and response to the chat history.
history.push({'input':`${message.content}`,'response':`${response.data['response']}`});
})();
});
Ako vidíte, najprv načítame token Discord a NLP Cloud z premenných prostredia. Takže najprv exportujte svoje tokeny do 2 premenných prostredia s názvom "NLPCLOUD_TOKEN" a "DISCORD_BOT_TOKEN". Ak chcete, môžete token jednoducho skopírovať a vložiť priamo do kódu počas testovania.
Používame model Fast GPT-J spoločnosti NLP Cloud - rýchlejšiu implementáciu GPT-J - čo je pre chatboty zaujímavé, pretože zvyčajne chceme, aby bol čas odozvy čo najkratší. Ak chcete používať GPT-NeoX 20B, jednoducho použite "gpt-neox-20b" namiesto "fast-gpt-j".
Funkcia "chatbot()" služby NLP Cloud uľahčuje prácu s chatbotom založeným na modeli GPT bez toho, aby ste sa museli zaoberať zložitými parametrami, výzvami, učením niekoľkých snímok atď. Jediný trik spočíva v tom, že po každej odpovedi chatbota musíme odpoveď uchovať v pamäti a pridať ju do histórie pre nasledujúce požiadavky. Ak to neurobíme, chatbot si nikdy nebude pamätať históriu konverzácie!
Náš chatbot teraz funguje. Jednoducho spustite svoj skript (napríklad pomocou "node my_script.js") a mali by ste vidieť, že váš chatbot je online na vašom serveri Discord. Môžete sa s ním začať reálne rozprávať!
Náš príklad funguje, ale má slabinu: GPT modely nedokážu naraz spracovať viac ako 2048 tokenov (2048 tokenov sa viac-menej rovná 1700 slovám). Takže v určitom okamihu môže byť história vášho chatbota príliš veľká a budete ju musieť skrátiť! Tu je uvedený spôsob, ako by ste to mohli urobiť:
const NLPCloudClient = require('nlpcloud');
const { Client, Intents } = require('discord.js');
// Load NLP Cloud token and Discord Bot token.
const nlpcloudToken = process.env.NLPCLOUD_TOKEN;
if (nlpcloudToken == null) {
console.error('No NLP Cloud token received');
process.exit();
}
const discordBotToken = process.env.DISCORD_BOT_TOKEN;
if (discordBotToken == null) {
console.error('No Discord bot token received');
process.exit();
}
// Initialize the NLP Cloud and Discord clients.
const nlpCloudClient = new NLPCloudClient('fast-gpt-j', nlpcloudToken, true)
const discordClient = new Client({intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES]});
let history = [];
let charsCount = 0;
discordClient.on("messageCreate", function(message) {
if (message.author.bot) return;
(async () => {
charsCount += `${message.content}`.length;
// Send request to NLP Cloud.
const response = await nlpCloudClient.chatbot(`${message.content}`, '', history);
charsCount += `${response.data['response']}`.length;
// Send response to Discord bot.
message.reply(`${response.data['response']}`);
// Add the request and response to the chat history.
history.push({'input':`${message.content}`,'response':`${response.data['response']}`});
// If the chat history is bigger than 1500 tokens, we remove the oldest elements from
// the history. We consider that 1 token = 4 characters.
// The theoretical GPT context limit is 2048 tokens but we choose 1500 tokens instead
// in order to be safe since the tokens count is not perfectly accurate.
while (charsCount > 1500 * 4) {
charsCount -= history[0]['input'].length + history[0]['response'].length;
history.shift();
}
})();
});
discordClient.login(discordBotToken);
Ako vidíte, jednoducho sa uisťujeme, že história nie je príliš veľká, a keď je, odstránime najstaršie prvky!
V praxi to málokedy predstavuje problém, pretože najstaršie prvky v histórii sú pre konverzáciu relevantné len zriedka. Ak však sú, môžete zaviesť aj pokročilejšiu stratégiu, ktorá selektívne ponecháva a odstraňuje niektoré prvky na základe ich relevantnosti.
Vytvorenie pokročilého chatbota nebolo vďaka modelom Discord a GPT nikdy také jednoduché.
Hlavnou výzvou je, že tieto moderné modely umelej inteligencie je čoraz ťažšie používať kvôli ich obrovskej veľkosti, a preto môže byť oveľa jednoduchšie a nákladovo efektívnejšie použiť namiesto nich rozhranie API, ako je napríklad NLP Cloud.
Ak by ste chceli implementovať vlastného chatbota, ale nie ste si istí, ako to zvládnuť, neváhajte nás kontaktovať!
Julien Salinas
Technický riaditeľ spoločnosti NLP Cloud