Workflows Agentiques : anatomie, patterns et implémentation en 2026
Qu'est-ce qu'un workflow agentique ? Anatomie, patterns d'orchestration (séquentiel, parallèle, supervisor, fan-out/fan-in) et code Python concret avec OpenClaw. Guide complet 2026.
Workflows Agentiques : anatomie, patterns et implémentation en 2026
Un workflow agentique, c'est une chaîne d'agents IA qui travaillent ensemble de manière autonome pour accomplir une mission complexe. Contrairement à un script classique qui suit un chemin fixe, un workflow agentique peut décider dynamiquement de la prochaine étape, appeler des outils, gérer des erreurs et s'adapter au contexte.
En 2026, ce pattern est devenu l'architecture standard pour construire des systèmes IA robustes en production. Des frameworks comme OpenClaw, LangGraph ou CrewAI ont popularisé des primitives d'orchestration réutilisables.
Dans ce guide, vous allez apprendre :
- L'anatomie complète d'un workflow agentique
- Les 5 patterns d'orchestration à connaître
- Comment les implémenter avec du code Python fonctionnel
Anatomie d'un workflow agentique
Un workflow agentique repose sur une idée simple : au lieu d'un seul agent qui fait tout, on décompose la mission en sous-tâches confiées à des agents spécialisés. Chaque agent possède un rôle, des outils dédiés et une mémoire locale.
Les 5 composants essentiels
┌─────────────┐
│ Trigger │ ← Événement (cron, webhook, message)
└──────┬──────┘
│
┌──────▼──────┐
│ Agent A │ ← Réception + Planification
│ (Planner) │
└──────┬──────┘
│
┌──────▼──────┐
│ Outils │ ← Appels API, lecture fichier, recherche
│ (Tools) │
└──────┬──────┘
│
┌──────▼──────┐
│ Mémoire │ ← Contexte partagé + Vector DB
│ (Memory) │
└──────┬──────┘
│
┌──────▼──────┐
│ Agent B │ ← Exécution + Décision sur l'étape suivante
│ (Executor) │
└──────┬──────┘
│
┌──────▼──────┐
│ Output │ ← Rapport, email, mise à jour BDD
└─────────────┘
Les 5 composants essentiels :
- Trigger : l'événement qui démarre le workflow (cron, webhook, message, etc.)
- Agents : les unités de travail, chacune avec un rôle et des outils
- Outils : les capacités d'action (appels API, recherche vectorielle, exécution de code)
- Mémoire : le contexte partagé entre agents (state, vector store)
- Output : le livrable final (rapport, email, mise à jour, etc.)
La différence fondamentale avec un script classique réside dans la gestion dynamique du flux : un agent peut décider de réessayer une action, de faire appel à un autre agent, ou de signaler un problème nécessitant une intervention humaine — c'est le human-in-the-loop pattern.
Les 5 patterns d'orchestration
Choisir le bon pattern dépend de la nature de la mission : certaines se prêtent à un flux séquentiel, d'autres nécessitent une exécution parallèle.
1. Séquentiel — Le pattern le plus simple
Les agents s'exécutent les uns après les autres. Chaque agent reçoit le output de l'agent précédent comme contexte.
Quand l'utiliser : étapes dépendantes, pipeline de traitement (scraping → nettoyage → analyse → rapport).
Agent A → Agent B → Agent C → Output
2. Parallèle — Plusieurs agents simultanés
Plusieurs agents s'exécutent en même temps, chacun sur une sous-tâche indépendante. Leurs résultats sont agrégés à la fin.
Quand l'utiliser : veille multi-sources, génération de variations, collectes parallèles.
┌─ Agent B ─┐
Agent A ┤ Agent C │ → Aggregator → Output
└─ Agent D ─┘
3. Supervisor — Un agent orchestrateur
Un agent superviseur coordonne les autres. Il décide quel agent appeler à chaque étape, gère les dépendances et valide les résultats.
Quand l'utiliser : tâches complexes avec plusieurs chemins possibles, systèmes multi-agents où la coordination est critique.
┌─ Agent B ─┐
Supervisor ┤ Agent C │ ← Le supervisor décide de l'ordre
└─ Agent D ─┘
4. Fan-out / Fan-in — Distribution puis agrégation
Un agent lance plusieurs sous-tâches en parallèle (fan-out), puis un agent agrégateur collecte et synthétise les résultats (fan-in).
Quand l'utiliser : analyse multi-sources, génération de contenu à partir de plusieurs contextes, audits.
┌─ Sous-agent 1 ─┐
Initiateur ┤ Sous-agent 2 ─┼→ Agrégateur → Output
└─ Sous-agent 3 ─┘
5. Hiérarchique — Cascade d'agents
Les agents forment une hiérarchie : un agent de niveau supérieur délègue à des agents de niveau inférieur, qui délèguent à leur tour.
Quand l'utiliser : organisations complexes, décomposition hiérarchique de tâches.
Manager → Senior Agent → Junior Agent 1
└→ Junior Agent 2
Implémentation avec OpenClaw
Passons à la pratique. Les exemples ci-dessous utilisent le SDK OpenClaw en Python. Chaque exemple est complet et exécutable.
Prérequis
pip install openclaw-sdk python-dotenv
Exemple 1 — Pipeline Scraping → Analyse → Rapport (Séquentiel)
import openclaw
from openclaw import Agent, Tool, Memory
# Configuration du client
client = openclaw.Client()
# --- Outil de scraping ---
@Tool
def scrape_url(url: str) -> str:
"""Extrait le contenu textuel d'une URL."""
import httpx
response = httpx.get(url, timeout=15.0)
return response.text[:5000]
# --- Outil d'analyse ---
@Tool
def analyze_text(text: str, keywords: list[str]) -> dict:
"""Analyse le texte et extrait les mentions de mots-clés."""
results = {}
for kw in keywords:
results[kw] = text.lower().count(kw.lower())
return {
"keyword_counts": results,
"word_count": len(text.split()),
"sentiment": "neutral" # simplifié pour l'exemple
}
# --- Agent de scraping ---
scraper = Agent(
role="Web Scraper",
goal="Récupérer le contenu des URLs demandées",
tools=[scrape_url],
model="openai/gpt-4o"
)
# --- Agent analyste ---
analyst = Agent(
role="Content Analyst",
goal="Analyser le contenu et identifier les insights clés",
tools=[analyze_text],
model="openai/gpt-4o"
)
# --- Exécution séquentielle ---
urls = [
"https://example.com/article-1",
"https://example.com/article-2"
]
keywords = ["automation", "agent", "IA"]
# Étape 1 : Scraping
scraped_contents = []
for url in urls:
result = scraper.run(f"Scrape le contenu de {url}")
scraped_contents.append(result)
# Étape 2 : Analyse
analyses = []
for content in scraped_contents:
result = analyst.run(
f"Analyse ce texte avec les mots-clés {keywords}: {content}"
)
analyses.append(result)
# Étape 3 : Rapport
print("=== RÉSULTATS ===")
for i, analysis in enumerate(analyses):
print(f"Source {i+1}: {analysis}")
Exemple 2 — Triage email → Réponse → Archivage (Supervisor)
from openclaw import Agent, Tool
import json
# --- Outils ---
@Tool
def fetch_unread_emails() -> list[dict]:
"""Retourne la liste des emails non lus."""
# Connexion IMAP (via himalaya ou directement)
return [
{"id": "001", "from": "client@example.com", "subject": "Question produit", "body": "Bonjour, est-ce que votre outil supporte X ?"},
{"id": "002", "from": "support@example.com", "subject": "Rapport hebdomadaire", "body": "Voici le rapport de la semaine."},
]
@Tool
def send_email(to: str, subject: str, body: str) -> str:
"""Envoie un email."""
return f"Email envoyé à {to} : {subject}"
@Tool
def archive_email(email_id: str, category: str) -> str:
"""Archive un email dans une catégorie."""
return f"Email {email_id} archivé dans {category}"
# --- Agents spécialisés ---
triage_agent = Agent(
role="Email Triage",
goal="Analyser chaque email et déterminer sa catégorie et priorité",
model="openai/gpt-4o-mini"
)
response_agent = Agent(
role="Response Writer",
goal="Rédiger une réponse professionnelle et adaptée",
model="openai/gpt-4o"
)
# --- Supervisor ---
def supervisor_workflow():
emails = fetch_unread_emails()
results = []
for email in emails:
# 1. Triage
triage = triage_agent.run(
f"Analyse cet email et retourne un JSON avec category et priority: {email}"
)
triage_data = json.loads(triage) if triage.startswith("{") else {"category": "general", "priority": "normal"}
# 2. Si haute priorité → répondre immédiatement
if triage_data.get("priority") == "high":
response = response_agent.run(
f"Rédige une réponse à cet email: {email['body']}"
)
send_email(email["from"], f"Re: {email['subject']}", response)
# 3. Archivage systématique
archive_email(email["id"], triage_data.get("category", "inbox"))
results.append({"email_id": email["id"], "triage": triage_data})
return results
results = supervisor_workflow()
print(json.dumps(results, indent=2))
Exemple 3 — Veille multi-sources (Fan-out / Fan-in)
from openclaw import Agent, Tool
from concurrent.futures import ThreadPoolExecutor
@Tool
def search_web(query: str) -> str:
"""Recherche sur le web."""
return f"Résultats de recherche pour: {query}"
def fan_out_search(queries: list[str]) -> list[str]:
"""Exécute plusieurs recherches en parallèle."""
agent = Agent(role="Searcher", goal="Rechercher sur le web", model="openai/gpt-4o-mini")
results = []
with ThreadPoolExecutor(max_workers=5) as executor:
futures = [executor.submit(agent.run, f"Recherche: {q}") for q in queries]
results = [f.result() for f in futures]
return results
def aggregate_results(raw_results: list[str]) -> str:
"""Agrège les résultats de recherche en une synthèse."""
aggregator = Agent(
role="Aggregator",
goal="Synthétiser les résultats de recherche en un rapport clair",
model="openai/gpt-4o"
)
return aggregator.run(
f"Synthétise ces résultats de recherche en un rapport structuré:\n{raw_results}"
)
# --- Exécution Fan-out / Fan-in ---
queries = [
"OpenClaw multi-agent orchestration 2026",
"CrewAI vs LangGraph comparison",
"AI agent workflow best practices"
]
# Fan-out : recherches parallèles
raw_results = fan_out_search(queries)
# Fan-in : agrégation
final_report = aggregate_results(raw_results)
print(final_report)
Patterns avancés pour la production
Au-delà des patterns de base, voici les techniques qui séparent un prototype d'un système production-ready.
Human-in-the-loop
Certaines décisions requièrent un humain avant de continuer. Par exemple :
- Approbation avant l'envoi d'un email externe
- Validation d'un contenu avant publication
- Escalade vers un support humain si la confiance est faible
@Tool
def require_human_approval(task: str, context: dict) -> bool:
"""Demande une approbation humaine. Retourne True si approuvé."""
print(f"⚠️ APPROBATION REQUISE: {task}")
print(f"Contexte: {context}")
response = input("Approuver? (o/n): ")
return response.lower() == "o"
# Dans le workflow
if not require_human_approval("Envoyer email", {"to": client, "content": draft}):
print("Email non envoyé — en attente d'approbation.")
return
Gestion d'erreurs et Retry
from openclaw import Agent
from tenacity import retry, stop_after_attempt, wait_exponential
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10))
def resilient_task(agent: Agent, prompt: str) -> str:
try:
return agent.run(prompt)
except Exception as e:
print(f"Erreur: {e} — nouvelle tentative...")
raise
Rollback
Pour les opérations critiques, implémenter un mécanisme de rollback :
class WorkflowState:
def __init__(self):
self.checkpoints = []
def checkpoint(self, label: str, data: dict):
self.checkpoints.append({"label": label, "data": data})
def rollback(self, label: str):
"""Revient au dernier checkpoint."""
for i, cp in enumerate(reversed(self.checkpoints)):
if cp["label"] == label:
return cp["data"]
return self.checkpoints[0]["data"]
Circuit Breaker
Pour éviter les cascading failures quand un service externe est down :
from circuitbreaker import circuit
@circuit(failure_threshold=3, recovery_timeout=30)
def call_external_api(endpoint: str) -> dict:
response = httpx.get(endpoint)
return response.json()
Stack complète pour la production
Pour aller en production avec des workflows agentiques, voici la stack recommandée :
| Composant | Outil | Rôle |
|---|---|---|
| Orchestration | OpenClaw | Coordination des agents, gestion du state |
| Mémoire vectorielle | Qdrant / Pinecone | Stockage et retrieval du contexte |
| Triggers externes | n8n / Zapier | Déclenchement sur événements (webhook, cron) |
| Monitoring | LangSmith / Phoenix | Tracing, latence, coûts LLM |
| Queue async | Redis / Celery | Gestion des workflows longs |
| Hébergement | VPS (Hetzner, OVH) | Infrastructure |
Cette stack couvre le cycle complet : déclenchement, exécution, mémoire, observabilité et déploiement.
Bonnes pratiques
Testing
Chaque workflow mérite des tests. Utilisez des mocks pour les appels externes et des fixtures pour le state :
def test_scraper_workflow(mocker):
mocker.patch("httpx.get", return_value=Mocker(text="contenu test"))
result = scraper.run("Scrape https://test.com")
assert "contenu test" in result
Observabilité
Instrumentez chaque étape avec du logging structuré :
import structlog
logger = structlog.get_logger()
logger.info("workflow_step", step="scraping", url=url, duration_ms=1200)
Réduction des coûts LLM
- Utilisez des modèles petits (gpt-4o-mini) pour les tâches simples
- Activez le streaming pour réduire la latence perçue
- Mettez en cache les prompts invariants avec
@cache
Sécurité
- Ne jamais exposer les clés API dans les logs
- Utiliser des variables d'environnement via
python-dotenv - Valider les entrées utilisateur avant de les passer aux agents (prompt injection)
Questions fréquentes
Qu'est-ce qu'un workflow agentique ?
Un workflow agentique est une chaîne d'agents IA qui collaborent de manière autonome pour accomplir une mission. Chaque agent possède un rôle, des outils et peut prendre des décisions dynamiques sur le prochain étape du workflow.
Comment créer des workflows agentiques ?
La création passe par 4 étapes :
- Décomposer la mission en sous-tâches
- Attribuer chaque sous-tâche à un agent spécialisé
- Définir les patterns d'orchestration (séquentiel, parallèle, supervisor)
- Implémenter avec un framework comme OpenClaw et tester en conditions réelles
Quelle différence entre workflow séquentiel et workflow parallèle ?
Dans un workflow séquentiel, les agents s'exécutent les uns après les autres — le output de l'un devient l'input du suivant. Dans un workflow parallèle, plusieurs agents s'exécutent simultanément sur des sous-tâches indépendantes, puis un agrégateur combine leurs résultats.
Comment gérer les erreurs dans un workflow agentique ?
Utilisez une combinaison de retries avec backoff exponentiel, de checkpoints pour permettre le rollback, et de circuit breakers pour éviter les cascading failures. Implémentez aussi un human-in-the-loop pour les décisions critiques.
Quels outils pour surveiller un workflow agentique en production ?
LangSmith et Arize Phoenix offrent du tracing complet (latence par étape, coûts LLM, taux d'erreur). Pour les logs structurés, utilisez structlog. Pour la métrique métier, branchez un dashboard Grafana sur vos checkpoints.
Ressources complémentaires
Un workflow agentique s'inscrit dans un système multi-agents plus large. Pour aller plus loin :
- Créer un agent IA — Guide complet pour créer votre premier agent from scratch
- OpenClaw : guide complet — Tout savoir sur le framework d'orchestration
- Systèmes multi-agents — Comment plusieurs agents interagissent et partagent le contexte
- CrewAI : orchestrer des Crews — Comparaison et implémentation avec CrewAI
- Outils pour agents IA — La stack complète des outils disponibles
Restez informé sur les agents IA
Nouveaux tutoriels, comparatifs et guides pratiques directement dans votre boîte mail.