L’intelligence artificielle est en plein boom en ce moment mais il peut être difficile d’entrainer sa propre IA. Des sociétés comme OpenAI ont publié des APIs pour interagir avec des réseaux de neurone pré-entrainés.
Nous allons nous amuser avec OpenAI pour faire un bot Discord.
Pour créer notre IA, nous allons avoir besoin d’un compte OpenAI et d’un compte Discord.
A la création du compte, OpenAI vous crédite de 18$ valable 3 mois. Il n’y a malheureusement pas de free tiers mais cela sera suffisant pour s’amuser un peu.
Pour créer un serveur, il vous suffit de cliquer sur le ”+” dans le menu de gauche.
Rendez-vous sur https://discord.com/developers/applications et cliquez sur le bouton “New application” en haut à droite.
Il ne vous reste plus qu’à lui donner un nom comme “OpenAIBot” et appuyer sur le bouton “Create”.
Une fois l’application créée, dirigez-vous vers la section “Bot”, puis appuyez sur “Add Bot”.
Une fois votre bot créé, il va falloir lui donner un accès. Pour cela, cliquez sur “Reset Token”. Copiez-collez dans un fichier le token.
Le token n’apparaitra qu’une fois. Si vous ne l’avez pas sauvegardé, cliquez de nouveau sur “Reset Token”.
Il va falloir maintenant donner des accès au bot. Pour cela, il existe un générateur d’URL OAuth2 qui va nous aider à configurer la bonne URL à appeler. Pour l’utiliser, cliquez sur “OAuth2”, puis “URL Generator”.
Sélectionnez le scope “bot” dans la première partie.
Puis les droits “Read Messages/View Channels” et “Send Messages” dans la deuxième partie. Copiez ensuite l’URL générée et collez là dans un nouvel onglet. Sélectionnez enfin le serveur que vous avez créé.
De retour sur votre chat, vous allez trouver votre bot.
Créez un nouveau dossier et nommez-le par exemple openaibot.
Ouvrez un terminal, placez vous dans le dossier et initialisez un projet NodeJS :
$ npm init -y
En allant dans le dossier vous trouverez un fichier package.json
.
Installez maintenant la dépendance à Discord.
$ npm install discord.js
Ce projet est compatible avec DiscordJS 13. Si dans le fichier package.json vous voyez la version 14.x.x alors veuillez la descendre en 13.10.3.
Installez ensuite dotenv qui va nous permettre de séparer notre token d’accès de notre code.
$ npm install dotenv
Créer un fichier .env
à la racine du projet. Et copier coller le contenu suivant en remplaçant par votre token obtenu plus haut :
DISCORD_TOKEN=<token>
Il ne faut surtout pas commit votre fichier .env.
Créer un fichier openaibot.js
. Et copier/coller le code suivant :
const { Client, Intents } = require("discord.js");const client = new Client({intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES]});require("dotenv").config();const TOKEN = process.env.DISCORD_TOKEN;client.on("ready", () => {console.log("I am ready!");});client.on("messageCreate", (message) => {if (message.content.startsWith("!ping")) {message.channel.send("pong!");}});client.login(TOKEN);
Exécuter la commande ci-dessous dans votre terminal. Le bot devrait maintenant apparaître comme disponible.
$ npm start
Si vous envoyez la commande !ping
dans le channel Discord, alors le bot vous répondra pong!
.
Maintenant que nous avons un bot qui fonctionne nous allons lui donner un peu d’intelligence grâce à OpenAI.
Nous allons commencer par créer un token d’accès en allant sur https://beta.openai.com/account/api-keys. Il devrait déjà y avoir un token d’enregistrer. Si c’est le cas cliquez sur “Reveal” sinon créez en un. Comme tout à l’heure mettez le token de côté.
Retournez sur votre projet et installez la librairie openai.
$ npm install openai
Créez ensuite un fichier ai.js
à la racine de votre projet et copiez-collez le code ci-dessous :
const {Configuration, OpenAIApi} = require("openai");require("dotenv").config();const TOKEN = process.env.OPENAI_TOKEN;const configuration = new Configuration({apiKey: TOKEN});const openai = new OpenAIApi(configuration);async function ask(prompt) {const response = await openai.createCompletion({model: "text-davinci-002",max_tokens: 256,prompt});return response.data.choices[0].text;}module.exports = {ask}
model
permet de choisir le réseau de neurone à appliquer. Ici nous prenons le plus performant et donc le plus cher.max_tokens
permet d’avoir des réponses de 256 tokens. A peu de chose prêt 1 token = 1 mot.prompt
la chaîne de caractère à interpréterN’oubliez pas de mettre le token OpenAI dans le fichier .env
que nous avons créé plus tôt.
DISCORD_TOKEN=<token>OPENAI_TOKEN=<token>
Il ne nous reste plus qu’à modifier le fichier bot.js
pour plugger la demande à OpenAI.
const { Client, Intents } = require("discord.js");const client = new Client({intents: [Intents.FLAGS.GUILDS, Intents.FLAGS.GUILD_MESSAGES]});const { ask } = require("./ai.js");require("dotenv").config();const TOKEN = process.env.DISCORD_TOKEN;client.on("ready", () => {console.log("I am ready!");});client.on("messageCreate", async (message) => {if (message.content.startsWith("!ask")) {const prompt = message.content.substring(message.content.indexOf(' ') + 1);const answer = await ask(prompt);message.channel.send(answer);}});client.login(TOKEN);
Nous avons rajouté la dépendance à ai.js
et modifier un peu le contenu de lecture du message pour plugger la demander à OpenID.
Lancez votre bot via la commande suivante :
$ npm start
Puis dans votre channel, vous pouvez poser des questions à votre bot.
Voici quelques exemples.
!ask Crée une table des planètes du système solaire et de leur distance en unité astronomiqueMercure : 0,4 unité astronomiqueVénus : 0,7 unité astronomiqueTerre : 1 unité astronomiqueMars : 1,3 unité astronomiqueJupiter : 5,2 unité astronomiqueSaturne : 9,5 unité astronomiqueUranus : 19,2 unité astronomiqueNeptune : 30,1 unité astronomiquePluton : 39,5 unité astronomique
!ask Create a table of programming languages and their usage on githubPython - 10,000,000+Java - 9,000,000+JavaScript - 8,000,000+Ruby - 5,000,000+C++ - 3,000,000+PHP - 2,000,000+Objective C - 1,000,000+C# - 1,000,000+Shell - 1,000,000+C - 800,000+Perl - 600,000+
!ask What are trending topics in UI/UX?1. The importance of designing for mobile first2. The trend toward more minimalistic designs3. The increasing use of emerging technologies such as Augmented Reality and Virtual Reality in UI/UX design
!ask Could you write a helloworld in Java?class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
!ask Could you write a css animation for me?Here's a simple CSS animation that shows a square moving from left to right:@keyframes move-right {from {transform: translateX(0);}to {transform: translateX(100px);}}.moving-square {width: 100px;height: 100px;background-color: red;animation: move-right 2s linear;}
Nous n’avons vu qu’un cas d’utilisation d’OpenAI parmi beaucoup d’autres. N’hésitez pas à jeter un œil sur cette page.
Vous trouverez les sources de cet article sur Github.
Je reste à l’affût des dernières tendances et l’IA en fait partie.
Si vous avez un projet autour des chatbot et de l’IA, n’hésitez pas à me contacter.