Quick answer: Le moyen le plus rapide de multiplier une facture d'agents est de laisser des agents en créer d'autres. Une requête utilisateur devient un arbre, et l'arbre n'a pas de taille naturelle. DeepSeek...

Sous-agents DeepSeek Harness : la délégation comme multiplicateur de coût

Updated August 16, 2026 · first published August 16, 2026

Le moyen le plus rapide de multiplier une facture d'agents est de laisser des agents en créer d'autres. Une requête utilisateur devient un arbre, et l'arbre n'a pas de taille naturelle. DeepSeek Harness ne traite donc pas la délégation comme une fonctionnalité, mais comme une couture assortie de limites explicites.

Les sous-agents sont une couture, pas un composant intégré

La délégation passe par ctx.subagents. Contrairement à l'exécuteur shell, qui n'a qu'une seule implémentation, les fournisseurs de sous-agents sont enregistrés par nom et plusieurs peuvent coexister. La documentation recense six transports : création in-process et fork (agents ordinaires via le contexte du parent), un pont ACP pour le déploiement distant, Codex, Claude Code et une variante fondée sur le SDK.

Côté coût, cela veut dire que le prix d'un enfant dépend du fournisseur qui l'a créé. Un agent forké en processus et un agent distant lancé via un pont ACP se ressemblent dans le code appelant et n'ont rien de commun sur la facture.

Deux modes de délégation, deux profils de coût

ModeFormeCaractéristique de coût
Coup uniqueCréer l'enfant, envoyer le prompt, attendre le résultat, jeterBorné, imputable au tour du parent
ContinuableSession d'arrière-plan durable avec activation résidenteOuvert ; s'accumule d'un tour à l'autre

Le mode coup unique se résout en un handle d'exécution assorti d'une promesse de résultat terminal. Les enfants continuables coûtent plus cher à maintenir : un gestionnaire de continuation réserve l'identité, compose l'enfant, ordonne chaque tour via la boîte de réception de l'enfant, et le fournisseur ne contribue qu'aux métadonnées de création initiale. Les activations ont trois états : en cours, en attente (au repos mais détenant des activations enfants inachevées) et réglée. Un message reçu sans activation vivante déclenche une reprise à froid depuis la session persistée.

Les reprises à froid sont le poste que l'on oublie. L'état est reconstitué depuis le journal, donc les tokens d'entrée sont proportionnels à la taille du journal. Un enfant de longue durée peu sollicité peut coûter plus cher par message qu'un enfant toujours actif.

Les capacités échouent bruyamment, pas en silence

Le harness valide les capacités demandées auprès du fournisseur et rejette par une erreur typée plutôt que d'ignorer silencieusement. Les capacités de démarrage couvrent les schémas de sortie, les limites de profondeur, les filtres d'outils et les personas, et correspondent une à une aux options de la requête. Demander ce que le fournisseur ne sait pas faire se voit au démarrage, pas sur la facture.

La profondeur est plafonnée, et le plafond ne se contourne pas

La profondeur de délégation est persistée dans l'en-tête de session et un champ d'exécution suit la plus grande des deux valeurs, si bien qu'une reprise à froid ne peut pas l'abaisser. Le démarrage est rejeté si la profondeur dérivée dépasse maxDepth ou les bornes d'entier sûr.

Un parent qui lance trois enfants, chacun en lançant trois autres, a transformé une requête utilisateur en treize agents. Les plafonds de profondeur font la différence entre un éventail que vous avez dimensionné et un éventail que vous avez découvert.

Découvrir coûte peu, livrer fait autorité

listChildren() renvoie un corpus privilégiant le vivant via une accélération à trois niveaux : cache de filigrane, puis point de contrôle de projection, puis inspection de la persistance. listDescendants() parcourt en préordre et ajoute les positions de parent et de profondeur. Aucune des deux ne consulte les registres d'agents, les activations ou les fournisseurs ; la remise des messages reste l'autorité. Pour l'imputation des coûts, c'est appréciable : l'arbre s'énumère à bas prix, quand vous voulez.

Les résultats portent une raison d'arrêt

La sortie est le dernier message d'assistant non vide ou le flux de texte accumulé ; une sortie structurée facultative est validée contre le schéma demandé. Le stopReason est une union extensible par fusion : completed, aborted, error, max-tokens, refusal. Tout ce qui n'est pas completed signifie une sortie partielle transformée en résultats d'outil en erreur : payée et inachevée.

Quoi mesurer

  1. Enfants par tour de parent et descendants par requête utilisateur.
  2. Profondeur maximale observée face au plafond configuré.
  3. Part des enfants continuables repris à froid, et taille du journal à la reprise.
  4. Distribution des raisons d'arrêt : une forte part de max-tokens ou error, c'est du travail payé et inachevé.

Related


Want this applied to your own LLM spend? FinOps LLM runs a free audit of your AI costs and shows where the savings are. Book free audit →

Back to research