Nagyon könnyű chatbotot építeni egy Discord szerveren, köszönhetően a nagyszerű AI modelleknek, mint a GPT-3, GPT-J és GPT-NeoX. Ebben a cikkben megmutatjuk, hogyan kódolhatod saját társalgási botodat Node.js-ben a GPT-J és a GPT-NeoX használatával az NLP Cloud API-n keresztül.
A Discord egy széles körben elfogadott üzenetküldő platform. Egyre gyakoribb, hogy az emberek saját Discord-szervert hoznak létre a projektjükhöz, hogy a közösség könnyen össze tudjon jönni. Sok vállalat valóban létrehozta saját Discord-szerverét, hogy saját felhasználói közösségét ápolhassa.
A Discordot lehet saját tárhelyen vagy a Discord webes alkalmazáson keresztül használni. A Discord nagyszerű tulajdonsága, hogy kiterjedt API-val rendelkezik a szerverrel való interakcióhoz, és nagyon könnyű olyan chatbotot létrehozni, amely a Discordon keresztül interakcióba lép a felhasználókkal.
Sokan készítenek chatbotokat a Discordon, így a felhasználók sok mindenről beszélgethetnek egy mesterséges intelligenciával. Nagyon könnyű chatbotot integrálni a Discord szerverébe. Lássuk, hogyan kell ezt megtenni!
Az elmúlt 2 évben számos nagyszerű AI-modell jelent meg: GPT-3, GPT-J és GPT-NeoX. Ezek a modellek nagyon lenyűgözőek, és különösen jól kezelik a társalgási AI-t (azaz a chatbotokat).
Ezekkel a modellekkel szó szerint bármiről nagyszerű vitát lehet folytatni, és a modelleket viszonylag könnyen hozzá lehet igazítani egy adott helyzethez. Például beállíthatja a GPT-alapú chatbotját úgy, hogy empatikus, szarkasztikus vagy akár a saját iparágával kapcsolatos konkrét kérdésekre (orvosi, jogi, marketing stb.) jó választ adjon.
Az egyetlen probléma az, hogy ezek a modellek nagy számítási teljesítményt igényelnek, így kevesen engedhetik meg maguknak, hogy saját szerverükön telepítsék őket. Az NLP Cloud API-n keresztül kínálja a GPT-J és a GPT-NeoX modelleket, ezért a következő példában ezeket a modelleket az NLP Cloud API-n keresztül fogjuk használni.
Tegyük fel, hogy létrehoztál egy fiókot a Discord.com-on. Menj a fejlesztői portálra: itt. Válassza az "Új alkalmazás" lehetőséget, nevezze el az alkalmazást, és hozza létre:
Most kattintson a "Bot hozzáadása" gombra, és kérje le a bot tokenjét.
Utolsó lépés: kösd össze a botodat a Discord szerverrel. Ehhez először kattints az "OAuth2" menüre, és keresd meg az ügyfél azonosítódat:
Ezután engedélyezd a botodnak, hogy hozzáférjen a szerveredhez a következő URL-címre látogatva: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (a CLIENT_ID-t helyettesítsd a korábban megszerzett saját ügyfél-azonosítóddal).
Minden rendben van a Discord oldalán. Most kérjünk le egy NLP Cloud API tokent!
Tegyük fel, hogy létrehoztál egy fiókot az NLP Cloudon. Egyszerűen kérje le az API-tokenjét a műszerfalon:
Ezután iratkozzon fel a fizetős tervre, amely hozzáférést biztosít a GPT-J és GPT-NeoX modellekhez (az első 100 000 token ingyen van, ami megkönnyíti a teszteket).
Most már elkezdheted a Node.js botod kódolását!
Mind a Discord, mind az NLP Cloud rendelkezik Node.js kliensekkel, így a fejlesztés nagyon egyszerű lesz.
Íme egy első változat:
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']}`});
})();
});
Mint látható, először a Discord és az NLP Cloud tokent kérjük le a környezeti változókból. Tehát először exportáld a tokeneket 2 környezeti változóba, amelyek neve "NLPCLOUD_TOKEN" és "DISCORD_BOT_TOKEN". Ha úgy tetszik, a tesztek során a kódba közvetlenül is beillesztheted a tokenedet.
Az NLP Cloud Fast GPT-J modelljét használjuk - a GPT-J gyorsabb implementációját -, ami érdekes a chatbotok számára, mivel általában azt szeretnénk, ha a válaszidő a lehető legrövidebb lenne. Ha a GPT-NeoX 20B-t szeretné használni, egyszerűen használja a "gpt-neox-20b" szót a "fast-gpt-j" helyett.
Az NLP Cloud "chatbot()" funkciója megkönnyíti a GPT-modellre épülő chatbotok kezelését anélkül, hogy bonyolult paraméterekkel, kérdezéssel, néhány lépéses tanulással stb. kellene bajlódnunk. Az egyetlen trükk az, hogy minden chatbot-válasz után a választ a memóriában kell tartanunk, és a következő kérésekhez hozzá kell adnunk az előzményekhez. Ha ezt nem tesszük meg, a chatbot soha nem fog emlékezni a beszélgetés előzményeire!
A chatbotunk már működik. Egyszerűen indítsd el a szkriptedet (például a "node my_script.js" paranccsal), és látnod kell, hogy a chatbotod online van a Discord szerveren. Elkezdhetsz beszélgetni vele a valóságban!
A mi példánk működik, de van egy gyenge pontja: A GPT modellek nem tudnak egyszerre több mint 2048 tokent kezelni (2048 token nagyjából 1700 szónak felel meg). Tehát egy bizonyos ponton a chatbot előzményei túl nagyok lehetnek, és le kell majd csonkítani! Itt van, hogyan teheti ezt meg:
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);
Mint láthatod, egyszerűen csak arra ügyelünk, hogy a történelem ne legyen túl nagy, és ha az, akkor eltávolítjuk a legrégebbi elemeket!
A gyakorlatban ez ritkán jelent problémát, mert a történelem legrégebbi elemei ritkán relevánsak a beszélgetés szempontjából. De ha mégis azok, akkor egy fejlettebb stratégiát is megvalósíthat, amely szelektíven megtart és eltávolít egyes elemeket a relevanciájuk alapján.
A Discord és a GPT modelleknek köszönhetően soha nem volt még ilyen egyszerű egy fejlett chatbotot létrehozni.
A fő kihívás az, hogy ezeket a modern AI-modelleket egyre nehezebb használni a hatalmas méretük miatt, ezért sokkal egyszerűbb és sokkal költséghatékonyabb lehet egy olyan API-t használni, mint az NLP Cloud.
Ha szeretné megvalósítani saját chatbotját, de nem tudja, hogyan kell kezelni, forduljon hozzánk bizalommal!
Julien Salinas
CTO az NLP Cloud-nál