Máte potíže s umělou inteligencí nebo s vývojem celého balíku? Naši odborníci jsou tu pro vás: poradenství na míru, technická integrace a další. Obraťte se na [email protected].

Vytvoření chatbota GPT-J/GPT-NeoX Discord pomocí NLP Cloud

Vytvořit chatbota na serveru Discord je velmi snadné díky skvělým modelům umělé inteligence, jako jsou GPT-3, GPT-J a GPT-NeoX. V tomto článku vám ukážeme, jak si nakódovat vlastního konverzačního bota v Node.js pomocí modelů GPT-J a GPT-NeoX prostřednictvím rozhraní NLP Cloud API.

Discord chatbot

Chatbot Discordu?

Discord je široce rozšířená platforma pro zasílání zpráv. Stále častěji se setkáváme s tím, že si lidé pro svůj projekt vytvářejí vlastní server Discord, aby se komunita mohla snadno scházet. Mnoho společností si skutečně vytvořilo vlastní server Discord, aby podpořily vlastní komunitu uživatelů.

Službu Discord můžete hostovat sami nebo ji používat prostřednictvím webové aplikace Discord. Skvělou vlastností služby Discord je, že má rozsáhlé rozhraní API pro interakci se serverem a je velmi snadné vytvořit chatbota, který bude komunikovat s uživateli na službě Discord.

Mnoho lidí vytváří chatboty na službě Discord, aby uživatelé mohli s umělou inteligencí diskutovat o mnoha věcech. Integrace chatbota do serveru Discord je velmi snadná. Podívejme se, jak na to!

GPT-3, GPT-J a GPT-NeoX

Za poslední dva roky bylo vydáno několik skvělých modelů AI: GPT-3, GPT-J a GPT-NeoX. Tyto modely jsou velmi působivé a zvláště dobře si poradí s konverzační AI (tj. chatboty).

Pomocí těchto modelů můžete vést skvělou diskusi doslova o čemkoli a je poměrně snadné je přizpůsobit konkrétní situaci. Chatbota založeného na GPT můžete například nakonfigurovat tak, aby byl empatický, sarkastický nebo dokonce dobře odpovídal na konkrétní otázky týkající se vašeho oboru (lékařství, právo, marketing atd.).

Jediným problémem je, že tyto modely vyžadují velký výpočetní výkon, takže jen málokdo si je může dovolit nasadit na vlastní server. NLP Cloud nabízí GPT-J i GPT-NeoX prostřednictvím rozhraní API, takže v následujícím příkladu budeme tyto modely používat prostřednictvím rozhraní API NLP Cloud.

Získání klíčů API Discord a NLP Cloud

Předpokládejme, že jste si vytvořili účet na webu Discord.com. Přejděte na portál pro vývojáře: zde. Vyberte možnost "Nová aplikace", pojmenujte aplikaci a vytvořte ji:

New Discord Application

Nyní klikněte na tlačítko "Přidat bota" a načtěte svůj token bota.

Poslední krok: propojte svého bota se serverem Discord. Za tímto účelem nejprve klikněte na nabídku "OAuth2" a načtěte ID klienta:

Discord OAuth2

Poté povolte botovi přístup k serveru návštěvou následující adresy URL: https://discord.com/oauth2/authorize?scope=bot&permissions=8&client_id=CLIENT_ID (ID klienta nahraďte svým vlastním ID klienta získaným dříve).

Na straně Discordu je vše v pořádku. Nyní načteme token API služby NLP Cloud!

Předpokládejme, že jste si vytvořili účet na NLP Cloud. Jednoduše načtěte svůj token API na ovládacím panelu:

NLP Cloud Account

Poté si předplaťte tarif pay-as-you-go, který vám umožní přístup k modelům GPT-J a GPT-NeoX (prvních 100 tisíc tokenů je zdarma, což vám usnadní testování).

NLP Cloud Pay-as-you-go Plan

Nyní můžete začít kódovat svého Node.js bota!

Kódování serveru Node.js

Discord i NLP Cloud mají klienty Node.js, takže vývoj bude velmi snadný.

Zde je první verze:

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 vidíte, nejprve načteme token Discord a NLP Cloud z proměnných prostředí. Nejprve tedy exportujte tokeny do 2 proměnných prostředí s názvy "NLPCLOUD_TOKEN" a "DISCORD_BOT_TOKEN". Pokud chcete, můžete token také jednoduše zkopírovat a vložit přímo do kódu během testování.

Používáme model Fast GPT-J společnosti NLP Cloud - rychlejší implementaci GPT-J - což je pro chatboty zajímavé, protože obvykle chceme, aby doba odezvy byla co nejkratší. Pokud chcete použít GPT-NeoX 20B, jednoduše použijte "gpt-neox-20b" místo "fast-gpt-j".

Funkce "chatbot()" služby NLP Cloud usnadňuje práci s chatbotem založeným na modelu GPT, aniž byste se museli zabývat složitými parametry, výzvami, učením několika snímků atd. Jediný trik spočívá v tom, že po každé odpovědi chatbota musíme odpověď uchovat v paměti a přidat ji do historie pro následující požadavky. Pokud to neuděláme, chatbot si nikdy nebude pamatovat historii konverzace!

Náš chatbot nyní funguje. Jednoduše spusťte svůj skript (například pomocí "node my_script.js") a měli byste vidět, že je váš chatbot na serveru Discord online. Můžete s ním začít mluvit doopravdy!

Automatické zkracování historie

Náš příklad funguje, ale má slabinu: GPT modely nedokáží zpracovat více než 2048 tokenů najednou (2048 tokenů se víceméně rovná 1700 slovům). V určitém okamžiku se tedy může stát, že historie vašeho chatbota bude příliš velká a budete ji muset zkrátit! Zde je návod, jak to můžete udělat:

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 vidíte, jednoduše se ujistíme, že historie není příliš velká, a když je, odstraníme nejstarší prvky!

V praxi je to málokdy problém, protože nejstarší prvky v historii jsou pro konverzaci relevantní jen zřídka. Pokud však jsou, můžete zavést i pokročilejší strategii, která selektivně zachovává a odstraňuje některé prvky na základě jejich relevance.

Závěr

Vytvoření pokročilého chatbota nebylo díky modelům Discord a GPT nikdy tak snadné.

Hlavní problém spočívá v tom, že tyto moderní modely umělé inteligence jsou kvůli své obrovské velikosti stále obtížněji použitelné, a proto může být mnohem jednodušší a nákladově efektivnější použít místo nich rozhraní API, jako je NLP Cloud.

Pokud byste chtěli implementovat vlastního chatbota, ale nejste si jisti, jak na to, neváhejte nás kontaktovat!

Julien Salinas
Technický ředitel společnosti NLP Cloud