Grūtības ar mākslīgā intelekta vai pilnas paketes izstrādi? Mūsu eksperti ir gatavi jums palīdzēt: individuāli pielāgoti padomi, tehniskā integrācija un daudz kas cits. Sazinieties ar [email protected].

GPT-J/GPT-NeoX Discord čatbota izveide ar NLP mākoņa palīdzību

Pateicoties lieliskiem mākslīgā intelekta modeļiem, piemēram, GPT-3, GPT-J un GPT-NeoX, ir ļoti viegli izveidot tērzēšanas robotu Discord serverī. Šajā rakstā mēs parādīsim, kā kodēt savu sarunu robotu Node.js, izmantojot GPT-J un GPT-NeoX, izmantojot NLP Cloud API.

Discord chatbot

Discord čatbots?

Discord ir plaši izplatīta ziņapmaiņas platforma. Arvien biežāk ir redzams, ka cilvēki savam projektam izveido savu Discord serveri, lai kopiena varētu viegli sanākt kopā. Daudzi uzņēmumi ir izveidojuši savu Discord serveri, lai veicinātu savu lietotāju kopienu.

Pakalpojumu Discord var izmantot vai nu kā pašmāju hostingu, vai arī izmantojot Discord tīmekļa lietojumprogrammu. Discord lieliski ir tas, ka tam ir plašs API, lai mijiedarbotos ar serveri, un ir ļoti viegli izveidot tērzēšanas robotu, kas mijiedarbosies ar Discord lietotājiem.

Daudzi cilvēki rada tērzēšanas robotus vietnē Discord, lai lietotāji varētu diskutēt ar mākslīgo intelektu par daudzām lietām. Ir ļoti viegli integrēt tērzēšanas robotu savā Discord serverī. Apskatīsim, kā to izdarīt!

GPT-3, GPT-J un GPT-NeoX

Pēdējo divu gadu laikā ir izlaisti vairāki lieliski mākslīgā intelekta modeļi: GPT-3, GPT-J un GPT-NeoX. Šie modeļi ir ļoti iespaidīgi un īpaši labi strādā ar sarunvalodas AI (t. i., tērzēšanas robotiem).

Izmantojot šos modeļus, var brīnišķīgi diskutēt par jebko, un tos ir diezgan viegli pielāgot konkrētai situācijai. Piemēram, jūs varat konfigurēt uz GPT balstītu tērzēšanas robotu tā, lai tas būtu empātisks, sarkastisks vai pat labi atbildētu uz specifiskiem jautājumiem par jūsu nozari (medicīnu, jurisprudenci, mārketingu utt.).

Vienīgā problēma ir tā, ka šiem modeļiem nepieciešama liela skaitļošanas jauda, tāpēc tikai retais var atļauties tos izvietot savā serverī. NLP Cloud piedāvā GPT-J un GPT-NeoX, izmantojot API, tāpēc mēs izmantosim šos modeļus, izmantojot NLP Cloud API nākamajā piemērā.

Discord un NLP Cloud API atslēgu iegūšana

Pieņemsim, ka esat izveidojis kontu vietnē Discord.com. Dodieties uz izstrādātāju portālu: šeit. Izvēlieties "Jauna lietojumprogramma", nosauciet savu lietojumprogrammu un izveidojiet to:

New Discord Application

Tagad noklikšķiniet uz "Pievienot robotu" un iegūstiet robota žetonu.

Pēdējais solis: savienojiet savu robotu ar Discord serveri. Lai to izdarītu, vispirms noklikšķiniet uz izvēlnes "OAuth2" un iegūstiet savu klienta ID:

Discord OAuth2

Pēc tam ļaujiet botam piekļūt jūsu serverim, apmeklējot šādu URL: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (CLIENT_ID aizstāt ar savu klienta ID, kas iegūts iepriekš).

Discord pusē viss ir kārtībā. Tagad iegūsim NLP Cloud API token!

Pieņemsim, ka esat izveidojis kontu NLP mākonī. Vienkārši iegūstiet savu API žetonu savā vadības panelī:

NLP Cloud Account

Pēc tam abonējiet maksājumu plānu, kas nodrošinās piekļuvi GPT-J un GPT-NeoX modeļiem (pirmie 100 000 žetonu ir bezmaksas, kas atvieglos jūsu testus).

NLP Cloud Pay-as-you-go Plan

Tagad varat sākt kodēt savu Node.js robotu!

Node.js servera kodēšana

Gan Discord, gan NLP Cloud ir Node.js klienti, tāpēc izstrādāt būs ļoti viegli.

Šeit ir pirmā versija:

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']}`});
        
    })();
    });

Kā redzat, mēs vispirms no vides mainīgajiem iegūstam Discord un NLP Cloud žetonu. Tāpēc vispirms eksportējiet savus žetonus 2 vides mainīgajos ar nosaukumu "NLPCLOUD_TOKEN" un "DISCORD_BOT_TOKEN". Ja vēlaties, varat arī vienkārši kopēt un ielīmēt savu žetonu tieši kodā testēšanas laikā.

Mēs izmantojam NLP Cloud Fast GPT-J modeli - ātrāku GPT-J implementāciju, kas ir interesanti tērzēšanas robotiem, jo parasti mēs vēlamies, lai atbildes laiks būtu pēc iespējas īsāks. Ja vēlaties izmantot GPT-NeoX 20B, vienkārši izmantojiet "gpt-neox-20b", nevis "fast-gpt-j".

NLP Cloud funkcija "chatbot()" ļauj viegli apstrādāt tērzēšanas robotu, kas balstīts uz GPT modeli, neaizraujoties ar sarežģītiem parametriem, pamudinājumiem, mācīšanos no dažiem kadriem utt. Vienīgā viltība ir tā, ka pēc katras čatbota atbildes mums ir jāsaglabā atbilde atmiņā un jāpievieno tā vēsturē nākamajiem pieprasījumiem. Ja mēs to nedarīsim, tērzēšanas robots nekad neatcerēsies sarunas vēsturi!

Mūsu tērzēšanas robots tagad darbojas. Vienkārši palaidiet savu skriptu (piemēram, ar "node my_script.js") un redzēsiet, ka jūsu tērzēšanas robots ir tiešsaistē jūsu Discord serverī. Jūs varat sākt ar to runāt pa īstam!

Automātiski saīsināt vēsturi

Mūsu piemērs darbojas, taču tam ir vāja vieta: GPT modeļi nevar apstrādāt vairāk nekā 2048 žetonus vienlaicīgi (2048 žetoni ir vairāk vai mazāk līdzvērtīgi 1700 vārdiem). Tāpēc kādā brīdī tava tērzēšanas robota vēsture var kļūt pārāk liela, un tev būs nepieciešams to saīsināt! Lūk, kā jūs to varētu izdarīt:

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);

Kā redzat, mēs vienkārši pārliecināmies, ka vēsture nav pārāk liela, un, ja tā ir, mēs noņemam vecākos elementus!

Praksē tas reti kad rada problēmas, jo senākie vēstures elementi reti kad ir būtiski sarunai. Bet, ja tādi ir, varat īstenot arī progresīvāku stratēģiju, kas ir selektīvi saglabāt un noņemt dažus elementus, pamatojoties uz to nozīmīgumu.

Secinājums

Pateicoties Discord un GPT modeļiem, vēl nekad nav bijis tik vienkārši izveidot uzlabotu tērzēšanas robotu.

Galvenā problēma ir tā, ka šos mūsdienu mākslīgā intelekta modeļus ir aizvien grūtāk izmantot to milzīgā apjoma dēļ, tāpēc to vietā var būt daudz vienkāršāk un daudz izdevīgāk izmantot API, piemēram, NLP Cloud.

Ja vēlaties ieviest savu tērzēšanas robotu, bet neesat pārliecināts, kā to izdarīt, lūdzu, sazinieties ar mums!

Julien Salinas
NLP Cloud tehniskais direktors