Cursus
Dify est une plateforme conviviale qui vous aide à créer des applications d'IA avec peu ou pas de code requis. Il fonctionne par glisser-déposer de blocs ayant différentes fonctions. Les informations circulent à travers les blocs et sont traitées et combinées pour générer des réponses.
Dans cet article, je vais vous expliquer les principes fondamentaux de Dify en vous guidant à travers les étapes de la création d'un agent de voyage IA.
Nous tenons nos lecteurs informés des dernières nouveautés en matière d'IA en leur envoyant The Median, notre lettre d'information gratuite du vendredi qui analyse les principaux sujets de la semaine. Abonnez-vous et restez à la pointe de la technologie en quelques minutes par semaine :
Qu'est-ce que Dify ?
Dify est une plateforme conçue pour simplifier le développement d'applications d'intelligence artificielle sans nécessiter de compétences approfondies en matière de codage. Il offre un environnement convivial, à code réduit, dans lequel les utilisateurs peuvent créer des applications en glissant et déposant différents composants.
Imaginez Dify comme une boîte à outils numérique remplie de blocs prêts à l'emploi qui peuvent être assemblés pour créer un logiciel fonctionnel. Cette approche rend la technologie plus accessible, permettant aux personnes ayant des connaissances limitées en programmation de donner vie à leurs idées.
Chaque type de bloc a des entrées et les transforme en différentes sorties, en fonction du type de bloc. L'information est transmise et transformée d'un bloc à l'autre pour produire le résultat final.
Démarrer avec Dify
Nous avons deux façons d'utiliser Dify :
- Configuration locale.
- Utilisation de la version cloud.
Dans ce tutoriel, nous utilisons la version cloud. La version cloud de Dify propose un plan gratuit, il est donc possible de suivre ce tutoriel sans avoir besoin d'un abonnement payant.
Si vous êtes intéressé par la configuration locale, le moyen le plus simple est de le faire :
- Téléchargez ou clonez Dify depuis le dépôt officiel.
- Exécutez Dify en utilisant Docker comme décrit dans la section section Démarrage rapide du README du référentiel.
Créer un Chatflow avec Dify
Dify propose plusieurs types d'applications. Nous allons nous concentrer sur la construction d'une application Chatflow, qui est un flux d'IA où les utilisateurs utilisent une interface de chat pour interagir avec l'agent.
Pour créer une nouvelle application Chatflow, cliquez d'abord sur "Créer à partir de rien" et sélectionnez l'option "Chatflow".
Pour créer le flux, nous lui donnons un nom, puis nous cliquons sur le bouton "Créer" :
Cela créera le flux par défaut suivant :
Ce flux comporte trois blocs :
- Le bloc de démarrage est responsable du démarrage du flux. Dans le cas d'un Chatflow, le flux est lancé par l'envoi d'un message par l'utilisateur.
- Le nœud LLM prend en entrée le message de l'utilisateur et l'envoie à un LLM,
gpt-4
dans le cas présent. - Le dernier nœud est utilisé pour afficher un message dans le chat. Dans cet exemple, il est connecté au nœud LLM, de sorte que la sortie du nœud LLM est envoyée au chat.
Ces trois nœuds réunis créent effectivement un chat d'IA similaire au ChatGPT. Avant d'exécuter cette application, nous devons installer et configurer le plugin OpenAI.
Installation et configuration du plugin OpenAI
Pour installer le plugin OpenAI, procédez comme suit :
- Cliquez sur le bouton "Plugins" dans le coin supérieur droit.
- Cliquez sur "Installer à partir de la place de marché".
- Tapez "openai" dans la boîte de recherche et cliquez sur le plugin OpenAI.
- Sélectionnez le plugin OpenAI et cliquez sur "Installer".
Ensuite, nous devons configurer la clé API OpenAI. Si vous n'en avez pas encore, créez-en un ici. Notez que l'utilisation de l'API OpenAI n'est pas gratuite, vous devrez donc associer une méthode de paiement à la clé API.
Une fois que nous avons une clé, nous pouvons la configurer en :
- Sélectionnez le nœud LLM.
- Cliquez sur l'icône de configuration à côté du nom du modèle.
- Cliquez sur le menu déroulant du modèle en haut.
- Cliquez sur "Model Provider Settings" en bas de la liste.
- Cliquez sur "Setup" dans la section clé API.
- Collez la clé API et cliquez sur "Enregistrer".
Exécution de l'application
Nous pouvons maintenant exécuter l'application en cliquant sur le bouton de prévisualisation :
Pour l'instant, ce n'est pas très intéressant car il s'agit seulement d'un chatbot d'IA. Rappelez-vous qu'il ne fera rien tant que l'utilisateur n'aura pas envoyé de message.
Création de variables
Dify permet de stocker l'état de l'application en attribuant des valeurs à des variables accessibles à tous les blocs.
Pour créer une variable, cliquez sur le bouton "Variable" :
Créons une variable pour stocker le nom de l'utilisateur :
Cette configuration a créé une variable nommée name
qui stocke une chaîne (texte). Nous avons laissé la valeur par défaut vide, de sorte qu'initialement la variable sera une chaîne vide.
Il y a plusieurs façons de l'alimenter, mais la plus courante consiste à utiliser un bloc d'intelligence artificielle pour le déterminer automatiquement à partir de la conversation. Nous verrons plus tard comment procéder. Tout d'abord, nous apprenons à vérifier la valeur d'une variable pour contrôler le flux de l'application.
Blocs IF/ELSE
Pour vérifier la valeur d'une variable, nous pouvons utiliser un bloc IF/ELSE. Ce bloc est utilisé pour exécuter différentes actions en fonction de la valeur d'une variable.
Pour ajouter un nouveau bloc, cliquez sur le bouton "+" en bas :
Sélectionnez ensuite le bloc que vous souhaitez ajouter. Dans ce cas, nous sélectionnons "IF/ELSE" :
Ensuite, nous cliquons sur le bloc pour le configurer en sélectionnant la variable name
que nous avons créée précédemment.
Pour le tester, nous ajoutons deux blocs Answer. Ces blocs sont utilisés pour afficher un message dans le chat. Nous connectons l'un d'eux à la sortie IF
(qui s'exécute lorsque la condition est vraie) et l'autre à la sortie ELSE
(qui s'exécute lorsque la condition est fausse).
Pour la sortie IF
, j'ai défini la chaîne "Sorry, I don't know your name" (Désolé, je ne connais pas votre nom), tandis que pour la sortie ELSE
, j'ai défini "Hello, {name} !" (Bonjour, {nom} !). Nous pouvons utiliser les accolades pour injecter une variable dans une chaîne de caractères. Cela sera également utile plus tard lors de l'élaboration des messages-guides.
Nous pouvons essayer ce Chatflow en cliquant sur le bouton "Aperçu". Notez qu'un Chatflow est déclenché par un message de l'utilisateur, nous devons donc d'abord envoyer un message, comme "Hi". Voici les résultats selon que le nom est défini ou non (je l'ai défini manuellement dans la variable d'interface pour le deuxième exemple) :
Blocs d'assignation de variables et d'extraction de paramètres
Nous pouvons utiliser l'IA pour identifier et extraire les valeurs des variables à l'aide d'un bloc Extracteur de paramètres. Ce bloc utilise un LLM pour extraire des informations de la conversation.
Nous commençons par ajouter un bloc Parameter Extractor connecté à la branche IF
. Voici la configuration du bloc :
- L'adresse
INPUT VARIABLE
est fixée àsys.query
, ce qui correspond au message de l'utilisateur. Cela signifie que le bloc Extracteur de paramètres tentera d'extraire la valeur du message de l'utilisateur. - Dans le site
EXTRACTION PARAMETERS
, nous définissons les informations que nous essayons d'extraire. Malheureusement, nous ne pouvons pas spécifier directement une variable ici, nous devons donc redéfinir cette information en cliquant sur le bouton "+".
- Le champ
INSTRUCTION
est l'invite qui guide le LLM sur ce qu'il doit faire. - Ensuite, nous ajoutons un bloc d'affectation de variable pour affecter la valeur extraite par l'extracteur de paramètres (le cas échéant) à la variable
name
.
Veillez à assigner l'extrait name
à la variable name
.
Après cette étape, la variable name
peut encore être indéfinie, car il se peut que l'utilisateur n'ait pas indiqué son nom. Nous ajoutons donc un autre bloc IF/ELSE pour vérifier. Si le nom est défini, nous accueillons l'utilisateur. Dans le cas contraire, nous demandons leur nom.
Voici un exemple d'interaction :
Ce flux illustre les principes fondamentaux des flux de travail de Dify. Quel que soit le message de l'utilisateur, si le nom n'est pas défini, il tente d'extraire le nom du message. En cas d'échec, il le demande. Sinon, il salue l'utilisateur par son nom.
À ce stade, il n'y a pas de bloc LLM, l'agent ne fera donc rien d'autre.
Bloc de code
Les blocs de code peuvent être utilisés pour exécuter du code Python personnalisé. Modifions le flux précédent pour extraire la localisation de l'utilisateur au lieu de son nom. Nous utiliserons ensuite un bloc de code pour adresser une demande à une API météorologique et envoyer les prévisions météorologiques à l'utilisateur.
- Créez une nouvelle variable nommée
location
. - Modifiez les blocs IF/ELSE pour vérifier
location
au lieu dename
. - Modifiez le bloc de l'extracteur de paramètres pour extraire l'emplacement au lieu du nom.
- Modifiez le bloc Variable Assigner pour affecter la valeur extraite à la variable
location
. - Modifiez les blocs Answer pour demander l'emplacement et afficher l'emplacement, respectivement.
Après ces étapes, le flux devrait ressembler à ceci :
Voici un exemple d'interaction :
L'étape suivante consiste à ajouter un bloc Code après avoir déterminé l'emplacement. Ce bloc fait une demande à l OpenWeather API OpenWeather pour demander les prévisions météorologiques pour cet endroit.
L'utilisation de cette API est gratuite, à condition que nous ne fassions pas trop de demandes.
Remplacez le deuxième bloc de réponse par un bloc de code.
Configurez-le pour qu'il reçoive un seul paramètre avec la valeur location
.
Pour le code Python, voici comment nous pouvons utiliser le paquet requests
pour obtenir la météo à partir de l'API OpenWeather :
import requests
API_KEY = "PASTE_YOUR_API_KEY_HERE"
def main(location: str) -> str:
base_url = "http://api.openweathermap.org/data/2.5/weather"
params = {
"q": location,
"appid": API_KEY,
"units": "metric",
}
response = requests.get(base_url, params=params)
data = response.json()
if response.status_code == 200:
weather_desc = data["weather"][0]["description"]
temp = data["main"]["temp"]
return {
"result": f"Current weather in {location}: {weather_desc}, Temperature: {temp}°C"
}
else:
return {
"result": "Could not retrieve weather data",
}
Enfin, nous connectons la sortie du nœud Code à un nœud Answer pour l'afficher à l'utilisateur.
Nous avons maintenant un Chatflow qui peut nous donner les prévisions météorologiques :
Projet : Création d'un agent AI pour la planification des voyages
Nous disposons désormais de tous les outils nécessaires pour créer un agent de voyage intelligent. Les possibilités sont infinies, mais pour éviter de trop compliquer ce tutoriel, nous allons rester simples.
L'agent se concentrera sur la planification d'une seule journée du voyage. Il commencera par recueillir l'emplacement de l'utilisateur et les types d'activités qu'il aime faire. Pour ce faire, nous utilisons deux variables :
location
: Enregistrez l'endroit où l'utilisateur se déplace.activities
: Un tableau de chaînes de caractères contenant les activités que l'utilisateur souhaite effectuer.
Voici comment créer un flux pour extraire les deux variables :
Dans cet exemple, nous commençons par un bloc d'extraction de variables pour extraire à la fois le location
et la liste des activities
.
Nous utilisons ensuite des blocs IF/ELSE pour vérifier si chacun de ces paramètres a été extrait et mettre à jour les variables si c'est le cas. Contrairement à nos exemples précédents, cela permet à l'utilisateur de mettre à jour les valeurs.
À la fin de l'extraction des valeurs et de l'affectation des variables, nous ajoutons un autre bloc IF/ELSE pour vérifier s'il y a des valeurs manquantes. S'il manque quelque chose, nous demandons explicitement à l'utilisateur de le fournir.
Si location
et activities
sont tous deux définis, nous utilisons le bloc Code que nous avons créé précédemment pour obtenir le temps qu'il fait à l'endroit donné. Enfin, nous fournissons la météo, le lieu et les activités à un bloc LLM pour planifier la journée de l'utilisateur.
Le bloc LLM est configuré avec une invite système qui indique au modèle ce qu'il doit faire. Le lieu, les activités et le temps y sont intégrés. Voici la dernière partie du flux :
Voici un exemple d'interaction avec l'agent :
Nous voyons dans la réponse que, grâce au nœud Code, l'agent peut fournir la météo à l'utilisateur et en tenir compte lors de la planification des activités.
En raison de la manière dont le flux a été mis en place, si l'utilisateur fournit l'information immédiatement dans le premier message, l'agent fournira directement un plan pour la journée.
Définition d'un message d'accueil personnalisé
Vous remarquerez peut-être que l'agent a commencé par accueillir l'utilisateur avec un message :
Pour ce faire, nous devons activer la fonction d'ouverture de la conversation.
Outils Dify
Dans ce tutoriel, nous avons appris les éléments fondamentaux de Dify. Un aspect que nous n'avons pas abordé est celui des outils.
Dans Dify, les outils sont des extensions puissantes qui permettent à vos agents IA d'interagir avec le monde extérieur au-delà des limites d'un modèle de langage. Bien qu'un LLM puisse raisonner et générer des réponses sur la base de ses données de formation et du contexte de l'invite, il n'a pas d'accès en temps réel à des données en direct ou à des services externes.
Les outils résolvent ce problème en permettant à votre agent de faire des appels API, d'interroger des bases de données, d'effectuer des calculs, d'extraire des documents, et plus encore, agissant essentiellement comme un pont entre votre IA et les sources d'information externes.
Vous pouvez configurer les outils dans Dify via l'interface visuelle de la plateforme en spécifiant le type d'outil (comme les requêtes HTTP, les interprètes de code ou les plugins tiers), le schéma d'entrée/sortie et toute exigence d'authentification. Une fois configurés, ces outils peuvent être utilisés dans votre flux d'agents via des blocs d'outils, qui vous permettent de transmettre des données vers et depuis l'outil et d'introduire les résultats dans des nœuds LLM ou d'autres blocs logiques.
Vos agents deviennent ainsi non seulement plus intelligents, mais aussi orientés vers l'action, capables de fournir des réponses actualisées et contextuelles en interagissant avec des services du monde réel.
Dans notre exemple, nous avons utilisé un bloc de code pour envoyer une requête à l'API météo. Une autre solution aurait consisté à créer un outil et à le fournir au mécanisme d'apprentissage tout au long de la vie.
Conclusion
Dans ce tutoriel, nous avons exploré certains des éléments fondamentaux dont vous aurez besoin pour commencer à travailler avec Dify. Cependant, Dify offre de nombreuses autres fonctionnalités et capacités à découvrir.
Pour consolider votre compréhension, un bon exercice consisterait à améliorer l'agent de voyage que nous avons créé. Envisagez d'ajouter des fonctions telles que la recherche sur Internet pour trouver des activités locales en ligne, ce qui peut enrichir la fonctionnalité de l'agent et fournir des suggestions plus dynamiques.
Si vous êtes intéressé par les constructeurs d'agents d'IA comme Dify, je vous recommande de consulter nos autres tutoriels pour approfondir vos connaissances :