Det er meget nemt at opbygge en chatbot på en Discord-server takket være fantastiske AI-modeller som GPT-3, GPT-J og GPT-NeoX. I denne artikel viser vi dig, hvordan du kan kode din egen samtalebot i Node.js ved hjælp af GPT-J og GPT-NeoX via NLP Cloud API'et.

Discord er en meget udbredt messaging-platform. Det er mere og mere almindeligt at se folk oprette deres egen Discord-server til deres projekt, så et fællesskab nemt kan mødes. Mange virksomheder har faktisk oprettet deres egen Discord-server for at fremme deres eget brugerfællesskab.
Discord kan enten være selvhostet eller bruges via Discord-webapplikationen. En god ting ved Discord er, at det har en omfattende API til at interagere med serveren, og det er meget nemt at oprette en chatbot, der kan interagere med brugere på Discord.
Mange mennesker opretter chatbots på Discord, så brugerne kan diskutere med en AI om mange ting. Det er meget nemt at integrere en chatbot i din Discord-server. Lad os se, hvordan du gør det!
I løbet af de sidste 2 år er der blevet udgivet flere fantastiske AI-modeller: GPT-3, GPT-J og GPT-NeoX. Disse modeller er meget imponerende og er især gode til at håndtere konversations-AI (dvs. chatbots).
Man kan have en god diskussion om bogstaveligt talt hvad som helst med disse modeller, og det er ret nemt at tilpasse modellerne til en specifik situation. Du kan f.eks. konfigurere din GPT-baserede chatbot til at være empatisk, sarkastisk eller endda god til at besvare specifikke spørgsmål om din egen branche (medicinsk, juridisk, marketing osv.).
Det eneste problem er, at disse modeller kræver en masse regnekraft, så kun få mennesker har råd til at installere dem på deres egen server. NLP Cloud tilbyder både GPT-J og GPT-NeoX via en API, så vi vil bruge disse modeller via NLP Cloud API i det følgende eksempel.
Lad os antage, at du har oprettet en konto på Discord.com. Gå til udviklerportalen: her. Vælg "Ny applikation", giv din applikation et navn, og opret den:

Klik nu på "Add a bot" (Tilføj en bot), og hent dit bot-token.
Sidste trin: Forbind din bot til din Discord-server. For at gøre dette skal du først klikke på menuen "OAuth2" og hente dit klient-ID:

Tillad derefter din bot at få adgang til din server ved at besøge følgende URL: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (erstat CLIENT_ID med dit eget klient-id, som du har fundet tidligere).
Alt er i orden på Discord-siden. Lad os nu hente et NLP Cloud API-token!
Lad os antage, at du har oprettet en konto på NLP Cloud. Du skal blot hente dit API-token i dit instrumentbræt:

Derefter kan du abonnere på en pay-as-you-go plan, som giver dig adgang til GPT-J og GPT-NeoX modellerne (de første 100k tokens er gratis, hvilket vil gøre dine tests lettere).

Du kan nu begynde at programmere din Node.js-bot!
Både Discord og NLP Cloud har Node.js-klienter, så udviklingen vil være meget let.
Her er en første version:
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']}`});
})();
});
Som du kan se, henter vi først Discord- og NLP Cloud-tokenet fra miljøvariabler. Så eksporter først dine tokens i 2 miljøvariabler kaldet "NLPCLOUD_TOKEN" og "DISCORD_BOT_TOKEN". Du kan også blot kopiere og indsætte dit token direkte i koden under dine tests, hvis du foretrækker det.
Vi bruger NLP Clouds Fast GPT-J-model - en hurtigere implementering af GPT-J - hvilket er interessant for chatbots, da vi normalt ønsker, at svartiden skal være så kort som muligt. Hvis du ønsker at bruge GPT-NeoX 20B, skal du blot bruge "gpt-neox-20b" i stedet for "fast-gpt-j".
NLP Cloud-funktionen "chatbot()" gør det nemt at håndtere en chatbot baseret på en GPT-model uden at skulle bekymre sig om komplekse parametre, prompting, few-shot learning osv. Det eneste trick er, at vi efter hvert chatbot-svar skal holde svaret i hukommelsen og tilføje det til historikken for de følgende anmodninger. Hvis vi ikke gør det, vil chatbotten aldrig huske historikken for samtalen!
Vores chatbot fungerer nu. Du skal blot starte dit script (f.eks. med "node my_script.js"), og du bør se, at din chatbot er online på din Discord-server. Du kan begynde at tale med den for alvor!
Vores eksempel fungerer, men der er en svaghed: GPT-modellerne kan ikke håndtere mere end 2048 tokens på samme tid (2048 tokens er mere eller mindre lig med 1700 ord). Så på et tidspunkt kan din chatbot-historik blive for stor, og du bliver nødt til at afkortede den! Her er hvordan du kan gøre det:
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);
Som du kan se, sørger vi blot for, at historikken ikke er for stor, og når den er det, fjerner vi de ældste elementer!
I praksis er det sjældent et problem, fordi de ældste elementer i historien sjældent er relevante for samtalen. Men hvis de er det, kan du også implementere en mere avanceret strategi, der selektivt beholder og fjerner nogle elementer på baggrund af deres relevans.
Det har aldrig været så nemt at opbygge en avanceret chatbot takket være Discord- og GPT-modellerne.
Den største udfordring er, at disse moderne AI-modeller bliver sværere og sværere at bruge på grund af deres enorme størrelse, og derfor kan det være meget enklere og mere omkostningseffektivt at bruge en API som NLP Cloud i stedet.
Hvis du gerne vil implementere din egen chatbot, men ikke er sikker på, hvordan du skal gribe det an, så tøv ikke med at kontakte os!
Julien Salinas
Teknisk direktør hos NLP Cloud