Architectures Multi-Agents et Orchestration avec Agno
Maîtrisez les systèmes multi-agents : patterns de collaboration, orchestration avec Agno Team (coordinate, route, broadcast, tasks), mémoire persistante et déploiement avec AgentOS.
Pourquoi des Multi-Agents ?
Un seul agent atteint vite ses limites face à des tâches complexes :
- Trop d''outils : un agent avec 50 outils fait des mauvais choix
- Trop de contexte : le prompt devient énorme et le LLM perd en précision
- Pas de spécialisation : un généraliste est moyen partout
La solution : plusieurs agents spécialisés qui collaborent.
Analogie : Une entreprise ne confie pas tout à une seule personne. Elle a un comptable, un développeur, un commercial, un manager. Chacun est expert dans son domaine. Les multi-agents fonctionnent pareil.
Patterns de Collaboration
Pattern 1 : Superviseur (Manager → Workers)
Un agent superviseur distribue les tâches à des agents spécialisés :
# Le superviseur décide quel agent appeler
SUPERVISOR_PROMPT = """Tu es un manager d''équipe IA.
Tu as 3 agents spécialisés :
- "researcher" : cherche des informations sur le web
- "analyst" : analyse des données et produit des statistiques
- "writer" : rédige des textes et rapports
Pour chaque demande, décide quel agent appeler et dans quel ordre.
Retourne le plan sous forme JSON."""
Avantages : Contrôle centralisé, facile à débugger Inconvénients : Le superviseur est un point unique de défaillance
Pattern 2 : Pipeline Séquentiel
Les agents s''enchaînent comme une chaîne de montage :
Chaque agent reçoit la sortie du précédent et la transforme.
# Pipeline séquentiel simple
def run_pipeline(query: str) -> str:
# Étape 1 : Recherche
raw_data = research_agent.invoke(query)
# Étape 2 : Extraction des faits clés
facts = extraction_agent.invoke(raw_data)
# Étape 3 : Analyse
analysis = analysis_agent.invoke(facts)
# Étape 4 : Rédaction du rapport
report = writing_agent.invoke(analysis)
return report
Avantages : Simple, prévisible, facile à tester Inconvénients : Rigide, pas de retour en arrière possible
Pattern 3 : Débat / Critique
Deux agents confrontent leurs points de vue :
def debate(question: str, max_rounds: int = 3) -> str:
proposal = proposer_agent.invoke(question)
for round in range(max_rounds):
critique = critic_agent.invoke(
f"Analyse cette proposition et identifie les faiblesses :\n{proposal}"
)
if "APPROUVÉ" in critique:
return proposal
proposal = proposer_agent.invoke(
f"Question : {question}\n"
f"Ta proposition précédente : {proposal}\n"
f"Critique reçue : {critique}\n"
f"Améliore ta proposition."
)
return proposal # Retourner la dernière version
Avantages : Améliore la qualité des réponses, réduit les hallucinations Inconvénients : Coûteux (2x les appels API), plus lent
Agno Team : Orchestration Multi-Agents
Agno Team implémente tous ces patterns en quelques lignes de code. Au lieu de coder manuellement la logique de coordination, vous choisissez un mode de collaboration et Agno gère le reste.
Les 4 Modes de Team
| Mode | Fonctionnement | Pattern équivalent |
|---|---|---|
TeamMode.coordinate | Un leader délègue aux membres puis synthétise | Superviseur |
TeamMode.route | Redirige la requête vers le bon spécialiste | Routeur / Classification |
TeamMode.broadcast | Envoie la même tâche à tous les agents | Débat / Multi-perspectives |
TeamMode.tasks | Décompose en liste de tâches, itère | Pipeline séquentiel |
Exemple : Équipe de Recherche (mode coordinate)
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.team.team import Team
from agno.team.mode import TeamMode
# 1. Créer les agents spécialisés
researcher = Agent(
name="Chercheur",
role="Spécialiste en recherche d''informations",
model=Claude(id="claude-sonnet-4-5"),
instructions=[
"Tu recherches des informations fiables et récentes.",
"Cite toujours tes sources.",
],
)
analyst = Agent(
name="Analyste",
role="Expert en analyse de données",
model=Claude(id="claude-sonnet-4-5"),
instructions=[
"Tu analyses les données et identifies les tendances.",
"Présente tes résultats avec des chiffres précis.",
],
)
writer = Agent(
name="Rédacteur",
role="Rédacteur de contenu",
model=Claude(id="claude-sonnet-4-5"),
instructions=[
"Tu rédiges des textes clairs et bien structurés.",
"Utilise un ton professionnel mais accessible.",
],
)
# 2. Créer l''équipe
team = Team(
name="Équipe Recherche & Analyse",
mode=TeamMode.coordinate, # Le leader délègue et synthétise
model=Claude(id="claude-sonnet-4-5"),
members=[researcher, analyst, writer],
instructions=[
"Coordonne les membres pour produire un rapport complet.",
"Le chercheur trouve les infos, l''analyste les analyse,",
"et le rédacteur produit le rapport final.",
],
show_members_responses=True,
markdown=True,
)
# 3. Lancer l''équipe
team.print_response(
"Analyse les tendances de l''IA en 2025 et rédige un rapport",
stream=True,
)
En mode coordinate, le leader de l''équipe analyse la demande, délègue les sous-tâches aux bons membres, attend leurs réponses, puis synthétise le résultat final. C''est le pattern Superviseur automatisé.
Exemple : Support Client (mode route)
# Agents spécialisés par domaine
technical_agent = Agent(
name="Support Technique",
role="Expert technique",
model=Claude(id="claude-sonnet-4-5"),
instructions=["Tu résous les problèmes techniques et bugs."],
)
billing_agent = Agent(
name="Support Facturation",
role="Expert facturation",
model=Claude(id="claude-sonnet-4-5"),
instructions=["Tu gères les questions de paiement et facturation."],
)
general_agent = Agent(
name="Support Général",
role="Agent généraliste",
model=Claude(id="claude-sonnet-4-5"),
instructions=["Tu réponds aux questions générales."],
)
# Mode route : redirige vers le bon spécialiste
support_team = Team(
name="Support Client",
mode=TeamMode.route,
model=Claude(id="claude-sonnet-4-5"),
members=[technical_agent, billing_agent, general_agent],
instructions=[
"Analyse la requête du client.",
"Redirige vers le support technique pour les bugs,",
"vers la facturation pour les paiements,",
"vers le support général pour le reste.",
],
)
support_team.print_response(
"Mon paiement a été débité deux fois",
stream=True,
)
# → Automatiquement redirigé vers billing_agent
Le mode route est idéal pour le support client, les chatbots multi-domaines, et tout scénario où une requête doit être dirigée vers LE bon spécialiste.
Exemple : Multi-Perspectives (mode broadcast)
# Mode broadcast : tous les agents reçoivent la même question
debate_team = Team(
name="Panel d''Experts",
mode=TeamMode.broadcast,
model=Claude(id="claude-sonnet-4-5"),
members=[optimist_agent, pessimist_agent, pragmatist_agent],
instructions=["Synthétise les différentes perspectives des membres."],
markdown=True,
)
debate_team.print_response(
"L''IA va-t-elle remplacer les développeurs ?",
stream=True,
)
# → Chaque agent donne sa perspective, le leader synthétise
Exemple : Projet Séquentiel (mode tasks)
# Mode tasks : décompose en étapes séquentielles
project_team = Team(
name="Pipeline de Contenu",
mode=TeamMode.tasks,
model=Claude(id="claude-sonnet-4-5"),
members=[researcher, analyst, writer],
instructions=[
"Décompose le projet en tâches séquentielles.",
"Assigne chaque tâche au membre le plus qualifié.",
],
max_iterations=10, # Limite le nombre d''itérations
markdown=True,
)
project_team.print_response(
"Crée un guide complet sur le fine-tuning de LLMs",
stream=True,
)
Le mode tasks est idéal pour les workflows séquentiels. L''équipe décompose automatiquement l''objectif en sous-tâches, les assigne aux membres, et itère jusqu''à complétion (ou max_iterations).
Patterns Avancés
Agents avec Mémoire Partagée (Blackboard)
Chaque agent lit et écrit dans une mémoire partagée (vector store, base de données, ou simple dictionnaire).
Mémoire Persistante avec Agno
Agno intègre nativement la gestion de mémoire pour les agents et les équipes :
from agno.agent import Agent
from agno.db.sqlite import SqliteDb
from agno.memory import MemoryManager
from agno.models.anthropic import Claude
# Base de données pour la persistance
db = SqliteDb(db_file="tmp/agents.db")
# Le MemoryManager extrait automatiquement les faits importants
memory_manager = MemoryManager(
model=Claude(id="claude-sonnet-4-5"),
db=db,
)
agent = Agent(
model=Claude(id="claude-sonnet-4-5"),
db=db,
memory_manager=memory_manager,
enable_agentic_memory=True, # L''agent gère sa mémoire
add_history_to_context=True, # Historique dans le contexte
num_history_runs=5, # 5 dernières conversations
markdown=True,
)
# L''agent se souvient entre les sessions
agent.print_response("Je préfère les réponses courtes et en français", stream=True)
# → Le MemoryManager stocke cette préférence
# Session suivante...
agent.print_response("Explique le RAG", stream=True)
# → Réponse courte, en français (il a retenu la préférence !)
Avec enable_agentic_memory, l''agent extrait automatiquement les informations importantes de chaque conversation (noms, préférences, faits clés) et les stocke. Pas besoin de gérer la mémoire manuellement — c''est la mémoire "magique" que les utilisateurs attendent.
Agent avec Auto-Réflexion
def reflexion_node(state: dict) -> dict:
"""L''agent évalue sa propre réponse."""
score_response = llm.invoke(
f"Évalue cette réponse (qualité 1-10, points à améliorer) :\n"
f"Question : {state[''query'']}\n"
f"Réponse : {state[''response'']}"
)
if "score: " in score_response.content:
score = int(score_response.content.split("score: ")[1][0])
if score < 7:
state["needs_improvement"] = True
else:
state["needs_improvement"] = False
return state
Déploiement avec AgentOS
AgentOS est le runtime de production d''Agno. Il transforme vos agents en API REST complète en une seule commande.
De l''Agent au Service
from agno.agent import Agent
from agno.models.anthropic import Claude
from agno.os import AgentOS
# Vos agents existants
research_agent = Agent(
name="Research",
model=Claude(id="claude-sonnet-4-5"),
tools=[search_web, get_weather],
markdown=True,
)
analysis_agent = Agent(
name="Analysis",
model=Claude(id="claude-sonnet-4-5"),
tools=[analyze_data],
markdown=True,
)
# Déployer en une ligne
agent_os = AgentOS(
agents=[research_agent, analysis_agent],
authorization=True, # Authentification activée
)
# Servir sur le port 7777
agent_os.serve(port=7777)
Ce que fournit AgentOS
| Fonctionnalité | Description |
|---|---|
| 50+ endpoints | API REST complète pour chaque agent |
| Authentification | RBAC, tokens, contrôle d''accès |
| Sessions | Suivi des conversations par utilisateur |
| Tracing | Trace chaque étape de raisonnement |
| Métriques | Latence, tokens consommés, coûts par requête |
Architecture de Production
Bonnes Pratiques de Production
| Pratique | Pourquoi |
|---|---|
Activer authorization=True | Contrôler qui peut utiliser vos agents |
| Monitorer les métriques | Suivre coûts, latence et erreurs |
| Limiter les outils sensibles | Un agent ne doit pas avoir accès à tout |
| Tester chaque agent | Tests unitaires + tests d''intégration |
| Utiliser des sessions | Traçabilité des conversations |
Le coût des multi-agents peut exploser rapidement. Un workflow de 4 agents qui font chacun 3 appels LLM = 12 appels API par requête utilisateur. Avec Claude Sonnet à $3/M tokens en entrée, surveillez vos métriques dans AgentOS.
Résumé des Patterns
| Pattern | Agno Team Mode | Quand l''utiliser |
|---|---|---|
| Superviseur | TeamMode.coordinate | Tâches variées, besoin de synthèse |
| Routage | TeamMode.route | Classification, support client |
| Multi-perspectives | TeamMode.broadcast | Qualité maximale, perspectives multiples |
| Pipeline | TeamMode.tasks | Processus séquentiel bien défini |
| Mémoire | enable_agentic_memory | Conversations persistantes |
Points clés à retenir :
- Les multi-agents résolvent les limites d''un agent unique (trop d''outils, pas de spécialisation)
- Agno Team fournit 4 modes de collaboration prêts à l''emploi (coordinate, route, broadcast, tasks)
- La mémoire persistante avec MemoryManager enrichit les agents de contexte entre les sessions
- AgentOS transforme vos agents en API de production avec authentification, tracing et métriques
- Surveillez toujours les coûts — les multi-agents multiplient les appels API
Specialiste IA — Master Intelligence Artificielle
Diplome d'un Master en Intelligence Artificielle, je travaille au quotidien sur des projets IA en entreprise. J'ai cree IwanttolearnAI pour rendre l'apprentissage de l'IA accessible a tous, gratuitement.
Continuer a apprendre
Mémoire des Agents IA : Short-Term et Long-Term avec Agno
Apprenez à donner une mémoire persistante à vos agents Agno : short-term dans le contexte, long-term avec SQLite et PostgreSQL, et partage de mémoire entre plusieurs agents.
MCP : Le Protocole qui Connecte les Agents aux Outils
Découvrez MCP (Model Context Protocol) créé par Anthropic : architecture client-serveur, transports stdio et HTTP, utilisation avec Agno, et création de votre propre serveur MCP.
Tool Use et Function Calling avec Agno
Donnez des "mains" à vos agents IA : apprenez à utiliser les outils intégrés d'Agno (recherche web, fichiers, finance) et à créer vos propres outils custom avec le décorateur @tool.