Δυσκολεύεστε με το AI ή την ανάπτυξη πλήρους πακέτου; Οι ειδικοί μας είναι εδώ για να σας καθοδηγήσουν: εξατομικευμένες συμβουλές, τεχνική ενσωμάτωση και πολλά άλλα. Επικοινωνήστε μαζί μας στο [email protected].

Κατασκευάστε ένα GPT-J/GPT-NeoX Discord Chatbot με το NLP Cloud

Είναι πολύ εύκολο να δημιουργήσετε ένα chatbot σε έναν διακομιστή Discord χάρη σε εξαιρετικά μοντέλα AI όπως το GPT-3, το GPT-J και το GPT-NeoX. Σε αυτό το άρθρο, σας δείχνουμε πώς να κωδικοποιήσετε το δικό σας bot συνομιλίας σε Node.js χρησιμοποιώντας το GPT-J και το GPT-NeoX μέσω του NLP Cloud API.

Discord chatbot

Ένα Discord Chatbot;

Το Discord είναι μια ευρέως αποδεκτή πλατφόρμα ανταλλαγής μηνυμάτων. Είναι όλο και πιο συνηθισμένο να βλέπουμε ανθρώπους να δημιουργούν το δικό τους διακομιστή Discord για το έργο τους, προκειμένου μια κοινότητα να συγκεντρώνεται εύκολα. Πολλές εταιρείες έχουν δημιουργήσει το δικό τους διακομιστή Discord για να προωθήσουν τη δική τους κοινότητα χρηστών.

Το Discord μπορεί είτε να φιλοξενηθεί μόνο του είτε να χρησιμοποιηθεί μέσω της διαδικτυακής εφαρμογής Discord. Ένα σπουδαίο πράγμα με το Discord είναι ότι διαθέτει ένα εκτεταμένο API για την αλληλεπίδραση με τον διακομιστή και είναι πολύ εύκολο να δημιουργήσετε ένα chatbot που θα αλληλεπιδρά με τους χρήστες στο Discord.

Πολλοί άνθρωποι δημιουργούν chatbots στο Discord, ώστε οι χρήστες να μπορούν να συζητούν με μια τεχνητή νοημοσύνη για πολλά πράγματα. Είναι πολύ εύκολο να ενσωματώσετε ένα chatbot στον διακομιστή Discord σας. Ας δούμε πώς να το κάνετε αυτό!

GPT-3, GPT-J και GPT-NeoX

Τα τελευταία 2 χρόνια, έχουν κυκλοφορήσει πολλά σπουδαία μοντέλα AI: GPT-3, GPT-J και GPT-NeoX. Αυτά τα μοντέλα είναι πολύ εντυπωσιακά και είναι ιδιαίτερα καλά στην αντιμετώπιση της συνομιλιακής ΤΝ (δηλ. chatbots).

Με αυτά τα μοντέλα μπορείτε να κάνετε μια εξαιρετική συζήτηση για κυριολεκτικά τα πάντα, και είναι αρκετά εύκολο να προσαρμόσετε τα μοντέλα σε μια συγκεκριμένη κατάσταση. Για παράδειγμα, μπορείτε να διαμορφώσετε το chatbot σας με βάση το GPT ώστε να είναι ενσυναισθητικό, σαρκαστικό ή ακόμη και καλό στο να απαντά σε συγκεκριμένες ερωτήσεις σχετικά με τον κλάδο σας (ιατρικό, νομικό, μάρκετινγκ κ.λπ.).

Το μόνο πρόβλημα είναι ότι αυτά τα μοντέλα απαιτούν μεγάλη υπολογιστική ισχύ, οπότε λίγοι μπορούν να τα αναπτύξουν στον δικό τους διακομιστή. Το NLP Cloud προτείνει τόσο το GPT-J όσο και το GPT-NeoX μέσω ενός API, οπότε θα χρησιμοποιήσουμε αυτά τα μοντέλα μέσω του API του NLP Cloud στο ακόλουθο παράδειγμα.

Αποκτήστε τα κλειδιά API του Discord και του NLP Cloud

Ας υποθέσουμε ότι έχετε δημιουργήσει έναν λογαριασμό στο Discord.com. Πηγαίνετε στην πύλη προγραμματιστών: εδώ. Επιλέξτε "Νέα εφαρμογή", ονομάστε την εφαρμογή σας και δημιουργήστε την:

New Discord Application

Τώρα κάντε κλικ στο "Add a bot" και ανακτήστε το κουπόνι του bot σας.

Τελευταίο βήμα: συνδέστε το bot σας με τον διακομιστή Discord. Για να το κάνετε αυτό, κάντε πρώτα κλικ στο μενού "OAuth2" και ανακτήστε το αναγνωριστικό πελάτη σας:

Discord OAuth2

Στη συνέχεια, επιτρέψτε στο bot σας να αποκτήσει πρόσβαση στον διακομιστή σας, επισκεπτόμενο την ακόλουθη διεύθυνση URL: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (αντικαταστήστε το CLIENT_ID με το δικό σας ID πελάτη που ανακτήσατε νωρίτερα).

Όλα είναι εντάξει στην πλευρά του Discord. Τώρα ας ανακτήσουμε ένα NLP Cloud API token!

Ας υποθέσουμε ότι έχετε δημιουργήσει έναν λογαριασμό στο NLP Cloud. Απλά ανακτήστε το διακριτικό σας API στο ταμπλό σας:

NLP Cloud Account

Στη συνέχεια, εγγραφείτε στο συνδρομητικό πρόγραμμα που θα σας δώσει πρόσβαση στα μοντέλα GPT-J και GPT-NeoX (τα πρώτα 100k tokens είναι δωρεάν, γεγονός που θα διευκολύνει τις δοκιμές σας).

NLP Cloud Pay-as-you-go Plan

Τώρα μπορείτε να ξεκινήσετε την κωδικοποίηση του Node.js bot σας!

Κωδικοποίηση του διακομιστή Node.js

Τόσο το Discord όσο και το NLP Cloud διαθέτουν πελάτες Node.js, οπότε η ανάπτυξη θα είναι πολύ εύκολη.

Ακολουθεί μια πρώτη έκδοση:

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

Όπως μπορείτε να δείτε, πρώτα ανακτούμε το διακριτικό Discord και NLP Cloud από τις μεταβλητές περιβάλλοντος. Έτσι, πρώτα εξάγετε τα tokens σας σε 2 μεταβλητές περιβάλλοντος που ονομάζονται "NLPCLOUD_TOKEN" και "DISCORD_BOT_TOKEN". Μπορείτε επίσης να κάνετε απλή αντιγραφή και επικόλληση του token σας απευθείας στον κώδικα κατά τη διάρκεια των δοκιμών σας, αν το προτιμάτε.

Χρησιμοποιούμε το μοντέλο Fast GPT-J του NLP Cloud - μια ταχύτερη υλοποίηση του GPT-J - το οποίο είναι ενδιαφέρον για τα chatbots, καθώς συνήθως θέλουμε ο χρόνος απόκρισης να είναι όσο το δυνατόν συντομότερος. Αν θέλετε να χρησιμοποιήσετε το GPT-NeoX 20B, απλά χρησιμοποιήστε "gpt-neox-20b" αντί για "fast-gpt-j".

Η συνάρτηση "chatbot()" του NLP Cloud διευκολύνει τον χειρισμό ενός chatbot που βασίζεται σε ένα μοντέλο GPT χωρίς να χρειάζεται να ασχοληθείτε με πολύπλοκες παραμέτρους, προτροπές, εκμάθηση λίγων βολών κ.λπ. Το μόνο κόλπο είναι ότι μετά από κάθε απάντηση του chatbot πρέπει να κρατάμε την απάντηση στη μνήμη και να την προσθέτουμε στο ιστορικό για τα επόμενα αιτήματα. Αν δεν το κάνουμε αυτό, το chatbot δεν θα θυμάται ποτέ το ιστορικό της συνομιλίας!

Το chatbot μας λειτουργεί τώρα. Απλά εκκινήστε το σενάριό σας (με "node my_script.js" για παράδειγμα) και θα πρέπει να δείτε ότι το chatbot σας είναι συνδεδεμένο στο διακομιστή Discord. Μπορείτε να αρχίσετε να του μιλάτε πραγματικά!

Αυτόματη αποκοπή ιστορικού

Το παράδειγμά μας λειτουργεί, αλλά υπάρχει μια αδυναμία: Τα μοντέλα GPT δεν μπορούν να χειριστούν περισσότερα από 2048 tokens ταυτόχρονα (2048 tokens είναι περίπου ίσα με 1700 λέξεις). Έτσι, κάποια στιγμή το ιστορικό του chatbot σας μπορεί να γίνει πολύ μεγάλο και θα χρειαστεί να το περικόψετε! Ακολουθεί ο τρόπος με τον οποίο μπορείτε να το κάνετε αυτό:

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

Όπως μπορείτε να δείτε, απλά βεβαιωνόμαστε ότι το ιστορικό δεν είναι πολύ μεγάλο, και όταν είναι, αφαιρούμε τα παλαιότερα στοιχεία!

Στην πράξη, αυτό σπάνια αποτελεί πρόβλημα, επειδή τα παλαιότερα στοιχεία της ιστορίας σπάνια έχουν σχέση με τη συζήτηση. Αν όμως είναι, μπορείτε επίσης να εφαρμόσετε μια πιο προηγμένη στρατηγική που διατηρεί και αφαιρεί επιλεκτικά ορισμένα στοιχεία με βάση τη σχετικότητά τους.

Συμπέρασμα

Η δημιουργία ενός προηγμένου chatbot δεν ήταν ποτέ τόσο εύκολη χάρη στα μοντέλα Discord και GPT.

Η κύρια πρόκληση είναι ότι αυτά τα σύγχρονα μοντέλα τεχνητής νοημοσύνης είναι όλο και πιο δύσκολο να χρησιμοποιηθούν λόγω του τεράστιου μεγέθους τους, γι' αυτό και μπορεί να είναι πολύ πιο απλό και πολύ πιο αποδοτικό να χρησιμοποιήσετε ένα API όπως το NLP Cloud.

Αν θέλετε να υλοποιήσετε το δικό σας chatbot αλλά δεν είστε σίγουροι για το πώς να το χειριστείτε, μη διστάσετε να επικοινωνήσετε μαζί μας!

Julien Salinas
CTO στο NLP Cloud