Les 5 Patterns d'Architecture d'Agents IA avec Claude
By Learnia AI Research Team
Les 5 Patterns d'Architecture d'Agents IA
Les implémentations d'agents les plus réussies ne reposent pas sur des frameworks complexes — elles utilisent des patterns simples et composables. Ce guide couvre les 5 patterns fondamentaux qui permettent de construire des systèmes d'IA allant du simple chaînage de prompts jusqu'aux agents totalement autonomes.
Workflows vs Agents : La Distinction Fondamentale
Avant de plonger dans les patterns, une distinction essentielle :
- →Workflows : Les LLM et outils sont orchestrés via des chemins de code prédéfinis. Le développeur contrôle le flux.
- →Agents : Les LLM dirigent dynamiquement leurs propres processus et l'utilisation des outils. L'IA décide de la marche à suivre.
La brique de base de tout système agentique est le LLM Augmenté : un LLM enrichi par la récupération d'informations (retrieval), des outils et de la mémoire. Pour approfondir la brique retrieval, consultez notre guide sur les fondamentaux du RAG.
Pattern 1 : Prompt Chaining (Chaîne Séquentielle)
La tâche est décomposée en étapes séquentielles, où chaque appel LLM traite la sortie du précédent. Des portes programmatiques peuvent être ajoutées entre les étapes pour vérifier la qualité.
Quand l'utiliser : Quand la tâche se décompose naturellement en sous-tâches fixes et séquentielles.
Exemples concrets :
| Cas d'usage | Étape 1 | Gate | Étape 2 |
|---|---|---|---|
| Rédaction marketing | Générer le texte | Vérifier les guidelines | Traduire |
| Génération de document | Créer un plan | Valider les critères | Rédiger le contenu |
| Analyse de code | Générer le code | Exécuter les tests | Refactoriser |
# Exemple : Chaîne de rédaction avec gate de vérification
def prompt_chain(input_text):
# Étape 1 : Générer le brouillon
draft = call_claude("Rédige un résumé de : " + input_text)
# Gate : Vérifier la longueur et la pertinence
if len(draft.split()) > 200:
return "Draft trop long, retenter avec contrainte"
# Étape 2 : Améliorer le style
polished = call_claude("Améliore le style : " + draft)
return polished
Pour un guide complet sur ce pattern, consultez notre article dédié sur le prompt chaining et les pipelines.
Pattern 2 : Routing (Classification et Redirection)
L'entrée est classifiée, puis redirigée vers un processus spécialisé. Cela permet une séparation des préoccupations : chaque branche a son propre prompt optimisé.
Quand l'utiliser : Quand il existe des catégories distinctes qui sont mieux traitées séparément.
Exemples concrets :
| Classification | Branche A | Branche B | Branche C |
|---|---|---|---|
| Service client | Remboursement → workflow dédié | Question technique → base de connaissances | Plainte → escalade humaine |
| Complexité de requête | Facile → Haiku (rapide, économique) | Moyen → Sonnet (équilibré) | Difficile → Opus (raisonnement profond) |
| Type de contenu | Code → linter + review | Texte → analyse de style | Données → validation de schéma |
# Exemple : Router les requêtes par complexité vers différents modèles
def route_query(query):
# Classifier la complexité
category = call_claude(
"Classe cette requête : SIMPLE, MOYEN, COMPLEXE\n" + query,
model="haiku"
)
# Router vers le bon modèle
model_map = {
"SIMPLE": "haiku",
"MOYEN": "sonnet",
"COMPLEXE": "opus"
}
return call_claude(query, model=model_map.get(category, "sonnet"))
Pour approfondir ce pattern, découvrez notre guide sur le routing conditionnel de prompts.
Pattern 3 : Parallélisation
Les sous-tâches sont exécutées simultanément, puis les résultats sont agrégés. Deux variantes principales :
- →Sectioning : Sous-tâches indépendantes en parallèle
- →Voting : La même tâche exécutée plusieurs fois pour obtenir un consensus
Quand l'utiliser : Quand les sous-tâches peuvent être parallélisées OU quand plusieurs perspectives sont nécessaires.
Exemples concrets :
| Variante | Cas d'usage | Détail |
|---|---|---|
| Sectioning | Guardrails | Un modèle traite la requête, un autre vérifie les contenus inappropriés |
| Sectioning | Code review | Analyse sécurité + performance + style en parallèle |
| Voting | Classification sensible | 3 exécutions → vote majoritaire pour réduire les erreurs |
| Voting | Traduction | Plusieurs traductions → sélection de la meilleure |
import asyncio
# Exemple : Code review parallélisé (sectioning)
async def parallel_code_review(code):
security, performance, style = await asyncio.gather(
call_claude_async("Analyse la sécurité de ce code :\n" + code),
call_claude_async("Analyse la performance de ce code :\n" + code),
call_claude_async("Analyse le style de ce code :\n" + code),
)
# Agrégation des résultats
return call_claude(
f"Synthétise ces 3 analyses en un rapport unifié :\n"
f"Sécurité: {security}\nPerformance: {performance}\nStyle: {style}"
)
Notre article sur les patterns map-reduce explore en détail les stratégies de décomposition et d'agrégation parallèle.
Pattern 4 : Orchestrateur-Workers
Un LLM central (l'orchestrateur) décompose dynamiquement la tâche, délègue à des workers, puis synthétise les résultats. La différence clé avec la parallélisation : les sous-tâches ne sont pas prédéfinies — l'orchestrateur les détermine à la volée.
Quand l'utiliser : Quand les sous-tâches ne peuvent pas être prédites à l'avance (ex : modification de code sur plusieurs fichiers).
Exemples concrets :
| Cas d'usage | Orchestrateur décide | Workers exécutent |
|---|---|---|
| Refactoring de codebase | Quels fichiers modifier | Chaque worker modifie un fichier |
| Recherche multi-source | Quelles sources interroger | Chaque worker recherche une source |
| Génération de documentation | Quels modules documenter | Chaque worker rédige une section |
# Exemple : Orchestrateur-workers pour du refactoring
def orchestrator_workers(task):
# L'orchestrateur analyse et planifie
plan = call_claude(
"Analyse cette tâche et décompose-la en sous-tâches.\n"
"Retourne un JSON avec les sous-tâches.\n" + task,
model="sonnet"
)
subtasks = json.loads(plan)
# Les workers exécutent en parallèle
results = []
for subtask in subtasks:
result = call_claude(subtask["prompt"], model="haiku")
results.append(result)
# L'orchestrateur synthétise
return call_claude(
"Synthétise ces résultats en une réponse cohérente :\n"
+ "\n".join(results),
model="sonnet"
)
Pattern 5 : Évaluateur-Optimiseur
Un LLM génère une réponse, un second l'évalue et fournit du feedback, puis le premier raffine. Ce cycle continue jusqu'à ce que la qualité soit satisfaisante.
Quand l'utiliser : Quand il existe des critères d'évaluation clairs ET que le raffinement itératif apporte une valeur mesurable.
Exemples concrets :
| Cas d'usage | Générateur | Évaluateur | Critères |
|---|---|---|---|
| Traduction littéraire | Traduit le texte | Vérifie fidélité + style | Score ≥ 8/10 |
| Génération de code | Écrit le code | Exécute les tests | Tous les tests passent |
| Rédaction SEO | Rédige l'article | Vérifie keywords + structure | Checklist SEO complète |
# Exemple : Boucle évaluateur-optimiseur
def evaluator_optimizer(task, max_iterations=3):
response = call_claude("Génère : " + task)
for i in range(max_iterations):
# Évaluation
evaluation = call_claude(
f"Évalue cette réponse sur 10.\n"
f"Tâche: {task}\nRéponse: {response}\n"
f"Si score < 8, donne un feedback précis pour améliorer."
)
if "score: 8" in evaluation or "score: 9" in evaluation or "score: 10" in evaluation:
return response # Qualité suffisante
# Raffinement avec le feedback
response = call_claude(
f"Améliore cette réponse en tenant compte du feedback.\n"
f"Réponse précédente: {response}\n"
f"Feedback: {evaluation}"
)
return response
Pour évaluer systématiquement les sorties de vos prompts, consultez notre guide sur les évaluations Claude.
Agents Autonomes : Quand le LLM Prend les Commandes
Au-delà des workflows structurés, les agents autonomes laissent le LLM décider dynamiquement de chaque prochaine action. C'est essentiellement un LLM qui utilise des outils dans une boucle, guidé par le feedback de l'environnement.
Principes clés pour les agents autonomes :
- →Ground truth à chaque étape — L'agent doit vérifier le résultat réel de ses actions (ex : exécuter les tests, pas deviner s'ils passent)
- →Conditions d'arrêt — Définir un nombre maximal d'itérations pour éviter les boucles infinies
- →Intervention humaine — Prévoir un mécanisme pour que l'agent demande de l'aide quand il est bloqué
- →Bac à sable — Exécuter dans un environnement contrôlé avec des permissions limitées
Quand utiliser un agent autonome :
- →Problèmes ouverts où le nombre d'étapes est imprévisible
- →Environnements fiables avec feedback clair (ex : tests automatisés)
- →Tâches où l'humain accepte de déléguer le contrôle
Quand NE PAS utiliser un agent autonome :
- →Tâches avec un chemin d'exécution prévisible → utilisez un workflow
- →Environnements à haut risque sans rollback possible
- →Quand la latence ou le coût sont critiques
Pour approfondir le pattern d'agent autonome, lisez notre guide sur la méthode ReAct qui détaille la boucle Pensée→Action→Observation.
Concevoir l'Interface Agent-Ordinateur (ACI)
Tout comme on investit dans l'interface humain-ordinateur (HCI/UX), il faut soigner l'Agent-Computer Interface (ACI) — la façon dont l'agent interagit avec ses outils.
Principes de Design ACI
| Principe | Explication | Exemple |
|---|---|---|
| Documentation riche | Inclure des exemples d'usage, cas limites, limites | "search(query, max_results=10) — Searches the database. Returns empty array if no results. Max 100 results." |
| Poka-yoke | Rendre les erreurs impossibles ou difficiles | Rejeter les paramètres invalides plutôt que les ignorer silencieusement |
| Format naturel | Utiliser des formats que le modèle a vus pendant l'entraînement | JSON, Markdown plutôt que des formats propriétaires |
| Espace de réflexion | Donner assez de tokens au modèle pour « réfléchir » | Ajouter un champ reasoning avant le champ action dans le schéma |
# ❌ Mauvais design ACI : noms cryptiques, pas d'exemples
tools = [{
"name": "q",
"description": "Query",
"input_schema": {"query": "string"}
}]
# ✅ Bon design ACI : noms clairs, exemples, cas limites
tools = [{
"name": "search_knowledge_base",
"description": "Search the knowledge base for relevant articles. "
"Returns top matches with title and excerpt. "
"Example: search_knowledge_base('comment configurer MCP') "
"Returns empty array if no matches. Max 20 results.",
"input_schema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Natural language search query. Be specific."
},
"max_results": {
"type": "integer",
"default": 10,
"description": "Maximum number of results (1-20)"
}
},
"required": ["query"]
}
}]
Pour en savoir plus sur le design d'outils pour agents, consultez notre guide sur le tool use avec Claude et notre article sur les skills personnalisés Claude Code.
Arbre de Décision : Quel Pattern Choisir ?
Bonnes Pratiques Universelles
- →Commencez simple — Un prompt bien écrit résout souvent le problème sans orchestration
- →Ajoutez de la complexité progressivement — Chaque couche doit apporter une valeur mesurable
- →Priorisez la transparence — Montrez les étapes de planification de l'agent (pas de boîte noire)
- →Soignez l'ACI — Investissez autant dans le design des outils que dans les prompts
- →Testez extensivement — Exécutez des centaines d'exemples, itérez sur les définitions d'outils
Pour Aller Plus Loin
- →Méthode ReAct : Comment les agents IA pensent et agissent — La boucle fondamentale Pensée→Action→Observation
- →Prompt Chaining et Pipelines — Approfondissement du pattern 1
- →Routing Conditionnel de Prompts — Approfondissement du pattern 2
- →Patterns Map-Reduce — Techniques de décomposition parallèle
- →Tool Use avec Claude — Donner des outils à vos agents
- →Évaluations Claude — Mesurer la qualité de vos systèmes agentiques
Weekly AI Insights
Tools, techniques & news — curated for AI practitioners. Free, no spam.
Free, no spam. Unsubscribe anytime.
→Related Articles
FAQ
Quels sont les 5 patterns d'architecture d'agents IA ?+
Les 5 patterns sont : le prompt chaining (chaîne séquentielle), le routing (classification et redirection), la parallélisation (exécution simultanée), l'orchestrateur-workers (délégation dynamique) et l'évaluateur-optimiseur (boucle de raffinement itératif).
Quelle est la différence entre un workflow et un agent autonome ?+
Un workflow orchestre les LLM via des chemins de code prédéfinis — le développeur contrôle le flux. Un agent autonome laisse le LLM diriger dynamiquement ses propres processus et l'utilisation des outils, avec une intervention humaine minimale.
Comment choisir le bon pattern d'agent pour mon cas d'usage ?+
Commencez par le plus simple qui fonctionne. Utilisez le prompt chaining pour les tâches séquentielles, le routing pour les catégories distinctes, la parallélisation pour les sous-tâches indépendantes, l'orchestrateur-workers quand les sous-tâches sont imprévisibles, et l'évaluateur-optimiseur quand un raffinement itératif apporte une valeur mesurable.
Faut-il utiliser un framework pour construire des agents IA ?+
Pas nécessairement. Les implémentations les plus réussies utilisent des patterns simples et composables plutôt que des frameworks complexes. Les frameworks peuvent ajouter de l'abstraction inutile — préférez des patterns directs avec un code que vous comprenez.