Aller au contenu principal

Module 4 — Processus séquentiel et processus hiérarchique

Les agents sont définis, les tâches aussi. Reste à décider qui exécute quoi et dans quel ordre. CrewAI expose deux processus : séquentiel et hiérarchique. Choisir le mauvais est l'une des sources les plus fréquentes de résultats médiocres, non parce que l'un est meilleur que l'autre, mais parce que chacun sert un cas précis.

Le processus séquentiel : simple, prévisible, économique

Le processus séquentiel exécute les tâches dans l'ordre où vous les avez listées. La sortie de chacune est transmise à la suivante, sans arbitrage. C'est le mode par défaut, et c'est celui qui doit rester votre choix par défaut.

from crewai import Crew, Process

equipe = Crew(
agents=[analyste, redacteur, relecteur],
tasks=[tache_analyse, tache_redaction, tache_relecture],
process=Process.sequential,
verbose=True,
)

resultat = equipe.kickoff()

Chaque tâche est attribuée à un agent que vous avez désigné (Task(agent=…)). La trace d'exécution est linéaire, la facture est prévisible — un appel par tâche, plus les appels d'outils —, et l'ordonnancement se lit sans effort.

Le séquentiel présente cependant une limite honnête. Si une tâche produit un résultat incomplet, la suivante travaille sur ce résultat incomplet sans possibilité de retour. Il n'y a pas d'arbitre pour dire « recommence cette étape avec cette correction ». Cette limite est acceptable pour la majorité des cas ; elle devient bloquante quand l'incertitude est trop grande à l'avance.

Le processus hiérarchique : un gestionnaire arbitre

Le processus hiérarchique introduit un agent gestionnaire qui reçoit la liste des tâches et décide quel agent doit faire quoi, dans quel ordre, et éventuellement qui doit refaire. Le gestionnaire n'est pas défini par vous : il est fourni par CrewAI, alimenté par un modèle que vous choisissez, et il utilise les descriptions des agents et des tâches pour prendre ses décisions.

equipe = Crew(
agents=[analyste, redacteur, relecteur],
tasks=[tache_analyse, tache_redaction, tache_relecture],
process=Process.hierarchical,
manager_llm=ChatOpenAI(model="gpt-4o", temperature=0.1),
verbose=True,
)

Trois différences majeures avec le séquentiel :

  1. Un modèle supplémentaire — le manager_llm — est appelé pour orchestrer. Cet appel s'ajoute à chaque décision d'attribution.
  2. L'ordre d'exécution n'est pas garanti : le gestionnaire peut appeler le relecteur avant le rédacteur si sa lecture des tâches le lui suggère.
  3. Les agents peuvent être invités plusieurs fois sur la même tâche, ou une tâche être « refaite » avec une correction.

Cette souplesse a un prix : le nombre d'appels au LLM peut doubler ou tripler, et deux exécutions consécutives sur les mêmes entrées ne produisent plus la même trace.

Quand chacun est-il pertinent ?

Le tableau ci-dessous, à connaître, distingue les deux modes sur les critères qui comptent en production.

CritèreSéquentielHiérarchique
Ordre d'exécutionFixe, celui du codeDécidé à l'exécution
Nombre d'appels au LLMUn par tâche, plus outilsMultiplié par les appels du gestionnaire
Reprise en cas d'échec localNonOui, le gestionnaire peut redemander
Prévisibilité de la factureÉlevéeBasse
Coût en jetonsBasÉlevé (contexte du gestionnaire cumulé)
Cas idéalChaîne éditoriale connueRecherche exploratoire

Pour notre fil rouge — rédiger dix pages de documentation à partir de spécifications identifiées — le séquentiel est plus adapté. La chaîne est connue, l'ordre est stable, la facture doit tenir. Le hiérarchique se justifierait si l'analyste rencontrait régulièrement des spécifications qu'il ne comprend pas et devait renvoyer la balle à un autre agent.

Le piège du hiérarchique « choisi parce que c'est mieux »

C'est le piège numéro un des projets CrewAI qui explosent en coût. Le hiérarchique donne l'impression de sophistication et il séduit les démonstrations, mais il triple la facture sans améliorer le résultat quand la chaîne est linéaire. Si vous ne pouvez pas nommer une question précise que le gestionnaire va trancher — « faut-il refaire l'analyse ? » « quel agent est le plus qualifié pour ce paragraphe ? » — vous n'avez pas besoin d'un gestionnaire.

Retenez la règle pratique : hiérarchique quand l'ordre n'est pas connu à l'avance, séquentiel dans tous les autres cas. Une chaîne éditoriale, une extraction, un traitement par étapes définies : séquentiel. Un problème ouvert dont la décomposition dépend du contenu de l'entrée : hiérarchique.

Ce que le hiérarchique ne remplace pas

Un hiérarchique ne compense pas des expected_output mal rédigées, ni des agents mal ciblés. Le gestionnaire hérite des flous de vos définitions et les amplifie. Corrigez la chaîne séquentielle avant de la remplacer par un hiérarchique — sinon vous automatisez le désordre.

En résumé

  • Le séquentiel exécute les tâches dans l'ordre du code, un appel par tâche : simple, prévisible, économique.
  • Le hiérarchique ajoute un gestionnaire qui décide de l'attribution et peut redemander : souple mais coûteux et variable.
  • Le choix se fait sur l'ordre : connu → séquentiel, incertain → hiérarchique. Jamais l'inverse.
  • Le hiérarchique n'améliore pas une chaîne dont les tâches sont mal spécifiées : il en révèle et en multiplie les défauts.

Module suivant : les outils partagés que les agents peuvent utiliser pour lire, chercher et agir.