Optimiser uniquement le prix par token peut dégrader la qualité et augmenter les retries. Commencez par mesurer le coût par fonctionnalité et par résultat réussi : tokens d’entrée, sortie, cache, outils, embeddings, reranking et évaluations.
Réduire le contexte utilement
Supprimez historique redondant, logs et documents non pertinents. Résumez les échanges anciens avec provenance et injectez seulement les meilleurs fragments RAG. Une longue instruction système répétée à chaque appel coûte autant qu’un contenu utilisateur. Mesurez toutefois les erreurs créées par une compression trop agressive.
Router vers le bon modèle
Utilisez un modèle plus petit pour classification, extraction simple ou reformulation, et réservez un modèle plus capable aux cas complexes. Le routeur doit être évalué : une mauvaise décision peut entraîner un second appel plus coûteux. Fixez longueur maximale de sortie et arrêtez les générations inutiles.
Cache et batch
Profitez du cache de prompts lorsque le fournisseur le propose et que les préfixes sont réellement identiques. Mettez en cache les résultats déterministes avec une clé incluant modèle, version de prompt et données. Pour les tâches non interactives, le batching peut réduire le tarif ou améliorer l’utilisation.
Garde-fous
Définissez budgets par utilisateur et parcours, alertes sur tokens et nombre d’étapes, et limites de retries. Comparez chaque optimisation sur un dataset qualité/coût/latence. Vérifiez les prix actuels sur les pages officielles : tarifs et règles de cache évoluent.
FAQ
Un modèle moins cher réduit-il toujours la facture ?
Non s’il génère davantage, échoue ou nécessite une escalade.
Le RAG économise-t-il des tokens ?
Il peut remplacer un grand contexte statique, mais retrieval et reranking ont aussi un coût.
Quelle métrique suivre ?
Le coût par tâche acceptée, complété par coût par utilisateur et percentile de latence.
Mesurer le coût par fonctionnalité
~~~python PRICES = { "model-small": {"input": 0.20, "output": 0.80}, }
def estimate_cost(model, input_tokens, output_tokens): price = PRICES[model] return ( input_tokens * price["input"] + output_tokens * price["output"] ) / 1_000_000
cost = estimate_cost("model-small", usage.input_tokens, usage.output_tokens) metrics.observe("llm_cost_usd", cost, tags={"feature": "ticket_summary"}) ~~~
Importez les tarifs depuis une source maintenue et versionnez la date du barème. Fixez un plafond de tokens de sortie, réduisez le contexte avant l’appel et routez les tâches simples vers un petit modèle. Mettez en cache uniquement les réponses non personnelles dont la clé inclut modèle, version du prompt et entrées normalisées. Alertez sur coût par requête et par client, pas seulement sur la facture mensuelle.