Les principaux fournisseurs d’IA américains augmentent discrètement la pression tarifaire. OpenAI pousse désormais les utilisateurs dans une échelle allant de Free à Plus, Pro, Business puis Enterprise, avec Pro positionné à 200 $ par mois et Business vendu par siège. Anthropic a également élargi sa structure d’offres autour d’une utilisation plus intensive, avec les niveaux Claude Max et des plans d’équipe pensés pour les personnes qui exploitent des workflows IA toute la journée. Oui, ils reculent parfois un peu, pour mieux trouver ensuite de nouvelles façons d’augmenter la facture. Pour les bâtisseurs d’IA, le message devient évident : si les modèles deviennent votre système d’exploitation, les fournisseurs veulent une part plus grosse du loyer.
Cela ne veut pas dire que les développeurs sont impuissants. Cela veut dire que l’ancienne logique du « je balance le prompt et on verra » devient très coûteuse. Oui, moi aussi j’ai basculé temporairement sur DeepSeek V4, mais est-ce la solution à long terme ? Les autres fournisseurs chinois ne sont pas bon marché non plus pour ceux qui ne veulent toujours pas héberger eux-mêmes ces LLM aux trillions de paramètres. Les équipes qui gagneront seront celles qui traitent l’usage des tokens comme un sujet de design produit, de design système et de design de workflow à la fois. C’est pour cela que l’optimisation des tokens est devenue un thème si utile pour les ingénieurs qui construisent des agents, des outils de code, des copilotes et des systèmes IA internes. Cela fait désormais partie du métier.
Cet article présente cinq solutions pratiques. Chacune cible une forme différente de gaspillage de tokens, et chacune se visualise facilement avec FlowZap Code. Le gaspillage se cache souvent dans la plomberie : le niveau de modèle choisi, le contexte transporté, les outils chargés, le cache ignoré et la sortie trop bavarde que l’on accepte trop facilement.
La nouvelle taxe IA
La pression s’exerce de deux côtés à la fois. D’abord, les niveaux d’abonnement se segmentent davantage et deviennent plus chers pour les utilisateurs intensifs, surtout les développeurs qui dépendent de longues fenêtres de contexte, d’outils agentiques ou d’une utilisation soutenue toute la journée. Ensuite, plus un workflow devient puissant, plus il est facile d’augmenter involontairement la consommation de tokens avec des instructions répétées, d’énormes schémas d’outils, un contexte surdimensionné et des sorties excessivement verbeuses.
Le vrai problème n’est donc pas seulement : « quel fournisseur une équipe devrait-elle choisir ? » Le vrai problème est : comment continuer à construire des workflows IA ambitieux sans se faire tondre à chaque requête ? C’est là que ces cinq solutions entrent en jeu.
Solution n°1 : ne plus envoyer chaque tâche au modèle le plus cher
La première fuite, la plus évidente, vient du choix du modèle. Trop de produits prennent le modèle le plus puissant comme réponse par défaut, même lorsque la tâche est simple : extraction légère, classification rapide, nettoyage de format ou Q&R routinière sur un contexte étroit. C’est l’équivalent IA d’envoyer une limousine récupérer un sandwich.
Une couche de routage corrige cela. Au lieu de supposer qu’un seul modèle convient à tous les travaux, le système inspecte la tâche, estime sa difficulté et l’envoie au modèle le moins cher qui reste suffisamment bon. Cette simple décision transforme le « modèle premium partout » en système à plusieurs niveaux : les petites tâches vont au moins cher, les tâches moyennes au niveau intermédiaire, et seuls les cas difficiles touchent le modèle onéreux.
Heureusement, l’écosystème open source est assez mûr pour cela. RouteLLM est conçu précisément autour du routage de modèles et de l’évaluation. LiteLLM est une option de type gateway que beaucoup d’équipes utilisent déjà, ce qui rend l’idée moins théorique et plus proche d’une plomberie de production standard.
client { # Application
n1: circle label:"Demande utilisateur"
n10: circle label:"Livrer la réponse"
n1.handle(bottom) -> gateway.n2.handle(top) [label="Requête"]
}
gateway { # Passerelle LLM
n2: rectangle label:"Extraire l’intention et la taille"
n3: diamond label:"Raisonnement lourd ?"
n4: rectangle label:"Choisir Flash / Haiku"
n5: rectangle label:"Choisir Pro / Opus"
n8: rectangle label:"Normaliser la réponse"
n9: rectangle label:"Journaliser les métriques de tokens"
n2.handle(right) -> n3.handle(left)
n3.handle(bottom) -> n4.handle(top) [label="Non"]
n3.handle(right) -> n5.handle(left) [label="Oui"]
n4.handle(bottom) -> providers.n6.handle(top) [label="Appeler l’API budget"]
n5.handle(bottom) -> providers.n7.handle(top) [label="Appeler l’API premium"]
n8.handle(right) -> n9.handle(left)
n9.handle(top) -> client.n10.handle(bottom) [label="Résultat final"]
}
providers { # APIs de modèles
n6: rectangle label:"Traiter rapidement"
n7: rectangle label:"Traiter avec raisonnement profond"
n6.handle(top) -> gateway.n8.handle(bottom) [label="Retourner la réponse"]
n7.handle(top) -> gateway.n8.handle(bottom) [label="Retourner la réponse"]
}
Tout le monde comprend la douleur que représente le fait de payer un prix premium pour un travail qui n’avait pas besoin d’un effort premium. Le routage transforme l’optimisation des tokens en règle simple : arrêtez de surpayer le travail facile.
Solution n°2 : mettre votre contexte au régime avant qu’il n’atteigne le modèle
L’un des coûts les plus sournois dans les systèmes agentiques est l’obésité contextuelle. L’agent démarre petit, puis accumule l’historique du chat, les journaux d’outils, la documentation, les morceaux récupérés, les messages d’erreur et divers résidus de sessions précédentes, jusqu’à ce que chaque requête ressemble à une valise traînée dans un aéroport. Ensuite, les équipes s’étonnent de voir la facture paraître malade.
La compaction du contexte est le remède. Le but n’est pas de tout réécrire en résumé. Le but est d’éliminer la redondance, les éléments périmés et les déchets de faible valeur tout en préservant ce qui compte encore pour l’étape en cours. Les recommandations d’Anthropic sur l’ingénierie du contexte rappellent qu’un bon agent dépend d’une sélection et d’une mise en forme intentionnelles du contexte, et non d’un simple remplissage maximal de la fenêtre.
En tant que builder, vous n’avez pas besoin de « plus de contexte ». Vous avez besoin du bon contexte, comme un voyageur a besoin d’un bagage cabine et non d’un camion de déménagement. Le visualiser comme une étape architecturale rend la solution évidente :
agent { # Orchestrateur IA
n1: circle label:"Tâche déclenchée"
n4: rectangle label:"Assembler le contexte brut"
n9: rectangle label:"Construire le prompt final"
n12: circle label:"Analyser le résultat"
n1.handle(bottom) -> datastore.n2.handle(top) [label="Récupérer l’historique et les docs"]
n4.handle(bottom) -> compactor.n5.handle(top) [label="100k tokens"]
n9.handle(bottom) -> llm.n10.handle(top) [label="Envoyer 15k tokens"]
}
datastore { # Base vectorielle & journaux
n2: rectangle label:"Récupérer des fragments"
n3: rectangle label:"Assembler les enregistrements"
n2.handle(right) -> n3.handle(left)
n3.handle(top) -> agent.n4.handle(bottom) [label="Retourner les correspondances"]
}
compactor { # Passerelle de contexte
n5: rectangle label:"Analyser AST & blocs"
n6: rectangle label:"Éliminer les infos périmées / dupliquées"
n7: rectangle label:"Classer par pertinence"
n8: rectangle label:"Emballer le contexte restant"
n5.handle(right) -> n6.handle(left)
n6.handle(right) -> n7.handle(left)
n7.handle(right) -> n8.handle(left)
n8.handle(top) -> agent.n9.handle(bottom) [label="Contexte compacté 15k tokens"]
}
llm { # API modèle
n10: rectangle label:"Traiter un prompt léger"
n11: rectangle label:"Générer la réponse"
n10.handle(right) -> n11.handle(left)
n11.handle(top) -> agent.n12.handle(bottom) [label="Livrer la réponse"]
}
Côté outillage, Compresr’s Context Gateway présente la compaction comme une couche d’infrastructure à part entière, et non comme un bricolage ponctuel. Les ressources context engineering de LangChain vont encore plus loin : elles montrent qu’il ne s’agit pas seulement de compresser, mais aussi de sélectionner, organiser et isoler le contexte intelligemment.
Solution n°3 : faire en sorte que le fournisseur se souvienne de ce qui ne change jamais
Celle-ci est presque insultante de simplicité. Si la première moitié du prompt ne change jamais, pourquoi payez-vous son coût plein tarif à chaque appel ? Le prompt caching existe précisément parce que les préfixes stables sont très fréquents dans les systèmes réels : instructions, politiques, listes d’outils, documentation statique, schémas et garde-fous se répètent souvent d’un appel à l’autre.
Le secret, c’est la structure du prompt. Les équipes sabotent le cache quand elles mélangent trop tôt les données volatiles de l’utilisateur ou reconstruisent à chaque tour de longs blocs d’instructions. Une meilleure conception garde le préfixe réutilisable stable et placé en tête, puis ajoute ensuite la petite partie dynamique. Le fournisseur peut alors réutiliser le travail mis en cache et ne facturer que le delta.
Le mécanisme est beau par sa simplicité : une dynamique de type « première fois contre 200 fois suivantes ». Le premier appel fait le gros du travail. Les appels suivants passent sur la voie rapide.
client { # Application
n1: circle label:"Démarrer l’exécution 1"
n2: rectangle label:"Assembler le prompt système statique"
n3: rectangle label:"Ajouter l’entrée utilisateur volatile"
n7: rectangle label:"Recevoir la réponse 1"
n8: circle label:"Démarrer l’exécution 2"
n9: rectangle label:"Réutiliser le prompt système statique"
n10: rectangle label:"Ajouter la nouvelle entrée utilisateur volatile"
n13: rectangle label:"Recevoir la réponse 2"
n14: circle label:"Session terminée"
n1.handle(right) -> n2.handle(left)
n2.handle(right) -> n3.handle(left)
n3.handle(bottom) -> provider.n4.handle(top) [label="Envoyer 51k tokens"]
n7.handle(right) -> n8.handle(left)
n8.handle(right) -> n9.handle(left)
n9.handle(right) -> n10.handle(left)
n10.handle(bottom) -> provider.n11.handle(top) [label="Envoyer 51k tokens"]
n13.handle(right) -> n14.handle(left)
}
provider { # Fournisseur de modèle
n4: rectangle label:"Cache miss : calcul complet de l’attention"
n5: rectangle label:"Écrire le KV cache pour le préfixe de 50k"
n6: rectangle label:"Calculer le delta 1k et générer"
n11: rectangle label:"Cache hit : lire 50k depuis le KV cache"
n12: rectangle label:"Calculer le delta 1k et générer"
n4.handle(right) -> n5.handle(left)
n5.handle(right) -> n6.handle(left)
n6.handle(top) -> client.n7.handle(bottom) [label="Coût : 1,00 $"]
n11.handle(right) -> n12.handle(left)
n12.handle(top) -> client.n13.handle(bottom) [label="Coût : 0,10 $"]
}
Si les hausses tarifaires vous agacent, rappelez-vous que vous n’avez pas forcément besoin d’un nouvel outil ou d’un nouveau fournisseur pour réduire vos coûts. Souvent, il suffit simplement de structurer vos requêtes comme un adulte. Le prompt caching est une optimisation qui paraît presque embarrassante d’évidence une fois qu’on la visualise.
Solution n°4 : arrêter de charger tout l’univers des outils à chaque requête
Au-delà des bases, il existe un vrai point de douleur interne. Quand les agents ont commencé à utiliser des serveurs MCP et des catalogues d’outils plus larges, les équipes ont découvert que le modèle n’étouffait pas seulement sous les entrées utilisateur. Il étouffait aussi sous d’énormes définitions d’outils, schémas de paramètres, descriptions et exemples rechargés à répétition. C’est la taxe cachée des tokens.
C’est important, car il ne s’agit pas d’une petite inefficacité. L’écosystème MCP discute activement de moyens formels pour réduire l’explosion des schémas, notamment la déduplication et la sélection d’outils par récupération, parce que le problème est suffisamment important pour fausser des workflows entiers. L’approche de dynamic toolsets chez Speakeasy va dans la même direction : n’exposez que les outils nécessaires à la tâche courante au lieu de jeter tout le buffet dans le prompt.
Le contraste architectural est net. D’un côté, votre système expédie tous les schémas dans chaque requête et vous vous demandez pourquoi la facture enfle. De l’autre, il vérifie ce qui est réellement nécessaire, récupère uniquement les définitions pertinentes et garde le prompt léger.
agent { # Agent IA
n1: circle label:"Nouvel objectif"
n2: rectangle label:"Analyser les capacités requises"
n5: rectangle label:"Construire le prompt avec 2 schémas"
n8: circle label:"Exécuter l’étape"
n1.handle(right) -> n2.handle(left)
n2.handle(bottom) -> registry.n3.handle(top) [label="Demander les outils selon l’intention"]
n5.handle(bottom) -> llm.n6.handle(top) [label="Envoyer une requête légère"]
}
registry { # Registre d’outils MCP
n3: diamond label:"Associer l’intention aux outils"
n4: rectangle label:"Extraire les schémas spécifiques (pas les 50)"
n3.handle(right) -> n4.handle(left)
n4.handle(top) -> agent.n5.handle(bottom) [label="Retourner 2 schémas"]
}
llm { # API modèle
n6: rectangle label:"Traiter 500 tokens d’outils (pas 10k)"
n7: rectangle label:"Sélectionner l’outil à appeler"
n6.handle(right) -> n7.handle(left)
n7.handle(top) -> agent.n8.handle(bottom) [label="Retourner l’appel d’outil"]
}
Certaines des plus grosses dépenses ne viennent pas du fait « d’utiliser trop d’IA » en soi. Elles viennent de systèmes agentiques mal structurés que les fournisseurs sont parfaitement heureux de vous facturer.
Solution n°5 : mettre une laisse sur la sortie avant que la sortie ne vous mette une laisse
Les tokens d’entrée attirent toute l’attention, mais ce sont les tokens de sortie qui font discrètement saigner beaucoup de produits. Un modèle rédige une longue réponse alors qu’un JSON aurait suffi. Il réécrit un fichier entier alors qu’un diff aurait suffi. Il verse du raisonnement verbeux dans des endroits où l’application n’avait besoin que d’un résultat. Puis l’étape agent suivante doit ingérer cette sortie gonflée, ce qui transforme aujourd’hui du gaspillage de sortie en gaspillage d’entrée pour demain.
La solution, c’est la budgétisation des sorties. Définissez un max_tokens. Utilisez des séquences d’arrêt. Demandez une sortie structurée. Préférez les diffs et les patchs aux réécritures complètes lorsque l’application peut les appliquer. Resserrez le schéma pour que le modèle s’égare moins facilement en mode essai littéraire. C’est moins glamour que les grandes fenêtres de contexte, mais c’est souvent là que les économies quotidiennes apparaissent vraiment.
En tant que builder, on vous vend plus de contexte, plus de boucles agentiques, plus d’autonomie, plus de magie. Très bien. Mais si votre système répond comme un roman dès qu’il éternue, vous payez cette performance artistique. La budgétisation des sorties, c’est le moment où une équipe décide qu’elle veut des réponses utiles, pas des florilèges littéraires.
app { # Orchestrateur
n1: circle label:"Tâche lancée"
n2: rectangle label:"Appliquer le schéma de sortie (JSON, diff)"
n3: rectangle label:"Définir max_tokens=500"
n6: diamond label:"Parse correctement ?"
n7: rectangle label:"Resserer le prompt système"
n8: circle label:"Passer à l’étape suivante"
n1.handle(right) -> n2.handle(left)
n2.handle(right) -> n3.handle(left)
n3.handle(bottom) -> provider.n4.handle(top) [label="Contraintes strictes"]
n6.handle(right) -> n8.handle(left) [label="Oui"]
n6.handle(bottom) -> n7.handle(top) [label="Non"]
n7.handle(left) -> n2.handle(bottom) [label="Réessayer avec pénalités"]
}
provider { # API LLM
n4: rectangle label:"Traiter la requête"
n5: rectangle label:"Générer la sortie formatée"
n4.handle(right) -> n5.handle(left)
n5.handle(top) -> app.n6.handle(bottom) [label="Retourne la forme exacte"]
}
L’intérêt de cette solution est qu’elle est immédiatement actionnable. Vous n’avez pas besoin d’attendre une nouvelle version du modèle ni un meilleur niveau tarifaire. Vous pouvez décider aujourd’hui que les sorties doivent être façonnées pour l’application, et non laissées au hasard.
La boîte à outils GitHub qui appartient vraiment à cette histoire
Il est facile de se perdre dans une liste infinie de dépôts GitHub. Voici donc une boîte à outils curatée, directement reliée à ces cinq solutions. Ces projets prouvent que chaque optimisation est suffisamment réelle pour disposer d’outils de niveau production.
| Solution | Dépôt ou produit | Pourquoi c’est important |
|---|---|---|
| Solution n°1 : routage | RouteLLM | Conçu pour le routage de modèles et l’évaluation. |
| Solution n°1 : routage | LiteLLM | Architecture de passerelle solide pour le routage, les fallback et le multi-fournisseur. |
| Solution n°2 : compaction du contexte | Compresr Context Gateway | Traite la compaction du contexte comme une couche d’infrastructure dédiée. |
| Solution n°2 : compaction du contexte | LangChain context engineering | Fournit un cadre pour sélectionner, ordonner et structurer le contexte. |
| Solution n°3 : prompt caching | Fonctionnalités natives des fournisseurs | Immédiatement disponibles si vous structurez vos prompts avec un préfixe statique en premier. |
| Solution n°4 : réduction des schémas | MCP SEP-1576 | Confirme que l’explosion des schémas est un vrai sujet de l’écosystème et propose des standards de déduplication. |
| Solution n°4 : réduction des schémas | Dynamic toolsets de Speakeasy | Implémentation pratique du chargement uniquement des outils nécessaires à la tâche. |
| Solution n°5 : budgétisation des sorties | Fonctionnalités de structured output | Intégrées à la plupart des APIs ; elles demandent surtout de la discipline applicative. |
| Optimisation connexe | GPTCache | Fiable pour le caching sémantique dans les applications avec répétitions fréquentes. |
| Optimisation connexe | vCache | Conçu pour le caching sémantique quand la fiabilité et les bornes d’erreur comptent. |
| Optimisation connexe | LLMLingua | La référence pour la compression de prompts lorsque l’on veut réduire la taille du KV cache. |
Le caching sémantique et la compression des prompts restent importants. Mais le problème plus large, pour la plupart des builders IA aujourd’hui, est le gaspillage architectural dans le routage, le contexte, les outils, le cache et le contrôle des sorties.
Conclusion
Les grands fournisseurs vont continuer à pousser les utilisateurs vers des niveaux supérieurs, des engagements plus lourds et des façons de travailler plus coûteuses. Cette dynamique a peu de chances de s’inverser. Mais vous n’êtes pas obligé d’accepter chaque coût comme inévitable. Vous pouvez mieux router, compacter le contexte, exploiter le cache, charger moins d’outils et budgéter les sorties comme des professionnels.
Si les fournisseurs de modèles veulent soutirer plus d’argent aux builders IA, il est temps de devenir beaucoup plus difficiles à pressurer.
Inspirations:
- Tarifs OpenAI Business : https://openai.com/business/chatgpt-pricing/
- Grille tarifaire ChatGPT : https://help.openai.com/en/articles/11481834-chatgpt-rate-card
- Guide ChatGPT Enterprise : https://www.hungyichen.com/en/insights/chatgpt-enterprise-guide
- Guide de tarification Claude 2026 : https://www.heyuan110.com/posts/ai/2026-04-03-claude-pricing-complete-guide/
- Décomposition des tarifs Claude par Finout : https://www.finout.io/blog/claude-pricing-in-2026-for-individuals-organizations-and-developers
- Tarifs des outils de codage IA : https://ijonis.com/en/ai-coding-tools-pricing
- Anthropic Context Engineering : https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
- Optimisation des tokens chez Redis : https://redis.io/blog/llm-token-optimization-speed-up-apps/
- GitHub RouteLLM : https://github.com/lm-sys/routellm
- Article sur la réduction des coûts avec RouteLLM : https://gaodalie.substack.com/p/routellm-how-i-route-to-the-best
- GitHub LiteLLM : https://github.com/BerriAI/litellm
- Documentation de routage LiteLLM : https://github.com/BerriAI/litellm/blob/main/docs/my-website/docs/routing.md
- Compaction automatique du contexte Claude : https://platform.claude.com/cookbook/tool-use-automatic-context-compaction
- Compresr Context Gateway : https://compresr.ai/gateway
- Article d’architecture Compresr : https://lilting.ch/en/articles/compresr-context-gateway-agent-proxy
- Dépôt LangChain Context Engineering : https://github.com/langchain-ai/context_engineering
- Guide SylphAI sur le prompt caching : https://sylphai.substack.com/p/the-complete-guide-to-prompt-caching
- Guide d’infrastructure du prompt caching : https://introl.com/blog/prompt-caching-infrastructure-llm-cost-latency-reduction-guide-2025
- Article ProjectDiscovery sur la réduction des coûts : https://projectdiscovery.io/blog/how-we-cut-llm-cost-with-prompt-caching
- MCP SEP-1576 (proposition sur l’explosion des schémas) : https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1576
- Dynamic toolsets Speakeasy : https://www.speakeasy.com/blog/how-we-reduced-token-usage-by-100x-dynamic-toolsets-v2
- Problème de tokens sur Chrome DevTools MCP : https://github.com/ChromeDevTools/chrome-devtools-mcp/issues/340
- Raisonnement conscient du budget de tokens : https://gist.github.com/thehunmonkgroup/aceb859a819729711bdb815cc946a34c
- Structured Outputs de Simbian : https://simbian.ai/blog/using-structured-outputs-to-chain-llm-pipelines
- Problème de limites de sortie Google ADK : https://github.com/google/adk-python/issues/701
- GitHub GPTCache : https://github.com/zilliztech/gptcache
- Présentation GPTCache : https://zilliz.com/what-is-gptcache
- GitHub vCache : https://github.com/vcache-project/vCache
- GitHub LLMLingua : https://github.com/microsoft/llmlingua
- Intégration LLMLingua : https://microsoft.github.io/promptflow/integrations/tools/llmlingua-prompt-compression-tool.html
