OpenAI Swarm évalué : excellente leçon de handoff, pas un framework de production en 2026
OpenAI Swarm est un petit framework Python expliquant l’orchestration multi-agent avec deux primitives : agents et handoffs. La README officielle le qualifie maintenant d’expérimental et pédagogique, indique que OpenAI Agents SDK le remplace et recommande de migrer tous les cas de production. Cette phrase doit précéder les features : Swarm est un support d’apprentissage, pas la recommandation actuelle d’OpenAI.
Le repository n’était pas marqué archived le 20 août 2026. Le dernier commit vérifié, le 15 avril, épinglait les hooks pre-commit sur des révisions immuables : maintenance supply-chain, pas nouvelle release runtime. Il n’existe aucune GitHub Release formelle et l’installation pointe vers Git. Un dépôt visible n’est pas une validation production.
Swarm reste utile pédagogiquement. Une routine associe instructions et functions. Quand une fonction renvoie un autre Agent, le contrôle change. Context variables alimentent instructions et fonctions ; le client loop appelle Chat Completions, exécute les tools, fusionne updates et change l’agent actif. Le code court révèle aussi les couches absentes.
État en 2026
| Question | Réponse vérifiée | Décision |
|---|---|---|
| Official positioning | expérimental/pédagogique; remplacé | Pas de nouveau projet production |
| GitHub flag | archived=false | Pas une validation |
| Latest commit | 6af0b4c · 2026-04-15 | commit maintenance |
| Releases | aucune release formelle | fixer Git SHA |
| License | MIT | API/modèles séparés |
| Runtime | Chat Completions; loop stateless | persister état |
| Successor | OpenAI Agents SDK | successeur officiel |
Ce que Swarm enseigne vraiment
| Primitive | Comportement Swarm | Limite |
|---|---|---|
| Agent | name + instructions + functions | prompt persona ≠ security principal |
| Routine | instructions + focused tools | probabilistic, not workflow constraint |
| Function/tool | Python callable + schema | authorization and side effects |
| Handoff | function returns another Agent | cycle, misroute, context disclosure |
| context_variables | mutable run dictionary | not durable memory |
| Result | value + agent + context update | merge/persistence belong to app |
| Client.run | model/tool loop until stop/max turns | no queue/checkpoint/lease |
| Streaming | chunks + delimiters | no reconnect/exactly-once |
Expérience handoff exécutable
L’expérience doit rester bornée : triage ne transfère qu’à sales ou refund. Sales possède un catalogue read-only ; refund prépare seulement une restitution. customer_id, langue et propriété de commande, vérifiés serveur, entrent dans context_variables. Chaque transfert journalise source, destination et motif ; max_turns vaut cinq. Commencez avec provider factice et tools sandbox : on démontre le routing sans donner d’autorité financière au modèle.
Testez chaque routine isolément. Un set labellisé billing, sales, ambigu et adversarial mesure destination et handoffs inutiles. Chaque spécialiste ne garde que ses tools et refuse hors scope. Testez ensuite boucle A→B→A, appels parallèles, arguments invalides, exception, accès cross-tenant et prompt injection dans une note. Le résultat attendu comprend l’échec sûr, pas seulement une réponse fluide.
context_variables sont des données locales au run, ni canal secret ni mémoire automatique. Une instruction dynamique peut insérer leurs valeurs dans le prompt. Classez chaque key model-visible ou code-only, ne laissez jamais le modèle choisir le tenant et ne placez pas de credentials durables dans un dict mutable. L’état autoritatif reste versionné en base ; chaque run reconstruit le contexte minimal.
Migration et évaluation
- Épingler commit, Python et modèle.
- Dessiner agents, handoffs, tools, contexte, terminaux, cycles et privilèges.
- Créer golden set : routing, réponses, refus, results et échecs sûrs.
- Utiliser sandbox, tools fake/read-only, max_turns, timeout et ledger.
- Tracer active agent, source/destination/motif, call ID, hash, result et usage.
- Reconstruire avec handoffs/agents-as-tools et contexte typé.
- Ajouter state, approvals, guardrails, autorisation, idempotence et trace policy.
- Shadow sur inputs identiques ; comparer routing, qualité, tools, turns, latence, coût.
- Canary read-only puis write étroit avec approval ; tester crash et rollback.
- Après parité, supprimer Swarm et garder tests et graphe.
Mesures
| Mesure | Méthode | Pourquoi |
|---|---|---|
| Handoff accuracy | labeled destination/confusion matrix | wrong route ruins specialist quality |
| Cycle rate | repeated agent edges | loops burn tokens |
| Authorization | allow/deny by tenant/resource | schema ≠ permission |
| Side effects | idempotency duplicate simulation | retry can repeat action |
| Answer quality | task rubric/evidence | routing ≠ correct answer |
| Turns/usage | requests/tokens by agent | network amplifies cost |
| Latency | p50/p95 per step | handoffs serialize calls |
| Recovery | crash/timeout/approval/resume | no durable checkpoint |
| Trace privacy | sensitive-field detection | observability can leak |
La migration commence par l’inventaire du comportement. Listez agents, instructions, functions, edges, context keys, réglages modèle, max turns, events streaming et side effects. Dessinez le graphe et marquez cycles, terminaux et hausses de privilège. Transcripts expurgés et tool traces deviennent golden set. Le commit Swarm et le snapshot modèle restent temporairement épinglés pour une baseline reproductible.
Dans Agents SDK, Agent devient l’Agent maintenu, transfers deviennent handoffs/handoff() et context variables un RunContextWrapper typé. Utilisez handoff si le spécialiste reprend la conversation ; Agent.as_tool() si le manager conserve la réponse finale. Choisissez une mémoire unique : session, to_input_list() ou continuation OpenAI-managed, sinon history est dupliquée.
Ajoutez approvals, timeouts, tool guardrails, état interrupt/resume et tracing pendant la migration. Le tracing Agents SDK est activé par défaut et peut contenir input/output sensible ; redaction ou désactivation est une politique explicite. Les guardrails contrôlent des étapes mais ne remplacent jamais l’autorisation serveur pour identité, tenant et ressource.
Sécurité, état et exploitation
| Risque | Contrôle minimal | Manque Swarm |
|---|---|---|
| Wrong handoff | allowlisted edges + eval + human route | model selects route |
| Privilege escalation | separate tools + server authorization | agent name is not identity |
| Infinite loop | max_turns + cycle detector | agents can return each other |
| Duplicate action | idempotency + ledger | no exactly-once |
| Lost state | database/session + resume token | stateless across calls |
| Prompt injection | instruction/data separation + validation | tool content returns to model |
| Secret leakage | code-only context + redaction | dynamic prompt may expose values |
| Silent failure | structured trace + usage + alerts | no production observability |
Swarm face aux alternatives
| Option | Choisir si | Écart |
|---|---|---|
| OpenAI Agents SDK | official maintained OpenAI path | handoffs + state + guardrails + tracing |
| LangGraph | durable checkpoints/graphs/provider flexibility | more engineering, stronger state |
| AutoGen | event-driven/distributed teams | broader runtime surface |
| CrewAI | role crews + business flows | more opinionated ecosystem |
| Single agent + tools | one model can route tools | simpler baseline |
| Deterministic workflow | known audited sequence | less autonomous, easier control |
| Swarm | learn minimal handoff loop | small, inspectable, superseded |
Swarm ne fournit ni durable state, scheduler, runtime distribué, auth, isolation tenant, retry ledger, budget, ni trace store. Si le processus tombe après un side effect avant son résultat, retry devient ambigu. Utilisez idempotency key métier, transactional outbox, timeout, rate limit, max turns, escalade humaine et détecteur de edges répétées.
Prompt injection est plus grave quand un handoff change les tools. Texte utilisateur, retrieval et outputs sont non fiables. Une instruction de transfert dans un document ne choisit pas la route. Autorisez chaque tool avec identité serveur, validez compte, montant et destination, minimisez credentials et exigez approval pour l’irréversible. Journalisez la policy decision séparément du raisonnement modèle.
Verdict : Swarm reste l’un des meilleurs petits codebases pour comprendre handoff. L’absence de machinery rend le loop lisible, avantage pédagogique et risque productif. Lisez le source, reproduisez un petit test puis migrez le pattern—pas la dépendance—vers Agents SDK, LangGraph ou le runtime adapté à la durabilité et au provider.
Questions fréquentes
Swarm est-il production-ready ?
Non. README dit expérimental/pédagogique, remplacé par Agents SDK, et recommande la migration.
Est-il archived ?
Le flag était false le 20-08-2026 ; ce n’est pas une approbation production.
Est-il maintenu ?
Un commit maintenance existe en 2026-04, mais aucune release formelle. Activité ne signifie pas évolution produit.
Qu’est-ce qu’un handoff ?
Transfert type tool changeant l’agent actif ; une fonction renvoie un autre Agent.
context_variables est-il memory ?
Non. Ce sont des données de run ; état conversationnel et métier reste externe.
Autres modèles ?
Une compatibilité peut fonctionner, sans justifier un projet remplacé.
Quel remplacement ?
OpenAI recommande Agents SDK.
Guardrails remplacent-ils authorization ?
Non. Identity, tenant et droits de ressource restent côté serveur.
Tout doit-il être multi-agent ?
Non. Single agent+tools ou workflow déterministe constitue la baseline.
Comment migrer ?
Figer baseline, mapper graphe/contexte, reconstruire typé, ajouter controls, shadow, canary et retirer Swarm.
Sources
- Official Swarm repository
- Swarm README: replacement notice
- Swarm source: core loop
- Swarm commits
- Swarm releases
- Swarm MIT license
- OpenAI Agents SDK quickstart
- Agents SDK handoffs
- Agents SDK context
- Agents SDK guardrails
- Agents SDK running and state
- Agents SDK tracing
- LangGraph overview
- AutoGen AgentChat
- AutoGen handoff pattern
- CrewAI documentation
Revue indépendante du 20 août 2026. Statut, commits et APIs évoluent ; vérifiez README et Agents SDK actuels.



