iancr
CrewAI : Orchestre ta propre équipe d'agents IA en 30 minutes

CrewAI : Orchestre ta propre équipe d'agents IA en 30 minutes

Tu as déjà utilisé ChatGPT pour écrire un mail, résumer un document ou coder une fonction. Mais imagine maintenant une équipe entière d'IA spécialisées qui bossent ensemble, chacune experte dans sa tâche, qui se passent le relais automatiquement pour produire un résultat complet. C'est exactement ce que fait CrewAI — et dans ce tutoriel, tu vas créer ta première équipe de zéro.

On va construire une mini-agence de contenu : un agent chercheur qui explore un sujet, un agent rédacteur qui synthétise ses trouvailles en un article, et un agent éditeur qui relit et corrige le tout. À la fin, tu auras un crew autonome qui produit un article prêt à publier, sans que tu lèves le petit doigt.


Le problème que CrewAI résout

Un LLM seul, c'est un couteau suisse : il fait tout, mais rien parfaitement. Dès que ta tâche devient complexe (recherche + analyse + rédaction + vérification), tu passes ton temps à jongler entre les prompts, à copier-coller les sorties, à perdre le contexte.

CrewAI apporte une solution élégante : diviser pour mieux régner. Tu définis des agents spécialisés avec des rôles distincts, tu leur assignes des tâches précises, et le framework orchestre leur collaboration. Chaque agent a sa propre « personnalité » (backstory), ses propres outils, et un objectif clair. Le résultat : un pipeline intelligent, robuste, et réutilisable.

Si tu as déjà suivi le tutoriel LangChain, tu vas adorer CrewAI : c'est la couche supérieure, celle qui transforme une chaîne de prompts en une véritable organisation.


Ce que tu vas construire

Une équipe de 3 agents IA qui, à partir d'un simple sujet, produisent un article structuré de A à Z :

  1. Chercheur Explore le sujet, rassemble des faits
  2. Rédacteur Transforme les faits bruts en article rédigé
  3. Éditeur Relit, corrige, peaufine

💡 Idée d'illustration : Un schéma en trois colonnes montrant les trois agents avec leurs icônes (loupe, plume, stylo rouge), reliés par des flèches, avec le texte « Ton sujet » à gauche et « Article final » à droite.


Étape 1 : Comprendre les concepts clés

Avant d'écrire une ligne de code, voici le vocabulaire CrewAI en deux minutes :

  • Agent : Un membre de l'équipe, avec un rôle, un but, une backstory (sa « personnalité »), et des outils. C'est ton employé IA.
  • Task : Une mission confiée à un agent, avec une description précise et un résultat attendu.
  • Crew : L'équipe complète. Tu y mets tes agents, tes tâches, et tu définis le process (comment ils bossent : séquentiel ou hiérarchique).
  • Process : Le mode d'organisation. Process.sequential = chacun son tour ; Process.hierarchical = un manager distribue le boulot.
  • Tools : Des fonctions que l'agent peut appeler (recherche web, lecture de fichiers, calculs, etc.).

Le flow est simple : tu crées des agents tu crées des tâches tu les associes tu lances le crew avec kickoff().


Étape 2 : Installation de CrewAI

On part d'un terminal vierge. Crée un environnement propre et installe CrewAI :

bash
# Créer un dossier projet mkdir mon-premier-crew && cd mon-premier-crew # Environnement virtuel (toujours !) python3 -m venv venv source venv/bin/activate # Installer CrewAI et ses outils pip install crewai crewai-tools

Si tu es sous Windows : remplace source venv/bin/activate par venv\Scripts\activate.

Ce que tu viens d'installer : - crewai : le framework principal, le chef d'orchestre - crewai-tools : la boîte à outils intégrée (recherche web, scraping, lectures de fichiers)

Vérifie que tout est OK :

bash
python3 -c "import crewai; print(f'CrewAI {crewai.__version__} installé !')"

Tu devrais voir : CrewAI 0.100.x installé ! (ou version supérieure).


Étape 3 : La clé API le carburant de tes agents

CrewAI a besoin d'un LLM pour faire réfléchir les agents. Tu as deux options :

Option A — OpenAI (recommandée pour suivre ce tutoriel) :

bash
export OPENAI_API_KEY="sk-ta-clé-ici"

Si tu n'as pas de clé, va sur platform.openai.com/api-keys, crée un compte (crédits gratuits à l'inscription), et génère une clé.

Option B — Ollama (gratuit, local, si tu as suivi le tutoriel Ollama) :

python
# Dans ton script, tu configureras l'agent avec : llm=LLM(model="ollama/mistral:latest", base_url="http://localhost:11434")

Pour ce tutoriel, on va utiliser l'Option A par simplicité. Tu peux basculer sur Ollama plus tard tout le code reste identique, seul le modèle LLM change.


Étape 4 : Ton premier crew version minimale

Avant de construire l'agence de contenu complète, écrivons un crew minimal pour comprendre la mécanique. Crée un fichier test_crew.py :

python
# test_crew.py — Ton premier agent CrewAI import os from crewai import Agent, Task, Crew, Process # 1. Ton premier agent salueur = Agent( role="Expert en salutations", goal="Saluer le monde de la manière la plus chaleureuse possible", backstory="Tu es un expert en relations humaines, spécialiste des premières impressions.", verbose=True, # Pour voir ce qu'il fait en temps réel allow_delegation=False, # Pas besoin de déléguer pour si peu ) # 2. Sa mission tache = Task( description="Écris un message de bienvenue pour un nouveau membre de l'équipe IA.", expected_output="Un message de 3 phrases maximum, chaleureux et motivant.", agent=salueur, ) # 3. Le crew crew = Crew( agents=[salueur], tasks=[tache], process=Process.sequential, verbose=True, ) # 4. GO ! resultat = crew.kickoff() print("\n=== RÉSULTAT FINAL ===") print(resultat)

Lance-le :

bash
python3 test_crew.py

Ce que tu devrais voir défiler dans le terminal : - Le crew qui démarre - L'agent qui « réfléchit » (verbose=True te montre ses pensées) - Le résultat final, un joli message de bienvenue

Félicitations, tu viens de lancer ton premier agent autonome ! 🎉

Maintenant, passons aux choses sérieuses : une vraie équipe.


Étape 5 : L'agence de contenu 3 agents qui bossent pour toi

Crée un fichier agence_contenu.py :

python
# agence_contenu.py — Une équipe de 3 agents IA pour produire un article import os from crewai import Agent, Task, Crew, Process from crewai_tools import SerperDevTool # --- Configuration de l'outil de recherche web --- # Pour activer la recherche, crée un compte sur serper.dev (gratuit 2500 requêtes/mois) # puis exporte ta clé : export SERPER_API_KEY="ta-clé" outil_recherche = SerperDevTool() # --- AGENT 1 : Le Chercheur --- chercheur = Agent( role="Chercheur spécialiste", goal="Trouver les informations les plus pertinentes et récentes sur un sujet donné", backstory=( "Tu es un enquêteur méthodique, un ancien journaliste d'investigation " "reconverti dans la veille technologique. Tu ne te contentes jamais de la " "première page Google : tu croises les sources, vérifies les faits, et " "ne retiens que l'essentiel. Ta devise : 'Un fait sourcé vaut mieux que dix opinions.'" ), verbose=True, tools=[outil_recherche], allow_delegation=False, ) # --- AGENT 2 : Le Rédacteur --- redacteur = Agent( role="Rédacteur technique", goal="Transformer des notes de recherche en un article clair, structuré et engageant", backstory=( "Tu es un vulgarisateur de talent, capable d'expliquer des concepts complexes " "à ta grand-mère sans qu'elle décroche. Ancien rédacteur en chef d'un magazine tech, " "tu sais qu'un bon article a une accroche qui claque, un corps qui instruit, " "et une conclusion qui donne envie d'en savoir plus. Tu écris en français, " "avec un ton accessible mais jamais infantilisant." ), verbose=True, allow_delegation=False, ) # --- AGENT 3 : L'Éditeur --- editeur = Agent( role="Éditeur qualité", goal="Relire l'article, corriger les erreurs, et améliorer la clarté", backstory=( "Tu es le gardien de la qualité. Pendant 15 ans, tu as relu des milliers " "d'articles avant publication. Tu traques les fautes d'orthographe, les phrases " "bancales, les répétitions, et les tournures trop complexes. Tu es exigeant " "mais constructif. Ton objectif : que chaque texte soit impeccable." ), verbose=True, allow_delegation=False, ) # --- LES TÂCHES --- sujet = "Les dernières avancées en IA pour la santé en 2026" tache_recherche = Task( description=( f"Recherche les informations clés sur le sujet suivant : {sujet}. " "Trouve au moins 5 faits marquants, avec des noms de technologies, " "des entreprises, et si possible des chiffres ou dates. " "Organise tes trouvailles sous forme de notes structurées." ), expected_output=( "Une liste à puces avec au moins 5 faits sourcés sur le sujet, " "incluant noms de technologies, entreprises, chiffres et dates quand c'est possible. " "Format : notes de recherche brutes." ), agent=chercheur, ) tache_redaction = Task( description=( "À partir des notes de recherche fournies par le Chercheur, " "rédige un article de blog structuré en français sur le sujet. " "L'article doit avoir : un titre accrocheur, une intro qui donne envie, " "3 sections distinctes, et une conclusion. " "Longueur : environ 500 mots. Style : accessible au grand public." ), expected_output=( "Un article de blog complet et structuré en français, " "avec titre, introduction, 3 sections, et conclusion. " "Environ 500 mots. Rédigé dans un style accessible." ), agent=redacteur, ) tache_edition = Task( description=( "Relis attentivement l'article rédigé. Corrige les fautes d'orthographe, " "de grammaire, et de syntaxe. Améliore les phrases trop longues ou confuses. " "Vérifie la cohérence d'ensemble. Ajoute des emojis pertinents si le ton s'y prête. " "Le résultat final doit être impeccable, prêt à être publié." ), expected_output=( "L'article final, corrigé et peaufiné, prêt à être publié. " "Aucune faute d'orthographe, style fluide et engageant." ), agent=editeur, ) # --- LE CREW --- crew = Crew( agents=[chercheur, redacteur, editeur], tasks=[tache_recherche, tache_redaction, tache_edition], process=Process.sequential, # Chacun son tour : chercheur → rédacteur → éditeur verbose=True, ) # --- LANCEMENT --- print("\n" + "="*60) print(f"🚀 LANCEMENT DU CREW — Sujet : {sujet}") print("="*60 + "\n") resultat = crew.kickoff() print("\n" + "="*60) print("📰 ARTICLE FINAL PRODUIT PAR LE CREW") print("="*60 + "\n") print(resultat)

Avant de lancer, assure-toi d'avoir la clé Serper (pour la recherche web) :

bash
export SERPER_API_KEY="ta-clé-serper"

Tu obtiens une clé gratuite (2500 requêtes/mois) sur serper.dev. Tu peux aussi retirer l'outil de recherche en supprimant tools=[outil_recherche] l'agent utilisera alors ses connaissances internes.

Lance :

bash
python3 agence_contenu.py

Ce que tu vas voir défiler : 1. Le Chercheur qui exécute des recherches web, rassemble des faits 2. Le Rédacteur qui prend ces notes et les transforme en article 3. L'Éditeur qui relit, corrige, et livre la version finale

Temps d'exécution : environ 30-60 secondes selon le modèle.


Étape 6 : Comprendre ce qui se passe en coulisses

Voici le secret de CrewAI : chaque agent voit le résultat de l'agent précédent. Le processus sequential garantit que :

  1. Le Chercheur produit des notes stockées en mémoire
  2. Le Rédacteur reçoit ces notes automatiquement (dans son contexte) et les transforme
  3. L'Éditeur reçoit l'article du Rédacteur et le peaufine

Tu n'as rien à copier-coller manuellement. C'est le framework qui gère la transmission. C'est ce qui rend CrewAI si puissant : une fois ton crew configuré, il tourne tout seul.


Étape 7 : Version améliorée rends ton crew configurable

C'est bien d'avoir un crew qui tourne, mais c'est mieux de pouvoir changer le sujet sans modifier le code. Crée agence_configurable.py :

python
# agence_configurable.py — Crew réutilisable pour n'importe quel sujet import os, sys from crewai import Agent, Task, Crew, Process from crewai_tools import SerperDevTool def creer_agence_contenu(sujet): """Crée et retourne un crew configuré pour le sujet donné.""" outil_recherche = SerperDevTool() chercheur = Agent( role="Chercheur spécialiste", goal="Trouver les informations pertinentes sur un sujet donné", backstory="Enquêteur méthodique, tu croises les sources et vérifies les faits.", verbose=True, tools=[outil_recherche], allow_delegation=False, ) redacteur = Agent( role="Rédacteur technique", goal="Transformer des notes en article structuré et engageant en français", backstory="Vulgarisateur talentueux, tu rends accessibles les sujets complexes.", verbose=True, allow_delegation=False, ) editeur = Agent( role="Éditeur qualité", goal="Corriger et peaufiner l'article jusqu'à ce qu'il soit parfait", backstory="Correcteur expérimenté, tu traques la moindre faute.", verbose=True, allow_delegation=False, ) tache_recherche = Task( description=f"Recherche : {sujet}. Trouve 5 faits clés avec sources.", expected_output="Liste structurée de 5 faits sourcés.", agent=chercheur, ) tache_redaction = Task( description="Rédige un article de blog (~500 mots) à partir des notes de recherche.", expected_output="Article complet en français, structuré, ~500 mots.", agent=redacteur, ) tache_edition = Task( description="Corrige et peaufine l'article. Aucune faute, style fluide.", expected_output="Article final impeccable, prêt à publier.", agent=editeur, ) return Crew( agents=[chercheur, redacteur, editeur], tasks=[tache_recherche, tache_redaction, tache_edition], process=Process.sequential, verbose=True, ) # --- Point d'entrée --- if __name__ == "__main__": if len(sys.argv) < 2: print("Usage : python3 agence_configurable.py \"Ton sujet ici\"") sys.exit(1) sujet = sys.argv[1] crew = creer_agence_contenu(sujet) resultat = crew.kickoff() print("\n" + "="*60) print(f"📰 ARTICLE FINAL — Sujet : {sujet}") print("="*60 + "\n") print(resultat) # Sauvegarde automatique nom_fichier = f"article_{sujet[:30].replace(' ', '_')}.md" with open(nom_fichier, "w") as f: f.write(f"# {sujet}\n\n{resultat}") print(f"\n💾 Article sauvegardé dans {nom_fichier}")

Maintenant, lance avec le sujet de ton choix :

bash
python3 agence_configurable.py "L'impact de l'IA sur l'éducation en 2026"

Le crew va chercher, rédiger, éditer, et sauvegarder l'article automatiquement dans un fichier .md.


Pièges classiques

Voici les erreurs que tout le monde fait au début. Ne les fais pas.

1. Oublier d'exporter la clé API

Erreur : openai.OpenAIError: The api_key client option must be set

Solution : Vérifie que echo $OPENAI_API_KEY affiche bien ta clé. Si tu es sous Windows, utilise set OPENAI_API_KEY=... dans le terminal.

2. Vouloir mettre trop d'agents

C'est tentant de créer 10 agents hyper-spécialisés. Résultat : le crew rame, les coûts explosent, et les agents se marchent dessus.

Règle d'or : commence avec 2-3 agents. Ajoutes-en un seulement quand c'est vraiment nécessaire. Un crew de 3 agents bien définis bat un crew de 7 agents flous.

3. Négliger la backstory

La backstory n'est pas un gadget : elle influence massivement le comportement de l'agent. Un agent « Rédacteur » sans backstory va produire du contenu générique. Avec une backstory, il a une voix, des principes, un style.

Bon backstory : "Tu es un vulgarisateur de talent, capable d'expliquer la mécanique quantique à un enfant de 10 ans." Mauvais backstory : "Tu es un rédacteur."

4. Confondre expected_output et description

La description dit quoi faire. Le expected_output décrit à quoi doit ressembler le résultat. Les deux sont utilisés par l'agent pour comprendre sa mission. Ne les mélange pas : sois précis dans les deux.

5. Oublier d'activer verbose=True pendant le développement

Sans verbose, le terminal reste muet et tu ne sais pas ce qui se passe. C'est frustrant. Active-le toujours en dev, désactive-le en prod.


Pour aller plus loin

Maintenant que tu maîtrises la base, voici trois pistes pour aller plus loin :

1. Ajouter des outils personnalisés

CrewAI te permet de créer tes propres outils en Python. Par exemple, un outil qui lit tes emails, qui interroge ta base de données, ou qui poste sur Twitter :

python
from crewai_tools import tool @tool("envoie_tweet") def envoie_tweet(contenu: str) -> str: """Envoie un tweet avec le contenu fourni.""" # Ton code d'envoi ici return f"✅ Tweet envoyé : {contenu[:50]}..."

Tu attaches ensuite cet outil à ton agent avec tools=[envoie_tweet].

2. Passer en mode hiérarchique

Le mode Process.hierarchical ajoute un agent manager qui distribue les tâches intelligemment. Idéal quand tu as 5+ agents :

python
crew = Crew( agents=[...], tasks=[...], process=Process.hierarchical, manager_llm=LLM(model="gpt-4o"), )

3. Intégrer avec FastAPI pour une API web

Si tu as suivi le tutoriel FastAPI, tu peux exposer ton crew derrière une API REST. Un utilisateur envoie un sujet, ton crew bosse, et il reçoit l'article fini.


Récapitulatif

Tu as accompli beaucoup en 30 minutes :

Compris les concepts d'agents, tâches et crews Installé CrewAI et ses outils Créé un agent simple pour comprendre les bases Construit une agence de contenu complète avec 3 agents spécialisés Rendue ton crew configurable et réutilisable Appris les pièges à éviter

Tu as maintenant entre les mains un framework qui transforme ta façon de travailler avec l'IA. Finis les allers-retours de copier-coller entre ChatGPT et ton éditeur. Place à l'automatisation intelligente.

Le prochain step ? Ajoute des agents à ton crew. Un spécialiste SEO qui optimise tes articles. Un traducteur qui décline ton contenu en anglais. Un community manager qui adapte ton article pour LinkedIn.

Ton équipe d'IA t'attend. 🚀