Tokens : l'unité que le modèle voit réellement
Fais le test toi-même
Colle le mot « anticonstitutionnellement » dans le Tokenizer d'OpenAI (platform.openai.com/tokenizer). Résultat : un seul mot français, mais 5 à 7 tokens selon le modèle. Colle ensuite « the » : 1 token. Cette expérience de trente secondes explique une bonne partie des factures d'API, des limites de contexte et des bugs bizarres que tu rencontreras. Avant d'être traité, ton texte est découpé en tokens, et le modèle ne voit que ça.
Un token est un fragment de texte fréquent : parfois un mot entier, souvent un morceau. En anglais, un token vaut à peu près quatre caractères, soit environ trois quarts d'un mot. Le mot « prompting » peut se découper en prompt + ing. Un espace fait généralement partie du token qui suit.
Le français est un peu plus gourmand que l'anglais : accents, élisions et mots plus longs font qu'un même contenu coûte souvent 15 à 30 % de tokens en plus. Ce n'est pas une punition, juste une conséquence du fait que la plupart des tokenizers ont été optimisés d'abord sur de l'anglais.
Pourquoi tu dois t'en soucier
Trois raisons très concrètes :
- La facturation. Les API se paient au million de tokens, en entrée comme en sortie, et la sortie coûte plus cher. Ordres de grandeur début 2026 : Claude Sonnet 4.5 autour de 3 $ le million de tokens en entrée et 15 $ en sortie ; Claude Haiku 4.5 autour de 1 $ et 5 $ ; les tarifs GPT-5.1 jouent dans la même cour. Un prompt de 500 mots répété 10 000 fois par jour, ça se chiffre vite, et c'est pour ça qu'on ne met pas dix exemples few-shot quand deux suffisent.
- La limite de contexte. Tout ce que le modèle peut « voir » à un instant donné se mesure en tokens. On y consacre la leçon suivante.
- Certains bugs bizarres. Le fameux « combien de r dans strawberry ? » qui a fait rire Internet en 2024 vient de là : le modèle raisonne sur des tokens, pas sur des lettres. « strawberry » n'est qu'un ou deux tokens pour lui, il ne « voit » pas les lettres une par une. Les modèles récents compensent mieux (souvent en comptant explicitement), mais toute tâche lettre à lettre, acrostiche ou comptage de caractères reste un terrain glissant.
Petit bonus pour les gros volumes : les principaux fournisseurs facturent moins cher les tokens d'entrée déjà envoyés récemment (le « prompt caching »). Si tu répètes un long prompt système à chaque appel, ce mécanisme réduit la note. Sache que ça existe, tu l'utiliseras le jour où tu passeras à l'API en production.
Deux conséquences qu'on oublie toujours
La limite de sortie. À l'API, chaque appel fixe un plafond de tokens de réponse (max_tokens). Si la réponse l'atteint, elle est coupée net, en plein milieu d'une phrase ou, plus vicieux, en plein milieu d'un JSON. Le symptôme classique : ton code plante au parsing sur un objet qui se termine brutalement par "budget": 25. Ce n'est pas le modèle qui a « bugué », c'est ton plafond qui était trop bas. Le réflexe : vérifier la raison de fin renvoyée par l'API (finish_reason: "length" chez OpenAI, stop_reason: "max_tokens" chez Anthropic) avant d'accuser le prompt. Dans les chatbots, le bouton « continuer » qui apparaît parfois, c'est exactement ça.
L'asymétrie entrée/sortie. La sortie coûte typiquement cinq fois plus cher que l'entrée. Demander de la concision n'est donc pas qu'une question de style : « réponds en trois puces maximum » sur un traitement en volume divise la facture de sortie par cinq ou dix par rapport au paragraphe verbeux que le modèle produit par défaut. À l'inverse, la verbosité par défaut des modèles a une explication économique cynique que je te laisse deviner. Contrôle la longueur de sortie comme tu contrôles le format : explicitement.
Le voir de tes yeux, en code
Si tu codes, la bibliothèque tiktoken d'OpenAI fait le découpage en Python :
import tiktoken
enc = tiktoken.get_encoding("o200k_base")
texte = "Le prompt engineering, c'est concevoir le contexte."
tokens = enc.encode(texte)
print(len(tokens), "tokens")
print(tokens[:8])o200k_base est l'encodage des modèles OpenAI récents. Chaque famille de modèles a son tokenizer : le même texte ne donne pas exactement le même nombre de tokens chez OpenAI, Anthropic ou Mistral. Les écarts restent modestes, mais si tu calcules des coûts au centime près, utilise le compteur du fournisseur concerné.
Des ordres de grandeur à garder en tête
Pour estimer sans outil : compte environ 750 mots pour 1 000 tokens en anglais, plutôt 550 à 650 mots en français. Une page A4 dense tourne autour de 600 à 800 tokens. Un contrat de 30 pages, environ 20 000 tokens. Un roman de 300 pages, autour de 150 000. Ces repères suffisent pour juger si un document tiendra dans une fenêtre de contexte, et combien coûtera son traitement.
À toi
Estime de tête : combien coûte le résumé d'un rapport de 100 pages (une fois) avec un modèle à 3 $ le million de tokens en entrée ?
Correction : 100 pages ≈ 70 000 tokens d'entrée, soit 0,07 × 3 $ ≈ 0,21 $ pour l'entrée, plus quelques centimes de sortie. Moralité : un appel isolé ne coûte presque rien, c'est la répétition à grande échelle qui se budgète.
À retenir : le token est l'unité de compte du modèle. Tes coûts, tes limites et certaines erreurs surprenantes s'expliquent au niveau du token.