IA

Multi-agents : faire collaborer plusieurs IA

Vous avez un agent qui code. Il fonctionne bien sur des taches isolees -- un bug a corriger, une fonction a ecrire, un test a ajouter. Mais quand vous lui demandez de gerer un projet entier, les limites apparaissent. Le contexte deborde, les erreurs s'accumulent, et vous passez plus de temps a superviser qu'a produire. La reponse n'est pas un agent plus puissant. C'est plusieurs agents qui travaillent ensemble, chacun maitrisant une specialite. Le multi-agent n'est pas une mode -- c'est l'evolut

Jean-Michel Helem

Jean-Michel Helem

28 avril 2026 · 9 min de lecture

Multi-agents : faire collaborer plusieurs IA

Vous avez un agent qui code. Il fonctionne bien sur des taches isolees -- un bug a corriger, une fonction a ecrire, un test a ajouter. Mais quand vous lui demandez de gerer un projet entier, les limites apparaissent. Le contexte deborde, les erreurs s'accumulent, et vous passez plus de temps a superviser qu'a produire. La reponse n'est pas un agent plus puissant. C'est plusieurs agents qui travaillent ensemble, chacun maitrisant une specialite. Le multi-agent n'est pas une mode -- c'est l'evolution logique du [codage agentique](/codage-agentique-guide-developpeurs/) vers des systemes capables de livrer des projets complets.

Du single-agent au multi-agent : pourquoi la transition est inevitable

Un agent seul fait face a trois contraintes physiques. La fenetre de contexte, meme a 1 million de tokens, se sature quand il doit simultanment comprendre la spec, lire le code existant, implementer, tester et documenter. La specialisation ensuite : un agent generaliste produit du code correct mais rarement optimal en tests, en securite ou en documentation. La fiabilite enfin : plus une tache est longue, plus la probabilite d'erreur cumule de maniere exponentielle.

Le multi-agent resout ces trois problemes par la decomposition. Chaque agent opere dans un contexte reduit et maitrise. Un agent qui ne fait que tester connait les patterns de test, les edge cases, les frameworks -- il n'a pas besoin de garder en memoire l'ensemble de l'architecture. Les benchmarks SWE-Bench confirment l'ecart : les systemes multi-agents resolvent 15 a 25% de taches supplementaires par rapport aux agents isoles sur les problemes complexes.

Mais le multi-agent introduit une complexite nouvelle : la coordination. C'est la que les patterns de collaboration, le choix du framework et la strategie de couts deviennent determinants.

Specialisation des agents : qui fait quoi

Le premier reflexe est de calquer l'organisation d'une equipe de developpement humaine. Chaque agent recoit un role precis avec un system prompt cible et un perimetre d'action defini.

L'architecte analyse la demande, decompose en taches, definit les interfaces entre composants. Il produit un plan que les autres agents suivent. Son system prompt contient les conventions du projet, les patterns architecturaux valides, les contraintes techniques.

Le codeur implemente. Il recoit une spec precise -- un fichier a creer, une fonction a ecrire, une API a exposer -- et produit du code conforme aux conventions. Il n'a pas besoin de comprendre le projet entier, juste son perimetre.

Le testeur ecrit les tests unitaires et d'integration. Il recoit le code produit et la spec, puis genere des tests qui couvrent les cas nominaux, les cas limites et les cas d'erreur. Sa specialisation lui permet de penser aux edge cases que le codeur oublie.

Le reviewer inspecte le code produit selon une grille : securite, performance, lisibilite, conformite aux conventions. Il produit des commentaires structures que le codeur peut consommer pour iterer.

Le documenteur genere la documentation technique : JSDoc, README, changelog, ADR (Architecture Decision Records). Il lit le code final et les tests pour produire une documentation fidele a l'implementation reelle.

Cette specialisation n'est pas arbitraire. Elle est directement liee a l'optimisation des couts, comme on le verra plus bas : chaque role ne necessite pas la meme puissance de modele.

Patterns de communication entre agents

La maniere dont les agents echangent l'information determine la qualite du resultat. Trois patterns dominent en pratique.

Shared memory (memoire partagee)

Tous les agents lisent et ecrivent dans un espace commun -- typiquement un repertoire de fichiers ou une base de donnees. L'architecte ecrit le plan dans un fichier spec.md, le codeur lit ce fichier et ecrit son code dans src/, le testeur lit src/ et ecrit dans tests/.


workspace = {
    "spec": "spec.md",
    "code": "src/",
    "tests": "tests/",
    "review": "review-notes.md",
    "docs": "docs/"
}

architect.run(f"Ecris la spec dans {workspace['spec']}")
coder.run(f"Lis {workspace['spec']}, implemente dans {workspace['code']}")
tester.run(f"Lis {workspace['code']}, ecris les tests dans {workspace['tests']}")

Avantage : simple, chaque agent travaille avec des fichiers reels. Inconvenient : risque de conflits si deux agents modifient le meme fichier.

Message passing (passage de messages)

Chaque agent recoit explicitement le resultat de l'agent precedent. Le flux est controle et chaque transfert est un point de validation.

from claude_agent_sdk import Agent, Task

spec_result = architect.run("Decompose la feature OAuth2")
code_result = coder.run(f"Implemente selon cette spec :\n{spec_result.output}")
test_result = tester.run(f"Teste ce code :\n{code_result.output}")
review_result = reviewer.run(
    f"Review ce code :\n{code_result.output}\n"
    f"Tests existants :\n{test_result.output}"
)

Avantage : flux explicite, facile a debugger, chaque etape est tracable. Inconvenient : le volume de donnees transmis peut devenir important et saturer le contexte.

Blackboard (tableau noir)

Un espace centralise ou chaque agent poste ses contributions et peut reagir aux contributions des autres. Un agent controleur surveille le tableau et decide quand lancer l'etape suivante.

blackboard = Blackboard()

# Chaque agent observe et reagit
blackboard.post("architect", {"type": "spec", "content": spec})
# Le codeur reagit automatiquement quand une spec arrive
blackboard.on("spec", lambda s: coder.run(f"Implemente : {s}"))
# Le testeur reagit quand du code arrive
blackboard.on("code", lambda c: tester.run(f"Teste : {c}"))
# Le reviewer reagit quand code ET tests sont presents
blackboard.on(["code", "tests"], lambda c, t: reviewer.run(f"Review : {c}\n{t}"))

Avantage : flexible, supporte des workflows non lineaires. Inconvenient : plus complexe a implementer et a debugger.

En pratique, la majorite des equipes commencent par le message passing pour sa simplicite, puis migrent vers la shared memory quand les agents doivent travailler sur de vrais fichiers de projet.

Pipeline multi-agent complet avec Claude Agent SDK

Voici un exemple concret de pipeline qui prend une demande de feature et livre du code teste et review.

from claude_agent_sdk import Agent, Pipeline
import asyncio

# Definition des agents specialises
architect = Agent(
    name="architect",
    model="claude-opus-4-6",
    system_prompt="""Tu es un architecte logiciel senior.
    Tu decomposes les demandes en specs techniques precises.
    Tu definis les fichiers a creer/modifier et les interfaces."""
)

coder = Agent(
    name="coder",
    model="claude-sonnet-4-6",
    system_prompt="""Tu es un developpeur senior Python/TypeScript.
    Tu implementes exactement ce que la spec demande.
    Code propre, type, avec gestion d'erreurs."""
)

tester = Agent(
    name="tester",
    model="claude-sonnet-4-6",
    system_prompt="""Tu es un QA engineer.
    Tu ecris des tests pytest couvrant cas nominaux,
    edge cases et cas d'erreur. Coverage > 80%."""
)

reviewer = Agent(
    name="reviewer",
    model="claude-sonnet-4-6",
    system_prompt="""Tu es un lead developer qui fait des code reviews.
    Tu verifies : securite, performance, lisibilite,
    conventions. Tu produis des commentaires actionnables."""
)

linter = Agent(
    name="linter",
    model="claude-haiku-3-5",
    system_prompt="""Tu verifies le formatage, les imports inutilises,
    les conventions de nommage. Reponse structuree uniquement."""
)

async def run_feature_pipeline(feature_request: str):
    # Etape 1 : Architecture (Opus pour la reflexion complexe)
    spec = architect.run(feature_request)
    print(f"Spec generee : {len(spec.output)} caracteres")

    # Etape 2 : Implementation (Sonnet pour le code)
    code = coder.run(f"Implemente cette spec :\n{spec.output}")

    # Etape 3 : Validation parallele (tests + lint en meme temps)
    tests_task = asyncio.create_task(
        tester.run_async(f"Teste ce code :\n{code.output}")
    )
    lint_task = asyncio.create_task(
        linter.run_async(f"Verifie le formatage :\n{code.output}")
    )
    tests, lint = await asyncio.gather(tests_task, lint_task)

    # Etape 4 : Review avec tout le contexte
    review = reviewer.run(
        f"Spec :\n{spec.output}\n\n"
        f"Code :\n{code.output}\n\n"
        f"Tests :\n{tests.output}\n\n"
        f"Lint :\n{lint.output}"
    )

    # Etape 5 : Correction si necessaire
    if review.has_blocking_issues:
        code = coder.run(
            f"Corrige selon cette review :\n{review.output}\n\n"
            f"Code original :\n{code.output}"
        )

    return {"spec": spec, "code": code, "tests": tests, "review": review}

# Lancement
result = asyncio.run(run_feature_pipeline(
    "Ajouter un endpoint REST /api/users avec pagination et filtrage"
))

Ce pipeline illustre plusieurs principes cles. L'architecte utilise Opus pour la reflexion strategique. Le codeur et le testeur utilisent Sonnet pour le rapport qualite/prix optimal. Le linter utilise Haiku parce que verifier le formatage ne necessite pas un modele puissant. Les etapes 3 sont parallelisees parce qu'elles sont independantes.

CrewAI vs LangGraph vs Autogen : choisir son framework

Trois frameworks dominent le marche du multi-agent en 2026. Chacun a sa philosophie.

CrewAI adopte une metaphore d'equipe. Vous definissez des agents avec des roles, des backstories et des objectifs, puis vous les organisez en "crews" avec des taches assignees. L'API est la plus accessible des trois -- vous pouvez avoir un pipeline multi-agent fonctionnel en 50 lignes. La limite : la flexibilite. Les workflows non lineaires ou les boucles de feedback complexes sont difficiles a exprimer.

LangGraph de LangChain modelise le workflow comme un graphe d'etats. Chaque noeud est un agent ou une fonction, chaque arete est une transition conditionnelle. C'est plus verbeux que CrewAI mais beaucoup plus flexible. Vous pouvez exprimer des boucles, des branches conditionnelles, des checkpoints de sauvegarde. C'est le choix pour les workflows complexes avec de la logique metier entre les etapes.

Autogen de Microsoft mise sur la conversation. Les agents discutent entre eux dans un chat partage, et un orchestrateur decide quand la conversation est terminee. Le modele est intuitif pour les cas ou la collaboration est veritablement conversationnelle -- brainstorming, design review, resolution de probleme. Il est moins adapte aux pipelines lineaires.

| Critere | CrewAI | LangGraph | Autogen |
|---------|--------|-----------|---------|
| Courbe d'apprentissage | Faible | Moyenne | Moyenne |
| Flexibilite workflow | Moyenne | Elevee | Moyenne |
| Debugging | Bon | Excellent | Moyen |
| Ecosysteme | Croissant | Mature | Solide |
| Cas d'usage ideal | Pipelines simples | Workflows complexes | Collaboration conversationnelle |

Le choix depend de votre cas d'usage. Pour un pipeline CI/CD multi-agent, LangGraph. Pour un prototype rapide, CrewAI. Pour une equipe d'agents qui debattent d'une architecture, Autogen. Et si vous travaillez deja dans l'ecosysteme Anthropic, le Claude Agent SDK offre une integration native avec les modeles Claude sans couche d'abstraction supplementaire.

Gestion des conflits : le probleme du fichier partage

Le defi le plus sous-estime du multi-agent est la gestion des conflits. Quand deux agents modifient le meme fichier -- le codeur qui ajoute une fonction et le testeur qui ajoute un import dans le meme module -- le resultat peut etre un code casse.

Trois strategies existent. La premiere est le verrouillage pessimiste : un seul agent peut modifier un fichier a la fois. Simple mais lent -- les agents attendent leur tour. La deuxieme est le verrouillage optimiste : chaque agent travaille sur sa copie, puis un agent merge resout les conflits. Plus rapide mais plus complexe. La troisieme est le partitionnement : chaque agent travaille sur des fichiers differents, et l'architecte s'assure que les perimetres ne se chevauchent pas. C'est la strategie la plus fiable en pratique.

# Strategie de partitionnement
task_assignments = architect.run("""
    Decompose cette feature en taches independantes.
    Chaque tache ne doit modifier que des fichiers uniques.
    Format : {agent: "coder-1", files: ["src/auth.py", "src/models/user.py"]}
""")

# Chaque agent ne touche que ses fichiers
for assignment in task_assignments:
    agent = get_agent(assignment["agent"])
    agent.run(
        f"Modifie uniquement ces fichiers : {assignment['files']}\n"
        f"Spec : {assignment['spec']}"
    )

L'article sur l'[orchestration d'agents IA](/orchestrer-agents-ia-projet-complet/) detaille les patterns de gestion d'erreur dans ces scenarios.

Cout et optimisation : le bon modele pour chaque agent

L'erreur classique est d'utiliser le meme modele pour tous les agents. C'est un gaspillage. Chaque role a des exigences differentes en termes de raisonnement, et les couts varient d'un facteur 50 entre Haiku et Opus.

| Role | Modele recommande | Cout relatif | Justification |
|------|-------------------|--------------|---------------|
| Architecte | Opus | 1x (reference) | Raisonnement complexe, decisions strategiques |
| Codeur | Sonnet | 0.2x | Bon equilibre code/cout, suit bien les specs |
| Testeur | Sonnet | 0.2x | Doit comprendre le code pour tester les edge cases |
| Reviewer | Sonnet | 0.2x | Analyse de qualite, necessite du jugement |
| Linter | Haiku | 0.02x | Verification mecanique, pas besoin de raisonnement |
| Documenteur | Haiku | 0.02x | Reformulation, pas de creation |

En appliquant cette strategie a un pipeline complet, le cout total d'une feature passe de 0.75$ (tout en Opus) a environ 0.20$ (modeles mixtes) -- une reduction de 73% sans degradation mesurable de la qualite.

Le principe est simple : reservez le raisonnement avance aux decisions qui le necessitent. L'architecte qui decompose un probleme complexe a besoin d'Opus. Le linter qui verifie les imports n'a pas besoin de comprendre la logique metier.

Retour d'experience : gains mesures vs complexite

Apres six mois d'utilisation de pipelines multi-agents sur des projets reels, les donnees sont claires.

Les gains. Le temps de livraison d'une feature standard (endpoint API + tests + docs) passe de 45 minutes avec un agent seul a 12 minutes avec un pipeline multi-agent. La couverture de tests augmente de 60% a 85% en moyenne -- le testeur specialise trouve des edge cases que l'agent generaliste ignore. Le nombre de bugs en production diminue de 40%.

La complexite. Le setup initial prend 2 a 4 heures pour definir les agents, les prompts, les workflows. Le debugging est plus difficile -- quand le resultat final est mauvais, il faut identifier quel agent a deraille. La maintenance des system prompts est un travail continu : chaque changement de convention du projet doit etre repercute dans les prompts des agents concernes.

Le verdict. Le multi-agent est rentable a partir du moment ou vous executez le meme type de pipeline plus de 5 fois par semaine. En dessous, la complexite de setup depasse les gains. Au dessus, l'investissement initial est amorti en quelques jours.

Quand le multi-agent est overkill

Le multi-agent n'est pas la reponse a tout. Pour un bug fix isole, un agent seul avec le bon contexte est plus rapide et moins couteux. Pour un script one-shot, la coordination entre agents ajoute de la latence sans valeur. Pour un projet avec un seul fichier, la decomposition en roles n'a pas de sens.

Le multi-agent devient indispensable quand trois conditions sont reunies : le projet touche plusieurs fichiers ou modules, la tache implique des competences differentes (code, test, securite), et le workflow est repetitif. Un pipeline CI/CD qui valide chaque PR avec un agent de test, un agent de securite et un agent de performance est un cas d'usage ideal. Une equipe qui livre 20 features par sprint et veut automatiser la review est un autre cas parfait.

La regle pragmatique : commencez avec un agent seul. Quand vous identifiez un goulot d'etranglement recurrent -- les tests sont toujours insuffisants, la documentation est toujours oubliee, la review de securite est toujours en retard -- c'est le moment d'ajouter un agent specialise pour ce role precis. Le multi-agent se construit incrementalement, pas d'un bloc.

Articles similaires

Claude Code workflows : 10 astuces de productivite
Claude Code

Claude Code workflows : 10 astuces de productivite

Vous utilisez Claude Code au quotidien, mais vous avez le sentiment de ne pas exploiter tout son potentiel ? Apres plusieurs mois d'usage intensif, certains patterns reviennent systematiquement chez les developpeurs les plus productifs. Ces astuces ne sont pas des gadgets : elles changent concretement la facon dont vous interagissez avec votre codebase, vos outils et votre pipeline CI/CD. Voici 10 techniques eprouvees pour tirer le maximum de Claude Code en 2026. Si vous debutez avec l'outil,

Jean-Michel Helem · 27 avril 2026 · 7 min
Copilot vs Claude Code vs Cursor : benchmark code
IA

Copilot vs Claude Code vs Cursor : benchmark code

Les assistants IA pour le code se multiplient, mais lequel tient vraiment ses promesses quand on le met face a des taches reelles ? Pour trancher le debat, nous avons concu un benchmark rigoureux en confrontant GitHub Copilot, Claude Code et Cursor sur cinq exercices concrets de developpement. Voici les resultats, chiffres a l'appui. Pourquoi un benchmark sur des taches reelles Les comparatifs generiques ne manquent pas, mais ils se limitent souvent a des impressions subjectives ou a des

Jean-Michel Helem · 24 avril 2026 · 7 min
Rules files : Cursor, Windsurf et Claude compares
Rules Files

Rules files : Cursor, Windsurf et Claude compares

Vous utilisez un assistant IA pour coder, mais le code genere ne respecte jamais vos conventions. Les imports sont mal organises, le nommage des variables change d'un fichier a l'autre, et l'IA ignore systematiquement votre architecture. Le probleme ne vient pas du modele. Il vient de l'absence d'un rules file. Un rules file est un fichier de configuration qui indique a votre assistant IA comment se comporter dans votre projet. Il definit les conventions de code, la stack technique, les patte

Jean-Michel Helem · 23 avril 2026 · 9 min