AI Cert Prep
Saisissez un mot-clé pour rechercher dans la documentation.

Domaines

D1 · Agentic Architecture and Orchestration

Choisir entre flux de travail et agents, les six patrons d’orchestration, la boucle agentique et la terminaison pilotée par stop_reason, les hiérarchies coordinateur/sous-agents, la conception de l’escalade, la propagation d’erreurs, l’état et la mémoire, ainsi que le coût et la latence des systèmes multi-agents.

C’est le domaine le plus lourd de l’examen Architect — environ 16 des 60 items — et c’est là que les dix anti-patterns mordent le plus fort. Il évalue votre capacité à examiner un système décrit et à choisir l’architecture correcte la plus simple : un prompt unique, un flux de travail fixe ou un véritable agent ; et, s’il s’agit d’un agent, quel patron d’orchestration, comment il se termine, comment il escalade et comment il échoue sans danger. Presque chaque item est un piège entre une réponse sur-conçue et une réponse aveugle aux contraintes.

Objectifs d’apprentissage

À la fin de cette page, vous devriez savoir :

  1. Appliquer le cadre de décision workflow vs agent (flux de travail vs agent) et le justifier au regard des contraintes.
  2. Choisir parmi les six patrons d’orchestration (prompt chaining, routing, parallelization, orchestrator-workers, evaluator-optimizer, autonomous agent) et décrire les modes de défaillance de chacun.
  3. Mettre en œuvre la boucle agentique et piloter la terminaison depuis stop_reason — non par l’analyse du langage naturel (anti-pattern 1) ni par des plafonds d’itérations arbitraires (anti-pattern 2).
  4. Concevoir des hiérarchies coordinateur/sous-agents avec passage de contexte explicite, agrégation des résultats et gestion des défaillances partielles.
  5. Concevoir l’escalade sur demande explicite (immédiate) ou par capacité (résoudre d’abord) — jamais sur le sentiment ni la confiance auto-déclarée (anti-patterns 4-5).
  6. Choisir entre hooks et prompts pour l’application des règles (anti-pattern 3) et entre Managed Agents et Agent SDK/Tool Runner pour l’hébergement.
  7. Propager des erreurs structurées (catégorie, réessayable, résultats partiels) avec idempotence et réessais (anti-patterns 6-7).
  8. Trancher entre conversation, fichiers, base de données et memory tool pour l’état, et modéliser le coût et la latence des systèmes multi-agents avec une observabilité par agent.

1.1 Workflow vs agent : la première décision

Un agent est un système où le modèle dirige dynamiquement son propre processus et son usage des outils, décidant de la prochaine action dans une boucle jusqu’à ce qu’il estime la tâche terminée. Un workflow (flux de travail) est un système où le code orchestre le modèle par des chemins prédéfinis — le flux de contrôle est écrit par vous, non décidé par le modèle.

La posture par défaut de l’examen, directement issue des recommandations d’Anthropic, est la suivante : trouver la solution la plus simple et n’augmenter la complexité que lorsqu’elle améliore les résultats de façon démontrable. Un prompt unique bien conçu bat un flux de travail ; un flux de travail bat un agent ; un agent bat un système multi-agents. N’ajoutez de l’autonomie que lorsque la tâche exige réellement une prise de décision ouverte à l’exécution.

Signal dans l’énoncéPointe versPourquoi
Étapes connues à l’avance, ordre fixeWorkflowLe flux de contrôle déterministe est moins cher, plus rapide, testable
Branchement prévisible sur une entrée classifiableWorkflow (routing)Vous pouvez énumérer les branches
La tâche exige des décisions à l’exécution que vous ne pouvez pas énumérerAgentSeul le modèle peut décider le chemin depuis le contexte
Recherche, débogage, exploration ouvertsAgentNombre et ordre des étapes inconnus au départ
Latence, coût ou auditabilité primordiauxWorkflowMoins d’appels au modèle, déterministe, facile à tracer
Un seul appel au modèle avec un bon prompt suffitPrompt uniqueNe construisez pas de système du tout

Signal d’examen

Des mots comme « séquence fixe », « étapes connues », « chaque requête suit le même chemin » pointent vers un workflow. Des mots comme « ouvert », « le nombre d’étapes varie », « doit décider à l’exécution », « explorer jusqu’à » pointent vers un agent. Lorsque l’énoncé vous donne une tâche simple et une architecture élaborée comme réponse « recommandée », cette réponse est presque toujours le distracteur sur-conçu.


1.2 Les six patrons d’orchestration

L’examen attend une aisance complète sur les six. Pour chacun : ce dont il s’agit, un diagramme ASCII, quand l’utiliser et ses modes de défaillance.

Pattern 1 – Prompt chaining

Décomposer une tâche en une séquence fixe d’étapes, chaque appel au modèle consommant la sortie précédente. Ajouter des barrières programmatiques (« checks ») entre les étapes.

text
Input ──► [Call 1] ──► gate ──► [Call 2] ──► gate ──► [Call 3] ──► Output
│ │
fail→fix fail→stop

À utiliser quand : la tâche se découpe proprement en sous-tâches fixes et vous échangez un peu de latence contre une bien meilleure précision par étape (par ex. plan → ébauche → finition).

Modes de défaillance : cumul d’erreurs le long de la chaîne ; une première étape erronée empoisonne tout ce qui suit ; la latence est la somme de tous les appels.

Pattern 2 – Routing

Classifier l’entrée, puis l’aiguiller vers un prompt/modèle/flux spécialisé.

text
┌─► [Billing prompt · Haiku]
Input ─► [Router]─┼─► [Technical prompt · Sonnet]
└─► [Escalation flow]

À utiliser quand : les entrées se répartissent en classes distinctes mieux traitées séparément, et où une erreur de classification coûte moins cher qu’une approche uniforme. Permet d’envoyer les classes faciles vers des modèles moins chers.

Modes de défaillance : une erreur de classification du routeur se propage en cascade ; trop de classes fragilisent le routeur ; une classe non gérée est traitée à tort en silence.

Pattern 3 – Parallelization (sectioning et voting)

Exécuter des sous-tâches indépendantes en parallèle (sectioning) ou exécuter la même tâche plusieurs fois et agréger (voting).

text
Sectioning Voting
┌─►[Worker A]─┐ ┌─►[Run 1]─┐
Input ──┼─►[Worker B]─┼─►[Merge] Input ──┼─►[Run 2]─┼─►[Vote]─► Output
└─►[Worker C]─┘ └─►[Run 3]─┘

À utiliser quand : les sous-tâches sont indépendantes (sectioning) et la latence compte, ou lorsque plusieurs tentatives augmentent la confiance (voting) — par ex. un garde-fou (guardrail) en plus de la réponse principale, ou une revue de code au vote majoritaire.

Modes de défaillance : un sectioning qui suppose l’indépendance alors que les tâches interagissent en réalité ; un voting qui masque un biais systématique partagé par toutes les exécutions ; un coût multiplié par le fan-out.

Pattern 4 – Orchestrator-workers

Un modèle central (orchestrateur) décompose dynamiquement une tâche, lance des appels de workers et synthétise. Contrairement à la parallelization, les sous-tâches ne sont pas prédéfinies — l’orchestrateur les décide à l’exécution.

text
Input ─► [Orchestrator] ─┬─► [Worker: search docs]
▲ ├─► [Worker: read files]
│ └─► [Worker: summarise]
└────────────── synthesise ◄────────┘

À utiliser quand : vous ne pouvez pas prédire les sous-tâches à l’avance (par ex. modifications de code multi-fichiers, recherche où les sous-questions dépendent des découvertes).

Modes de défaillance : les anti-patterns coordinateur/sous-agents — compter sur l’auto-héritage du contexte, absence de gestion des défaillances partielles, coût de fan-out non borné. Voir §1.5.

Pattern 5 – Evaluator-optimizer

Un appel génère, un second évalue au regard de critères explicites et renvoie un retour, puis la boucle se répète jusqu’à ce que les critères passent.

text
┌───────────────────────────┐
Input ─►[Generator]─► draft ─►[Evaluator]─► pass? ─► Output
▲ │ fail
└────────── feedback ◄─────────┘

À utiliser quand : vous disposez de critères de réussite clairs et vérifiables et l’itération améliore mesurablement le résultat (qualité de traduction, code devant passer des tests, rédaction contre un barème).

Modes de défaillance : l’évaluateur et le générateur partagent une session et donc un biais (anti-pattern 9 — auto-revue dans la même session) ; aucun critère d’arrêt objectif, donc la boucle tourne indéfiniment ou s’arrête arbitrairement ; des critères vagues produisent un retour inutile.

Indépendance de l’évaluateur

L’évaluateur devrait être un contexte indépendant — une session vierge, idéalement un modèle différent — pour ne pas hériter du raisonnement du générateur. Réutiliser la même conversation pour « vérifier son propre travail » conserve le biais de contexte de raisonnement qui a produit le défaut.

Pattern 6 – Autonomous agent

Un modèle unique exécute une boucle ouverte : il décide d’une action, appelle un outil, observe le résultat et répète jusqu’à ce qu’il estime la tâche terminée ou qu’une condition d’arrêt se déclenche.

text
┌─────────────────────────────┐
User goal ─► [Claude] ─► tool_use ─► [Env] ──┘
▲ result
└── loop while stop_reason == "tool_use"
stop when end_turn / gate / human

À utiliser quand : la tâche est réellement ouverte, l’environnement fournit un retour fiable, et les erreurs sont récupérables ou barrées par une approbation humaine pour les actions irréversibles.

Modes de défaillance : boucler indéfiniment (mauvaise terminaison) ; agir sur un état périmé ou halluciné ; prendre des actions irréversibles sans barrière ; les deux anti-patterns de boucle ci-dessous.

PatternFlux de contrôle décidé parIdéal pourRisque caractéristique
Prompt chainingVous (fixe)Tâches fixes décomposablesCumul d’erreurs
RoutingVous (branche sur la classe)Classes d’entrée distinctesErreur de classification
ParallelizationVous (fan-out)Sous-tâches indépendantes / votingFausse indépendance, coût
Orchestrator-workersModèle (sous-tâches à l’exécution)Décomposition imprévisibleContexte/défaillance partielle
Evaluator-optimizerVous (boucle sur critères)Barre de qualité vérifiableAuto-revue à biais partagé
Autonomous agentModèle (boucle ouverte)Tâches ouvertesTerminaison, irréversibilité

1.3 La boucle agentique et la terminaison pilotée par stop_reason

Tout agent est une boucle. La seule manière correcte de la piloter est le champ stop_reason de l’API. Les deux anti-patterns les plus testés se trouvent ici.

Valeurs de stop_reason : end_turn, tool_use, max_tokens, stop_sequence, pause_turn, refusal.

python
from anthropic import Anthropic
client = Anthropic()
messages = [{"role": "user", "content": "Investigate the failing test and fix it."}]
while True:
resp = client.messages.create(
model="claude-opus-5",
max_tokens=4096,
tools=TOOLS,
messages=messages,
)
messages.append({"role": "assistant", "content": resp.content})
if resp.stop_reason == "tool_use":
results = run_tools(resp.content) # exécute les outils demandés
messages.append({"role": "user", "content": results})
continue # boucle : le modèle a vu les résultats
elif resp.stop_reason == "end_turn":
break # le modèle a terminé
elif resp.stop_reason == "max_tokens":
raise OutputTruncated() # ne PAS traiter comme un achèvement
elif resp.stop_reason == "pause_turn":
continue # server tool long ; reprendre
elif resp.stop_reason == "refusal":
escalate_to_human(resp) # le modèle a décliné ; stopper la boucle
break

Anti-pattern 1 · Analyser la prose pour la terminaison

Ne terminez pas en vérifiant si le texte du modèle dit « done », « task complete » ou « I have finished ». La prose du modèle n’est pas un signal de contrôle — elle varie, elle ment, elle peut faire l’objet d’une injection de prompt. La boucle doit se caler sur stop_reason == "end_turn".

Anti-pattern 2 · Le plafond d’itérations comme arrêt principal

Un plafond dur comme for i in range(10) est un filet de sécurité, jamais le mécanisme d’arrêt principal. Si votre boucle ne s’arrête que parce qu’elle a atteint le plafond, vous n’avez aucune idée de si la tâche est terminée. L’arrêt principal est stop_reason ; le plafond existe pour qu’une boucle emballée ne consomme pas un coût non borné. Les deux ensemble : while stop_reason == "tool_use" and iterations < CAP.

Une conception de terminaison correcte combine : stop_reason comme signal principal, un plafond d’itérations/tokens/coût comme filet de sécurité, et des barrières explicites (approbation humaine pour les actions irréversibles).


1.4 Managed Agents vs Agent SDK / Tool Runner : la décision d’hébergement

OptionQui héberge la boucle et le sandboxÀ choisir quandCompromis
Managed AgentsAnthropic héberge la boucle et le sandbox d’exécutionVous voulez de la rapidité vers la production, des outils standard, moins d’infra à opérerMoins de contrôle sur la boucle, l’environnement et l’outillage personnalisé
Claude Agent SDKVous hébergez la boucle (pip install claude-agent-sdk / npm i @anthropic-ai/claude-agent-sdk)Vous avez besoin d’outils personnalisés, de votre propre environnement, d’un contrôle profond, d’un auto-hébergementVous êtes responsable des réessais, de l’observabilité, du sandboxing, du passage à l’échelle
Tool RunnerVous hébergez l’exécution des outils, Anthropic pilote l’orchestrationVous voulez une orchestration managée mais votre propre exécution des outilsResponsabilité partagée

Signal d’examen

« Nous devons livrer vite avec des outils standard et une infrastructure minimale » → Managed Agents. « Nous avons des outils propriétaires / un sandbox sur mesure / devons contrôler la boucle » → Agent SDK. Le SDK a été renommé depuis le Claude Code SDK ; les deux noms de paquet apparaissent à l’examen.


1.5 Hiérarchies coordinateur/sous-agents

Lorsqu’un seul agent ne peut pas porter toute la tâche, un coordinateur la décompose et délègue à des sous-agents, chacun avec sa propre fenêtre de contexte isolée. C’est le patron orchestrator-workers à l’échelle du système (le scénario Multi-Agent Research System).

text
┌──────────────┐
User goal ───►│ Coordinator │ holds plan, aggregates, decides done
└──────┬───────┘
explicit context│ (never rely on inheritance)
┌───────────────┼────────────────┐
┌────▼────┐ ┌────▼────┐ ┌────▼────┐
│Subagent1│ │Subagent2│ │Subagent3│ isolated context each
└────┬────┘ └────┬────┘ └────┬────┘
└── structured result ──────────┘
aggregate + handle partial failure

Passage de contexte explicite

Les sous-agents ont des fenêtres de contexte isolées. Ils n’héritent pas automatiquement de la conversation, des fichiers ou des découvertes du coordinateur. Le coordinateur doit passer explicitement tout ce dont le sous-agent a besoin dans son prompt de tâche.

python
# CORRECT : le sous-agent reçoit exactement ce dont il a besoin, explicitement.
subagent_task = {
"role": "user",
"content": (
f"Objective: {objective}\n"
f"Context you must use:\n{relevant_findings}\n"
f"Constraints: {constraints}\n"
f"Return: a JSON object {{'finding': str, 'sources': [str], 'confidence': str}}."
),
}

Compter sur l’auto-héritage du contexte

Supposer qu’un sous-agent « sait déjà » ce que le coordinateur a découvert est un distracteur de scénario majeur. Les contextes des sous-agents sont isolés par conception (c’est une fonctionnalité — elle protège le contexte principal). Passez toujours le contexte explicitement ; spécifiez la forme exacte du retour pour que les résultats s’agrègent proprement.

Agrégation des résultats et gestion des défaillances partielles

Les sous-agents échouent indépendamment. Le coordinateur doit agréger des résultats structurés et décider quoi faire lorsque certains échouent.

python
results, failures = [], []
for sub in subagents:
try:
r = run_subagent(sub, timeout=SUB_TIMEOUT)
if r.status == "ok":
results.append(r)
else:
failures.append((sub, r.error)) # erreur structurée, non avalée
except TimeoutError as e:
failures.append((sub, {"category": "timeout", "retryable": True}))
# Décider : continuer avec des résultats partiels, réessayer les réessayables, ou escalader.
if len(results) >= MIN_QUORUM:
answer = coordinator_synthesise(results, note_missing=failures) # provenance des lacunes
else:
escalate("insufficient subagent results", partial=results, failures=failures)

La conception correcte fait remonter la défaillance partielle au coordinateur avec un détail structuré, puis prend une décision explicite (continuer avec un quorum en notant la lacune, réessayer les réessayables, ou escalader). Écarter en silence un sous-agent en échec et présenter le reste comme complet est l’anti-pattern 7.


1.6 Conception de l’escalade

L’escalade est l’un des sujets les plus régulièrement testés, car trois des dix anti-patterns sont des pièges d’escalade. Le jeu de règles :

DéclencheurComportement correctPourquoi
Demande explicite (« je veux un humain », « parler à un agent »)Escalader immédiatement, sans autres tentativesL’utilisateur a exprimé son intention ; honorez-la
Limite de capacité (la tâche exige un outil/une permission/une autorité que l’agent n’a pas)Tenter d’abord la résolution, escalader seulement quand réellement bloquéEscalader prématurément gâche un chemin capable
Sentiment (l’utilisateur est en colère/frustré)Pas un déclencheur d’escalade en soiSentiment ≠ complexité (anti-pattern 5)
Confiance auto-déclarée (« je suis sûr à 60 % »)Pas un déclencheurLes modèles sont mal calibrés ; l’auto-déclaration n’est pas fiable (anti-pattern 4)
python
def should_escalate(turn) -> bool:
if turn.user_explicitly_requested_human:
return True # immédiat
if turn.requires_capability_agent_lacks and turn.resolution_attempts_exhausted:
return True # fondé sur la capacité, après avoir essayé
# PAS : turn.sentiment == "angry"
# PAS : turn.model_confidence < 0.7
return False

Signal d’examen

Une option qui escalade parce que le client « paraît frustré » ou parce que le modèle « a signalé une faible confiance » est un distracteur. La réponse correcte escalade sur demande explicite (maintenant) ou sur une lacune de capacité objective (après avoir tenté). La colère se gère par de bonnes réponses, non par l’aiguillage.


1.7 Hooks vs prompts pour l’application des règles

Certaines règles sont critiques — elles doivent toujours tenir (ne jamais supprimer des données de production, ne jamais valider de secrets, toujours exécuter les tests avant un commit). Faites-les respecter par du code déterministe : les hooks de Claude Code ou des gardes programmatiques dans votre boucle. N’appliquez jamais une règle critique par une instruction de prompt.

Mécanisme d’applicationGarantiesÀ utiliser pour
Instruction de promptAu mieux ; probabiliste ; contournable par injectionPréférences, style, orientation souple
Hook / garde programmatiqueDéterministe ; le code de sortie 2 bloque l’actionRègles métier critiques, sécurité, barrières d’actions irréversibles

Anti-pattern 3 · Application par prompt de règles critiques

« Ajoutez une ligne au system prompt disant à Claude de ne jamais exécuter de commandes destructrices » est la mauvaise réponse dès lors que la règle est critique. Les prompts sont probabilistes et vulnérables à l’injection. Le contrôle correct est un PreToolUse hook qui inspecte la commande et renvoie le code de sortie 2 pour la bloquer. (La mécanique des hooks relève du Domaine 2.)


1.8 Propagation d’erreurs avec contexte structuré

Les erreurs doivent porter assez de structure pour qu’un appelant (ou le modèle) puisse décider quoi faire : catégorie, indicateur réessayable, et tout résultat partiel.

python
class AgentError(Exception):
def __init__(self, category, message, retryable, partial=None):
self.category = category # e.g. "rate_limit", "validation", "timeout", "auth"
self.message = message # specific, diagnostic
self.retryable = retryable # drives backoff vs. escalate
self.partial = partial # data gathered before failure
# À la frontière, renvoyer un contenu d'erreur structuré sur lequel le modèle peut raisonner :
tool_result = {
"type": "tool_result",
"tool_use_id": tu_id,
"is_error": True,
"content": json.dumps({
"category": "rate_limit", "retryable": True, "retry_after": 12,
"partial": partial_rows,
}),
}

Anti-patterns 6 & 7 · Erreurs génériques et suppression silencieuse

Renvoyer "Something went wrong" (anti-pattern 6) prive le modèle ou l’opérateur du contexte diagnostique nécessaire pour se rétablir. Renvoyer un résultat vide comme s’il s’agissait d’un succès (anti-pattern 7) est pire — cela convertit une défaillance en données erronées silencieuses en aval. Renvoyez toujours la catégorie précise, l’indicateur réessayable et tout résultat partiel.

Idempotence et réessais

Réessayez 429, 5xx et 529 avec un backoff exponentiel + jitter, et respectez retry-after. Mais ne réessayez sans danger que les opérations idempotentes — donnez aux opérations d’écriture une clé d’idempotence pour qu’un « create order » réessayé ne crée pas deux commandes.

python
def with_retry(fn, *, max_attempts=5):
for attempt in range(max_attempts):
try:
return fn()
except RetryableError as e:
if attempt == max_attempts - 1:
raise
sleep(min(2 ** attempt + random.random(), 30)) # backoff + jitter

1.9 État et mémoire vs conversation

L’historique de conversation n’est pas un état durable. Il est réduit par l’édition de contexte, résumé par la compaction et perdu d’une session à l’autre. Tout ce qui doit survivre appartient à un état explicite.

StockageSurvitÀ utiliser pour
ConversationUniquement dans la fenêtre (non réduite)Contexte de travail immédiat
Memory toolD’une session à l’autre, fichiers gérés par le modèleFaits/apprentissages que l’agent doit rappeler plus tard
FichiersDurable, vous les gérezArtefacts, sorties intermédiaires, points de contrôle
Base de données / stockage externeDurable, interrogeable, transactionnelCommandes, tickets, état métier canonique

Signal d’examen

« Doit persister d’une session à l’autre » ou « doit survivre à la compaction » → memory tool ou état externe, jamais l’historique de conversation. Les données métier canoniques (une commande, le statut d’un ticket) vivent toujours dans une base de données, la conversation la référençant sans la posséder.


1.10 Modélisation du coût et de la latence des systèmes multi-agents

Chaque agent et sous-agent, ce sont des appels au modèle, et le fan-out multi-agents multiplie à la fois le coût et la consommation de tokens. Modélisez cela avant de construire.

  • Coût ≈ Σ sur les appels de (tokens d’entrée × prix-entrée + tokens de sortie × prix-sortie). Chaque sous-agent porte son propre system prompt et ses outils en entrée — un fan-out de 5 signifie ~5× le surcoût fixe. Le prompt caching (0,1× sur les lectures de cache) et des modèles moins chers pour les sous-tâches simples (Haiku pour la classification) réduisent cela fortement.
  • Latence : le chaining ajoute les latences en série ; la parallelization borne la latence par la branche la plus lente ; les arbres coordinateur/sous-agents profonds ajoutent des allers-retours.
  • Le compromis : un système de recherche multi-agents peut coûter 10 à 15× le coût en tokens d’un appel unique. Ne le justifiez que lorsque le gain de qualité ou d’ampleur est réel. Si un flux de travail atteint la barre, utilisez le flux de travail.
text
Single agent: 1 system + N tool round-trips (cheapest, serial)
Parallel workers: 1 orchestrator + K×(system+tools) (fast, K× fixed cost)
Deep hierarchy: coordinator + Σ subagents + aggregation (most capable, most $$)

1.11 Observabilité

On ne peut pas opérer ce qu’on ne voit pas. Un système multi-agents a besoin de :

  • Traces par agent — chaque agent/sous-agent émet un span avec ses entrées, appels d’outils, stop_reason, tokens et coût.
  • Identifiants de corrélation — un ID de requête unique tissé à travers le coordinateur et chaque sous-agent pour reconstruire une tâche unique de bout en bout.
  • Métriques — latence par agent (p50/p95), taux d’erreur par catégorie, nombre de réessais, tokens et coût par tâche, taux de succès du cache.
  • Journaux structurés sans secrets.

Signal d’examen

« Nous ne savons pas quel sous-agent a causé la défaillance » → le contrôle manquant est des traces par agent plus un identifiant de corrélation, non plus de réessais ni un modèle plus gros.


1.12 Variantes d’orchestration et leurs modes de défaillance

Au-delà des six patrons de base, les rédacteurs d’items les combinent en variantes nommées. Reconnaître la variante vous indique le mode de défaillance à surveiller.

Hierarchical (hiérarchique : coordinateur → sous-coordinateurs → workers)

text
[Root coordinator]
/ \
[Sub-coord A] [Sub-coord B]
/ \ / \
[W1] [W2] [W3] [W4] isolated contexts throughout

À utiliser quand une tâche se décompose en grands sous-domaines qui ont eux-mêmes besoin d’être décomposés. Modes de défaillance : la perte de contexte s’aggrave à chaque palier (chaque niveau doit passer le contexte explicitement) ; le coût et la latence se cumulent (chaque palier ajoute des allers-retours) ; une défaillance en milieu de palier peut orphelin un sous-arbre entier.

Pipeline with feedback (pipeline avec retour : chaining + evaluator-optimizer)

text
[Extract] ─► [Transform] ─► [Load] ─► [Evaluate]
▲ │ fail
└──────────── targeted retry ◄───────┘

À utiliser quand un pipeline fixe a besoin d’une barrière de qualité en fin de course capable de renvoyer le travail à une étape spécifique. Modes de défaillance : un retour vers la mauvaise étape ; des boucles de retour non bornées sans arrêt objectif ; l’évaluateur partageant la session du générateur (#9).

Blackboard / shared-state coordination (tableau noir : coordination par état partagé)

text
[Agent A] ─┐ ┌─► reads/writes
[Agent B] ─┼─► [Shared state store] ◄─┼─ [Agent C]
[Agent D] ─┘ └─► reads/writes

À utiliser quand plusieurs agents contribuent à un artefact commun en évolution (un document de recherche, un plan). Modes de défaillance : conditions de course et pertes de mises à jour sur le stockage partagé ; aucun propriétaire unique du « done » ; lectures périmées. Corrigez par des écritures transactionnelles, du versionnage et un seul coordinateur qui décide de l’achèvement.

VarianteIdéal pourDéfaillance caractéristiqueGarde
HierarchicalDomaines profonds, décomposablesPerte de contexte & coût cumulatifsContexte explicite à chaque palier ; justifier la profondeur
Pipeline + feedbackFlux fixe avec barrière de qualitéRetour vers la mauvaise étape / non bornéArrêt objectif ; router vers la bonne étape
BlackboardArtefact partagé en évolutionCourses, aucun propriétaire du « done »Transactions, versionnage, un seul coordinateur

Signal d’examen

Un énoncé qui ajoute des paliers ou des agents sans bénéfice énoncé teste si vous allez sur-concevoir. La réponse correcte conserve la topologie la moins profonde qui atteint la barre et nomme le mode de défaillance que la structure supplémentaire introduirait.


1.13 Le calcul de coût et de latence que l’on peut vous demander

L’examen peut vous donner des comptes de tokens et des prix, et vous demander le coût relatif de deux topologies. Utilisez les prix de septembre 2026 (entrée/sortie par million de tokens) : Opus 5 $5/$25, Sonnet 5 $2/$10, Haiku 4.5 $1/$5, Fable 5.1 $10/$50. Lectures de cache ≈ 0,1× entrée ; Batch ≈ 0,5×.

Exemple travaillé — agent unique vs fan-out à 5 workers. Chaque appel porte un préfixe stable de 10k tokens (system + outils) et produit 1k de sortie. Sur Opus 5 :

text
Per call input = 10,000 tokens × $5 / 1,000,000 = $0.050
Per call output = 1,000 tokens × $25 / 1,000,000 = $0.025
Per call total = $0.075
Single agent, 4 tool round-trips ≈ 4 × $0.075 = $0.300
5-worker fan-out (each 1 call) + 1 synthesis = 6 × $0.075 = $0.450
...but each worker re-sends the 10k prefix, so the fixed overhead
is paid 6× instead of being amortised — fan-out is ~1.5× here,
and grows with prefix size and worker count.

Deux leviers qui changent la réponse :

  • Prompt caching. Si le préfixe de 10k est mis en cache, chaque lecture coûte 10,000 × $0.50/1,000,000 = $0.005 au lieu de $0.050 — le surcoût fixe du fan-out s’effondre et la pénalité multi-agents diminue drastiquement.
  • Mix de modèles. Aiguillez les workers simples vers Haiku ($1/$5) et réservez Opus à la synthèse ; une conception à 5 workers Haiku + synthèse Opus peut passer sous le coût d’un agent unique tout-Opus tout en ajoutant de l’ampleur.
TopologieSurcoût fixe payéLatenceQuand elle gagne
Agent uniqueUne fois (amorti)Allers-retours en sérieLe moins cher ; la tâche tient dans un contexte
Workers parallèlesK× (par worker)≈ branche la plus lenteLatence critique, travail indépendant
Hiérarchie profondeΣ sur les paliersSomme des allers-retours de palierUniquement quand le gain d’ampleur/qualité est réel

Signal d’examen

« MOST cost-effective » avec un fan-out dans l’énoncé récompense généralement le fait de mettre en cache le préfixe stable et d’aiguiller les sous-tâches simples vers des modèles moins chers — non « utiliser un modèle plus gros » ni « ajouter plus d’agents ». Si un flux de travail atteint la barre, le flux de travail est la réponse la plus économique.


1.14 Les barrières human-in-the-loop comme architecture de premier plan

L’autonomie est un spectre. L’architecte choisit où un humain se place dans la boucle et rend cette barrière déterministe, non une requête de prompt.

Niveau d’autonomieRôle de l’humainMécanisme correct
Suggestion seuleL’humain approuve chaque actionPlan mode / permission ask sur tous les effets
Écriture barréeL’humain approuve les seules actions irréversiblesPreToolUse hook (exit 2) sur les paiements, suppressions, envois
Autonome-avec-auditL’humain revoit a posterioriJournaux structurés, traces, provenance
Totalement autonomeAucunUniquement pour des actions réversibles à faible enjeu

La barrière se place sur l’irréversibilité et le rayon d’impact, non sur la confiance du modèle ni le ton de l’utilisateur. Un remboursement au-dessus d’un seuil, un déploiement en production, un e-mail sortant vers une liste de clients — ceux-ci reçoivent une barrière dure, quel que soit le degré de certitude que le modèle prétend avoir.

Signal d’examen

« Doit toujours exiger une approbation humaine avant X » → une barrière déterministe (hook / permission), et la barrière est choisie selon l’irréversibilité de X. Toute option qui barre sur la confiance (#4) ou le sentiment (#5) est fausse, même quand l’action est réellement risquée.


Idées reçues fréquentes

Idée reçueRéalitéPourquoi cela compte à l’examen
« Plus d’agents = meilleures réponses. »Plus d’agents multiplient coût/latence et ajoutent des modes de défaillance ; ils n’aident que lorsque l’ampleur ou la qualité s’améliore de façon démontrable.Le distracteur de sur-conception est la mauvaise réponse la plus fréquente en D1.
« Le modèle qui dit “done” signifie qu’il a fini. »Seul stop_reason == end_turn signifie fini ; la prose n’est pas un signal de contrôle.L’anti-pattern 1 apparaît dans beaucoup d’énoncés déguisé en « flexible ».
« Un plafond d’itérations garde ma boucle correcte. »Un plafond ne borne que le coût ; la justesse vient de stop_reason.Anti-pattern 2 ; le piège du plafond-comme-achèvement.
« Les sous-agents peuvent voir ce que sait le coordinateur. »Les contextes sont isolés ; rien n’est hérité — vous devez passer le contexte explicitement.Le distracteur caractéristique de Multi-Agent Research.
« Escalader les cas frustrés ou à faible confiance. »Escaladez sur demande explicite ou lacune de capacité ; le sentiment et l’auto-déclaration ne sont pas fiables.Anti-patterns 4 et 5, testés ensemble.
« Une règle forte de system prompt suffit pour une politique critique. »Les prompts sont probabilistes et injectables ; les règles critiques exigent des hooks déterministes.Anti-pattern 3 ; hooks-vs-prompts est une décision récurrente.
« Réessayer tout appel échoué est sans danger. »Seules les opérations idempotentes sont sûres à réessayer ; les écritures ont besoin d’une clé d’idempotence.Énoncés de double débit/double remboursement.
« Managed Agents et l’Agent SDK sont interchangeables. »Managed Agents hébergent la boucle/le sandbox (rapide, moins de contrôle) ; le SDK est auto-hébergé (contrôle, outils personnalisés, votre VPC).Les items de choix d’hébergement dépendent de la contrainte énoncée.

Étude de scénario — un système de recherche qui « perd le fil »

Situation. Une équipe livre un assistant d’étude de marché. Un coordinateur découpe une question en sous-questions et dispatche des sous-agents qui recherchent et résument chacun. En production, deux problèmes apparaissent : (1) les sous-agents contredisent parfois des découvertes que le coordinateur avait déjà établies, et (2) lorsque l’API de recherche d’un sous-agent expire, le rapport final est livré comme s’il était complet, omettant parfois un concurrent entier. La direction se plaint aussi que le système coûte 12× un appel Opus unique et demande s’il faudrait le simplifier. La barre de précision a été atteinte en test par une conception en deux étapes « plan → résumé-parallèle → synthèse ».

Trace de raisonnement d’expert.

  1. Nommer le patron. Les sous-questions sont décidées à l’exécution à partir des découvertes → c’est orchestrator-workers, donc attendez-vous aux modes de défaillance coordinateur/sous-agents, non à un correctif de routing ou de chaining.

  2. Diagnostiquer le problème (1). Des sous-agents « contredisant des découvertes connues » est le symptôme classique du contexte isolé : les sous-agents n’ont jamais reçu les faits établis par le coordinateur. Le correctif est le passage de contexte explicite dans le prompt de tâche de chaque sous-agent avec une forme de retour fixe — non une fenêtre plus grande (option tentante mais aveugle aux contraintes) et non un meilleur modèle.

  3. Diagnostiquer le problème (2). Présenter un rapport partiel comme complet après un timeout est une suppression silencieuse (#7). Le correctif est une erreur structurée (category:"timeout", retryable:true) remontée au coordinateur, qui réessaie alors le réessayable, continue avec un quorum en notant la lacune, ou escalade — jamais un rejet silencieux et jamais un générique « research failed » (#6).

  4. Traiter la question du coût/de la simplification. La conception en deux étapes atteignait déjà la barre de précision. La topologie profonde et coûteuse est de la sur-conception. La décision correcte est d’utiliser la conception plus simple et de n’ajouter de la complexité que là où elle améliore les résultats de façon démontrable — tout en mettant en cache le préfixe stable et en aiguillant les résumés simples vers Haiku pour réduire le coût restant. Rejeter « utiliser un modèle plus gros » et « ajouter plus de sous-agents » est essentiel.

  5. Rendre les défaillances observables. Ajoutez des spans de trace par agent + un identifiant de corrélation pour que le prochain timeout soit attribuable, en rejetant « ajouter plus de réessais » comme correctif d’observabilité.

Décision correcte à l’examen : passage de contexte explicite + gestion structurée des défaillances partielles avec un quorum + repli sur la conception en deux étapes + caching/mix de modèles pour le coût + traces par agent. Chaque option rejetée correspond à un anti-pattern nommé (ignorance de l’isolation, #7, #6, sur-conception, escalade sur confiance/sentiment) — ce qui est exactement la façon dont les distracteurs sont construits.


Pièges d’examen dans ce domaine

PiègePourquoi c’est faux
Construire un système multi-agents pour une séquence fixe et connueSur-conçu ; un workflow (ou un prompt unique) est correct
Terminer la boucle quand le texte du modèle dit « done »La prose n’est pas un signal de contrôle (anti-pattern 1)
Arrêter l’agent uniquement par un plafond d’itérationsLe plafond est un filet de sécurité, non l’arrêt principal ; utilisez stop_reason (anti-pattern 2)
Traiter max_tokens comme un achèvement de tâcheCela signifie une sortie tronquée, non terminée
Escalader parce que le client paraît en colèreSentiment ≠ complexité (anti-pattern 5)
Escalader sur la confiance auto-déclarée du modèleLes modèles sont mal calibrés (anti-pattern 4)
Appliquer une règle critique via une ligne de system promptLes prompts sont probabilistes ; utilisez un hook (anti-pattern 3)
Supposer que les sous-agents héritent du contexte du coordinateurLes contextes sont isolés ; passez le contexte explicitement
Renvoyer un message d’erreur génériqueMasque les diagnostics nécessaires à la reprise (anti-pattern 6)
Écarter un sous-agent en échec et présenter le reste comme completLa défaillance silencieuse devient une donnée erronée (anti-pattern 7)
Garder l’état devant persister uniquement dans l’historique de conversationRéduit/compacté/perdu ; utilisez le memory tool ou une base de données
Réessayer une écriture non idempotente sur 429Duplique l’effet de bord ; utilisez une clé d’idempotence
Ajouter des paliers/agents sans bénéfice énoncéCumule coût, latence et perte de contexte ; gardez la topologie la moins profonde qui atteint la barre
« Utiliser un modèle plus gros » pour réduire le coût du fan-outMettez plutôt en cache le préfixe stable et aiguillez les workers simples vers des modèles moins chers
Barrer une action irréversible sur la confiance du modèleBarrez sur l’irréversibilité avec un hook déterministe, jamais sur l’auto-déclaration (#4)
Traiter pause_turn comme un achèvementCela signifie reprendre un server tool long ; continuez la boucle
Compter sur un blackboard partagé sans propriétaire du « done »Utilisez des écritures transactionnelles, du versionnage et un seul coordinateur qui décide de l’achèvement

Questions d’entraînement

Chaque item indique combien de réponses sélectionner. Tentez-le avant de révéler.

Q1 · Une équipe traite des tickets de support qui suivent toujours les mêmes trois étapes : classifier, rédiger une réponse et vérifier la réponse contre la politique. Elle demande s’il faut construire un agent autonome. Quelle est la MEILLEURE architecture ? (Sélectionnez une réponse)

A. Un agent autonome qui décide chaque étape à l’exécution pour la flexibilité. B. Un workflow de prompt chaining avec une barrière de politique programmatique entre les étapes de rédaction et d’envoi. C. Un système multi-agents avec un coordinateur et trois sous-agents. D. Un unique méga-prompt qui fait les trois d’un coup.

Réponse : B. Les étapes sont fixes et connues, donc le flux de contrôle doit être du code, non le modèle — prompt chaining avec une barrière. Un agent autonome (A) et un système multi-agents (C) sont sur-conçus pour une séquence fixe. Un méga-prompt unique (D) perd la précision par étape et la barrière de politique.

Q2 · La boucle d’agent d’un ingénieur se termine quand le texte de la réponse de Claude contient la phrase « task complete ». Parfois elle s’arrête trop tôt ou ne s’arrête jamais. Quel est le correctif correct ? (Sélectionnez une réponse)

A. Ajouter d’autres phrases à faire correspondre, comme « finished » et « done ». B. Plafonner la boucle à 10 itérations et s’arrêter là. C. Piloter la terminaison depuis stop_reason : continuer tant qu’il vaut tool_use, s’arrêter sur end_turn, et traiter max_tokens et refusal explicitement. D. Baisser la température pour que la formulation soit cohérente.

Réponse : C. C’est l’anti-pattern 1 — analyser la prose pour la terminaison. Le signal de contrôle est stop_reason. Plus de phrases (A) analyse encore la prose. Un plafond d’itérations (B) n’est qu’un filet de sécurité (anti-pattern 2). La température (D) ne fait pas de la prose un signal de contrôle fiable.

Q3 · Un agent coordinateur délègue une sous-question à un sous-agent, mais la réponse du sous-agent ignore des découvertes que le coordinateur avait déjà rassemblées. Quelle est la cause racine et le correctif ? (Sélectionnez une réponse)

A. Le sous-agent a besoin d’une fenêtre de contexte plus grande. B. Le contexte du sous-agent est isolé et n’a pas hérité des découvertes ; le coordinateur doit passer explicitement le contexte pertinent dans le prompt de tâche du sous-agent. C. Le coordinateur devrait utiliser un modèle plus performant. D. Augmenter max_tokens sur le sous-agent.

Réponse : B. Les contextes des sous-agents sont isolés par conception. Compter sur l’auto-héritage est un distracteur central. La taille du contexte (A, D) et le choix du modèle (C) ne traitent pas un contexte manquant qui n’a jamais été passé.

Q4 · Un agent de support client doit escalader vers un humain. Quels DEUX déclencheurs sont corrects ? (Sélectionnez deux réponses)

A. Le client demande explicitement à parler à un humain. B. Le message du client a un sentiment négatif. C. La tâche exige une autorité de remboursement que l’agent n’a pas, après que l’agent a tenté les parties résolubles. D. Le modèle auto-déclare une confiance de 55 %. E. La réponse fait plus de 200 mots.

Réponse : A et C. La demande explicite escalade immédiatement ; une véritable lacune de capacité escalade après avoir tenté la résolution. Le sentiment (B) est l’anti-pattern 5, la confiance auto-déclarée (D) est l’anti-pattern 4, et la longueur (E) est sans rapport.

Q5 · Un système ne doit jamais valider de code qui échoue à la suite de tests. Une proposition ajoute « Toujours exécuter les tests avant de valider » au system prompt du projet. Pourquoi est-ce insuffisant et qu’est-ce qui est correct ? (Sélectionnez une réponse)

A. C’est suffisant si l’instruction est assez appuyée. B. Les instructions de prompt sont probabilistes et vulnérables à l’injection ; appliquez la règle avec un hook déterministe (PreToolUse sur le commit) qui bloque avec le code de sortie 2 quand les tests échouent. C. Utiliser un modèle plus gros pour qu’il suive les instructions de façon fiable. D. Mettre l’instruction dans CLAUDE.md plutôt que dans le system prompt.

Réponse : B. C’est l’anti-pattern 3 — application par prompt d’une règle critique. Les règles critiques exigent des hooks déterministes. L’emphase (A), la taille du modèle (C) et l’emplacement du fichier (D) ne rendent pas déterministe un contrôle probabiliste.

Q6 · Un sous-agent parmi cinq d’une tâche de recherche expire. Quel est le MEILLEUR comportement du coordinateur ? (Sélectionnez une réponse)

A. Écarter en silence le sous-agent en échec et présenter les quatre résultats comme la réponse complète. B. Enregistrer une erreur structurée (catégorie timeout, réessayable true), réessayer la tâche réessayable, et si l’échec persiste continuer avec un quorum en notant la lacune ou escalader. C. Jeter tous les résultats et relancer toute la tâche. D. Renvoyer un message générique « research failed ».

Réponse : B. Erreur structurée plus décision explicite. L’écarter en silence (A) est l’anti-pattern 7. Tout relancer (C) gâche les bons résultats. Un message générique (D) est l’anti-pattern 6.

Q7 · Une équipe doit livrer rapidement un agent, avec des outils standard et une infrastructure minimale à opérer. Quel choix d’hébergement convient le MIEUX ? (Sélectionnez une réponse)

A. Claude Agent SDK, en auto-hébergeant la boucle et le sandbox. B. Managed Agents, où Anthropic héberge la boucle et le sandbox. C. Construire un moteur d’orchestration personnalisé de zéro. D. Tool Runner avec un sandbox entièrement personnalisé.

Réponse : B. Managed Agents minimisent l’infrastructure et sont les plus rapides vers la production pour des outils standard. L’Agent SDK (A) et un moteur personnalisé (C) sont pour les équipes ayant besoin d’outils sur mesure et de contrôle. Tool Runner (D) implique que vous hébergez l’exécution des outils.

Q8 · Un agent orchestrateur doit décider les sous-tâches à l’exécution car elles dépendent de ce qu’il trouve. Quel est ce patron et quel est son risque caractéristique ? (Sélectionnez une réponse)

A. Prompt chaining ; le risque est l’erreur de classification. B. Orchestrator-workers ; le risque inclut de compter sur l’héritage du contexte et des défaillances partielles non gérées. C. Routing ; le risque est le cumul d’erreurs. D. Voting ; le risque est le biais partagé.

Réponse : B. Des sous-tâches décidées à l’exécution définissent orchestrator-workers. Ses risques caractéristiques sont les modes de défaillance coordinateur/sous-agents. Les autres options nomment mal le patron ou son risque.

Q9 · Un agent de facturation réessaie un appel d’API « create refund » après un 429 et le client reçoit deux remboursements. Qu’est-ce qui a mal tourné et comment concevoir les réessais ? (Sélectionnez une réponse)

A. Le backoff était trop court ; augmentez-le. B. Une écriture non idempotente a été réessayée ; utilisez une clé d’idempotence pour que les réessais ne dupliquent pas l’effet de bord, et ne réessayez qu’avec backoff et jitter en respectant retry-after. C. L’agent ne devrait jamais réessayer aucune requête. D. Utiliser un modèle plus gros pour éviter l’erreur.

Réponse : B. Réessayer une écriture non idempotente duplique l’effet. Les clés d’idempotence rendent les réessais sûrs. Un backoff plus long (A) n’empêche pas la duplication ; ne jamais réessayer (C) est inutile pour les appels idempotents ; la taille du modèle (D) est sans rapport.

Q10 · Un agent doit se rappeler la préférence énoncée d’un client à travers des sessions distinctes séparées de plusieurs jours. Où cela devrait-il vivre ? (Sélectionnez une réponse)

A. Dans l’historique de conversation, qui persiste automatiquement. B. Dans le memory tool ou un stockage externe, car l’historique de conversation est réduit, compacté et non conservé d’une session à l’autre. C. Dans le system prompt, codé en dur par client. D. Dans un réglage de max_tokens plus élevé.

Réponse : B. La persistance inter-sessions exige le memory tool ou un état externe. L’historique de conversation (A) ne survit pas d’une session à l’autre ni à la compaction. Le codage en dur (C) ne passe pas à l’échelle ; max_tokens (D) est sans rapport.

Q11 · Une boucle evaluator-optimizer réutilise la même conversation pour générer et évaluer une traduction, et la qualité plafonne. Quel est le défaut et le correctif ? (Sélectionnez une réponse)

A. Le modèle générateur est trop petit ; améliorez-le. B. L’auto-revue dans la même session conserve le biais de raisonnement du générateur ; exécutez l’évaluateur comme un contexte indépendant (session vierge, idéalement un modèle différent) contre des critères explicites. C. La boucle a besoin de plus d’itérations. D. Baisser la température pour réduire la variance.

Réponse : B. C’est l’anti-pattern 9 — auto-revue dans la même session. Un évaluateur indépendant supprime le biais partagé. La taille du modèle (A), plus d’itérations (C) et la température (D) ne corrigent pas la source du biais.

Q12 · Les opérateurs d’un système multi-agents ne peuvent pas dire quel sous-agent a causé une tâche en échec. Quel changement traite cela le PLUS directement ? (Sélectionnez une réponse)

A. Ajouter plus de réessais à chaque sous-agent. B. Émettre un span de trace par agent et tisser un identifiant de corrélation à travers le coordinateur et tous les sous-agents. C. Basculer chaque sous-agent sur Opus 5. D. Augmenter le plafond d’itérations.

Réponse : B. Des traces par agent plus un identifiant de corrélation permettent de reconstruire une tâche unique et de localiser l’agent défaillant. Les réessais (A), le choix du modèle (C) et les plafonds (D) n’améliorent pas l’observabilité.

Q13 · Trois sous-tâches indépendantes de résumé de documents doivent se terminer le plus vite possible. Quel patron et pourquoi ? (Sélectionnez une réponse)

A. Prompt chaining, parce que c’est le plus simple. B. Parallelization par sectioning, parce que les sous-tâches sont indépendantes et la latence est bornée par la branche la plus lente plutôt que par la somme. C. Evaluator-optimizer, parce qu’il améliore la qualité. D. Agent autonome, pour la flexibilité.

Réponse : B. Des sous-tâches indépendantes plus un objectif de latence, c’est du sectioning de manuel. Le chaining (A) les exécute en série. Evaluator-optimizer (C) et agent autonome (D) ne correspondent pas à un travail parallèle indépendant.

Q14 · Quelles affirmations sur la terminaison de boucle sont correctes ? (Sélectionnez deux réponses)

A. stop_reason == "end_turn" est le signal principal que le modèle a terminé. B. stop_reason == "max_tokens" signifie que la tâche s’est terminée avec succès. C. Un plafond d’itérations devrait être le seul mécanisme d’arrêt. D. Un plafond d’itérations ou de coût est un filet de sécurité valide en complément de stop_reason. E. Analyser le texte de la réponse pour « complete » est l’approche recommandée.

Réponse : A et D. end_turn signale l’achèvement ; un plafond est un filet de sécurité légitime. max_tokens (B) signifie une troncature, un plafond unique (C) est l’anti-pattern 2, et l’analyse de la prose (E) est l’anti-pattern 1.

Q15 · Un système de recherche proposé utilise un coordinateur avec huit sous-agents alors qu’un workflow en deux étapes atteindrait la barre de précision. La latence et le coût sont des contraintes. Quelle est la MEILLEURE décision ? (Sélectionnez une réponse)

A. Construire le système à huit sous-agents pour une capacité maximale. B. Utiliser le workflow en deux étapes, puisqu’il atteint la barre à un coût et une latence bien moindres ; n’ajouter de la complexité que si elle améliore les résultats de façon démontrable. C. Utiliser un unique agent autonome avec dix-huit outils. D. Utiliser le voting sur huit exécutions du même prompt.

Réponse : B. La solution la plus simple qui atteint l’exigence. Le système à huit sous-agents (A) multiplie coût/latence sans bénéfice prouvé. Un agent à 18 outils (C) est l’anti-pattern 8. Le voting à huit (D) est coûteux et injustifié.

Q16 · Un appel d’outil échoue et l’outil renvoie une liste vide, que l’agent traite comme « aucun résultat trouvé » et rapporte comme un succès. Quel anti-pattern est-ce et qu’est-ce qui est correct ? (Sélectionnez une réponse)

A. Anti-pattern 2 ; ajouter un plafond d’itérations. B. Anti-pattern 7 (suppression silencieuse d’erreur) ; renvoyer une erreur structurée avec catégorie et indicateur réessayable pour que l’agent distingue un vrai résultat vide d’une défaillance. C. Anti-pattern 5 ; arrêter d’escalader sur le sentiment. D. Il n’y a pas de problème ; les résultats vides sont normaux.

Réponse : B. Convertir une défaillance en succès vide est une suppression silencieuse (anti-pattern 7). Le correctif est un contenu d’erreur structuré pour que « échoué » ne soit jamais confondu avec « aucun résultat ». Les autres options identifient mal le problème.

Q17 · Un système hiérarchique utilise un coordinateur racine, deux sous-coordinateurs et quatre workers. Des découvertes établies à la racine manquent trois paliers plus bas. Quelle est la cause racine et le correctif ? (Sélectionnez une réponse)

A. Les workers ont besoin de fenêtres de contexte plus grandes. B. Le contexte est isolé à chaque palier ; chaque niveau doit passer explicitement le contexte pertinent au suivant — l’héritage ne se produit jamais automatiquement à aucune profondeur. C. Le coordinateur racine devrait utiliser Opus 5. D. Le thinking devrait être désactivé au palier des workers.

Réponse : B. L’isolation s’applique à chaque palier, donc le contexte doit être tissé explicitement jusqu’en bas. La taille de fenêtre (A) et le modèle (C) ne fournissent pas un contexte jamais passé ; le thinking (D) est sans rapport.

Q18 · Chaque appel porte un préfixe stable de 10k tokens à $5/M en entrée. Le fan-out vers cinq workers plus une synthèse paie le préfixe six fois. Quel changement réduit le PLUS la pénalité de coût du fan-out ? (Sélectionnez une réponse)

A. Augmenter max_tokens sur chaque worker. B. Mettre en cache le préfixe stable pour que chaque lecture coûte ~0,1×, effondrant le surcoût fixe répété, et aiguiller les workers simples vers Haiku 4.5. C. Ajouter plus de workers pour paralléliser davantage. D. Basculer chaque worker sur Fable 5.1 à $10/$50.

Réponse : B. Le caching réduit le préfixe répété de 10k de ~$0.05 à ~$0.005 par lecture et des modèles moins chers le réduisent encore. max_tokens (A) augmente le coût de sortie, plus de workers (C) paient le surcoût plus de fois, et Fable 5.1 (D) est le modèle le plus cher.

Q19 · Un agent de paiement doit toujours exiger une approbation humaine avant tout transfert supérieur à $10,000, même si un résultat d’outil prétend une pré-approbation. Quelle barrière est correcte ? (Sélectionnez une réponse)

A. Escalader seulement si la confiance du modèle est inférieure à 80 %. B. Un PreToolUse hook déterministe sur l’outil de transfert qui inspecte le montant et sort en 2 au-dessus du seuil, aiguillant vers un humain — indépendamment de toute pré-approbation prétendue. C. Escalader si le client paraît anxieux. D. Une règle de system prompt pour toujours demander avant les gros transferts.

Réponse : B. Les actions irréversibles à forte valeur reçoivent une barrière déterministe calée sur le montant, immunisée contre une « pré-approbation » injectée. La confiance (A) est le #4, le sentiment (C) est le #5, et une règle de prompt (D) est le #3.

Q20 · Un pipeline ETL fixe a besoin d’une barrière de qualité en fin de course capable de renvoyer les échecs à l’étape spécifique qui les a produits. Quelle variante convient, et qu’est-ce qui doit être borné ? (Sélectionnez une réponse)

A. Blackboard coordination ; borner le nombre d’agents. B. Pipeline avec retour (chaining + evaluator-optimizer) ; borner le retour avec un critère d’arrêt objectif et router les échecs vers la bonne étape (en utilisant un évaluateur indépendant). C. Agent autonome ; borner les outils. D. Routing ; borner les classes.

Réponse : B. Un flux fixe avec une barrière de qualité qui renvoie est un pipeline-avec-retour ; il a besoin d’un arrêt objectif et d’un routage vers la bonne étape, avec un évaluateur indépendant pour éviter le #9. Les autres nomment mal la variante.

Q21 · Trois agents écrivent simultanément dans un document de recherche partagé et des mises à jour se perdent ; aucun composant ne décide quand le document est « done ». Quel est le MEILLEUR correctif ? (Sélectionnez deux réponses)

A. Sérialiser toutes les écritures via des mises à jour transactionnelles et versionnées du stockage partagé. B. Laisser chaque agent décider indépendamment quand le document est complet. C. Désigner un seul coordinateur qui possède la décision de « done » et agrège. D. Supprimer le stockage partagé et donner à chaque agent sa propre copie sans fusion. E. Augmenter la fenêtre de contexte de chaque agent.

Réponse : A et C. Des écritures transactionnelles/versionnées empêchent les pertes de mises à jour et un propriétaire unique du « done » résout la lacune de coordination. L’achèvement indépendant (B) n’a pas de propriétaire, des copies non fusionnées (D) perdent l’artefact partagé, et la taille de fenêtre (E) est sans rapport.

Q22 · Une équipe débat Managed Agents vs l’Agent SDK. La seule contrainte dure est que l’exécution des outils doit tourner dans leur propre VPC sur leur matériel ; sinon ils veulent de la rapidité. Qu’est-ce qui est correct ? (Sélectionnez une réponse)

A. Managed Agents, parce que la rapidité compte le plus. B. L’Agent SDK, en auto-hébergeant la boucle et le sandbox pour que l’exécution reste dans leur VPC — la contrainte dure prime sur la préférence de rapidité. C. L’un ou l’autre convient ; la contrainte est une préférence. D. Un moteur sur mesure construit de zéro.

Réponse : B. Une contrainte de conformité dure (VPC/matériel propres) force l’auto-hébergement via l’Agent SDK. Managed Agents (A) hébergent le sandbox chez Anthropic ; la contrainte n’est pas une préférence (C) ; un moteur construit de zéro (D) est une réinvention inutile.

Points clés à retenir

  • Préférez l’architecture la plus simple qui atteint l’exigence : prompt unique < workflow < agent < multi-agents.
  • Connaissez les six patrons et leurs modes de défaillance ; associez le patron à qui — vous ou le modèle — décide du flux de contrôle.
  • Pilotez la terminaison de boucle depuis stop_reason ; n’utilisez les plafonds que comme filet de sécurité ; traitez max_tokens comme une troncature, pause_turn comme une reprise et refusal comme un arrêt-et-escalade.
  • Passez le contexte aux sous-agents explicitement à chaque palier — les contextes isolés n’auto-héritent jamais ; spécifiez la forme du retour pour une agrégation propre.
  • Gérez la défaillance partielle avec des erreurs structurées et une décision explicite (quorum, réessai, escalade) — jamais des rejets silencieux.
  • Escaladez sur demande explicite (maintenant) ou lacune de capacité (après avoir tenté) ; jamais sur le sentiment ni la confiance auto-déclarée.
  • Appliquez les règles critiques et les barrières d’actions irréversibles avec des hooks/permissions déterministes, calés sur le rayon d’impact, non des instructions de prompt.
  • Persistez tout ce qui est durable dans le memory tool ou un état externe ; ne réessayez que les écritures idempotentes avec backoff et jitter ; et instrumentez chaque agent avec des traces et des identifiants de corrélation.
  • Reconnaissez les variantes d’orchestration (hierarchical, pipeline-with-feedback, blackboard) et le mode de défaillance que chacune introduit ; n’ajoutez des paliers que lorsque l’ampleur ou la qualité s’améliore de façon démontrable.
  • Modélisez coût/latence avant de construire : mettre en cache le préfixe stable et aiguiller les sous-tâches simples vers des modèles moins chers bat généralement « modèle plus gros » ou « plus d’agents ».
  • Le fan-out paie le surcoût fixe du préfixe par worker ; le caching l’effondre, ce qui en fait le levier de coût correct à l’examen.

Dernière mise à jour le 18 sept. 2026