Aller au contenu principal

APIs multi-agents natives : la beta multi-agent Responses d'OpenAI vs le faire soi-même

Avancé

Pendant dix-huit mois, « multi-agent » voulait dire vous écriviez le fan-out. Vous écriviez le prompt coordinateur, vous spawniez N appels en parallèle, vous fusionniez leur JSON, vous gériez les retries. Le 9 juillet 2026, OpenAI a écrasé tout ça en un paramètre de requête : multi_agent.enabled: true sur la Responses API, enveloppé dans une fonctionnalité grand public appelée Sol Ultra Mode. Le modèle lui-même décide combien de sub-agents spawner, les fait tourner en parallèle et synthétise le résultat — le tout dans un seul appel HTTP. Aucun autre vendeur de pointe n'a livré de primitive symétrique. Cette page cartographie ce qui a livré, les chiffres derrière, ce qu'Anthropic offre à la place, et — la partie qui compte — les trois workloads où la primitive native mérite son coût et les deux où un fan-out DIY gagne encore.

What you'll learn
  • Lire le corps exact de requête multi-agent de la Responses API et savoir ce que max_concurrent_subagents cape réellement
  • Faire le calcul de coût : ce que 'le modèle spawne 4 sub-agents' facture réellement au prix Sol
  • Cartographier le même territoire côté Anthropic — Cowork, Managed Agents et sub-agents Claude Code — et voir le gap de primitive
  • Choisir la bonne primitive par workload : multi-agent natif, fan-out DIY, A2A ou un seul tour long
  • Éviter les quatre modes d'échec qui transforment un appel Ultra à 4 agents en facture 4x sans gain d'accuracy

La version en une phrase

Ultra Mode est une skin grand public par-dessus multi_agent.enabled: true sur la Responses API — une primitive native qui laisse le modèle spawner des sub-agents en parallèle dans une seule requête, synthétiser leurs sorties et retourner une seule réponse. Elle vous achète un petit-mais-réel bump d'accuracy sur les tâches parallélisables (Terminal-Bench 2.1 : 88,8 % → 91,9 %), à une facture de tokens qui scale grossièrement linéairement avec le nombre de sub-agents que le modèle choisit de spawner.

Ce qui a réellement livré le 9 juillet 2026

Deux choses ont atterri dans le même lancement, et il vaut la peine de les séparer :

  • Ultra Mode — un toggle produit dans ChatGPT et Codex. Disponible sur le tier flagship (Sol). Quand activé, les tâches dures sont décomposées en runs de sub-agents parallèles avant synthèse. Marketé comme « spawne 4+ agents » ; quelques-uns des charts de benchmark GA d'OpenAI montrent aussi des configurations 16-agent sur BrowseComp et SEC-Bench Pro, mais quatre est le défaut de travail.
  • Beta multi-agent de la Responses API — une primitive développeur. La même capacité sous-jacente, exposée comme multi_agent.enabled: true sur client.beta.responses.create(). C'est ce que vous utiliseriez pour construire votre propre expérience Ultra-like.

La confusion laissée par le marketing est réelle : les builders continuent de demander « comment appeler Ultra Mode depuis l'API ? » La réponse est que vous ne le faites pas — vous activez la beta multi-agent, qui est la primitive sous la fonctionnalité produit.

La requête multi-agent de la Responses API

Concrètement, voici la forme (SDK Python) :

Appel minimal multi-agent Responses API

from openai import OpenAI

client = OpenAI()

resp = client.beta.responses.create(
  model="gpt-5.6-sol",
  input="Audit this repo for auth-bypass patterns and write a report.",
  multi_agent={
      "enabled": True,
      "max_concurrent_subagents": 3,
  },
  tools=[...],  # your MCP tools, function tools, etc.
  extra_headers={"OpenAI-Beta": "responses_multi_agent=v1"},
)

Quatre choses non évidentes à propos de cette forme :

  • max_concurrent_subagents n'est pas un budget total. Il cape les tours de sub-agents actifs à travers tout l'arbre à un moment donné — root plus descendants. Le modèle peut spawner un nombre total bien plus grand de sub-agents au cours de la requête ; il ne peut juste pas en avoir plus de N tournant à la fois.
  • La profondeur est illimitée. Un sub-agent peut lui-même spawner des sub-agents. Il n'y a pas de cap fixe sur la profondeur d'arbre ou le nombre total de sub-agents par run. Votre surface de coût n'est pas « N appels » — c'est un arbre que le modèle forme au runtime.
  • Le root synthétise. L'agent root est responsable de fusionner les réponses des sub-agents en la réponse finale. Vous n'obtenez pas un objet structuré {subagents: [...]} en retour ; vous obtenez une seule réponse, et les tours d'agents intermédiaires sont opaques à votre code.
  • Certains paramètres sont silencieusement désactivés. reasoning.summary et max_tool_calls ne sont pas supportés avec multi-agent activé, et l'endpoint de compaction n'est pas supporté pour les réponses multi-agent. Si vous vous appuyez sur les résumés de reasoning pour l'observabilité, vous les perdez dès que vous l'activez.

Le calcul de coût que personne n'imprime sur la page marketing

Au prix GA de Sol de 5 $ input / 30 $ output par million de tokens, l'arithmétique est impitoyable. D'après les writeups de builders qui ont rétro-conçu de vrais runs Ultra :

  • Une tâche qu'Ultra décompose en 2 sub-agents ≈ 2x le coût de tokens output d'un appel Sol unique — parce que les deux sub-agents génèrent de l'output, et le root génère ensuite la synthèse par-dessus.
  • Une tâche où Ultra spawne 5 sub-agents pour ≈ 5x — même raisonnement, plus proportionnellement plus de replay de tokens input à travers l'arbre.
  • Les charts BrowseComp / SEC-Bench qui montrent des configurations 16-agent ne sont pas un déjeuner gratuit : ce sont une démonstration research-grade, pas un défaut. À 16 sub-agents concurrents sur Sol, vous regardez un chiffre en dollars à deux chiffres moyens par requête dure en tokens output seuls.

La façon d'y penser : vous payez pour un Monte Carlo d'appels Sol plus une passe de synthèse par-dessus. Parfois cela vous achète assez d'accuracy pour que ça compte. Parfois c'est juste une facture 4x pour une tâche qu'un appel unique aurait résolu.

Ce que l'accuracy vous achète réellement

Les deltas publiés sur les evals parallélisables — les workloads pour lesquels Ultra Mode est conçu — sont réels mais modestes :

BenchmarkSol (unique)Sol UltraDeltaCe que l'eval mesure
Terminal-Bench 2.188,8 %91,9 %+3,1Planification multi-étapes en ligne de commande, coordination d'outils
BrowseComp87,5 %92,2 %+4,7Recherche web multi-sources et synthèse
SEC-Bench Pro74,3 %(chiffre single-mode non publié)Raisonnement sur docs réglementaires à travers de grands corpus

Trois points sur ce tableau :

  • La bande de +3–5 points est cohérente avec ce que l'échantillonnage parallèle a historiquement acheté sur d'autres frontières (best-of-N, self-consistency). La primitive est vraiment utile ; le delta n'est pas un step-change.
  • Ce sont les meilleurs cas — évaluations choisies pour mettre en valeur le mode. Sur les tâches séquentielles (un edit de code linéaire, une réécriture de fichier unique, un chat court), Ultra ajoute latence de synthèse et coût sans bouger l'accuracy.
  • Sur le même chart Terminal-Bench 2.1, l'Opus 4.8 d'Anthropic a marqué 78,9 % — ce qui signifie que l'avance de Sol Ultra vient à la fois du meilleur modèle de base et du bump multi-agent empilé par-dessus. Si vous migrez vers Sol Ultra depuis Opus, n'attribuez pas tout l'écart à la primitive multi-agent.

Ce que fait Anthropic à la place

Anthropic n'a pas livré de primitive d'API symétrique. Les analogues les plus proches résolvent chacun une tranche différente du même problème :

  • Cowork — une surface produit. Un workspace desktop agentique où un agent fait du travail multi-étapes soutenu aux côtés de l'utilisateur. Comparable à Ultra Mode comme fonctionnalité, mais pas comme primitive d'API.
  • Managed Agents et managed-agents memory stores — une boucle d'agent hébergée avec état persistant et planification. Remplit le slot « agent long-running en arrière-plan », pas le slot « spawner 4 en parallèle et fusionner ».
  • Sub-agents Claude Code et limites de flotte de sub-agents — une primitive de sub-agent de première classe, mais scopée à la CLI Claude Code. Documentée, spawnable en parallèle, et l'analogue le plus proche de multi_agent.enabled — avec la différence importante que vous écrivez le prompt coordinateur vous-même.
  • Building Agents sur la Messages API — le chemin DIY. Vous fannez N appels messages.create en parallèle, vous écrivez le prompt de synthèse, vous gérez les retries. Même résultat, plus de code.

Le gap : aucune surface d'API Anthropic ne vous laisse actuellement basculer un seul booléen et laisser le modèle lui-même décider combien de sub-agents spawner et fusionner leur travail. Si vous voulez ce comportement contre Claude, vous le construisez — voir Cowork & Agent Teams pour l'histoire côté produit et Managed Agents pour la primitive de boucle hébergée.

Choisir la bonne primitive par workload

Guided walkthrough1 of 5
  1. Si les sous-tâches peuvent tourner sans attendre les résultats les unes des autres — auditer un repo, rechercher un sujet à travers de nombreuses sources, refactorer N fichiers indépendamment — une forme fan-out mérite son coût. Si la tâche est séquentielle (éditer A, puis lire le résultat de A, puis éditer B), toute primitive multi-agent ajoute de l'overhead de synthèse sans gain.

Quatre modes d'échec qui transforment Ultra en facture 4x pour rien

  • L'activer pour des tâches séquentielles. Le modèle décompose et synthétise quand même même quand la tâche ne se parallélise pas. Vous payez pour l'overhead de coordination sur du travail qui n'en a jamais eu besoin. Règle de pouce : si vous ne pouvez pas articuler ce que le second sub-agent ferait pendant que le premier tourne, n'activez pas multi-agent.
  • Laisser l'observabilité reasoning-summary sur votre dashboard. reasoning.summary est silencieusement non supporté avec multi-agent. Si votre monitoring en dépend, vous obtiendrez des champs vides et penserez que le modèle ne réfléchit pas. Livrez un changement de schéma avant de basculer le flag.
  • Utiliser max_tool_calls comme limite de sûreté. Aussi silencieusement désactivé avec multi-agent. L'histoire de sûreté que vous pensiez avoir — « au plus 20 appels d'outils par requête » — est partie. Appliquez les plafonds d'appels d'outils au niveau de l'adaptateur d'outil, pas via le paramètre de requête.
  • Supposer que max_concurrent_subagents est un cap de coût. Il cape les sub-agents actifs à un moment, pas le total spawné sur la requête. Un seul appel Ultra peut spawner des dizaines de sub-agents séquentiellement et toujours respecter une limite max_concurrent_subagents: 3. Si le coût est votre plafond, ajoutez un max_output_tokens au niveau requête.

Ce que « multi-agent natif » n'est pas

Deux primitives adjacentes sont souvent confondues avec :

  • Pas l'échantillonnage n > 1. L'ancien paramètre n d'OpenAI échantillonne plusieurs complétions et les renvoie toutes ; vous en choisissez une. Le multi-agent fait tourner différents sub-agents faisant des travaux différents et synthétise leurs sorties. Le premier est de l'échantillonnage de température ; le second est de la décomposition de tâche.
  • Pas de l'inférence batch. La batch API traite plusieurs requêtes indépendantes en arrière-plan. Le multi-agent est plusieurs sub-agents coordonnés dans une requête interactive. Le batch est orienté throughput, le multi-agent est orienté résultat.

Où cela se dirige

Le protocole A2A (voir A2A : le protocole Agent-to-Agent) couvre le multi-agent inter-vendeur. multi_agent.enabled: true couvre le multi-agent intra-modèle. Le slot non rempli est une primitive cross-vendor — le modèle du vendeur A spawne un sub-agent chez le vendeur B et fusionne le résultat — et il n'y a pas encore de spec publique. Quand il arrivera, il arrivera comme A2A + un verbe de handoff natif, pas comme une nouvelle API d'un côté ou de l'autre. Surveillez cet espace.

Check yourself

0/4
  1. Que cape max_concurrent_subagents sur la beta multi-agent Responses ?
  2. Vous activez multi-agent et votre dashboard de monitoring montre soudain des champs reasoning-summary vides. Qu'est-il arrivé ?
  3. Vous avez besoin de sub-agents parallèles qui tournent dans des comptes clients différents chez deux vendeurs. Quelle primitive est correcte ?
  4. Lequel de ces cas est un mauvais candidat pour Ultra Mode / multi_agent.enabled ?
Aucune carte pour l'instant — ajoutez-en pour commencer à réviser. 🃏

Sources & lectures complémentaires