AI Collaboration

Collaboration IA Avancée : Construisez un Système Multi-Agent avec CrewAI

Illustration of AI agents collaborating in a multi-agent system using CrewAI.

Collaboration AI Avancée : Développement d'un Système Multi-Agent avec CrewAI

Bonjour ! Je suis Tommy, et je vous guiderai à travers le domaine avancé des Systèmes Multi-Agent, un sujet qui étend les capacités des agents AI individuels en unités puissantes et coopératives capables de traiter des problèmes complexes du monde réel. Dans ce guide, nous explorerons comment coordonner plusieurs agents AI pour résoudre des tâches complexes, en mettant l'accent sur l'évolutivité, l'orchestration et la collaboration. Que vous développiez des systèmes d'assistance clientèle autonomes ou des applications complexes de résolution de problèmes, ce tutoriel vous fournira les outils et les connaissances dont vous avez besoin pour réussir. Restez avec nous pour voir le tout se concrétiser avec une mise en œuvre pratique dans Google Colab à la fin !

Vue d'ensemble du Système Multi-Agent et Cadre

Les systèmes multi-agents représentent un saut significatif par rapport aux paradigmes AI traditionnels. Au lieu de s'appuyer sur une seule entité AI pour gérer toutes les tâches, les Systèmes Multi-Agent permettent des agents spécialisés, chacun conçu pour des rôles spécifiques. Cette spécialisation permet un traitement plus efficace, une exécution parallèle des tâches et la capacité de s'attaquer à des problèmes plus complexes.

Bénéfices :

  • Évolutivité : Chaque agent peut être optimisé et mis à l'échelle indépendamment, permettant au système de gérer des charges de travail croissantes en ajoutant plus d'agents.
  • Robustesse : Si un agent échoue, les autres peuvent continuer à fonctionner, fournissant un mécanisme de basculement qui améliore la fiabilité du système.
  • Efficacité : Les agents peuvent travailler en parallèle ou en hiérarchie, accélérant le temps d'achèvement global des tâches, notamment dans les scénarios où les tâches sont indépendantes ou peuvent être décomposées en sous-tâches plus petites.
  • Modularité : La nature modulaire des Systèmes Multi-Agent signifie que les agents peuvent être réutilisés à travers différents systèmes, réduisant le temps de développement pour de nouveaux projets.

Défis :

  • Complexité de Coordination : S'assurer que les agents travaillent ensemble de manière transparente peut être difficile, surtout à mesure que le nombre d'agents augmente.
  • Surcharge de Communication : La nécessité pour les agents de communiquer ajoute une surcharge, en particulier s'ils s'appuient sur différents modèles ou cadres.
  • Gestion des Erreurs : Les échecs d'un agent peuvent se propager ou causer des problèmes chez d'autres, nécessitant des mécanismes sophistiqués de gestion des erreurs.

Introduction à CrewAI

CrewAI est un excellent cadre pour gérer et orchestrer plusieurs agents. Il simplifie les concepts complexes des Systèmes Multi-Agent en structures gérables, fournissant des outils pour construire, déployer et gérer des systèmes multi-agents dans des environnements de production.

Certaines fonctionnalités clés de CrewAI incluent :

  • Exécution de Tâches Séquentielle, Parallèle et Hierarchique : Par défaut, les tâches sont traitées séquentiellement, mais CrewAI prend également en charge l'exécution parallèle et hiérarchique, ce qui est crucial pour les systèmes à grande échelle.
  • Intégration d'Outils Personnalisés : CrewAI permet aux développeurs de créer et d'intégrer des outils personnalisés adaptés à des tâches spécifiques des agents, améliorant la polyvalence et l'efficacité du système pour leur cas d'utilisation.
  • Gestion de la Mémoire : CrewAI fournit des mécanismes pour la mémoire à court terme, à long terme et d'entité, permettant aux agents d'apprendre de leurs expériences passées et de s'améliorer au fil du temps.
  • Configuration d'Agent Basée sur les Rôles : En concentrant les agents sur des rôles et des objectifs spécifiques, CrewAI s'assure que chaque agent est optimisé pour sa tâche, améliorant l'efficacité globale du système.

Configuration et Dépendances

Avant de définir les agents, assurons-nous que votre environnement est correctement configuré. Pour ce tutoriel, nous utiliserons Google Colab. Suivez ces étapes pour installer les dépendances nécessaires et configurer vos variables d'environnement :

Installer les Dépendances :

Comme nous travaillons sur Google Colab, l'installation des dépendances est simple. Nous utiliserons les packages crewai, crewai_tools, langchain_community, et pymongo. Ces bibliothèques fournissent les fonctionnalités de base pour créer et gérer des agents AI, intégrer des outils externes comme ceux de LangChain, et se connecter à une base de données MongoDB.

La commande ci-dessus a été exécutée dans un notebook Google Colab, mais si vous l'exécutez localement, supprimez le point d'exclamation (!).

Configurer les Variables d'Environnement :

Ensuite, vous devrez configurer vos variables d'environnement. Pour ce tutoriel, nous utiliserons le modèle gpt-3.5-turbo d'OpenAI, car il est largement accessible. Si vous avez accès à GPT-4, vous pouvez sauter cette étape ou modifier la variable d'environnement en conséquence.

Ajoutez le code suivant à votre notebook Colab, en remplaçant les valeurs de remplacement par vos véritables clés API et identifiants. Cette configuration permet à vos agents d'interagir avec des services et des bases de données externes de manière sécurisée.

Conception d'un Système Multi-Agent

La conception d'un système multi-agent commence par définir clairement les rôles et responsabilités de chaque agent. Explorons un exemple pratique : construire un Système d'Assistance Client où différents agents s'occupent de tâches distinctes telles que la récupération de données, la résolution de requêtes et la révision de l'assurance qualité.

ÉTAPE 1 : Définir les Agents

Lorsque vous créez des agents AI, il est crucial d'établir un cadre mental fort. Commencez par vous poser des questions clés qui reflètent le processus de pensée d'un manager :

  • Orientation Objectif : Quel est l'objectif principal de l'agent ? Quels processus l'agent devra-t-il accomplir pour atteindre cet objectif de manière efficace ?
  • Analogie de Construction d'Équipe : Si cela était une tâche humaine, quel type de personnes engageriez-vous pour accomplir le travail ? Pensez aux rôles et à l'expertise nécessaires, puis appliquez ces qualités aux capacités de l'agent AI.

Chaque agent peut fonctionner sur un modèle de langue différent (LLM) dans un système multi-agent. Comme nous utilisons CrewAI pour ce tutoriel, il convient de noter que les agents peuvent également intégrer des modèles du Hugging Face Hub. Cette flexibilité vous permet d'adapter les agents à des besoins spécifiques, fournissant des réponses plus personnalisées.

Par exemple, vous pouvez ajuster des modèles comme phi-3, tinyLLama ou Llama-3 pour mieux répondre à votre cas d'utilisation. Si vous n'êtes pas familier avec ce processus, vous pouvez consulter mes tutoriels précédents sur le réglage de ces modèles :

  • Ajustement de Phi-3
  • Ajustement de tinyllama
  • Ajustement de Llama-3

Pour utiliser un modèle du Hugging Face Hub, vous pouvez le charger dans votre agent comme suit :

Comprendre l'Agent de Récupération de Données

  • Rôle : Cet agent est défini comme un "Spécialiste de la Récupération de Données", axé sur la collecte de données.
  • Objectif : L'objectif de l'agent est de récupérer toutes les informations pertinentes sur un client à partir de la base de données.
  • Histoire : L'histoire fournit un contexte, aidant l'agent à comprendre son rôle dans le système plus large.
  • Permettre la Délégation : Défini sur Faux, ce qui signifie que cet agent ne délèguera pas ses tâches à d'autres.
  • Verbeux : Active la journalisation détaillée des actions de l'agent.

Comprendre l'Agent de Support

  • Rôle : Le "Représentant Senior du Support" est responsable de fournir un support client exceptionnel.
  • Objectif : L'agent vise à fournir un support amical et utile.
  • Histoire : Cet agent utilise les données fournies par le Spécialiste de la Récupération de Données pour aider le client.
  • Permettre la Délégation : Défini sur Faux pour garder la responsabilité de la tâche au sein de cet agent.
  • Verbeux : La journalisation détaillée vous aide à suivre les performances de cet agent.

Comprendre l'Agent d'Assurance Qualité du Support

  • Rôle : Le "Spécialiste de l'Assurance Qualité du Support" assure la qualité du support fourni.
  • Objectif : L'objectif de cet agent est d'obtenir une reconnaissance pour le maintien d'une haute qualité de support.
  • Histoire : Il se concentre sur l'assurance que les réponses du Représentant Senior du Support sont complètes et précises.
  • Verbeux : Comme pour les autres agents, la journalisation détaillée est activée pour suivre les activités de l'agent.

Étape 2 : Définir les Tâches

Avec nos agents définis, l'étape suivante consiste à créer les tâches qu'ils devront réaliser. Les tâches sont centrales à la manière dont les agents fonctionnent, fournissant un ensemble clair d'actions à réaliser à l'aide d'outils spécifiques. Le paramètre tools est clé, car il dicte quels ressources ou utilitaires l'agent utilisera pour accomplir la tâche. Il existe divers outils disponibles, y compris ceux de LangChain, mais il est important de sélectionner celui qui convient le mieux au rôle et à l'objectif de l'agent. Évitez de surcharger vos agents avec trop d'outils - concentrez-vous sur ceux qui sont les plus efficaces pour la tâche en cours.

Éléments Clés des Outils Efficaces :

  • Polyvalence : L'outil doit gérer différents types d'entrées venant de l'agent, s'adaptant à divers scénarios.
  • Tolérance aux Pannes : Il doit échouer gracieusement, en interrogeant éventuellement davantage, en envoyant des messages d'erreur ou en suscitant des plages d'entrées spécifiques.
  • Mise en Cache : Cela empêche des demandes répétées inutiles en utilisant une couche de mise en cache inter-agents, optimisant l'efficacité même lorsque la même requête est utilisée par différents agents.

Avant de définir les tâches, initialisons l'outil que nous allons utiliser.

Initialisation des Outils

Les outils peuvent être intégrés ou personnalisés, selon les exigences de la tâche. Dans ce tutoriel, nous utiliserons plusieurs outils, y compris DirectoryReadTool et FileReadTool pour lire des fichiers à partir d'un répertoire spécifié, et un outil personnalisé pour la récupération de données.

Tout d'abord, initialisons les outils intégrés :

Ensuite, nous définirons un outil personnalisé pour récupérer des données d'une base de données MongoDB. Lors de la création de cet outil, j'ai rencontré un problème où l'initialisation du client MongoDB dans le constructeur habituel __init__ a provoqué des erreurs. Après quelques recherches, j'ai découvert que l'initialiser en tant que variable de classe avec l'annotation de type appropriée résolvait le problème.

your_code_here

Définition des Tâches

Les tâches représentent des objectifs spécifiques que les agents doivent accomplir. Chaque tâche est définie par une description, un expected_output, les tools qu'elle utilisera, et l'agent responsable de l'exécution de la tâche.

Tâche de Récupération de Données

Cette tâche est assignée à notre data_retrieval_agent, dont le travail est de rassembler toutes les informations pertinentes sur le client à partir de la base de données. Les données collectées ici seront cruciales pour traiter la demande du client dans les tâches suivantes.


data_retrieval_task = Task(
    description=dedent("""
        Rassembler toutes les données pertinentes de {customer} à partir de la base de données, en se concentrant sur des données cruciales qui seront utiles lors du traitement de la demande du client.
    """),
    expected_output=dedent("""
        Un ensemble de données complet sur les informations du client. Soulignant les informations clés du client qui seront utiles à l'équipe lors du traitement de la demande du client.
    """),
    tools=[retrival_tool],
    agent=data_retrieval_agent,
)

Dans cette tâche, l'retrival_tool récupère les données nécessaires de la base de données, que l'agent traitera ensuite pour s'assurer qu'elles sont pertinentes et complètes.

Tâche de Résolution de Requête

Une fois les données récupérées, l'support_agent utilisera cette information pour répondre à la demande du client. Cette tâche implique de rechercher dans les fichiers pertinents et de générer une réponse détaillée.


inquiry_resolution = Task(
    description=dedent("""
        {customer} vient de nous contacter avec une demande super importante :
        {inquiry}
        {customer} est celui qui nous a contactés. Assurez-vous d'utiliser tout ce que vous savez pour fournir le meilleur support possible. Vous devez vous efforcer de fournir une réponse complète, claire et précise à la demande du client.
    """),
    expected_output=dedent("""
        Une réponse détaillée et informative à la demande du client qui aborde tous les aspects de sa question.
        La réponse doit inclure des références à tout ce que vous avez utilisé pour trouver la réponse, y compris des données ou solutions externes. Assurez-vous que la réponse est complète, sans laisser de questions sans réponse, et maintenez un ton utile et amical tout au long.
    """),
    tools=[directory_read_tool, file_read_tool],
    agent=support_agent,
)

Ici, les directory_read_tool et file_read_tool aident le support_agent à parcourir la documentation stockée, s'assurant que la réponse au client est bien informée et précise.

Tâche de Révision de l'Assurance Qualité

Enfin, l'support_quality_assurance_agent examine la réponse générée par le support_agent. Cette tâche garantit que la réponse répond aux normes élevées de l'entreprise, est complète et amicale pour le client.


quality_assurance_review = Task(
    description=dedent("""
        Réviser la réponse rédigée par le Représentant Senior du Support pour la demande de {customer}. Assurez-vous que la réponse est complète, précise et respecte les normes de qualité élevées attendues pour le support client.
        Vérifiez que toutes les parties de la demande du client ont été traitées de manière approfondie, avec un ton utile et amical.
        Vérifiez les références et les sources utilisées pour trouver les informations, en veillant à ce que la réponse soit bien soutenue et ne laisse aucune question sans réponse.
    """),
    expected_output=dedent("""
        Une réponse finale, détaillée et informative prête à être envoyée au client.
        Cette réponse doit aborder pleinement la demande du client, intégrant tous les retours et améliorations pertinents.
        Ne soyez pas trop formel, nous sommes une entreprise détendue et sympa mais maintenez un ton professionnel et amical tout au long.
    """),
    agent=support_quality_assurance_agent,
    output_file="response.md",
    human_input=True,
)

Cette tâche ajoute une couche de contrôle de qualité, garantissant que les besoins du client sont entièrement satisfaits et que la réponse est conforme aux normes de l'entreprise.

Étape 3 : Initier l'Équipage

Maintenant que nous avons défini nos agents et nos tâches, il est temps de rassembler le tout en initialisant un Équipage. L'Équipage est l'entité centrale qui gère l'exécution des tâches par les agents. Il orchestre comment les tâches sont traitées et si les agents peuvent se souvenir des interactions précédentes.

Options de Processus

Le paramètre process contrôle comment les tâches sont exécutées par l'équipage. Les options incluent :

  • Séquentiel (Par Défaut) : Les tâches sont effectuées les unes après les autres dans un ordre spécifique.
  • Hiérarchique : Un agent agit en tant que manager, déléguant des tâches à d'autres agents tout en maintenant une mémoire globale des tâches.
  • Parallèle : Les tâches sont exécutées simultanément, permettant à plusieurs tâches de s'exécuter en même temps.

Types de Mémoire

La mémoire améliore la capacité des agents à se souvenir des interactions passées, améliorant la qualité des réponses au fil du temps. Le paramètre de mémoire, lorsqu'il est défini sur True, active divers types de mémoire :

  • Mémoire à Court Terme : Disponible uniquement pendant l'exécution de l'équipage. Une fois l'équipage terminé, cette mémoire est effacée et ne sera pas accessible lors des exécutions suivantes.
  • Mémoire à Long Terme : Stocke les réponses dans un stockage persistant, permettant à l'équipage de se souvenir des interactions passées même après la fin de la session.
  • Mémoire d'Entité : Regroupe et reconnaît des entités (par exemple, noms de clients, produits) dans la conversation pour fournir des réponses plus contextuelles et significatives. Elle est également éphémère et est effacée après la fin de la session.

Par défaut, la mémoire est définie sur Faux, mais lorsqu'elle est activée (memory=True), tous les types de mémoire sont activés pour de meilleures performances.

Voici comment nous initialisons l'équipage avec nos agents, tâches et configuration de mémoire :

your_code_here

Paramètres Clés Expliqués

  • agents : Une liste d'agents qui participeront à l'équipage. Chaque agent est assigné à des tâches spécifiques en fonction de ses rôles et objectifs définis.
  • tasks : Une liste de tâches que les agents doivent accomplir. Ces tâches sont conçues pour être exécutées séquentiellement par défaut, mais vous pouvez personnaliser le flux d'exécution en modifiant le paramètre process.
  • verbose : En définissant cela sur 2, vous activez une journalisation détaillée, afin que vous puissiez surveiller comment les agents interagissent entre eux et comment ils progressent à travers les tâches.
  • memory : En définissant memory=True, nous activons tous les types de mémoire, garantissant que les agents peuvent se souvenir des interactions précédentes et fournir des réponses plus informées.

Flux d'Exécution

Avec cette configuration, l'équipage exécutera les tâches dans l'ordre :

  1. Récupération des Données : L'data_retrieval_agent récupère les informations pertinentes du client à partir de la base de données.
  2. Résolution de la Demande : Le support_agent utilise les données récupérées, ainsi que des informations supplémentaires provenant des répertoires et fichiers, pour fournir une réponse complète à la demande du client.
  3. Révision de l'Assurance Qualité : Le support_quality_assurance_agent examine la réponse, s'assurant qu'elle répond aux normes de qualité, puis la sauvegarde dans un fichier.

Étape 4 : Lancer l'Équipage

Après avoir initialisé l'équipage avec vos agents et tâches, l'étape suivante consiste à le lancer en fournissant les entrées nécessaires. Ces entrées guideront les agents alors qu'ils travaillent sur leurs tâches assignées.

Dans cet exemple, nous utiliserons les entrées suivantes :

  • client : Le nom du client qui pose la question.
  • demande : La question ou le problème spécifique que le client souhaite voir abordé.

Explication des Entrées

  • client : "Tommy Ade" est le client dont les informations seront récupérées et dont la demande sera traitée par les agents. Cela est également utilisé pour personnaliser les réponses et interactions.
  • demande : Le client demande comment ajuster le modèle Llama 3 et sollicite également des informations de base sur le modèle de langage large (LLM). Cette entrée guidera les tâches effectuées par les agents, de la récupération des données à la résolution de la demande et à l'assurance qualité.

Étape 5 : Examiner l'Exécution de l'Équipage

Une fois la méthode de lancement invoquée, l'équipage commence à exécuter les tâches. Le paramètre verbeux garantit que des journaux détaillés sont produits, montrant comment les agents collaborent pour atteindre l'objectif. Cela est particulièrement utile pour comprendre le processus de prise de décision et comment chaque agent contribue au résultat final.

Vous devriez voir le Spécialiste de la Récupération de Données commencer la tâche de récupération avec des journaux et des outputs détaillés. Une légère erreur se produit lors de l'utilisation de l'outil personnalisé que nous avons défini plus tôt ; puisque CrewAI nous aide à gérer les erreurs de manière gracieuse, cela n'a pas affecté l'exécution et a amené l'agent à passer la bonne variable qui nous a donné les détails du client que nous voulions.

Après que l'agent ait terminé son travail, il retourne le résultat final et le remet au prochain agent qui prendra en charge la tâche suivante. L'Agent de Support commence et fait usage des outils de répertoire et de fichiers pour lire tous les fichiers et préparer une réponse à la requête d'un client. Après que l'Agent de Support ait fourni sa réponse, la tâche suivante commence, et l'agent QA entre en jeu. Il délègue ensuite une tâche à l'Agent de Support pour qu'il révise sa réponse.

Ensuite, l'agent QA reçoit les retours de l'Agent de Support et cherche maintenant nos retours pour améliorer la réponse si nécessaire. L'agent QA reçoit alors les feedbacks et travaille sur sa réponse en fonction de ce qui a été dit et donne une réponse adéquate.

Sortie Finale au Format Markdown

Une fois que l'équipage a terminé toutes les tâches, il génère le résultat final au format markdown. Ce format est particulièrement utile pour des fins de documentation ou pour partager les résultats de manière structurée et lisible.

Comme nous avons défini un output_file pour notre tâche QA, le fichier contenant la réponse sera dans notre répertoire actuel. Le contenu du fichier de sortie contient la réponse finale de l'agent QA de support. Vous pouvez consulter le Notebook Google Colab utilisé pour ce tutoriel ICI.

Généralisation à Travers les Cas d'Utilisation

Adaptation à Plusieurs Domaines

Bien que ce tutoriel se concentre sur des exemples d'assistance client, les principes des systèmes multi-agents peuvent être adaptés à divers secteurs, de la gestion de la chaîne d'approvisionnement aux services personnalisés propulsés par AI.

Conception Modulaire et Réutilisable

Lors de la conception de votre système, priorisez la modularité. Structurez les agents et leurs interactions de manière à ce qu'ils puissent être facilement adaptés ou réutilisés dans différents projets, économisant ainsi du temps et des ressources dans les développements futurs.

Conclusion

Dans ce tutoriel, nous avons construit un système multi-agent sophistiqué en utilisant CrewAI, démontrant comment automatiser efficacement les tâches de support client. Nous avons commencé par configurer l'environnement, définir des agents spécialisés, et créer des tâches qui tirent parti de divers outils, y compris un outil personnalisé DatabaseRetrivalTool. En initialisant et en lançant l'équipage, nous avons observé comment les agents collaborent pour récupérer des données, rédiger des réponses, et garantir la qualité, tout en utilisant la mémoire et les entrées humaines pour produire une sortie finale affinée.

Pour approfondir les capacités et les possibilités des systèmes multi-agents, consultez la documentation de CrewAI.

En lire plus

Illustration of ChatGPT transforming workplace productivity through AI tools.
Cohere Chrome Extension tutorial example showing code implementation and interface.

Laisser un commentaire

Tous les commentaires sont modérés avant d'être publiés.

Ce site est protégé par hCaptcha, et la Politique de confidentialité et les Conditions de service de hCaptcha s’appliquent.