Vos agents IA brûlent 85 % de tokens en trop : le tuto PTC

Le programmatic tool calling exécute l'orchestration dans un sandbox au lieu de la facturer tour par tour. Voici comment le brancher sur Claude et GPT-5.6.

Schéma d'un agent IA orchestrant des outils dans un sandbox de code

Le mois dernier j'ai laissé tourner un agent d'analyse documentaire sur une pile de contrats clients. Douze outils branchés, une boucle par document, un modèle correct. À la fin de la semaine, la facture API m'a fait tousser : l'agent rapatriait dans son contexte l'intégralité des résultats intermédiaires — 200 Ko de données brutes pour en garder 1 Ko d'utile. Je payais trois fois le transport pour livrer une enveloppe.

La réponse tient dans deux mots que Anthropic et OpenAI ont poussés à quelques semaines d'écart : programmatic tool calling (PTC). L'idée est bête et redoutable. Au lieu de faire un aller-retour modèle pour chaque appel d'outil, le modèle écrit du code qui orchestre vos outils dans un bac à sable. Seul le résultat final remonte dans le contexte facturé. Le reste vit et meurt dans le sandbox.

Voici comment je l'ai branché, côté Claude et côté GPT-5.6, avec les chiffres que j'ai constatés et l'endroit précis où j'ai galéré.

Pourquoi vos agents IA paient trois fois pour rien

Le tool calling classique fonctionne en tour par tour. Le modèle demande un outil, votre code l'exécute, le résultat revient dans le contexte du modèle, le modèle repart. Chaque résultat intermédiaire est facturé en tokens d'entrée au tour suivant. Tant que vous appelez deux ou trois outils, personne ne le sent.

Le problème arrive avec les boucles. Reprenez mon agent : cinq étapes, chacune enroulant une boucle de dix appels. Ça fait cinquante invocations modèle facturées, et à chaque tour on recharge tout l'historique. OpenAI le résume sans détour dans sa doc : « un agent à cinq étapes où chaque étape enroule une boucle de dix appels, c'est cinquante invocations facturées ». Le coût ne monte pas linéairement, il compose.

Sur mes contrats, la mécanique était limpide : l'agent tirait le texte complet de chaque document, le réinjectait pour comparer, puis recommençait. 90 % des tokens payés servaient à trimballer de la donnée que le modèle n'avait pas besoin de lire — juste de traiter.

Programmatic tool calling : ce que le sandbox change vraiment

Avec le PTC, on inverse la charge. Le modèle génère du code (Python chez Anthropic, JavaScript chez OpenAI) qui appelle vos outils, enchaîne les boucles, filtre, agrège — le tout dans un environnement d'exécution isolé. Les résultats des appels ne rentrent jamais dans le contexte du modèle. Seule la sortie finale du code y revient.

Concrètement, sur mon cas d'analyse budgétaire de test : 200 Ko de données brutes réduites à 1 Ko de résultat avant de toucher le modèle. Le filtrage, l'addition, le tri se passent dans le code, là où ça ne consomme pas un token de modèle.

Activer le PTC sur Claude : beta header et code_execution

Côté Anthropic, trois éléments à poser. Le beta header, l'outil de code execution, et le marquage des outils autorisés à être appelés depuis le code.

Le squelette d'appel ressemble à ça :

[[terminal:client.beta.messages.create( betas=["advanced-tool-use-2025-11-20"], model="claude-sonnet-4-5-20250929", max_tokens=4096, tools=[ {"type": "code_execution_20250825", "name": "code_execution"}, { "name": "get_budget", "description": "...", "input_schema": {...}, "allowed_callers": ["code_execution_20250825"] } ] )]]

Les trois points à ne pas rater :

  • betas=["advanced-tool-use-2025-11-20"] — sans ce header, l'API ignore le PTC et retombe en tool calling classique. J'ai perdu vingt minutes là-dessus, persuadé que ça ne marchait pas alors que je payais plein pot en silence.
  • L'outil code_execution (type code_execution_20250825) doit être présent dans la liste des tools. C'est lui le runtime.
  • allowed_callers sur chaque outil que vous voulez rendre appelable depuis le code. Un outil sans ce champ reste en mode classique — utile quand vous voulez qu'une action sensible passe par une validation modèle.

Ensuite, Claude génère du Python qui enchaîne les appels, souvent en parallèle via asyncio.gather. Vous ne l'écrivez pas : vous le récupérez, il s'exécute, vous encaissez le résultat filtré.

Combien coûte le PTC sur Claude en pratique

Les chiffres publiés par Anthropic, croisés avec ce que j'ai mesuré : sur un agent de gestion de projet à 75 outils, 38 % de tokens d'entrée facturés en moins, à précision de tâche identique. Sur des tâches de recherche complexes, la conso moyenne tombe de 43 588 à 27 297 tokens, soit 37 %. Et le cas extrême cité dans le cookbook : 110 473 tokens en classique contre 15 919 en PTC, à nombre d'appels API égal — 85,6 % d'économie. Bonus non négligeable, la précision grimpe aussi sur certains benchmarks (récupération de connaissances de 25,6 à 28,5 %), parce que le modèle n'est plus noyé sous du contexte parasite.

GPT-5.6 côté OpenAI : du JavaScript dans un V8 isolé

OpenAI a livré la même logique avec GPT-5.6 (Sol, Terra, Luna), passé en disponibilité générale le 9 juillet 2026. La différence : le modèle écrit du JavaScript exécuté dans un sandbox V8 sans accès réseau. Vos outils déclarés restent le seul chemin vers l'extérieur, donc la surface de sécurité ne bouge pas.

Ça passe par la Responses API. Le modèle compose loops, conditionnels et agrégation, et là où un enchaînement de 12 appels séquentiels demandait 12 cycles de réponse facturés, il tient désormais en un seul. OpenAI annonce des réductions de tokens de 38 % à 63,5 % sur ses clients nommés — Clio cite 38 % sur de l'analyse documentaire multi-étapes, sans perte de qualité.

Ce qui a coincé chez moi

Deux frustrations honnêtes, parce que le tuto parfait n'existe pas.

Le debug devient opaque. Quand le modèle orchestre lui-même dans le sandbox, vous ne voyez plus chaque appel défiler. Sur mon premier run, une requête sur trois échouait silencieusement à cause d'un mauvais typage de date, et le code avalait l'exception. En tool calling classique, je l'aurais vu au premier tour. Ma parade : logguer côté outil (pas côté modèle) et faire remonter les compteurs d'erreurs dans la sortie finale.

Le gain n'est pas systématique. Sur un agent à trois outils qui fait deux appels, le PTC n'apporte rien — parfois il coûte un chouïa plus cher à cause du runtime de code. Le seuil de rentabilité, d'après mes tests, c'est autour de 8-10 outils ou dès qu'il y a une boucle qui rapatrie de gros volumes. En dessous, restez en classique.

Autrement dit : le PTC n'est pas un interrupteur magique à activer partout. C'est une optimisation pour les agents qui brassent du volume. Sur les autres, vous complexifiez pour rien.

Par où commencer sans tout casser

Ma recette pour migrer un agent existant sans repartir de zéro :

  • Repérez l'agent le plus cher du mois. Regardez sa conso de tokens d'entrée, pas de sortie — c'est là que le PTC frappe.
  • Vérifiez qu'il boucle sur des outils ou agrège de gros résultats. Si oui, candidat parfait.
  • Ajoutez le beta header et l'outil code_execution (Claude), ou basculez sur la Responses API en mode programmatique (GPT-5.6).
  • Marquez d'abord UN outil en allowed_callers, mesurez, puis étendez. Pas de big bang.
  • Comparez la facture sur 100 exécutions avant/après. Le chiffre parle mieux que la doc.

Si vous pilotez déjà vos automatisations via un orchestrateur type n8n, la logique se combine : le PTC réduit le coût par exécution, l'orchestrateur gère le déclenchement. J'en ai détaillé le câblage dans notre tuto MCP + n8n.

Pour tester le PTC sans écrire une ligne d'infra, le plus rapide reste de partir d'un compte développeur Claude et de reprendre le cookbook officiel — c'est là que j'ai décollé le plus vite.

Le verdict après trois semaines

Sur mon agent contrats, la facture d'entrée a fondu de 41 % en gardant la même qualité de sortie. Pas de magie, juste le refus de payer pour transporter de la donnée que le modèle n'a pas à lire. Pour une PME qui fait tourner deux ou trois agents multi-outils en production, on parle de centaines d'euros par mois récupérés sans toucher au résultat métier.

Le prix à payer : un debug moins lisible et une exigence accrue sur la qualité de vos schémas d'outils. Pour un agent à trois outils qui tourne dix fois par jour, ça n'en vaut pas la peine. Pour un agent qui brasse des dizaines d'appels par run, c'est le premier levier à activer avant même de penser à changer de modèle.

FAQ

Le programmatic tool calling est-il gratuit ?
La fonctionnalité en elle-même n'a pas de surcoût dédié : vous payez les tokens du modèle et l'exécution du sandbox de code, comme d'habitude. L'intérêt, c'est qu'elle réduit la facture globale de 37 à 85 % sur les agents multi-outils, parce que les résultats intermédiaires ne sont plus facturés en tokens d'entrée. Chez Anthropic, l'accès passe par un beta header ; chez OpenAI, c'est intégré à la Responses API de GPT-5.6.
Faut-il savoir coder pour utiliser le PTC ?
Vous n'écrivez pas le code d'orchestration — c'est le modèle qui le génère. Mais il faut être à l'aise avec l'appel d'API (Python ou Node), déclarer vos outils avec un schéma propre, et savoir lire des logs. Ce n'est pas du no-code : c'est un tuto pour développeur ou profil technique. Un responsable non-tech aura besoin d'un dev pour le brancher.
PTC sur Claude ou sur GPT-5.6, lequel choisir ?
Les deux font la même chose avec un gain comparable (37 % Claude, 38-63,5 % OpenAI). Le choix dépend surtout du modèle sur lequel tourne déjà votre agent. Claude génère du Python et expose allowed_callers pour un contrôle fin outil par outil. GPT-5.6 génère du JavaScript dans un V8 isolé. Ne migrez pas de fournisseur juste pour le PTC : activez-le sur celui que vous utilisez déjà.
À partir de combien d'outils le PTC devient rentable ?
D'après mes tests, le seuil se situe vers 8-10 outils, ou dès qu'un agent boucle sur des appels qui rapatrient de gros volumes de données. En dessous de 3-4 outils avec peu d'appels, le PTC n'apporte rien et peut même coûter un peu plus cher à cause du runtime de code. Mesurez la conso de tokens d'entrée de votre agent avant de décider.
Le PTC change-t-il la sécurité de mes outils ?
Non. Le code généré par le modèle s'exécute dans un sandbox sans accès réseau : vos outils déclarés restent le seul chemin vers l'extérieur. La surface d'attaque ne bouge pas. En revanche, soignez vos schémas d'outils : une imprécision se retrouve répétée dans chaque itération de boucle avant que vous ne voyiez un résultat.
Partager
Résumé vidéoen cours…