Labai lengva sukurti pokalbių robotą "Discord" serveryje dėl puikių dirbtinio intelekto modelių, tokių kaip GPT-3, GPT-J ir GPT-NeoX. Šiame straipsnyje parodysime, kaip naudojant "GPT-J" ir "GPT-NeoX" per "NLP Cloud API" sukurti savo pokalbių botą "Node.js".

"Discord" yra plačiai paplitusi žinučių platforma. Vis dažniau pastebima, kad žmonės savo projektui sukuria savo "Discord" serverį, kad bendruomenė galėtų lengvai susiburti. Daugelis įmonių iš tikrųjų sukūrė savo "Discord" serverį, kad galėtų puoselėti savo naudotojų bendruomenę.
"Discord" galima naudoti savarankiškai arba per "Discord" žiniatinklio programą. Puiki "Discord" savybė yra ta, kad ji turi plačią API sąveikai su serveriu palaikyti, todėl labai lengva sukurti pokalbių robotą, kuris bendrautų su "Discord" vartotojais.
Daugelis žmonių "Discord" svetainėje kuria pokalbių robotus, kad naudotojai galėtų diskutuoti su dirbtiniu intelektu apie daugelį dalykų. Labai lengva integruoti pokalbių robotą į "Discord" serverį. Pažiūrėkime, kaip tai padaryti!
Per pastaruosius dvejus metus išleista keletas puikių dirbtinio intelekto modelių: GPT-3, GPT-J ir GPT-NeoX. Šie modeliai yra labai įspūdingi ir ypač gerai veikia pokalbių dirbtinį intelektą (t. y. pokalbių robotus).
Naudodamiesi šiais modeliais galite puikiai diskutuoti apie bet ką, be to, modelius gana lengva pritaikyti konkrečiai situacijai. Pavyzdžiui, galite sukonfigūruoti GPT pagrįstą pokalbių robotą taip, kad jis būtų empatiškas, sarkastiškas ar net gerai atsakytų į konkrečius klausimus apie jūsų pramonės šaką (medicinos, teisės, rinkodaros ir pan.).
Problema tik ta, kad šiems modeliams reikia daug skaičiavimo galios, todėl tik nedaugelis žmonių gali sau leisti juos įdiegti savo serveryje. NLP Cloud siūlo GPT-J ir GPT-NeoX per API, todėl toliau pateiktame pavyzdyje šiuos modelius naudosime per NLP Cloud API.
Tarkime, kad susikūrėte paskyrą Discord.com. Eikite į kūrėjų portalą: čia. Pasirinkite "New Application" (nauja programa), pavadinkite programą ir sukurkite ją:

Dabar spustelėkite "Add a bot" ir gaukite savo boto simbolį.
Paskutinis žingsnis: susiekite savo botą su "Discord" serveriu. Norėdami tai padaryti, pirmiausia spustelėkite meniu "OAuth2" ir gaukite savo kliento ID:

Tada leiskite savo robotui prisijungti prie serverio, apsilankę šiuo URL adresu: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (vietoj CLIENT_ID įrašykite savo kliento ID, kurį gavote anksčiau).
"Discord" pusėje viskas gerai. Dabar gaukime NLP Cloud API žetoną!
Tarkime, kad susikūrėte paskyrą "NLP Cloud". Tiesiog gaukite savo API simbolį prietaisų skydelyje:

Tada užsisakykite mokėjimo planą, kuris suteiks prieigą prie GPT-J ir GPT-NeoX modelių (pirmieji 100 tūkst. žetonų yra nemokami, o tai palengvins jūsų bandymus).

Dabar galite pradėti kurti savo "Node.js" botą!
Tiek "Discord", tiek "NLP Cloud" turi "Node.js" klientus, todėl kurti bus labai paprasta.
Pateikiame pirmąją versiją:
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']}`});
})();
});
Kaip matote, pirmiausia iš aplinkos kintamųjų gauname "Discord" ir "NLP Cloud" simbolį. Taigi pirmiausia eksportuokite savo žetonus į 2 aplinkos kintamuosius, pavadintus "NLPCLOUD_TOKEN" ir "DISCORD_BOT_TOKEN". Taip pat galite tiesiog nukopijuoti ir įklijuoti savo žetoną tiesiai į kodą bandymų metu, jei norite.
Naudojame "NLP Cloud" greitąjį GPT-J modelį - greitesnę GPT-J realizaciją, kuri įdomi pokalbių robotams, nes paprastai norime, kad atsakymo laikas būtų kuo trumpesnis. Jei norite naudoti "GPT-NeoX 20B", tiesiog vietoj "fast-gpt-j" naudokite "gpt-neox-20b".
"NLP Cloud" funkcija "chatbot()" leidžia lengvai valdyti pokalbių robotą, pagrįstą GPT modeliu, nesukant galvos dėl sudėtingų parametrų, užklausų, mokymosi keliais kadrais ir pan. Vienintelė gudrybė ta, kad po kiekvieno pokalbių roboto atsakymo turime išsaugoti atsakymą atmintyje ir įtraukti jį į istoriją kitoms užklausoms. Jei to nepadarysime, pokalbių robotas niekada neprisimins pokalbio istorijos!
Mūsų pokalbių robotas dabar veikia. Tiesiog paleiskite savo skriptą (pavyzdžiui, su "node my_script.js") ir pamatysite, kad jūsų pokalbių robotas yra prisijungęs prie "Discord" serverio. Galite pradėti kalbėtis su juo iš tikrųjų!
Mūsų pavyzdys veikia, tačiau yra trūkumas: GPT modeliai vienu metu negali apdoroti daugiau nei 2048 ženklų (2048 ženklai daugiau ar mažiau lygūs 1700 žodžių). Taigi tam tikru momentu jūsų pokalbių roboto istorija gali tapti per didelė ir ją teks sutrumpinti! Štai kaip galėtumėte tai padaryti:
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);
Kaip matote, mes tiesiog įsitikiname, kad istorija nėra per didelė, o kai ji tokia tampa, pašaliname seniausius elementus!
Praktikoje tai retai kelia problemų, nes seniausi istorijos elementai retai būna susiję su pokalbiu. Tačiau jei taip yra, galite įgyvendinti pažangesnę strategiją, pagal kurią selektyviai išsaugomi ir pašalinami kai kurie elementai, atsižvelgiant į jų svarbą.
Dėl "Discord" ir GPT modelių sukurti pažangų pokalbių robotą dar niekada nebuvo taip paprasta.
Pagrindinis iššūkis yra tas, kad šiuos šiuolaikinius dirbtinio intelekto modelius vis sunkiau naudoti dėl jų didžiulio dydžio, todėl gali būti daug paprasčiau ir ekonomiškiau naudoti API, pavyzdžiui, NLP Cloud.
Jei norėtumėte įdiegti savo pokalbių robotą, bet nežinote, kaip tai padaryti, nedvejodami susisiekite su mumis!
Julien Salinas
NLP Cloud techninis direktorius