Dank großartiger KI-Modelle wie GPT-3, GPT-J und GPT-NeoX ist es sehr einfach, einen Chatbot auf einem Discord-Server zu erstellen. In diesem Artikel zeigen wir Ihnen, wie Sie Ihren eigenen Chatbot in Node.js programmieren können, indem Sie GPT-J und GPT-NeoX über die NLP Cloud API verwenden.

Discord ist eine weit verbreitete Messaging-Plattform. Es kommt immer häufiger vor, dass Menschen ihren eigenen Discord-Server für ihr Projekt einrichten, damit sich eine Gemeinschaft leicht zusammenfinden kann. Viele Unternehmen haben sogar ihren eigenen Discord-Server eingerichtet, um ihre eigene Benutzergemeinschaft zu fördern.
Discord kann entweder selbst gehostet oder über die Discord-Webanwendung verwendet werden. Das Tolle an Discord ist, dass es eine umfangreiche API hat, um mit dem Server zu interagieren, und es ist sehr einfach, einen Chatbot zu erstellen, der mit Nutzern auf Discord interagiert.
Viele Leute erstellen Chatbots auf Discord, damit Nutzer mit einer KI über viele Dinge diskutieren können. Es ist sehr einfach, einen Chatbot in Ihren Discord-Server zu integrieren. Schauen wir uns an, wie man das macht!
In den letzten 2 Jahren wurden mehrere großartige KI-Modelle veröffentlicht: GPT-3, GPT-J, und GPT-NeoX. Diese Modelle sind sehr beeindruckend und eignen sich besonders gut für den Umgang mit konversationeller KI (d. h. Chatbots).
Mit diesen Modellen kann man über buchstäblich alles diskutieren, und es ist ziemlich einfach, die Modelle an eine bestimmte Situation anzupassen. Sie können Ihren GPT-basierten Chatbot beispielsweise so konfigurieren, dass er einfühlsam, sarkastisch oder sogar gut bei der Beantwortung spezifischer Fragen zu Ihrer eigenen Branche (Medizin, Recht, Marketing usw.) ist.
Das einzige Problem ist, dass diese Modelle eine Menge Rechenleistung erfordern, so dass es sich nur wenige Leute leisten können, sie auf ihrem eigenen Server einzusetzen. NLP Cloud bietet sowohl GPT-J als auch GPT-NeoX über eine API an, daher werden wir diese Modelle im folgenden Beispiel über die NLP Cloud API verwenden.
Nehmen wir an, Sie haben ein Konto auf Discord.com erstellt. Gehen Sie zum Entwicklerportal: hier. Wählen Sie "Neue Anwendung", benennen Sie Ihre Anwendung und erstellen Sie sie:

Klicken Sie nun auf "Bot hinzufügen", und rufen Sie Ihr Bot-Token ab.
Letzter Schritt: Verbinden Sie Ihren Bot mit Ihrem Discord-Server. Klicken Sie dazu zunächst auf das Menü "OAuth2" und rufen Sie Ihre Client-ID ab:

Erlauben Sie dann Ihrem Bot, auf Ihren Server zuzugreifen, indem Sie die folgende URL aufrufen: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (ersetzen Sie CLIENT_ID durch Ihre eigene, zuvor ermittelte Client-ID).
Auf der Discord-Seite ist alles in Ordnung. Jetzt können wir ein NLP Cloud API-Token abrufen!
Nehmen wir an, Sie haben ein Konto bei NLP Cloud erstellt. Rufen Sie einfach Ihr API-Token in Ihrem Dashboard ab:

Dann abonnieren Sie den Pay-as-you-go-Plan, der Ihnen Zugang zu den Modellen GPT-J und GPT-NeoX verschafft (die ersten 100k Token sind kostenlos, was Ihre Tests erleichtert).

Sie können jetzt mit der Programmierung Ihres Node.js-Bots beginnen!
Sowohl Discord als auch NLP Cloud haben Node.js-Clients, so dass die Entwicklung sehr einfach sein wird.
Hier ist eine erste Version:
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']}`});
})();
});
Wie Sie sehen können, rufen wir zunächst die Discord- und NLP-Cloud-Token aus Umgebungsvariablen ab. Exportieren Sie also zunächst Ihre Token in 2 Umgebungsvariablen namens "NLPCLOUD_TOKEN" und "DISCORD_BOT_TOKEN". Sie können Ihr Token auch einfach per Copy-Paste direkt in den Code während Ihrer Tests einfügen, wenn Sie dies bevorzugen.
Wir verwenden das Fast-GPT-J-Modell von NLP Cloud - eine schnellere Implementierung von GPT-J - was für Chatbots interessant ist, da wir in der Regel eine möglichst kurze Antwortzeit wünschen. Wenn Sie GPT-NeoX 20B verwenden möchten, verwenden Sie einfach "gpt-neox-20b" anstelle von "fast-gpt-j".
Die NLP-Cloud-Funktion "chatbot()" macht es einfach, einen Chatbot auf der Grundlage eines GPT-Modells zu handhaben, ohne sich mit komplexen Parametern, Prompting, "few-shot learning" usw. herumzuschlagen. Der einzige Trick ist, dass wir nach jeder Chatbot-Antwort die Antwort im Speicher behalten und sie für die folgenden Anfragen zur Historie hinzufügen müssen. Wenn wir das nicht tun, wird sich der Chatbot nie an den Verlauf der Unterhaltung erinnern!
Unser Chatbot funktioniert jetzt. Starten Sie einfach Ihr Skript (zum Beispiel mit "node my_script.js") und Sie sollten sehen, dass Ihr Chatbot auf Ihrem Discord-Server online ist. Sie können nun wirklich mit ihm sprechen!
Unser Beispiel funktioniert, aber es gibt eine Schwachstelle: GPT-Modelle können nicht mehr als 2048 Token gleichzeitig verarbeiten (2048 Token entsprechen in etwa 1700 Wörtern). Irgendwann könnte Ihr Chatbot-Verlauf also zu groß werden und Sie müssen ihn kürzen! Hier ist, wie Sie das tun können:
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);
Wie Sie sehen können, stellen wir einfach sicher, dass die Historie nicht zu groß ist, und wenn sie es ist, entfernen wir die ältesten Elemente!
In der Praxis ist dies selten ein Problem, da die ältesten Elemente in der Historie selten relevant für die Unterhaltung sind. Ist dies jedoch der Fall, können Sie auch eine fortschrittlichere Strategie anwenden, bei der einige Elemente je nach ihrer Relevanz selektiv beibehalten oder entfernt werden.
Der Aufbau eines fortschrittlichen Chatbots war dank der Discord- und GPT-Modelle noch nie so einfach.
Die größte Herausforderung besteht darin, dass diese modernen KI-Modelle aufgrund ihres enormen Umfangs immer schwieriger zu verwenden sind. Deshalb kann es viel einfacher und kostengünstiger sein, stattdessen eine API wie NLP Cloud zu verwenden.
Wenn Sie Ihren eigenen Chatbot implementieren möchten, aber nicht sicher sind, wie Sie damit umgehen sollen, zögern Sie bitte nicht, uns zu kontaktieren!
Julien Salinas
CTO bei NLP Cloud