Les cinq techniques se cumulent. Chacune réduit une partie différente de la facture — en en combinant trois, on atteint de manière réaliste une réduction de 70 % sans perte de qualité ; les cinq permettent de se rapprocher de 85 à 90 %. Ce guide présente le menu complet, avec des économies mesurées et du code exécutable pour chaque technique. Chaque technique renvoie vers une analyse approfondie dédiée en bas de page.
Les cinq techniques, classées par ROI
| # | Technique | Ce qu’elle réduit | Économie réaliste |
|---|---|---|---|
| 1 | Mise en cache des prompts | Jetons d’entrée dans les prompts répétés | 60 à 90 % de réduction sur le coût des entrées |
| 2 | Routage par niveau de modèle | Tarif par appel pour les tâches simples | Environ 10 fois moins cher |
| 3 | Limites de sortie | Jetons de sortie, principal coût des tâches créatives | La sortie coûte 4 à 5 fois l’entrée |
| 4 | Parallélisme + traitement par lots | Temps réel, pas le coût par jeton | Permet des délais d’attente plus courts et moins de nouvelles tentatives |
| 5 | Hygiène des nouvelles tentatives | Dépenses liées aux nouvelles tentatives incontrôlées | Limite la traîne, pas la moyenne |
1. Mise en cache des prompts — de loin la technique au meilleur ROI
Si votre prompt système dépasse 1 000 jetons et que vous appelez le même prompt plus de deux fois dans une fenêtre de 5 minutes, la mise en cache des prompts est de l’argent facile. Anthropic facture les entrées mises en cache à 10% du tarif des entrées (2,5 % pour Claude Fable 5.1, 5 % pour Claude Opus 5.5) ; OpenAI applique automatiquement l’équivalent à 10%. Un seul champ à ajouter :
# Prompt caching: 1 extra field = 10% rate on cached input
resp = client.messages.create(
model="claude-sonnet-5",
max_tokens=600,
system=[{
"type": "text",
"text": LONG_SYSTEM_PROMPT,
"cache_control": {"type": "ephemeral"}, # cache this part
}],
messages=[{"role": "user", "content": question}],
)Économies réalistes : 60 à 90 % sur le coût des entrées si votre prompt système est volumineux et stable. Consultez votre tableau de bord /app/usage — si cache_read_input_tokens vaut 0, il vous reste 30 minutes de travail dont le retour sera permanent. Analyse approfondie.
2. Routage par niveau de modèle — utilisez le modèle le moins cher qui soit suffisamment performant
Claude Haiku 4.5 coûte environ 10 % de Claude Opus 4.7. Pour la classification, le formatage, les décisions de routage et les résumés simples, Haiku est largement suffisant. Réservez Opus aux appels nécessitant un raisonnement réellement difficile.
# Pick the cheapest model that's still good enough for the task.
# Escalate by difficulty: cheap (Haiku 4.5 / GPT-5.6 Terra) -> Sonnet 5 -> Opus 4.7
def pick_model(difficulty: int) -> str:
if difficulty <= 2: return "claude-haiku-4-5" # ~10x cheaper than Opus
if difficulty <= 4: return "gpt-5-6-terra" # a second family, cheap output
if difficulty <= 7: return "claude-sonnet-5"
return "claude-opus-4-7"Comment construire la décision de routage par niveau : commencez par un petit classificateur (Haiku lui-même peut le faire avec 100 jetons d’entrée), puis routez. Mesurez la qualité des sorties avec des évaluations sur des données mises de côté. Ne laissez pas l’intuition décider : mesurez-la.
- Niveau 0 (Haiku 4.5) : classification, extraction, traduction, résumé d’une entrée <2K — quelques centimes par appel
- Niveau 1 (GPT-5.6 Terra) : résumés plus longs, complétion de code, utilisation simple d’outils — également quelques centimes, mais meilleur avec les longs contextes
- Niveau 2 (Sonnet 5) : raisonnement réel, agents en plusieurs étapes, tâches de vision — le modèle de production polyvalent
- Niveau 3 (Opus 4.7) : uniquement après avoir confirmé que Sonnet ne fournit pas une réponse correcte
3. Limites de sortie — limitez ce qu’ils génèrent, pas seulement ce qu’ils lisent
Les jetons de sortie coûtent généralement 4 à 5 fois plus cher que les jetons d’entrée. Une valeur par défaut max_tokens=4096 peu restrictive incite le modèle à s’étendre. Limitez-la fermement et utilisez des séquences d’arrêt pour couper au marqueur approprié :
# Two-layer caps: per-call max_tokens + per-key wallet cap
client.chat.completions.create(
model="claude-sonnet-5",
messages=[...],
max_tokens=800, # cap each call
stop=["</answer>"], # cut at terminator
)
# /app/keys → set "Spending limit" per key:
# Production: $50/day · Experiment: $5/day · CI: $1/dayAssociez la limite max_tokens par appel à un plafond de dépenses du portefeuille par clé dans /app/keys — une boucle incontrôlée ou un bug ne peut ainsi pas dépasser votre plafond quotidien. Deux couches, toutes deux importantes.
4. Parallélisme — pour les charges de travail structurées en lots
Si vous traitez 1 000 éléments indépendants (classification de commentaires, notation de prospects, génération de descriptions), les appels séquentiels prennent une heure. L’exécution asynchrone avec AsyncOpenAI et une limite de concurrence vous permet d’y parvenir en moins d’une minute — et des délais d’attente plus courts permettent d’échouer rapidement face aux services amont lents. Le parallélisme ne réduit pas le coût par jeton, mais il permet des architectures (traitement idempotent, budgets de nouvelles tentatives plus stricts) qui le font.
5. Hygiène des nouvelles tentatives — ne payez pas pour des tentatives incontrôlées
Un code naïf réessaie après chaque erreur, y compris les erreurs 400. Vous payez alors pour des échecs (les requêtes 4xx ne sont pas facturées sur Kunavo, mais consomment tout de même le budget de limitation de débit et le temps réel). Politique correcte : réessayer uniquement pour 408/429/5xx, avec un délai exponentiel et une temporisation aléatoire, au maximum 5 tentatives et 30 secondes d’attente totale. Pour tout le reste, échouez rapidement et exposez l’erreur.
À quoi ressemblent les économies en pratique
Économies réalistes mesurées sur un SaaS utilisant Kunavo et dépensant 5 000 $/mois :
- Ajout de la mise en cache des prompts : 2 000 $ économisés (−40 %)
- Routage vers Haiku pour la classification : 800 $ économisés (−16 %)
- Limite
max_tokensplus stricte : 400 $ économisés (−8 %) - Total : 3 200 $ économisés par mois, 1 800 $ dépensés (−64 % au total)
Ces économies se cumulent — chaque technique suivante s’applique à la base déjà réduite. Sans appliquer d’abord la mise en cache, les autres économies sont moindres. L’ordre compte : commencez par la n° 1, puis la n° 2, puis la n° 3.
Ce qui ne fonctionne pas comme annoncé
- « Des embeddings pour tout » — les embeddings permettent d’économiser sur la recherche textuelle, pas sur la génération. Ils sont peu coûteux, mais ne réduisent pas le coût des appels LLM
- « Des fine-tunings locaux pour réduire les coûts » — justifiables uniquement si vous traitez plus de 10M jetons/jour sur une tâche étroite. Pour la plupart des équipes, la mise en cache des prompts et le routage vers Haiku sont préférables à la complexité opérationnelle de l’auto-hébergement
- « Des agrégateurs moins chers » — Kunavo propose déjà la plupart des modèles à un tarif inférieur au tarif officiel du fournisseur. Les agrégateurs moins chers gagnent généralement en remplaçant discrètement le modèle demandé par un modèle moins cher
Étapes suivantes
Appliquez d’abord la mise en cache : c’est le meilleur ROI par heure investie. Instrumentez ensuite la ventilation de votre tableau de bord /app/usage par modèle et par niveau. Puis mettez en place le routage par niveau. Suivez le coût mensuel par utilisateur actif comme indicateur principal — s’il reste stable ou diminue tandis que l’engagement progresse, vous êtes sur la bonne voie.
Questions fréquentes
Dans quelle mesure la mise en cache des prompts peut-elle réduire une facture LLM ?
Anthropic facture les entrées mises en cache à 10% du tarif normal des entrées (2,5 % pour Claude Fable 5.1, 5 % pour Claude Opus 5.5), et OpenAI applique automatiquement l’équivalent à 10%. Pour une charge de travail comportant un prompt système volumineux et stable, cela représente 60 à 90 % d’économie sur le coût des entrées. Appliquez cette technique en premier : toutes les suivantes s’appuieront alors sur cette base réduite. Consultez l’analyse approfondie de la mise en cache des prompts pour connaître le format exact de la requête.
Dans quelle mesure Claude Haiku est-il moins cher que Claude Opus ?
Claude Haiku 4.5 coûte environ 10 % de Claude Opus 4.7, soit environ 10 fois moins cher. Pour la classification, l’extraction, la traduction et les résumés courts, Haiku suffit ; réservez Opus aux raisonnements dont vous avez confirmé que Claude Sonnet 5 les traite incorrectement. Les tarifs actuels par modèle figurent dans le guide de tarification de l’API Claude.
Les jetons de sortie sont-ils plus chers que les jetons d’entrée ?
Oui : les jetons de sortie coûtent généralement 4 à 5 fois plus cher que les jetons d’entrée. C’est pourquoi une valeur par défaut max_tokens=4096 peu restrictive est coûteuse : elle incite le modèle à s’étendre sur la ligne la plus chère de la facture. Limitez max_tokens pour chaque appel et utilisez des séquences d’arrêt pour couper au marqueur approprié.
Dans quelle mesure peut-on réellement réduire une facture LLM au total ?
En combinant trois des cinq techniques, on atteint de manière réaliste une réduction de 70 % sans perte de qualité, et les cinq techniques permettent de se rapprocher de 85 à 90 %. Pour une charge mesurée de 5 000 $/mois : la mise en cache des prompts a économisé 2 000 $ (−40 %), le routage vers Haiku pour la classification 800 $ (−16 %), et une limite max_tokens plus stricte 400 $ (−8 %) — soit 3 200 $ économisés, 1 800 $ dépensés et une réduction totale de 64 %.
Quelle est la politique correcte de nouvelle tentative pour les appels à l’API LLM ?
Réessayez uniquement les réponses 408, 429 et 5xx, avec un délai exponentiel et une temporisation aléatoire, plafonné à 5 tentatives et 30 secondes d’attente totale. Échouez rapidement pour tout le reste. Réessayer une erreur 400 ne réussit jamais — et même si les requêtes 4xx échouées ne sont pas facturées sur Kunavo, elles consomment tout de même le budget de limitation de débit et le temps réel.