Cursus
Dans cet article, je vais vous expliquer pas à pas comment utiliser Flowise pour construire un agent d'intelligence artificielle capable de répondre à des questions basées sur un ensemble de données CSV.
Flowise est un outil pratique pour ceux qui veulent construire des agents d'intelligence artificielle sans s'empêtrer dans un codage complexe. Flowise a une approche "low-code" et nous permet de nous concentrer sur la tâche à accomplir, plutôt que sur les détails techniques.
Récemment, j'ai constaté une augmentation du nombre d'outils conçus pour créer des agents d'intelligence artificielle. Ces outils sont devenus plus accessibles et plus conviviaux, permettant à chacun de créer des systèmes intelligents sans avoir besoin de compétences techniques approfondies. Si vous souhaitez en savoir plus sur ces outils, consultez également ces tutoriels :
- n8n : Un guide avec des exemples pratiques
- Langflow : Un guide avec un projet de démonstration
- Dify AI : Un guide avec un projet de démonstration
Qu'est-ce que Flowise ?
Flowise est un outil conçu pour nous aider à créer des agents d'intelligence artificielle à l'aide d'une interface simple de type "glisser-déposer". Il fonctionne en nous permettant de connecter différents blocs, qui représentent diverses fonctions, pour construire un flux de travail personnalisé. Chaque bloc peut être configuré pour effectuer une action spécifique.
Par exemple, il existe des blocs connus sous le nom de blocs LLM qui sont utilisés pour envoyer un message à un grand modèle linguistique. Il existe également des blocs de fonctions qui nous permettent d'exécuter des fonctions JavaScript personnalisées, ce qui permet des opérations encore plus personnalisées.
En reliant ces blocs entre eux, l'information circule d'un bloc à l'autre, traitant et transformant les données étape par étape. Cette approche modulaire facilite la construction d'agents d'intelligence artificielle sans connaissances approfondies en programmation, puisque nous pouvons nous concentrer sur la conception du flux de travail et la configuration des actions nécessaires.
Construire un agent d'analyse de données avec Flowise
Décortiquons le processus de création d'un agent IA d'analyse de données à l'aide de Flowise. Ce guide vous permettra de vous inscrire à Flowise, de créer un flux de travail personnalisé et d'utiliser différents blocs pour créer un agent interactif capable d'analyser des ensembles de données.
Étape 1 : Créer un compte sur Flowise
Commencez par visiter cette page d'inscription de Flowise et créez un compte. Remplissez les informations demandées et suivez les instructions envoyées à votre adresse électronique pour vérifier et activer votre compte.
Étape 2 : Configuration de la base de données
Maintenant que notre compte Flowise est prêt, il est temps de configurer la base de données que nous allons utiliser. Nous avons besoin d'une base de données pour stocker les données que nous voulons analyser.
Nous utiliserons SingleStore, un fournisseur de base de données SQL populaire et convivial, pour gérer nos données. Passons à l'étape suivante :
- Commencez par vous rendre sur le site web SingleStore.
- Créez un nouveau compte sur SingleStore.
- Avec un compte SingleStore actif, l'étape suivante consiste à télécharger le jeu de données avec lequel nous allons travailler. Pour cet exemple, nous utilisons un ensemble de données axé sur les habitudes des étudiants en matière de médias sociaux, que vous pouvez trouver sur le site Kaggle. Veillez à télécharger le fichier du jeu de données à partir de Kaggle et à le charger sur SingleStore.
- Une fois le jeu de données téléchargé, SingleStore génère automatiquement un tableau de base de données à partir de celui-ci. Ce tableau constituera la base de notre analyse de données, rendant les informations prêtes pour que notre agent IA Flowise puisse interagir avec elles.
Étape 3 : Naviguez jusqu'à la section des flux de conversation
Une fois connecté, allez dans le tableau de bord et trouvez la section "Chatflows". Cliquez sur "Ajouter nouveau" pour commencer à créer un nouveau flux de travail.
Étape 4 : Créez une fonction personnalisée pour charger le tableau Informations
Cette étape consiste à écrire une fonction personnalisée pour récupérer des informations sur le tableau, telles que sa description et le nom de ses colonnes. Ces données sont essentielles pour permettre à notre agent d'intelligence artificielle de comprendre la structure de l'ensemble de données qu'il va interroger.
- Créez un bloc fonctionnel personnalisé.
- Collez le code suivant dans l'éditeur de blocs fonctionnels :
const mysql = require('mysql2/promise');
const tableName = $tableName;
const tableDescription = $tableDescription;
const connectionUrl = "<PASTE_YOUR_CONNECTION_STRING_HERE>"
async function main() {
try {
const pool = mysql.createPool(connectionUrl);
const q =
DESCRIBE ${tableName};
;
const [rows] = await pool.query(q);
const fields = rows.map((row) => ${row.Field} of type ${row.Type}).join("\n");
const tableInformation = Table name: ${tableName}\nTable description:\n${tableDescription.trim()}\nColumns:\n${fields.trim()};
return tableInformation;
} catch(error) {
return String(error);
}
}
return main();
Au début de la fonction, nous devons définir la valeur connectionUrl
. Vous le trouverez sur SingleStore, dans l'onglet Déploiements.
La chaîne de connexion ressemble à ceci :
françois-19ecc:<françois-19ecc Password>@svc-3482219c-a389-4079-b18b-d50662524e8a-shared-dml.aws-virginia-6.svc.SingleStore.com:3333/db_franois_88ec0
La première partie, françois-19ecc
dans mon cas, est le nom d'utilisateur. Juste après, il y a un espace réservé pour le mot de passe, , que nous devons remplacer.
Cette fonction se connecte à la base de données SingleStore et obtient les informations sur les colonnes du tableau. Il dispose de deux entrées :
tableName
: Le nom du tableautableDescription
: La description du tableau.
Celles-ci doivent être configurées en cliquant sur le bouton "Variables d'entrée" dans le nœud du code personnalisé. Les variables sont accessibles dans le code en faisant précéder leur nom d'un $
.
Dans mon cas, le tableau a été nommé dataset
lors de sa création sur SingleStore. Vous devez utiliser le nom défini lorsque vous avez téléchargé le fichier CSV.
Étape 5 : Créer un nœud de modèle d'invite
C'est dans ce nœud que nous élaborons les questions qui guident notre agent d'intelligence artificielle. Connectez ce nœud à votre fonction personnalisée.
- Créez un nœud de modèle d'invite.
- Insérez l'invite suivante :
Based on the SQL table information and the user's questions, return a SQL query that answers that question.
TABLE INFORMATION: {tableInformation}
QUESTION: {question}
L'invite comporte deux espaces réservés : {tableInformation}
et {question}
. L'adresse question
est l'invite soumise par l'utilisateur, tandis que l'adresse tableInformation
est la sortie de la fonction que nous avons définie à l'étape précédente.
Ces valeurs de remplacement doivent être configurées en cliquant sur le bouton "Format Prompt Values" dans le nœud du modèle d'invite.
Étape 6 : Lien vers un bloc de la chaîne LLM
Nous connectons maintenant le nœud du modèle d'invite à un bloc de chaîne LLM, qui interprétera l'invite et générera une requête SQL à partir de celle-ci. Voici les étapes à suivre :
- Ajoutez un bloc de chaîne LLM.
- Incluez un bloc de modèle configuré pour utiliser OpenAI, et connectez-le au bloc de chaîne LLM sur l'entrée "Modèle de langue".
- Pour configurer le modèle OpenAI, vous devez créer une clé API OpenAI. Si vous n'en avez pas, vous pouvez en créer un ici.
- Connectez le bloc du modèle d'invite à l'entrée "Prompt".
Étape 7 : Utiliser un bloc de variables
Pour stocker la requête SQL générée en vue d'une utilisation ultérieure, créez un bloc de variables et reliez-le à la sortie du bloc de chaîne LLM.
Étape 8 : Exécuter la requête SQL
Envoyez la requête SQL à un nouveau bloc de code personnalisé pour l'exécuter dans la base de données.
- Créez un autre bloc de code personnalisé.
- Saisissez le code suivant :
const mysql = require('mysql2/promise');
const connectionUrl = "<PASTE_THE_SAME_URL_USED_BEFORE>";
function formatQuery() {
// This function is used to clean the query provided by ChatGPT
// by removing markdown quotes
const q = $query;
let lines = q.trim().split(/\r\n|\r|\n/);
if(lines[0].startsWith("")) {
lines = lines.slice(1, lines.length - 1);
}
return lines.join("\n").trim()
}
const q = formatQuery();
try {
const pool = mysql.createPool(connectionUrl);
const [rows] = await pool.query(q);
return rows;
} catch(error) {
return Query: ${q}\nError:${String(error)}`
}
N'oubliez pas de définir la valeur connectionUrl
. C'est le même que celui que nous utilisions auparavant.
Cette fonction a une entrée, qui est la requête que nous voulons exécuter, et est accessible dans le code à l'aide de $query
.
Étape 9 : Créer un autre modèle d'invite
Ce modèle est utilisé pour formater la réponse que l'agent d'intelligence artificielle présentera à l'utilisateur en fonction des résultats de la requête.
- Créez un nouveau modèle d'invite.
- Utilisez cette invite :
Based on the question and the query result, provide an answer to the user's question. Always show the query to the user.
QUERY: {query}
QUERY RESULT: {queryResult}
QUESTION: {question}
Cette invite comporte trois espaces réservés :
query
: La requête SQL générée par le LLM, obtenue en connectant le nœud variable.queryResult
: Le résultat de la requête, qui est calculé par le nœud de fonction personnalisé précédent.question
: L'invite initiale de l'utilisateur.
Étape 10 : Dernier bloc de la chaîne LLM
Enfin, connectez ce modèle d'invite à un nouveau bloc de la chaîne LLM, qui utilisera l'invite pour formuler la réponse. Vous pouvez le connecter au même bloc de modèle OpenAI que celui utilisé précédemment.
Voici le flux final de l'agent :
Une fois ces étapes franchies, notre agent IA est prêt. Il peut accepter des questions, générer des requêtes SQL pour extraire les données pertinentes et fournir des réponses claires et concises.
Chatter avec l'agent analyste de données
L'agent est maintenant prêt à être utilisé. Pour discuter avec lui, cliquez sur le bouton violet de discussion dans le coin supérieur droit :
Testons-le en demandant combien de réponses l'enquête a obtenues :
Notez que l'agent inclut la requête dans la réponse en raison de la manière dont la dernière invite a été conçue. Posons quelques questions statistiques sur les données :
Voici un autre exemple :
Mon avis sur Flowise
Après avoir expérimenté plusieurs outils de construction d'agents d'IA, mon expérience avec Flowise s'est révélée quelque peu frustrante. Un problème récurrent auquel j'ai été confronté était la suppression accidentelle de certaines configurations variables, ce qui entraînait un comportement erratique de l'agent sans que l'on puisse en expliquer clairement la raison. Cela rendait souvent le dépannage fastidieux.
En outre, Flowise n'a pas de point de départ clair pour ses flux d'agents, ce qui rend difficile le suivi et la compréhension du fonctionnement de l'agent. Cela peut être particulièrement déconcertant pour ceux qui n'ont jamais construit de systèmes d'intelligence artificielle. En outre, Flowise ne permet pas de visualiser facilement les résultats intermédiaires ou de tester les nœuds de manière isolée. Il est donc difficile d'identifier les problèmes ou d'affiner le flux de travail de manière efficace.
J'ai également trouvé qu'il était difficile de voir les configurations des nœuds d'un seul coup d'œil. Par exemple, les nœuds de code personnalisés que nous avons utilisés définissent des variables d'entrée, mais cela n'est pas visible. Nous devons cliquer sur cette section du nœud pour la voir. Il est donc difficile de comprendre le flux simplement en le regardant.
Conclusion
Bien que Flowise offre une interface prometteuse pour la création d'agents d'intelligence artificielle, elle présente quelques problèmes d'ergonomie qui la rendent plus difficile à utiliser que d'autres outils similaires, en particulier pour ceux qui recherchent une expérience plus fluide et plus intuitive. Malgré ces difficultés, le concept de Flowise a du potentiel et, moyennant quelques améliorations, il pourrait devenir un excellent outil pour la création de solutions d'IA.