IA pour débutantsGuide
Pourquoi une longue conversation IA coûte plus cher : l'API renvoie l'historique
Chaque nouveau message dans un chat IA renvoie tout l'historique, donc l'entrée croît à chaque tour. Découvrez le calcul et 3 façons de réduire le coût.

Sur cette page
- La réponse courte
- Un exemple concret avec des chiffres inventés
- Ce que cela coûte aux prix actuels
- Trois façons de réduire la facture
- 1. Démarrer une nouvelle conversation quand le sujet change
- 2. Tronquer l'historique
- 3. Remplacer les anciens tours par un résumé
- Voyez-le dans votre propre code
- Où exécuter les longues conversations
Les premiers messages d'une conversation coûtent peu. Le cinquantième message coûte nettement plus que le dixième, même si vous avez tapé la même quantité de texte. Rien n'est cassé : c'est ainsi que fonctionnent les API de chat.
La réponse courte#
Un modèle ne se souvient pas de vos requêtes précédentes. La documentation d'OpenAI le dit clairement : « chaque requête de génération de texte est indépendante et sans état », et pour une conversation multi-tours, vous incluez les messages précédents et la réponse précédente du modèle dans la requête suivante. L'API Messages d'Anthropic décrit le même schéma : des conversations multi-tours sans état, où les tours précédents sont transmis dans le paramètre messages.
Ainsi, la fenêtre de chat que vous voyez dans une application est une illusion construite par l'application. Derrière, chaque nouveau message est une requête fraîche qui transporte toute la conversation jusqu'ici. Vous payez des tokens d'entrée à chaque requête, et l'historique fait partie de cette entrée. Si vous découvrez ces termes, lisez d'abord Qu'est-ce qu'un token et Tokens d'entrée vs de sortie.
OpenAI précise explicitement la facturation pour ses chaînes de réponses : tous les tokens d'entrée précédents de la chaîne sont facturés comme tokens d'entrée. Le même principe s'applique à toute API où vous envoyez vous-même l'historique : ce que vous envoyez est ce qui est compté.
Un exemple concret avec des chiffres inventés#
Les chiffres ci-dessous sont un exemple pédagogique, pas une mesure. Supposez que chacun de vos messages fasse environ 200 tokens et chaque réponse environ 300 tokens. Un échange terminé ajoute 500 tokens à l'historique.
Faites défiler le tableau vers la droite →
| Tour | Historique précédent renvoyé | Nouveau message | Entrée de cette requête | Sortie |
|---|---|---|---|---|
| 1 | 0 | 200 | 200 | 300 |
| 5 | 500 × 4 = 2 000 | 200 | 2 200 | 300 |
| 10 | 500 × 9 = 4 500 | 200 | 4 700 | 300 |
| 20 | 500 × 19 = 9 500 | 200 | 9 700 | 300 |
La réponse garde la même longueur, mais l'entrée du tour 20 est presque cinquante fois celle du tour 1. La sortie ne croît pas ; l'entrée, si.
Maintenant le total pour une conversation de 20 tours. L'historique est renvoyé 0, 1, 2 ... 19 fois autant d'échanges, ce qui est une simple somme :
- Anciens échanges renvoyés : 500 × 190 = 95 000 tokens (190 est 0 + 1 + 2 + ... + 19).
- Nouveaux messages : 200 × 20 = 4 000 tokens.
- Total d'entrée pour la conversation : 95 000 + 4 000 = 99 000 tokens.
- Total de sortie : 300 × 20 = 6 000 tokens.
Si le modèle se souvenait de tout gratuitement, l'entrée ne serait que de 200 × 20 = 4 000 tokens. Le reste, c'est l'historique renvoyé. Doubler le nombre de tours ne double pas le coût de l'historique, il le quadruple environ, car la somme croît avec le carré du nombre de tours.
Ce que cela coûte aux prix actuels#
Voici la même conversation de 20 tours (99 000 en entrée, 6 000 en sortie) aux prix actuels. Le tableau est en direct et se met à jour quand les tarifs changent ; la dernière colonne est le prix de référence d'OpenRouter pour comparaison.
| Modèle | Entrée $/1M | Sortie $/1M | Coût | OpenRouter |
|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.0022 | $0.0045 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.0021 | $0.0056 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.0059 | $0.0369 |
99 000 tokens d'entrée et 6 000 tokens de sortie au total. Les prix par million de tokens sont actuels et évoluent avec nos tarifs ; la colonne OpenRouter indique des prix de référence pour la même charge de travail.
Pour une vérification rapide en texte : sur MiniMax-M2.7, toute cette conversation coûte $0.0059. Pour une conversation comme celle-ci, où l'entrée domine, le prix d'entrée compte le plus : sur MiniMax-M2.7, il est moins cher que le prix de référence d'OpenRouter. Par million de tokens, MiniMax-M2.7 est à $0.05 en entrée et $0.15 en sortie.
Trois façons de réduire la facture#
1. Démarrer une nouvelle conversation quand le sujet change#
L'historique le moins cher est un historique vide. Si vous avez fini de déboguer une fonction et que vous voulez maintenant une recette, une nouvelle conversation envoie 200 tokens au lieu de 9 700. Dans une application, c'est un bouton ; dans le code, c'est history = []. Faites-le dès que le contexte précédent n'aide plus à la question suivante.
2. Tronquer l'historique#
Ne gardez que les derniers messages et supprimez le reste. Supposez que vous gardiez les trois derniers échanges, de sorte que l'historique ne dépasse jamais 500 × 3 = 1 500 tokens :
- Les tours 1 à 3 croissent normalement : 0 + 500 + 1 000 = 1 500 tokens d'historique.
- Les tours 4 à 20 portent chacun les 1 500 plafonnés : 1 500 × 17 = 25 500 tokens.
- Total de l'historique : 1 500 + 25 500 = 27 000 tokens, plus 4 000 de nouveaux messages = 31 000 tokens d'entrée.
Cela fait 31 000 au lieu de 99 000 pour les mêmes 20 tours, et sur MiniMax-M2.7 cela revient à $0.0025. Le prix de la troncature est que le modèle oublie le début de la conversation ; gardez donc le prompt système et les faits qu'il ne doit pas perdre en dehors de la partie tronquée.
3. Remplacer les anciens tours par un résumé#
Quand l'historique devient long, demandez une fois au modèle de le résumer, puis continuez avec le résumé au lieu du texte complet. Dans l'exemple ci-dessus, neuf échanges font 4 500 tokens ; un résumé d'environ 300 tokens transporte l'essentiel. Vous payez une requête supplémentaire pour écrire le résumé, et chaque requête suivante est plus légère. Cela conserve plus de sens qu'une simple troncature, au prix d'un peu de détail.
La fenêtre de contexte est une limite distincte : elle plafonne le nombre de tokens qu'une requête peut contenir, réponse comprise. L'historique finira par atteindre ce plafond ; Pourquoi une réponse d'IA s'arrête-t-elle en pleine phrase ? l'explique.
Voyez-le dans votre propre code#
La réponse contient un objet usage, vous pouvez donc observer la croissance vous-même. Voici un exemple : remplacez la clé et prenez l'identifiant du modèle dans la documentation CheapTokens, car les identifiants diffèrent selon les fournisseurs.
from openai import OpenAI
client = OpenAI(base_url='https://api.cheaptokens.dev/v1', api_key='YOUR_KEY')
system = {'role': 'system', 'content': 'You are a helpful assistant.'}
history = []
KEEP = 7 # new message + last 3 exchanges (6 messages); None keeps everything
def ask(text):
history.append({'role': 'user', 'content': text})
r = client.chat.completions.create(
model='MODEL_ID_FROM_DOCS',
messages=[system] + (history[-KEEP:] if KEEP else history),
)
answer = r.choices[0].message.content
history.append({'role': 'assistant', 'content': answer})
print(r.usage.prompt_tokens, r.usage.completion_tokens)
return answerAppelez ask() plusieurs fois de suite et affichez prompt_tokens : avec KEEP = None, il grimpe à chaque tour, avec KEEP = 7, il se stabilise. Pour les agents qui enchaînent de nombreuses étapes, le même effet s'applique à chaque étape ; Comment estimer le coût d'un agent IA montre comment le budgéter.
Où exécuter les longues conversations#
Les longs dialogues et les boucles d'agents sont exactement les charges où le volume d'entrée domine, donc une grande fenêtre de contexte et de la place pour de longues réponses comptent toutes les deux :
- MiniMax-M2.7 : contexte de 180K, jusqu'à 8 192 tokens par réponse, entrée et sortie moins chères que le prix de référence d'OpenRouter.
- DeepSeek-V4-Flash : contexte de 380K, jusqu'à 32 768 tokens par réponse, sortie moins chère que le prix de référence d'OpenRouter.
CheapTokens dispose d'un solde unique pour tous les modèles, d'un prix fixe par modèle sans heures de pointe, et d'une API compatible avec OpenAI Chat Completions et Anthropic Messages, donc le code ci-dessus fonctionne en changeant l'URL de base. Rechargez le solde et envoyez votre première requête en suivant Votre première requête API avec CheapTokens.



