Créer avec l’IA

Qu’est-ce qu’un cadriciel d’agents, et en avez-vous besoin?

· Par Robert Scales · 5 min de lecture

Réponse courte

Un cadriciel d’agents est une bibliothèque de code qui fournit la tuyauterie dont tout agent d’IA a besoin, comme la boucle réfléchir-agir-observer, la définition des outils, la mémoire et les passages de relais entre plusieurs agents, pour que vous ayez moins à l’écrire vous-même. Il vous en faut un quand vous avez plusieurs agents, beaucoup d’outils ou une équipe avec qui partager le code; pour un seul agent avec deux ou trois outils, une cinquantaine de lignes de Python ordinaire sont souvent plus faciles à lire et à déboguer.

Un agent d’IA est un programme dans lequel un modèle de langage choisit la prochaine étape : appeler un outil de recherche, lire le résultat, décider quoi en faire, et recommencer jusqu’à ce que le travail soit terminé. En écrire un à partir de zéro, c’est réécrire chaque fois les mêmes morceaux : une boucle, une façon de décrire les outils au modèle, du code qui exécute ces outils, un registre de ce qui s’est passé jusque-là, et des règles pour savoir quand s’arrêter. Un cadriciel d’agents (agent framework) est une bibliothèque qui fournit ces morceaux tout faits.

Cette commodité a un prix. Chaque cadriciel apporte son propre vocabulaire, ses propres réglages par défaut et ses propres couches entre vous et le modèle. Quand quelque chose tourne mal, vous déboguez le cadriciel en plus de votre idée. La réponse honnête à « en ai-je besoin? » est donc : ça dépend du nombre de pièces mobiles que vous avez.

Ce qu’un cadriciel vous apporte vraiment

La plupart des cadriciels d’agents de la mi-2024 offrent un mélange des éléments suivants :

  • Une boucle d’exécution. Le cycle qui consiste à interroger le modèle, lire l’action qu’il a choisie, l’exécuter et lui renvoyer le résultat.
  • Des enveloppes d’outils. Des connexions toutes faites à la recherche Web, à des lecteurs de fichiers, à des bases de données ou à l’exécution de code, plus une façon standard d’ajouter les vôtres.
  • Des connecteurs de modèles. Une seule interface pour plusieurs fournisseurs, si bien que passer d’un modèle à un autre devient un réglage plutôt qu’une réécriture.
  • De la mémoire et un état. Un endroit où garder la conversation, les résultats intermédiaires et des notes d’une étape à l’autre.
  • La coordination de plusieurs agents. Des façons pour plusieurs agents spécialisés de se passer le travail.
  • Le traçage. Des journaux de chaque prompt, de chaque appel d’outil et de chaque réponse, ce qui est l’élément le plus utile quand un agent se comporte mal.

Un exemple concret : une tâche de recherche, deux façons

Disons que vous voulez un petit assistant de recherche : il cherche sur le Web les nouvelles récentes sur un sujet, puis une deuxième étape transforme les notes en un court topo.

Avec un cadriciel. Dans CrewAI, vous décrivez chaque agent par son rôle, son objectif et un court historique (backstory), vous lui donnez des outils, puis vous énumérez les tâches et lancez l’équipe. L’esquisse ci-dessous suit le modèle du README de CrewAI. L’outil de recherche Web vient du paquet facultatif crewai[tools] et exige une clé du service de recherche Serper; CrewAI appelle l’API d’OpenAI par défaut, il faut donc aussi une clé OpenAI.

from crewai import Agent, Task, Crew
from crewai_tools import SerperDevTool   # exige SERPER_API_KEY; OPENAI_API_KEY pour le modèle

searcher = Agent(
    role="Recherchiste de nouvelles",
    goal="Trouver des reportages fiables et récents sur le sujet assigné",
    backstory="Une personne méticuleuse qui note d’où vient chaque affirmation.",
    tools=[SerperDevTool()],
    allow_delegation=False,
)
writer = Agent(
    role="Rédacteur de topos",
    goal="Transformer des notes de recherche en un topo en langage clair",
    backstory="Rédige des résumés courts et clairs pour des gestionnaires pressés.",
    allow_delegation=False,
)

research = Task(
    description="Recueillir cinq développements récents dans la technologie des thermopompes, avec la source de chacun.",
    expected_output="Cinq puces, chacune avec un lien vers sa source",
    agent=searcher,
)
briefing = Task(
    description="Rédiger un topo de 200 mots à partir des notes de recherche.",
    expected_output="Un topo d’environ 200 mots",
    agent=writer,
)

crew = Crew(agents=[searcher, writer], tasks=[research, briefing])
print(crew.kickoff())

Cela fait une trentaine de lignes, et le cadriciel s’occupe de la boucle, des appels d’outils et du passage du résultat de la première tâche à la deuxième.

Avec du code simple. Le même travail se résume à deux appels au modèle et un appel de recherche : chercher, demander au modèle de choisir et de résumer cinq éléments avec leurs sources, puis lui demander de rédiger le topo. Vous contrôlez chaque prompt et pouvez afficher chaque étape, avec la même boucle réfléchir-agir-observer que tout agent exécute en coulisse. Pour un travail fixe en deux étapes comme celui-ci, le code simple est plus court à comprendre, même s’il demande quelques lignes de plus à taper.

À essayer : écrivez votre idée d’agent sous forme de liste d’étapes. Si chaque étape est connue d’avance, construisez-la d’abord comme un simple script. Si le modèle doit choisir parmi de nombreux outils, ou si plusieurs rôles doivent se renvoyer le travail, essayez la même idée dans un cadriciel et comparez la facilité de débogage de chaque version.

Une règle simple

Votre situationPoint de départ suggéré
Un modèle, un à trois outils, des étapes fixesDu code simple
Beaucoup d’outils, ou passage d’un fournisseur de modèles à un autreUn cadriciel avec de bons connecteurs
Plusieurs rôles qui se passent le travailUn cadriciel multiagent
Une équipe qui entretient l’agent pendant des moisUn cadriciel, pour les conventions communes et le traçage

Quel que soit votre choix, gardez une limite d’étapes, consignez chaque appel d’outil et demandez l’approbation d’une personne avant toute action aux conséquences réelles, comme envoyer un courriel ou dépenser de l’argent. Aucun cadriciel ne vous retire ces responsabilités.

En quoi LangChain, CrewAI et AutoGen diffèrent-ils?

LangChain est le plus vaste des trois. Son README décrit une boîte à outils pour toute application bâtie sur des modèles de langage : recherche dans vos propres documents, extraction de données structurées, robots conversationnels et agents. Il est divisé en paquets, avec langchain-core pour les briques de base, langchain-community et des paquets de partenaires pour des centaines d’intégrations, et LangGraph, une bibliothèque complémentaire qui représente les étapes d’un agent comme les nœuds et les liens d’un graphe, pour les agents sur mesure qui exigent un contrôle fin de chaque étape. LangSmith, son service hébergé, ajoute le traçage et les tests. Choisissez-le quand il vous faut beaucoup d’intégrations ou un contrôle précis du déroulement, et attendez-vous à une courbe d’apprentissage.

CrewAI est bâti autour de la métaphore d’une équipe. Vous définissez des agents avec des rôles, des objectifs et des historiques, vous leur assignez des tâches avec un résultat attendu, et vous les faites travailler en équipe, soit à la suite, soit sous un agent gestionnaire qui planifie et délègue. C’est le plus facile des trois à lire, ce qui en fait un bon choix pour des flux de travail par rôles comme « chercher, puis rédiger ». Notez que son README indique qu’il envoie par défaut des statistiques d’utilisation anonymes.

AutoGen, de Microsoft Research et de partenaires universitaires, traite une application comme une conversation entre agents. Son exemple de base jumelle un agent assistant, qui écrit des réponses et du code, avec un agent mandataire de l’utilisateur (user proxy) qui peut exécuter ce code et rendre compte du résultat; les deux discutent jusqu’à ce que la tâche soit résolue, et une personne peut intervenir à tout moment. Il est à son meilleur pour les tâches où écrire et exécuter du code est l’outil principal. Comme il exécute du code, le projet recommande de le faire tourner dans Docker, un conteneur isolé, plutôt que directement sur votre machine.

Sources

  1. crewAI README (commit ab066a1) — crewAI (GitHub), 24 mai 2024
  2. LangChain README (commit abb0cec) — LangChain (GitHub), 6 juin 2024
  3. AutoGen README (commit 1e5c03f) — Microsoft (GitHub), 3 juin 2024

Recevez gratuitement le Guide de l’intelligence artificielle

Abonnez-vous à l’infolettre hebdomadaire et recevez le guide gratuit : ce qui a changé en IA cette semaine, une leçon, un prompt à essayer. Désabonnement en un clic.

Ce que nous faisons de votre adresse

Retour en haut

Affichage

Vos choix sont enregistrés dans ce navigateur seulement. Aucune donnée n’est transmise.

Taille du texte
100 %
Couleurs
Lecture
Autres réglages
Déclaration d’accessibilité