Gérer les gros problèmes avec un agent nouvellement ouvert
"L'isolation des processus permet d'isoler le contexte gratuitement." L'agent enfant fait le sale boulot et l'agent parent ne collecte que le résumé propre.
Le dilemme de l’agent parent
Imaginez que vous demandiez à Claude Code de « comprendre comment ce référentiel Rust de 100 000 lignes gère la concurrence ». Approche intuitive : il effectue ls, cat, grep et recherche dans le contexte principal.
Problème : ce cycle d'exploration accumulera 30 résultats d'outils dans des messages[], chacun contenant plusieurs milliers de jetons. Au moment où il commence réellement à rédiger la réponse, le contexte a été rempli par le processus d'exploration - la limite supérieure sera déclenchée après quelques étapes supplémentaires et la réponse sera toujours confuse.
Solution à s04 : confiez la tâche d'exploration à un nouvel agent. Le nouvel agent démarre à partir de messages=[], explore le sien et enfin renvoie uniquement le résumé à l'agent parent. Le contexte parent n'a qu'une phrase supplémentaire : « L'outil de tâche a été ajusté une fois et le résultat était XXX », ce qui est rafraîchissant.
def run_subagent(invite : str) -> str : sub_messages = [{"role":"user", "content" : prompt}] # Nouveau contexte pour _ dans plage(30) : # Limite supérieure de sécurité pour éviter la perte de contrôle réponse = client.messages.create(..., messages=sub_messages, tools=CHILD_TOOLS, ...) ... # Seul le dernier texte est renvoyé, tout raisonnement intermédiaire est rejeté retour "".join(b.text pour b dans réponse.content if hasattr(b, "text"))
Comparaison du contexte père-fils
Ce widget simule une tâche réelle : "Liste de tous les endroits de cet entrepôt qui appellent une API obsolète". Vous pouvez l'exécuter avec deux stratégies : (A) l'agent parent le fait lui-même ; (B) générer un sous-agent. Comparez les tailles des deux derniers contextes gauche et droit.
CHILD_TOOLS : De quels outils le sous-agent peut-il disposer ?
Il y a un détail dans l'implémentation de s04 qu'il est facile de manquer : le sous-agent ne peut pas obtenir l'outil de tâche.
# Le sous-agent ne peut utiliser que des outils de base et ne peut pas générer de petit-fils CHILD_TOOLS = [bash, read_file, write_file, edit_file] # L'agent parent dispose d'un outil de tâche supplémentaire PARENT_TOOLS = CHILD_TOOLS + [tâche]
Pourquoi ? Évitez que la répartition récursive ne devienne une explosion d'arbre. Un sous-agent génère quatre sous-sous-agents, et il y a des dizaines d'appels simultanés en quelques tours seulement. Ni le jeton ni la limite de vitesse de l'API ne peuvent le gérer. La convention de s04 : spawn est plat, et un calque parent → enfant est un calque. C'est également le cas dans l'implémentation réelle de Claude Code - il est interdit d'appeler à nouveau l'outil Task dans l'outil Task.
visible et invisible
Trions les droits et les responsabilités : laquelle des questions suivantes pensez-vous être T et laquelle F pensez-vous ?