Zbudowanie chatbota na serwerze Discord jest bardzo proste dzięki świetnym modelom sztucznej inteligencji, takim jak GPT-3, GPT-J i GPT-NeoX. W tym artykule pokażemy, jak zbudować własnego bota konwersacyjnego w Node.js, używając GPT-J i GPT-NeoX poprzez API NLP Cloud.

Discord to szeroko rozpowszechniona platforma komunikacyjna. Coraz częściej zdarza się, że ludzie tworzą własne serwery Discord dla swoich projektów, aby społeczność mogła się łatwo zebrać. Wiele firm stworzyło własny serwer Discord, aby rozwijać swoją społeczność użytkowników.
Discord może być utrzymywany samodzielnie lub używany za pośrednictwem aplikacji internetowej Discord. Discord ma rozbudowany interfejs API do interakcji z serwerem, dzięki czemu bardzo łatwo jest stworzyć chatbota, który będzie wchodził w interakcje z użytkownikami Discorda.
Wiele osób tworzy chatboty na Discordzie, aby użytkownicy mogli dyskutować ze sztuczną inteligencją na różne tematy. Bardzo łatwo jest zintegrować chatbota z serwerem Discord. Zobaczmy, jak to zrobić!
W ciągu ostatnich dwóch lat pojawiło się kilka świetnych modeli SI: GPT-3, GPT-J i GPT-NeoX. Modele te są bardzo imponujące i szczególnie dobrze radzą sobie z konwersacyjną sztuczną inteligencją (np. chatbotami).
Za pomocą tych modeli można prowadzić wspaniałe dyskusje dosłownie o wszystkim, a dostosowanie ich do konkretnej sytuacji jest dość łatwe. Na przykład możesz skonfigurować swojego chatbota opartego na GPT tak, aby był empatyczny, sarkastyczny lub nawet dobrze odpowiadał na konkretne pytania dotyczące Twojej branży (medycznej, prawniczej, marketingowej itp.).
Jedynym problemem jest to, że modele te wymagają dużej mocy obliczeniowej, więc niewiele osób może sobie pozwolić na ich wdrożenie na własnym serwerze. NLP Cloud oferuje GPT-J i GPT-NeoX poprzez API, więc w poniższym przykładzie użyjemy tych modeli poprzez API NLP Cloud.
Załóżmy, że utworzyłeś konto na Discord.com. Przejdź do portalu deweloperskiego: tutaj. Wybierz opcję "Nowa aplikacja", nadaj nazwę aplikacji i utwórz ją:

Następnie kliknij przycisk "Dodaj bota" i pobierz token bota.
Ostatni krok: połącz swojego bota z serwerem Discord. Aby to zrobić, najpierw kliknij menu "OAuth2" i pobierz swój identyfikator klienta:

Następnie zezwól botowi na dostęp do swojego serwera, odwiedzając następujący adres URL: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (zastąp identyfikator klienta własnym identyfikatorem klienta pobranym wcześniej).
Po stronie Discorda wszystko jest w porządku. Teraz pobierzmy token API chmury NLP!
Załóżmy, że założyłeś konto w Chmurze NLP. Po prostu pobierz swój token API z pulpitu nawigacyjnego:

Następnie zapisz się do planu pay-as-you-go, który da Ci dostęp do modeli GPT-J i GPT-NeoX (pierwsze 100k tokenów jest darmowe, co ułatwi Ci testy).

Teraz możesz zacząć kodować swojego bota w Node.js!
Zarówno Discord, jak i NLP Cloud mają klientów Node.js, więc ich rozwój będzie bardzo prosty.
Oto pierwsza wersja:
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']}`});
})();
});
Jak widać, najpierw pobieramy tokeny Discord i NLP Cloud ze zmiennych środowiskowych. Dlatego najpierw wyeksportuj swoje tokeny do dwóch zmiennych środowiskowych o nazwach "NLPCLOUD_TOKEN" i "DISCORD_BOT_TOKEN". Jeśli wolisz, możesz też po prostu skopiować i wkleić token bezpośrednio do kodu podczas testów.
Używamy modelu Fast GPT-J firmy NLP Cloud - szybszej implementacji GPT-J - co jest interesujące dla chatbotów, ponieważ zazwyczaj chcemy, aby czas odpowiedzi był jak najkrótszy. Jeśli chcesz użyć GPT-NeoX 20B, po prostu użyj "gpt-neox-20b" zamiast "fast-gpt-j".
Funkcja NLP Cloud "chatbot()" ułatwia obsługę chatbota opartego na modelu GPT, bez konieczności zaprzątania sobie głowy skomplikowanymi parametrami, podpowiadaniem, uczeniem się w kilku ujęciach itp. Jedyną sztuczką jest to, że po każdej odpowiedzi chatbota musimy zachować odpowiedź w pamięci i dodać ją do historii dla kolejnych zapytań. Jeśli tego nie zrobimy, chatbot nigdy nie będzie pamiętał historii rozmowy!
Nasz chatbot już działa. Po prostu uruchom swój skrypt (na przykład za pomocą "node my_script.js") i powinieneś zobaczyć, że Twój chatbot jest online na Twoim serwerze Discord. Możesz zacząć rozmawiać z nim naprawdę!
Nasz przykład działa, ale ma pewien słaby punkt: Modele GPT nie są w stanie obsłużyć więcej niż 2048 tokenów jednocześnie (2048 tokenów to mniej więcej tyle, co 1700 słów). Tak więc w pewnym momencie historia Twojego chatbota może stać się zbyt duża i będziesz musiał ją skrócić! Oto, jak można to zrobić:
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);
Jak widać, dbamy po prostu o to, aby historia nie była zbyt duża, a gdy jest, usuwamy najstarsze elementy!
W praktyce rzadko stanowi to problem, ponieważ najstarsze elementy w historii rzadko są istotne dla konwersacji. Jeśli jednak są, można zastosować bardziej zaawansowaną strategię, która polega na selektywnym zachowywaniu i usuwaniu niektórych elementów na podstawie ich istotności.
Dzięki Discordowi i modelom GPT zbudowanie zaawansowanego chatbota jeszcze nigdy nie było tak proste.
Głównym wyzwaniem jest to, że te nowoczesne modele sztucznej inteligencji są coraz trudniejsze w użyciu ze względu na ich ogromne rozmiary, dlatego też o wiele prostsze i bardziej opłacalne może być korzystanie z API, takiego jak NLP Cloud.
Jeśli chciałbyś wdrożyć własnego chatbota, ale nie jesteś pewien, jak się za to zabrać, skontaktuj się z nami!
Julien Salinas
CTO w NLP Cloud