Maîtrise des coûts
Où vont réellement les tokens dans une charge de travail agentique, et les quatre leviers qui font varier la facture.
Si vous avez utilisé un agent de programmation pendant une journée de travail complète, vous avez vu la facture. Les boucles agentiques consomment des tokens dans des proportions que les conversations ordinaires n’atteignent jamais : chaque fichier lu, chaque résultat d’outil et chaque diff entre dans le contexte et est renvoyé au tour suivant.
Les tokens de sortie sont les plus coûteux
Pour chaque modèle de pointe, la sortie coûte 4–5× plus cher que l’entrée. Un modèle qui raisonne à voix haute dans sa réponse finale dépense plus vite qu’un modèle qui répond de façon concise. Limitez max_tokens de manière délibérée et privilégiez les modèles concis pour les tâches courantes.
| Modèle | $/M en entrée | $/M en sortie | Rapport |
|---|---|---|---|
claude-opus-4-8 | $3 | $15 | 5× |
claude-sonnet-4-6 | $0.90 | $4.50 | 5× |
claude-haiku-4-5 | $0.40 | $2 | 5× |
gemini-3-flash | $0.20 | $1.20 | 6× |
Les quatre leviers
- Orientez les requêtes selon la tâche. La classification, l’extraction et le routage ne nécessitent pas Opus : Haiku s’en charge pour environ un septième du prix. Réservez le modèle phare aux tâches exigeant un raisonnement approfondi.
- Mise en cache des prompts. Les prompts système stables et les définitions d’outils sont relus depuis le cache pour une fraction du prix de l’entrée. Pour les agents, c’est le levier le plus important : voir Mise en cache des prompts.
- Réduisez le contexte à chaque tour. Ne renvoyez pas l’intégralité de la conversation ; conservez les échanges récents et un résumé mis à jour au fil des échanges. C’est la croissance illimitée du contexte qui fait passer une session de 2 $ à 20 $.
- Limitez la boucle. Fixez une limite stricte au nombre d’étapes des exécutions autonomes pour qu’un agent bloqué ne puisse pas tourner indéfiniment.
Estimer avant l’exécution
IN_RATE = {class="s">"claude-opus-4-8": 3.0, class="s">"claude-sonnet-4-6": 0.9, class="s">"claude-haiku-4-5": 0.4}
OUT_RATE = {class="s">"claude-opus-4-8": 15.0, class="s">"claude-sonnet-4-6": 4.5, class="s">"claude-haiku-4-5": 2.0}
def cost(model, tok_in, tok_out):
return tok_in / 1e6 * IN_RATE[model] + tok_out / 1e6 * OUT_RATE[model]
print(cost(class="s">"claude-opus-4-8", 20_000, 2_000)) class=class="s">"c"># 0.09
print(cost(class="s">"claude-sonnet-4-6", 20_000, 2_000)) class=class="s">"c"># 0.027
print(cost(class="s">"claude-haiku-4-5", 20_000, 2_000)) class=class="s">"c"># 0.012
Une même tâche avec 20K en entrée et 2K en sortie coûte 7.5× plus cher sur Opus que sur Haiku. Pour une tâche de classification, ce surcoût n’apporte rien.
Mesurer après l’exécution
Chaque réponse contient un usage objet. Consignez-le avec un identifiant de requête et un type de tâche : sans cela, l’optimisation des coûts repose sur des suppositions. Le tableau de bord de la passerelle affiche l’utilisation par modèle, mais seuls vos propres journaux indiquent *pourquoi* une requête a été effectuée.