Chatbotin rakentaminen Discord-palvelimelle on erittäin helppoa GPT-3:n, GPT-J:n ja GPT-NeoX:n kaltaisten hienojen tekoälymallien ansiosta. Tässä artikkelissa näytämme, miten voit koodata oman keskustelubotin Node.js:ssä käyttämällä GPT-J:tä ja GPT-NeoX:ää NLP Cloud API:n kautta.

Discord on laajalti hyväksytty viestialusta. On yhä yleisempää, että ihmiset luovat projektilleen oman Discord-palvelimen, jotta yhteisö voi kokoontua helposti yhteen. Monet yritykset ovat itse asiassa luoneet oman Discord-palvelimen edistääkseen omaa käyttäjäyhteisöään.
Discordia voi käyttää joko itse tai Discord-verkkosovelluksen kautta. Hienoa Discordissa on se, että sillä on laaja API, jonka avulla voi olla vuorovaikutuksessa palvelimen kanssa, ja on erittäin helppoa luoda chatbot, joka on vuorovaikutuksessa käyttäjien kanssa Discordissa.
Monet ihmiset luovat Discordiin chatbotteja, jotta käyttäjät voivat keskustella tekoälyn kanssa monista asioista. Chatbotin integroiminen Discord-palvelimeesi on erittäin helppoa. Katsotaanpa, miten se tehdään!
Viimeisten kahden vuoden aikana on julkaistu useita hienoja tekoälymalleja: GPT-3, GPT-J ja GPT-NeoX. Nämä mallit ovat erittäin vaikuttavia ja erityisen hyviä keskustelevan tekoälyn (eli chatbottien) käsittelyssä.
Näillä malleilla voi käydä loistavaa keskustelua kirjaimellisesti mistä tahansa, ja malleja on melko helppo mukauttaa tiettyyn tilanteeseen. Voit esimerkiksi konfiguroida GPT-pohjaisen chatbotin niin, että se on empaattinen, sarkastinen tai jopa hyvä vastaamaan tiettyihin oman alasi kysymyksiin (lääketiede, laki, markkinointi jne.).
Ainoa ongelma on, että nämä mallit vaativat paljon laskentatehoa, joten vain harvalla on varaa ottaa ne käyttöön omalla palvelimellaan. NLP Cloud tarjoaa sekä GPT-J:tä että GPT-NeoX:ää API:n kautta, joten käytämme näitä malleja NLP Cloudin API:n kautta seuraavassa esimerkissä.
Oletetaan, että olet luonut tilin Discord.comiin. Mene kehittäjäportaaliin: täällä. Valitse "Uusi sovellus", anna sovellukselle nimi ja luo se:

Napsauta nyt "Lisää botti" ja hae botti-tunnuksesi.
Viimeinen vaihe: linkitä botti Discord-palvelimeesi. Napsauta ensin "OAuth2"-valikkoa ja hae asiakastunnuksesi:

Anna sitten botin käyttää palvelintasi vierailemalla seuraavassa URL-osoitteessa: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (korvaa CLIENT_ID aiemmin saadulla asiakastunnuksellasi).
Kaikki on kunnossa Discordin puolella. Haetaan nyt NLP Cloud API -merkki!
Oletetaan, että olet luonut tilin NLP Cloudiin. Hae yksinkertaisesti API-tunnuksesi kojelaudaltasi:

Tilaa sitten pay-as-you-go-suunnitelma, joka antaa sinulle pääsyn GPT-J- ja GPT-NeoX-malleihin (ensimmäiset 100 000 merkkiä ovat ilmaisia, mikä helpottaa testejäsi).

Voit nyt aloittaa Node.js-bottisi koodaamisen!
Sekä Discordilla että NLP Cloudilla on Node.js-clientit, joten kehittäminen on erittäin helppoa.
Tässä on ensimmäinen versio:
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']}`});
})();
});
Kuten näet, haemme ensin Discord- ja NLP Cloud -tunnukset ympäristömuuttujista. Vie siis ensin tunnukset kahteen ympäristömuuttujaan nimeltä "NLPCLOUD_TOKEN" ja "DISCORD_BOT_TOKEN". Voit myös yksinkertaisesti kopioida ja liittää tunnuksesi suoraan koodiin testien aikana, jos haluat.
Käytämme NLP Cloudin Fast GPT-J -mallia, joka on GPT-J:n nopeampi toteutus, mikä on mielenkiintoista chat-roboteille, koska haluamme yleensä, että vastausaika on mahdollisimman lyhyt. Jos haluat käyttää GPT-NeoX 20B:tä, käytä yksinkertaisesti "gpt-neox-20b" sanaa "fast-gpt-j:n" sijasta.
NLP Cloudin "chatbot()"-funktio helpottaa GPT-malliin perustuvan chatbotin käsittelyä ilman monimutkaisia parametreja, kehotuksia, muutaman kuvan oppimista jne. Ainoa juju on, että jokaisen chatbotin vastauksen jälkeen meidän on pidettävä vastaus muistissa ja lisättävä se historiaan seuraavia pyyntöjä varten. Jos emme tee näin, chatbot ei koskaan muista keskustelun historiaa!
Chatbotimme toimii nyt. Käynnistä skriptisi (esimerkiksi komennolla "node my_script.js") ja sinun pitäisi nähdä, että chatbotisi on verkossa Discord-palvelimellasi. Voit alkaa keskustella sen kanssa oikeasti!
Esimerkkimme toimii, mutta siinä on heikkous: GPT-mallit eivät pysty käsittelemään samanaikaisesti yli 2048 merkkiä (2048 merkkiä vastaa suunnilleen 1700 sanaa). Jossain vaiheessa chatbot-historiastasi voi siis tulla liian suuri, ja sinun on typistettävä se! Näin voit tehdä sen:
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);
Kuten näet, varmistamme vain, että historia ei ole liian suuri, ja kun se on, poistamme vanhimmat elementit!
Käytännössä se on harvoin ongelma, koska historian vanhimmat elementit ovat harvoin merkityksellisiä keskustelun kannalta. Mutta jos ne ovat, voit myös toteuttaa edistyneemmän strategian, jossa joitakin elementtejä säilytetään ja poistetaan valikoivasti niiden merkityksellisyyden perusteella.
Kehittyneen chatbotin rakentaminen ei ole koskaan ollut näin helppoa Discordin ja GPT-mallien ansiosta.
Suurin haaste on se, että näitä nykyaikaisia tekoälymalleja on yhä vaikeampi käyttää niiden valtavan koon vuoksi, minkä vuoksi voi olla paljon yksinkertaisempaa ja kustannustehokkaampaa käyttää sen sijaan NLP Cloudin kaltaista sovellusrajapintaa.
Jos haluaisit toteuttaa oman chatbotin, mutta et ole varma, miten se tulisi toteuttaa, ota meihin yhteyttä!
Julien Salinas
teknologiajohtaja, NLP Cloud