Série · Certification Claude Certified ArchitectÉpisode 02 / 20
Claude Architect, épisode 2 : systèmes multi-agents et coordinateur
Quand un agent seul ne suffit plus : topologie en étoile, rôles du coordinateur, outil Task et AgentDefinition, lancement en parallèle, isolation du contexte. Schémas animés et quiz.
Dans l’épisode 1, on a construit un agent :
une boucle qui appelle Claude, exécute les outils demandés et s’arrête sur end_turn. Un
agent seul fait déjà beaucoup. Mais dès que la tâche grossit, il touche un plafond.
Cet épisode explique comment le dépasser : plusieurs agents spécialisés, orchestrés par un coordinateur. C’est l’un des sujets les plus testés de l’examen, parce qu’il se prête bien aux questions de diagnostic : « ce système est lent », « ce sous-agent répond à côté », « le rapport final rate l’essentiel ». À la fin de l’épisode, vous saurez trouver la cause.
Domaine 1 — Architecture agentique et orchestration (27 % de l'examen). Cet épisode couvre deux tâches :
- 1.2 — orchestrer un système multi-agents ;
- 1.3 — configurer l'appel d'un sous-agent.
Objectifs de l’épisode
À la fin, vous saurez :
- dire pourquoi un agent seul atteint ses limites, et quand passer à plusieurs ;
- dessiner la topologie en étoile et justifier sa règle d’or ;
- citer les quatre responsabilités du coordinateur ;
- décrire les quatre champs d’une
AgentDefinitionet qui a le droit d’utiliser l’outil Task ; - lancer des sous-agents en parallèle, et reconnaître un système qui les lance un par un ;
- expliquer l’isolation du contexte et comment transmettre l’information utile ;
- écrire une consigne de sous-agent qui fixe un objectif, pas une procédure ;
- diagnostiquer un résultat cloisonné et le corriger.
Prérequis : la boucle agentique de l’épisode 1 (stop_reason, paires tool_use /
tool_result, API sans état). Tout ce qui suit s’appuie dessus.
1. Le plafond de l’agent unique
Un agent seul fait tout lui-même : il cherche, lit, compare, rédige. Sur une petite tâche, c’est parfait. Sur une grosse, trois problèmes apparaissent.
| Limite | Ce qui se passe | Ce qu’on en voit |
|---|---|---|
| Débordement du contexte | chaque résultat d’outil s’ajoute à l’historique, qui finit par dépasser la fenêtre de contexte | la tâche s’arrête avant la fin, ou Claude « oublie » le début |
| Goulot séquentiel | l’agent traite les sous-tâches une à une, même quand elles ne dépendent pas les unes des autres | la latence s’additionne |
| Manque de spécialisation | une seule consigne doit couvrir la recherche, l’analyse et la rédaction | des réponses moyennes partout |
La réponse : confier chaque morceau à un agent spécialisé, qui travaille avec son propre contexte, réduit au strict nécessaire, et lancer ceux qui sont indépendants en parallèle.
Plusieurs agents, ce n'est pas gratuit : chaque sous-agent est un appel de plus, facturé, et une source d'erreur de plus. On passe au multi-agents quand l'une des trois limites est réellement atteinte, pas par principe.
2. La topologie en étoile
L’architecture de référence a une forme d’étoile (hub-and-spoke) : un coordinateur au centre, des sous-agents autour.
Pensez à une équipe de développement. Chaque développeur travaille sur sa fonctionnalité et rend compte à l’architecte. L’architecte assemble le tout et présente le résultat au client. Les développeurs ne se coordonnent pas entre eux dans le dos de l’architecte, et ce n’est pas eux qui présentent le produit final.
Pourquoi cette contrainte ? Parce qu’un seul point de passage apporte trois garanties :
- l’observabilité : tout ce qui se passe est visible au même endroit ;
- la gestion des erreurs centralisée : un seul acteur décide quoi faire d’un échec ;
- l’indépendance : les sous-agents ne dépendent pas les uns des autres, donc ils peuvent tourner en parallèle.
La topologie en étoile est la seule qui garantit une observabilité complète du système et une gestion des erreurs centralisée. Une option où deux sous-agents s'échangent directement des résultats est presque toujours la mauvaise réponse.
3. Les quatre responsabilités du coordinateur
Le coordinateur ne fait pas le travail de fond. Il fait tourner un cycle de quatre rôles.
- Décomposer. Transformer une demande vaste en morceaux précis. C’est le coordinateur qui décide s’il faut des sous-agents, combien, et lesquels.
- Déléguer. Lancer, pour chaque morceau, le sous-agent spécialisé qui convient : un chercheur, un analyste, un rédacteur.
- Agréger. Récupérer les résultats indépendants et en tirer une réponse cohérente. Ce n’est jamais le travail d’un sous-agent ordinaire.
- Gérer les erreurs. Un sous-agent peut échouer ou rendre un résultat inutilisable. Le coordinateur décide : réessayer, passer outre, ou signaler le problème.
Une remarque qui relie cet épisode au précédent : le coordinateur est lui-même un agent. Il tourne dans la même boucle agentique, et lancer un sous-agent n’est pour lui qu’un appel d’outil comme un autre. Toute la mécanique de l’épisode 1 reste valable.
4. L’outil Task : comment on lance un sous-agent
Un sous-agent se lance avec un outil dédié, l’outil Task. Le coordinateur le demande
avec un bloc tool_use, exactement comme il demanderait lookup_order dans l’épisode 1.
La différence, c’est ce que contient l’appel : non pas des paramètres de fonction, mais la
définition complète d’un agent.
Configurer le coordinateur
Pour que le coordinateur puisse déléguer, deux conditions doivent être réunies : l’outil Task figure dans ses outils, et il figure dans sa liste d’outils autorisés.
# Configuration de l'agent coordinateur
coordinator_config = {
"model": "claude-haiku-4-5", # économique pour orchestrer
"system": """You are a research coordinator.
Decompose tasks and delegate to specialized subagents.
Specify research goals and quality criteria.
Do NOT provide step-by-step procedures.""",
"tools": [
# L'outil Task permet de lancer des sous-agents
{
"type": "task", # type d'outil Task intégré
"name": "Task", # doit s'écrire exactement "Task" (T majuscule)
},
],
# allowedTools DOIT inclure "Task" explicitement
"allowedTools": ["Task", "compile_report"],
}Sans "Task" dans allowedTools, le coordinateur ne peut lancer aucun sous-agent :
il se retrouve à tout faire lui-même, et on revient au plafond de la section 1.
Le contenu de l’appel : l’AgentDefinition
Quand le coordinateur appelle Task, il doit fournir une AgentDefinition : quatre champs qui décrivent entièrement le sous-agent à créer. Cliquez sur chaque champ :
Qui est ce sous-agent ? Une étiquette qui définit son rôle exact dans le système.
- "description": "Web Search Specialist"
C'est aussi ce qui permet de savoir, dans les journaux, quel agent a produit quel résultat.
Que doit-il accomplir ? Les instructions propres à cette mission : l'objectif, les critères de qualité, et tout le contexte dont il a besoin.
- "prompt": "Research goal: find 5-8 recent papers (2022-2025) on offshore wind energy environmental impact in the EU. Quality criteria: peer-reviewed, include key findings, flag conflicting conclusions. Return as structured JSON."
C'est le champ le plus important, et le seul canal pour transmettre du contexte (section 6).
Avec quels outils ? La liste, isolée, des seuls outils que ce sous-agent a le droit d'utiliser.
- "allowed_tools": ["web_search", "read_url"]
Remarquez l'absence de "Task" : ce sous-agent ne peut pas en lancer d'autres (section 5).
Quel modèle le fait tourner ? Chaque sous-agent peut avoir le sien.
- "model": "claude-haiku-4-5"
Un modèle léger pour une recherche simple, un modèle plus capable pour une analyse délicate : c'est un levier de coût direct.
Assemblé, l’appel complet ressemble à ceci :
task_tool_call = {
"type": "tool_use",
"id": "tu_web_search_001",
"name": "Task",
"input": {
# Les champs de l'AgentDefinition
"description": "Web Search Specialist", # étiquette
"prompt": """Research goal: Find 5-8 recent papers (2022-2025)
on offshore wind energy environmental impact in the EU.
Quality criteria: peer-reviewed, include key findings,
flag conflicting conclusions. Return as structured JSON.""",
# Sous-agent limité à son rôle : PAS d'outil Task ici
"allowed_tools": ["web_search", "read_url"],
"model": "claude-haiku-4-5",
},
}Les extraits ci-dessus montrent la forme des données, celle que l'examen interroge. Dans le Claude Agent SDK, on déclare les sous-agents à l'avance avec AgentDefinition, et on autorise l'outil de lancement dans allowed_tools (exemple ci-dessous).
Deux différences de nom à connaître : la documentation actuelle appelle l'outil de lancement Agent, quand les versions plus anciennes et l'examen disent Task ; et le champ des outils du sous-agent s'y appelle tools. Vérifiez la documentation de votre version du SDK : le concept, lui, ne change pas.
from claude_agent_sdk import ClaudeAgentOptions, AgentDefinition
options = ClaudeAgentOptions(
allowed_tools=["Agent", "WebSearch", "WebFetch"], # "Task" dans les anciennes versions
agents={
"web-search": AgentDefinition(
description="Web Search Specialist. Use for literature searches.",
prompt="Find peer-reviewed sources. Flag conflicting conclusions.",
tools=["WebSearch", "WebFetch"],
model="haiku",
),
},
)5. Qui a le droit de lancer des sous-agents ?
| Rôle | Accès à Task | Pourquoi |
|---|---|---|
| Coordinateur | ✅ oui | indispensable : sans Task, il ne peut lancer aucun sous-agent |
| Sous-agent ordinaire | ❌ non | un exécutant ne lance pas d’autres agents : la délégation en cascade, incontrôlée, casse le système |
| Sous-coordinateur hiérarchique | ✅ oui | seulement s’il est explicitement conçu pour déléguer à un niveau inférieur |
Pourquoi interdire Task aux sous-agents ? Imaginez qu’un chercheur puisse lancer d’autres chercheurs, qui en lancent d’autres… On perd la forme en étoile, l’observabilité, le contrôle des coûts, et on s’expose à une boucle de délégation sans fin. Un seul acteur délègue : le coordinateur.
La seule exception est voulue et documentée : dans une architecture hiérarchique, un sous-coordinateur pilote sa propre équipe. Il reçoit Task parce que c’est son rôle, pas par accident.
Le coordinateur a besoin de Task, les sous-agents non. Une question décrit des sous-agents qui se lancent les uns les autres, ou des coûts qui explosent ? Cherchez un sous-agent qui a reçu "Task" dans ses outils autorisés sans être conçu comme sous-coordinateur.
6. Lancer en parallèle, pas les uns après les autres
C’est ici que le multi-agents devient vraiment intéressant. Le coordinateur peut lancer plusieurs sous-agents en même temps, à une condition précise.
La règle : pour lancer des sous-agents en parallèle, le coordinateur émet plusieurs appels Task dans une seule réponse, et non un appel par tour.
Voici la réponse d’un coordinateur qui lance trois chercheurs en parallèle. Les trois blocs
tool_use sont dans le même tableau content :
coordinator_response = {
"role": "assistant",
"content": [
{"type": "text", "text": "Researching in parallel across 3 domains."},
# Tâche 1
{"type": "tool_use", "id": "tu_env", "name": "Task",
"input": {"description": "Environmental Researcher", "prompt": "...",
"allowed_tools": ["web_search"], "model": "claude-haiku-4-5"}},
# Tâche 2
{"type": "tool_use", "id": "tu_econ", "name": "Task",
"input": {"description": "Economic Data Researcher", "prompt": "...",
"allowed_tools": ["web_search"], "model": "claude-haiku-4-5"}},
# Tâche 3
{"type": "tool_use", "id": "tu_policy", "name": "Task",
"input": {"description": "EU Policy Analyst", "prompt": "...",
"allowed_tools": ["web_search"], "model": "claude-haiku-4-5"}},
],
# ↑ Les TROIS dans le même tableau content = exécution PARALLÈLE
# Un appel par tour = anti-pattern séquentiel
}Rejouez le déroulé, étape par étape
L'utilisateur demande un rapport sur l'impact de l'éolien en mer dans l'UE : environnement, économie, réglementation.
- user : « Rapport sur l'éolien en mer dans l'UE »
Le coordinateur décompose : trois domaines indépendants, donc trois sous-agents.
Le coordinateur répond avec stop_reason = "tool_use" et trois blocs tool_use dans une seule réponse.
- user : « Rapport sur l'éolien en mer dans l'UE »
- assistant : [Task tu_env] [Task tu_econ] [Task tu_policy]
Les trois sous-agents démarrent en même temps, chacun avec son contexte vierge et sa propre AgentDefinition.
Chaque sous-agent fait tourner sa propre boucle et rend son résultat. Les trois tool_result repartent dans un seul message user, chacun avec son tool_use_id.
- user : « Rapport sur l'éolien en mer dans l'UE »
- assistant : [Task tu_env] [Task tu_econ] [Task tu_policy]
- user : [tool_result tu_env] [tool_result tu_econ] [tool_result tu_policy]
C'est la règle de l'épisode 1 : une demande groupée appelle une réponse groupée.
Le coordinateur agrège : il croise les trois résultats et répond avec stop_reason = "end_turn".
Durée totale : celle du sous-agent le plus lent, pas la somme des trois.
« Le système est environ trois fois plus lent que prévu. » Avec trois sous-agents indépendants, c'est la signature du lancement séquentiel : le coordinateur émet un appel Task par tour. La correction : regrouper les appels Task dans une seule réponse.
7. L’isolation du contexte : le piège n° 1
C’est le point que l’examen teste le plus sur la tâche 1.3.
Un sous-agent démarre avec une mémoire vide. Il n’hérite de rien : ni de l’historique de conversation du coordinateur, ni des résultats d’outils précédents, ni d’aucun contexte implicite. Il ne sait que ce qu’on lui transmet explicitement.
Reprenons l’image de l’équipe. Une cheffe de projet est sur le dossier depuis trois semaines : elle connaît le problème, les contraintes, les préférences du client, ce qui a déjà été tenté. Vous embauchez un prestataire pour une tâche précise. Il arrive le matin sans rien savoir de tout ça. Si personne ne lui fait de briefing, il refera des choses déjà faites, ignorera les contraintes, et rendra un travail à côté.
Le sous-agent, c’est ce prestataire. Et le briefing, c’est le coordinateur qui le fait.
Franchir le sas : l’injection explicite
Si un sous-agent a besoin d’une information de l’historique, le coordinateur doit :
- l’extraire lui-même de sa conversation ;
- l’écrire explicitement dans le champ
promptde l’appel Task.
- user → coordinateur
Résume l'avancement du projet sur le 3ᵉ trimestre. Le client refuse toute dépense au-delà de 50 000 €. - coordinateur → Task
prompt : « Objectif : synthèse de l'avancement du projet, T3 uniquement. Contrainte client : budget plafonné à 50 000 €, signaler tout dépassement. Rendre une liste à puces. »
Sans la deuxième bulle, le sous-agent ignorerait la période et le plafond de budget : il produirait une synthèse générique, hors sujet.
Un sous-agent rend un résultat hors sujet, en doublon, ou qui ignore la situation ? Dans presque tous les cas, la cause est la même : le coordinateur n'a pas injecté explicitement le contexte nécessaire dans le prompt de l'appel Task. Ce n'est ni le modèle, ni la taille du contexte.
8. Consignes d’orchestration : l’objectif, pas la procédure
Dernier levier : la manière d’écrire le prompt d’un sous-agent.
| ❌ Anti-pattern : le « comment » | ✅ Bonne pratique : le « quoi » et le « pourquoi » |
|---|---|
| une procédure pas à pas | un objectif et des critères de qualité |
| « Va sur Google Scholar, prends les 5 premiers résultats, résume-les. » | « Trouve 5 à 8 articles relus par des pairs, publiés entre 2022 et 2025. Signale les conclusions contradictoires. » |
| fragile : si le site est en panne ou a changé, le sous-agent échoue ou improvise mal | robuste : le sous-agent choisit sa propre méthode avec ses outils |
| enferme un modèle capable dans un rôle d’exécutant | exploite sa capacité à raisonner |
Pourquoi ? Une procédure rigide casse au premier imprévu. Un objectif clair, assorti de critères pour juger le résultat, laisse le sous-agent trouver le meilleur chemin, tout en gardant le contrôle sur ce qui compte : la qualité de ce qu’il rend.
C’est d’ailleurs ce que dit la consigne système du coordinateur, en section 4 : « Specify research goals and quality criteria. Do NOT provide step-by-step procedures. »
9. Scénario d’examen : le rapport cloisonné
Mettons tout ensemble avec un cas typique.
La situation. Un coordinateur lance quatre sous-agents en parallèle pour un rapport complet : articles scientifiques, presse, rapports gouvernementaux, opinion sur les réseaux sociaux. Chacun fait parfaitement son travail. Le système est rapide. Pourtant, le rapport final passe à côté de l’essentiel : il juxtapose quatre résumés et ne dit rien de ce qui se passe à leurs intersections.
Les fausses pistes. Ce n’est pas une fenêtre de contexte trop petite, ni un mauvais outil, ni une consigne système trop longue : chaque sous-agent a bien fait son travail.
La vraie cause. Une décomposition trop étroite : quatre couloirs indépendants, et personne n’est chargé de la synthèse transversale.
La correction. Ajouter une étape d’agrégation explicite : un dernier passage du coordinateur, consacré à chercher les intersections, ou un cinquième sous-agent dédié à la synthèse, qui rend son résultat au coordinateur.
Un système multi-agents qui rend un résultat incomplet ou cloisonné souffre presque toujours d'une étape manquante dans le pipeline, pas d'un problème de configuration du modèle.
Fiche de révision
| Concept | La règle | Le diagnostic d’examen |
|---|---|---|
| Topologie | tout passe par le coordinateur | garantit l’observabilité et la gestion centralisée des erreurs |
| Outil Task | le coordinateur l’a, les sous-agents non | empêche les boucles de délégation incontrôlées |
| AgentDefinition | description, prompt, allowed_tools, model |
le prompt est le seul canal de contexte |
| Lancement parallèle | plusieurs appels Task dans une réponse | corrige une latence environ ×3 |
| Isolation du contexte | les sous-agents n’héritent de rien | toujours injecter le contexte explicitement |
| Consignes | objectif + critères, pas de procédure | les procédures rigides cassent au premier imprévu |
| Résultat cloisonné | causé par une décomposition trop étroite | il manque une étape de synthèse |
Glossaire
| Terme | Définition |
|---|---|
| coordinateur | l’agent central qui décompose, délègue, agrège et gère les erreurs |
| sous-agent | un agent spécialisé, lancé par le coordinateur pour une mission précise |
| topologie en étoile (hub-and-spoke) | architecture où toute communication passe par le coordinateur |
| outil Task | l’outil qui permet de lancer un sous-agent (appelé Agent dans les versions récentes du SDK) |
| AgentDefinition | les quatre champs qui décrivent un sous-agent : description, prompt, outils, modèle |
allowedTools |
la liste des outils qu’un agent a le droit d’utiliser |
| isolation du contexte | un sous-agent démarre sans aucune mémoire de la conversation du coordinateur |
| injection explicite | le coordinateur recopie dans le prompt du sous-agent l’information dont il a besoin |
| sous-coordinateur hiérarchique | un sous-agent explicitement conçu pour déléguer à son tour |
Quiz d’entraînement
Ces questions sont de moi, écrites dans le style de l’examen. Ce ne sont pas des questions officielles. Choisissez une réponse : la correction s’affiche aussitôt, et le score se calcule en bas. Connecté, votre meilleur score est gardé dans votre compte, et « Recommencer » efface seulement vos réponses à l’écran. Sans compte, rien n’est enregistré.
Pour la suite
On sait maintenant lancer, configurer et orchestrer des sous-agents, et diagnostiquer les quatre pannes typiques : délégation impossible, lenteur, sous-agent hors sujet, rapport cloisonné. L’épisode 3 explique comment transmettre ce contexte sans rien perdre, et comment gérer les sessions dans le temps.