Module 5 sur 10, leçon 1 sur 5
Les systèmes multi-agents
Savoir quand plusieurs agents valent leur coût de coordination, et les structures disponibles.
Un système multi-agents réunit plusieurs agents qui travaillent vers un résultat commun. Un agent appelé comme simple outil ne suffit pas à le qualifier : il faut que les objectifs, la mémoire et les plans des autres soient pris en compte.
Centraliser ou non
- Centralisé : une unité détient la connaissance globale et coordonne. C’est cohérent et simple, mais sa panne arrête tout.
- Décentralisé : chaque agent parle à ses voisins. C’est robuste, mais il est difficile de garantir que les comportements locaux servent le groupe.
Structures
- Hiérarchie : un arbre, avec une autorité simple ou répartie.
- Holarchie : un agent principal coiffe des sous-agents et apparaît comme une seule entité.
- Coalition : une alliance temporaire, dissoute une fois l’objectif atteint.
- Équipe : proche de la coalition, avec des agents plus dépendants les uns des autres.
Ce qui justifie plusieurs agents
La spécialisation est la meilleure raison : des instructions, des outils et des droits différents par rôle, ce qui garde chaque contexte petit. Le parallélisme sur des sous-tâches indépendantes en est une autre.
Ce que ça coûte
- Chaque échange consomme des tokens et ajoute de la latence.
- Les agents peuvent s’écraser mutuellement ou se disputer une ressource.
- Bâtis sur le même modèle, ils partagent les mêmes faiblesses : une attaque ou une panne peut les toucher tous à la fois.
- Le débogage devient une enquête sur des interactions, pas sur une seule trace.
Les avis divergent : Anthropic raconte un système multi-agents en production, Cognition déconseille l’approche. Lisez les deux, puis testez sur votre cas en comptant le coût.
Pour le petit-déjeuner, une seule personne en cuisine suffit.
Exemple : Transmettre une décision, pas une transcription
Quand un agent passe la main à un autre, ce qu’il transmet est un coût et un risque. Transmettez ce qui permet au suivant d’agir.
function handoff(state) {
return {
orderId: state.orderId,
decision: state.decision,
reason: state.reason,
tokens: Math.round(JSON.stringify(state.reason).length / 4) + 20,
};
}
const triage = {
orderId: 4512,
decision: 'refund',
reason: 'Delivered broken, photo checked',
transcript: 'x'.repeat(8000),
};
handoff(triage).tokens < JSON.stringify(triage).length / 4;true
L’agent de remboursement reçoit la décision et sa raison. Les huit mille caractères de conversation restent derrière, avec toute consigne qu’un client aurait pu y cacher.
Essayez dans l’éditeur
async function fanOut(tasks, worker, { limit = 2 } = {}) { return Promise.all(tasks.map((task) => worker(task)));}module.exports = { fanOut };