Modèles d'orchestration · LangGraph vs CrewAI · MCP + A2A · Observabilité production
Votre équipe a livré une démo mono-agent qui fonctionne dans Cursor — puis la production exige recherche parallèle, isolation des outils et portes d'approbation humaine sous un budget de tokens partagé. Un agent monolithique heurte les limites de contexte, la dérive du touche-à-tout, l'absence de concurrence et le point de défaillance unique. Ce guide s'adresse aux ingénieurs IA et aux responsables techniques qui passent aux systèmes multi-agents (MAS) : six modèles d'orchestration, une matrice LangGraph vs CrewAI vs AutoGen, la pile protocolaire MCP + A2A, un runbook production en six étapes (PostgresSaver, interruptions HITL, disjoncteurs), les données d'observabilité MAST sur 1 642 traces, les pièges à éviter et une cartographie des tendances 2026.
Un agent LLM isolé peut bien se comporter en démo : un prompt système, une liste d'outils, un fil de conversation. Sous charge réelle, il devient le goulot d'étranglement. Le benchmark interne Agent Bake-Off de Google a montré que les équipes multi-agents terminent des workflows complexes en 10 minutes contre 60 minutes pour un agent unique — un gain de vitesse de 6×. Par ailleurs, l'étude AdaptOrch a constaté que la topologie d'orchestration expliquait 12 à 23 % de variance supplémentaire sur le succès des tâches par rapport au changement de modèle sous-jacent — l'architecture l'emporte sur le choix de modèle.
Avant de choisir un framework, cartographiez les limites structurelles qui imposent un découpage MAS.
Saturation de la fenêtre de contexte : recherche, code, journaux et sorties d'outils s'accumulent dans un seul fil. La qualité de récupération chute ; l'agent oublie les contraintes posées dix tours plus tôt.
Prompting touche-à-tout : une seule persona ne peut pas exceller simultanément en tuning SQL, revue juridique et rédaction UI. L'interférence d'instructions augmente le taux d'hallucinations.
Pas de vraie concurrence : les appels d'outils séquentiels se bloquent mutuellement. Les sous-tâches indépendantes (scraper trois sites, lancer trois suites de tests) gaspillent du temps mur.
Point de défaillance unique : un mauvais résultat d'outil ou une boucle incontrôlée tue toute la session. Aucun domaine d'isolation pour les nouvelles tentatives ou les rollbacks.
Attribution de coûts opaque : la finance ne peut pas dire quelle étape a consommé les tokens. Sans budget par agent, un chercheur verbeux épuise le plafond mensuel.
La topologie l'emporte sur le modèle. AdaptOrch a montré que la structure d'orchestration explique 12 à 23 % de variance de plus que le choix de modèle — concevez le graphe avant de monter de gamme GPT.
Un système multi-agents (MAS) est un ensemble coordonné d'agents alimentés par LLM qui partagent l'état, délèguent des sous-tâches et exposent des capacités spécialisées. Chaque agent n'est pas qu'une variante de prompt — c'est un runtime borné avec ses propres outils, périmètre mémoire et politique de terminaison.
| Trait | Signification pour les agents LLM | Signal production |
|---|---|---|
| Autonomie | Choisit la prochaine action sans saisie humaine à chaque étape | Nécessite des garde-fous : itérations max, plafonds budgétaires |
| Réactivité | Répond aux résultats d'outils et aux messages pairs | Exige un schéma de messages structuré, pas seulement du texte libre |
| Proactivité | Initie des sous-tâches lorsque les objectifs sont incomplets | Peut provoquer des boucles incontrôlées sans contrôles superviseur |
| Capacité sociale | Délègue et négocie avec d'autres agents | Dépend de la découverte A2A et de contrats de passation clairs |
| Topologie | Flux de contrôle | Idéal pour | Risque |
|---|---|---|---|
| Centralisée | Un orchestrateur route tous les messages | Pistes d'audit prévisibles, application stricte des politiques | Enflure du contexte orchestrateur ; SPOF au routeur |
| Décentralisée | Les pairs communiquent directement ; pas de chef unique | Essaims résilients, collaboration émergente | Difficile à déboguer ; terminaison non garantie |
| Hiérarchique | Superviseur délègue aux workers ; remontée vers le haut | Workflows entreprise avec niveaux d'approbation | Complexité du prompt superviseur ; latence empilée |
La plupart des stacks production 2026 adoptent par défaut l'hiérarchique avec un routeur centralisé fin pour l'authentification et l'application des budgets — un hybride des deux premières lignes.
Les modèles sont composables. Une stack support client peut utiliser un superviseur qui lance des chercheurs en parallèle, puis enchaîne la synthèse vers un rédacteur via un pipeline. Choisissez le minimum de modèles correspondant à la structure de dépendances.
Les étapes s'exécutent dans un ordre fixe : ingestion → analyse → brouillon → revue. L'état transite par un nœud de graphe partagé. Idéal lorsque chaque étape dépend de la sortie précédente (ETL, génération de rapports). LangGraph modélise cela comme un StateGraph linéaire avec des réducteurs d'état typés.
L'orchestrateur lance N branches indépendantes, puis agrège les résultats. L'API Send de LangGraph dispatche des nœuds workers dynamiques depuis une étape map ; un nœud réducteur fusionne les sorties. À utiliser pour la recherche multi-sources, le vote d'ensemble ou la revue de code par shard.
from langgraph.types import Send
def fan_out(state):
return [Send("research_worker", {"query": q}) for q in state["queries"]]
def fan_in(state):
return {"report": synthesize(state["worker_results"])}
Un superviseur classifie l'intention et route vers des spécialistes (codeur, DBA, relecteur). Ajoutez une voie rapide par mots-clés : correspondance regex ou embedding sur les intentions à haute confiance pour éviter l'appel LLM de routage, économisant latence et tokens sur les requêtes type FAQ.
Les agents transfèrent le contrôle de conversation via des outils handoff. Microsoft AutoGen excelle ici : adapté au brainstorming ouvert où le prochain locuteur émerge. Plus difficile à auditer qu'un graphe fixe.
Les agents lisent et écrivent un magasin d'artefacts partagé plutôt que de s'envoyer des messages directs. Un planificateur publie les objectifs ; les spécialistes ajoutent des sections. Convient à l'édition collaborative de documents et aux bases de connaissances partagées avec résolution de conflits au niveau du store.
Les systèmes réels combinent les modèles : superviseur hiérarchique → fan-out parallèle pour la recherche → pipeline séquentiel pour l'emballage final. Dessinez explicitement quels segments sont sync vs async avant d'écrire le code.
| Modèle | Concurrence | Débogage | Framework typique |
|---|---|---|---|
| Pipeline séquentiel | Faible | Élevé | LangGraph, CrewAI séquentiel |
| Fan-out / Fan-in | Élevée | Moyen | LangGraph Send |
| Superviseur-worker | Moyenne | Élevé | LangGraph, CrewAI hiérarchique |
| Essaim | Moyenne | Faible | AutoGen, Swarm SDK |
| Tableau noir | Moyenne | Moyen | Custom + store partagé |
| Hybride | Variable | Moyen | LangGraph (le plus courant) |
Les trois ont des utilisateurs en production en 2026, mais optimisent des styles de contrôle différents. Faites correspondre le framework à la topologie, pas à l'affinité de marque.
| Dimension | LangGraph | CrewAI | AutoGen |
|---|---|---|---|
| Modèle mental | Graphe orienté état | Équipe par rôles | Agents conversables + handoffs |
| Persistance d'état | Checkpoints natifs (PostgresSaver) | Backends mémoire, moins natif graphe | Historique chat par agent |
| Human-in-the-loop | Nœuds interrupt() natifs | Crochets saisie humaine au niveau tâche | Pattern UserProxyAgent |
| Parallélisme | Send API, sous-graphes | Exécution async des tâches | Parallélisme group chat |
| Meilleur fit | Branches complexes, checkpoints prod | Prototypes crew rapides, clarté des rôles | Chat multi-agents exploratoire |
| Attention | Courbe d'apprentissage DSL graphe | Moins de contrôle fin à l'échelle | Chaînes handoff non déterministes |
Besoin de checkpoints durables + portes HITL ? → LangGraph.
Besoin d'une démo crew en une après-midi avec YAML de rôles lisible ? → CrewAI.
Besoin de négociation agent-à-agent ouverte ? → AutoGen (ou Swarm).
Besoin du contrôle graphe et des handoffs chat ? → Orchestrateur LangGraph encapsulant des workers AutoGen.
L'intégration d'outils et la collaboration entre agents sont des problèmes distincts. Les stacks 2026 les traitent comme un gâteau protocolaire à deux niveaux : accès vertical aux outils en bas, délégation horizontale entre agents en haut.
| Couche | Protocole | Connecte | Analogie |
|---|---|---|---|
| Verticale | MCP (Model Context Protocol) | Agent ↔ outils, données, prompts | USB-C pour la découverte d'outils |
| Horizontale | A2A (Agent-to-Agent) | Agent ↔ délégation agent | HTTP pour le service mesh |
Chaque agent publie une Agent Card — un document JSON décrivant les capacités, schémas d'entrée et URL de point de terminaison. Les pairs appellent discover_and_delegate pour router les sous-tâches sans listes d'agents codées en dur.
{
"name": "sql-analyst-agent",
"description": "Analyse Postgres en lecture seule et plans d'exécution",
"url": "https://agents.internal/a2a/sql-analyst",
"capabilities": ["query", "explain", "schema-introspect"],
"input_schema": {
"type": "object",
"properties": { "question": { "type": "string" } }
}
}
async def discover_and_delegate(task: str, registry: AgentRegistry):
card = await registry.find_best_match(task)
if not card:
raise NoAgentError(task)
payload = {"task": task, "caller": "supervisor-01"}
return await a2a_client.send(card.url, payload)
MCP gère tools/list à l'intérieur de chaque agent ; A2A gère quel agent possède la tâche. Consultez notre guide protocole MCP pour la couche verticale en détail.
Les démos utilisent un état en mémoire. La production exige la reprise après crash, l'approbation humaine sur les actions à haut risque et des plafonds de coûts. Quatre primitives couvrent la plupart des équipes avant une infra sur mesure.
MAX_ITERATIONS = 25
class ProductionGuardrails:
def __init__(self, budget: TokenBudgetManager, breaker: CircuitBreaker):
self.budget = budget
self.breaker = breaker
self.iterations = 0
def before_step(self, agent_id: str, est_tokens: int):
self.iterations += 1
if self.iterations > MAX_ITERATIONS:
raise RunawayLoopError()
self.budget.charge(agent_id, est_tokens)
self.breaker.check()
Dessinez le graphe sur papier d'abord : marquez les arêtes sync, branches parallèles et points d'interruption HITL avant d'écrire les nœuds LangGraph.
Câblez PostgresSaver : pointez les checkpoints vers une instance Postgres managée ; vérifiez la reprise après kill du processus.
Enregistrez les outils MCP par agent : scopez chaque agent à des sous-ensembles d'outils moindre privilège ; ne partagez jamais une méga-liste d'outils.
Ajoutez des nœuds interrupt : placez deploy, delete, payment et export PII derrière approbation humaine.
Activez TokenBudgetManager + CircuitBreaker : fixez des plafonds journaliers par agent ; alertez à 80 % de consommation.
Livrez l'observabilité avant les fonctionnalités : spans OpenTelemetry par étape agent ; tableau de bord CORE_METRICS avant d'ajouter l'agent n°7.
Exercice chaos : tuez le worker au milieu du graphe, redémarrez et confirmez que PostgresSaver reprend au dernier checkpoint sans effets de bord dupliqués.
On ne corrige pas ce qu'on ne peut pas attribuer. L'étude MAST a analysé 1 642 traces d'exécution multi-agents et constaté que les modes d'échec se regroupent de façon prévisible — la plupart relèvent de la conception, pas du QI du modèle.
Les équipes investissent massivement dans les modèles mais sous-investissent dans la télémétrie : les répondants MAST ont consacré 57 % du temps d'ingénierie au durcissement production contre seulement 8 % à l'observabilité — un déséquilibre qui répète les mêmes échecs en production.
Encapsulez chaque invocation agent dans des spans OpenTelemetry : agent_id, parent_span, tool_name, token_in/out, latency_ms. Exportez vers votre APM existant. Définissez CORE_METRICS comme tableau de bord minimum :
| Métrique | Pourquoi c'est important |
|---|---|
| task_success_rate | Complétion de l'objectif de bout en bout, pas la précision par étape |
| tokens_per_success | Efficacité coût ; les pics révèlent les boucles incontrôlées |
| p95_agent_latency | Identifie le spécialiste ou l'outil lent |
| handoff_error_rate | Incompatibilités de schéma A2A et messages perdus |
| hitl_queue_depth | Goulots d'approbation bloquant la progression du graphe |
Ajoutez LLM-as-Judge sur un échantillon de traces : un agent évaluateur séparé note l'alignement objectif et la cohérence factuelle. Utilisez-le hors ligne pour les tests de régression, pas inline sur chaque requête (coût).
Pollution de contexte : les workers renvoient des dumps HTML bruts en amont. Tronquez, résumez ou stockez dans le tableau noir ; passez des handles, pas des payloads.
Boucles incontrôlées : les agents se redélèguent indéfiniment. Imposez MAX_ITERATIONS, compteurs de visites par arête et tokens d'arrêt superviseur.
Sur-ingénierie : quinze agents pour un workflow en trois étapes. Restez dans la zone 3–8 agents sauf si les domaines sont vraiment isolés.
Écart démo-prod : état en mémoire et pas de budgets. Encapsulez les graphes avec ProductionGuardrails avant exposition aux clients.
Sync des branches parallèles : le fan-in s'exécute avant la fin de toutes les branches. Utilisez defer=True sur les arêtes LangGraph pour que le réducteur attende tous les workers Send.
graph.add_edge("fan_out", "fan_in", defer=True)
Erreur la plus coûteuse : ajouter des agents pour corriger des problèmes de prompt. Ajustez les prompts spécialisés et les schémas de passation avant de créer un nœud supplémentaire.
Avant de choisir un framework ou de dessiner la topologie, utilisez cet arbre pour positionner rapidement le bon modèle. Il n'existe pas de réponse unique, mais poser les questions dans le bon ordre évite 80 % de la sur-ingénierie.
Votre tâche a-t-elle des étapes linéaires strictement dépendantes ?
├─ Oui → Les sous-tâches peuvent-elles s'exécuter en parallèle ?
│ ├─ Non → 【Pipeline séquentiel】
│ └─ Oui → 【Fan-out parallèle + pipeline séquentiel hybride】
│
└─ Non → Un agent a-t-il l'autorité de décision ?
├─ Oui → L'échelle exige-t-elle des sous-équipes ?
│ ├─ Non → 【Superviseur-worker hiérarchique】
│ └─ Oui → 【Hiérarchique (superviseurs de superviseurs)】
│
└─ Non → La tâche est-elle asynchrone longue durée ?
├─ Oui → 【Architecture tableau noir】
└─ Non → Nombre d'agents ≤ 5 ?
├─ Oui → 【Essaim (définir des règles d'arrêt)】
└─ Non → 【Recomposer en mode hiérarchique】
Les sous-tâches sont-elles indépendantes ? Oui → Fan-out parallèle. Non → continuer.
L'ordre est-il strict ? Oui → Pipeline séquentiel. Non → continuer.
Besoin de dialogue émergent ? Oui → Essaim / AutoGen. Non → Superviseur-worker.
Besoin de reprise crash-safe ? Oui → LangGraph + PostgresSaver. Non → Voie rapide CrewAI.
Découverte d'agents inter-équipes ? Oui → Publier Agent Cards + A2A. Outils seulement → MCP par agent.
Les agents hébergés sur portable s'endorment à capot fermé, manquent de supervision fiable pour les checkpoints LangGraph longue durée et peinent avec les chaînes d'outils macOS natives (Xcode, Keychain, CI Apple). Un VPS Linux pur gère bien les workers API sans état mais pas les fermes de build iOS. Pour les équipes qui font tourner des graphes multi-agents 24 h/24 aux côtés de pipelines CI/CD iOS et de serveurs d'outils MCP, la location cloud Mac Mini M4 VpsMesh regroupe disponibilité, KVM distant et OpEx mensuel prévisible en un hôte de niveau production. Consultez les tarifs location Mac Mini M4, le centre d'aide et la page de commande pour valider un pilote d'un mois avant d'engager votre stack d'orchestration.
La plupart des systèmes en production utilisent entre 3 et 8 agents spécialisés. Moins de trois ne justifie rarement la surcharge d'orchestration ; plus de huit signale généralement une sur-ingénierie, sauf si les domaines sont clairement isolés et observables par agent. Commencez avec un superviseur plus deux workers, mesurez tokens_per_success, puis scindez uniquement lorsqu'un agent déborde systématiquement son contexte.
MCP est la couche verticale : chaque agent se connecte aux outils et aux données via tools/list et des descripteurs JSON Schema. A2A est la couche horizontale : les agents découvrent leurs pairs via des Agent Cards et délèguent des sous-tâches. Utilisez MCP à l'intérieur de chaque agent ; utilisez A2A entre agents. Consultez notre guide MCP pour la couche outils et la section 05 de cet article pour les modèles de délégation.
Pas toujours. Les workers LangGraph sans état et MCP distant via HTTP+SSE peuvent tourner sur des VM Linux cloud. Lorsque les agents dépendent des chaînes d'outils macOS, des builds Xcode, des secrets Keychain, ou que vous avez besoin de sessions checkpoint ininterrompues, une location Mac Mini M4 est moins frictionnelle que de lutter contre la mise en veille du portable. Commencez par un essai d'un mois pour mesurer la latence des checkpoints et la consommation de tokens. Tarifs : location Mac Mini M4. Aide : centre d'aide. Commande : page de commande.