Klepetalnega robota v strežniku Discord je zelo enostavno ustvariti z odličnimi modeli umetne inteligence, kot so GPT-3, GPT-J in GPT-NeoX. V tem članku vam pokažemo, kako lahko v Node.js z uporabo GPT-J in GPT-NeoX prek vmesnika NLP Cloud API kodirate svojega pogovornega bota.

Discord je široko sprejeta platforma za sporočanje. Vedno pogosteje se dogaja, da ljudje za svoj projekt ustvarijo lasten strežnik Discord, da bi se skupnost lahko zlahka združila. Številna podjetja so dejansko ustvarila svoj strežnik Discord, da bi spodbudila svojo skupnost uporabnikov.
Aplikacijo Discord lahko gostite sami ali jo uporabljate prek spletne aplikacije Discord. Odlična lastnost programa Discord je, da ima obsežen API za interakcijo s strežnikom, zato je zelo enostavno ustvariti klepetalnega robota, ki bo komuniciral z uporabniki v programu Discord.
Veliko ljudi ustvarja klepetalne robote v storitvi Discord, tako da se lahko uporabniki z umetno inteligenco pogovarjajo o številnih stvareh. Klepetalnega robota je zelo enostavno vključiti v strežnik Discord. Oglejmo si, kako to storiti!
V zadnjih dveh letih je bilo izdanih več odličnih modelov umetne inteligence: GPT-3, GPT-J in GPT-NeoX. Ti modeli so zelo impresivni in so še posebej dobri pri obravnavi pogovorne umetne inteligence (tj. klepetalnih robotov).
S temi modeli se lahko odlično pogovarjate o dobesedno vsem, poleg tega pa je modele precej enostavno prilagoditi določenim razmeram. Klepetalnega robota, ki temelji na GPT, lahko na primer konfigurirate tako, da je empatičen, sarkastičen ali celo dober pri odgovarjanju na specifična vprašanja o vaši panogi (medicinski, pravni, marketinški itd.).
Težava je le v tem, da ti modeli zahtevajo veliko računske moči, zato si le redki lahko privoščijo, da jih namestijo na svoj strežnik. Oblak NLP Cloud ponuja GPT-J in GPT-NeoX prek vmesnika API, zato bomo v naslednjem primeru te modele uporabili prek vmesnika API oblaka NLP Cloud.
Predpostavimo, da ste ustvarili račun na spletnem mestu Discord.com. Pojdite na portal za razvijalce: tukaj. Izberite "Nova aplikacija", poimenujte aplikacijo in jo ustvarite:

Zdaj kliknite "Dodaj bota" in pridobite žeton bota.
Zadnji korak: povežite svojega bota s strežnikom Discord. Za to najprej kliknite meni "OAuth2" in pridobite ID odjemalca:

Botu dovolite dostop do strežnika tako, da obiščete naslednji naslov URL: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (zamenjajte CLIENT_ID z lastnim ID odjemalca, ki ste ga pridobili prej).
Na strani konference Discord je vse v redu. Zdaj pridobimo žeton API NLP Cloud!
Predpostavimo, da ste ustvarili račun v oblaku NLP. Preprosto pridobite svoj žeton API na nadzorni plošči:

Nato se naročite na načrt za sprotno plačevanje, ki vam bo omogočil dostop do modelov GPT-J in GPT-NeoX (prvih 100 tisoč žetonov je brezplačnih, kar vam bo olajšalo testiranje).

Zdaj lahko začnete kodirati svojega bota Node.js!
Tako Discord kot NLP Cloud imata odjemalce Node.js, zato bo razvoj zelo enostaven.
Tukaj je prva različica:
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']}`});
})();
});
Kot lahko vidite, najprej pridobimo žetona Discord in NLP Cloud iz spremenljivk okolja. Zato najprej izvozite svoje žetone v dve spremenljivki okolja z imenoma "NLPCLOUD_TOKEN" in "DISCORD_BOT_TOKEN". Če želite, lahko žeton med testiranjem preprosto kopirate in prilepite neposredno v kodo.
Uporabljamo model NLP Cloud Fast GPT-J - hitrejšo implementacijo GPT-J, kar je zanimivo za klepetalne robote, saj običajno želimo, da je odzivni čas čim krajši. Če želite uporabiti GPT-NeoX 20B, preprosto uporabite "gpt-neox-20b" namesto "fast-gpt-j".
Funkcija NLP Cloud "chatbot()" omogoča enostavno upravljanje klepetalnega robota, ki temelji na modelu GPT, ne da bi se ukvarjali z zapletenimi parametri, pozivanjem, učenjem po nekaj posnetkih itd. Edina zvijača je, da moramo po vsakem odzivu klepetalnega robota ohraniti odziv v pomnilniku in ga dodati v zgodovino za naslednje zahteve. Če tega ne storimo, si klepetalni robot nikoli ne bo zapomnil zgodovine pogovora!
Naš klepetalni robot zdaj deluje. Enostavno zaženite svojo skripto (na primer z "node my_script.js") in videli boste, da je vaš klepetalni robot na spletu v strežniku Discord. Z njim se lahko začnete pogovarjati zares!
Naš zgled deluje, vendar ima pomanjkljivost: Modeli GPT ne morejo obdelati več kot 2048 žetonov hkrati (2048 žetonov je bolj ali manj enako 1700 besedam). Zato lahko zgodovina vašega klepetalnega robota na neki točki postane prevelika in jo boste morali skrajšati! Tukaj je opisano, kako lahko to storite:
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);
Kot lahko vidite, preprosto poskrbimo, da zgodovina ni prevelika, in ko je, odstranimo najstarejše elemente!
V praksi je to redko težava, saj so najstarejši elementi v zgodovini redko pomembni za pogovor. Če pa so, lahko uporabite tudi naprednejšo strategijo, ki selektivno ohranja in odstranjuje nekatere elemente glede na njihovo pomembnost.
Izdelava naprednega klepetalnega robota zaradi modelov Discord in GPT še nikoli ni bila tako preprosta.
Glavni izziv je, da je te sodobne modele umetne inteligence zaradi njihove ogromne velikosti vedno težje uporabljati, zato je uporaba vmesnika API, kot je NLP Cloud, veliko preprostejša in stroškovno učinkovitejša.
Če bi radi uvedli lastnega klepetalnega robota, vendar niste prepričani, kako bi se tega lotili, se obrnite na nas!
Julien Salinas
Tehnični direktor v podjetju NLP Cloud