Aller au contenu principal

Tokenisation : comprendre comment le modèle voit votre prompt

Mis à jour le 28 juillet 2026

Tokenisation : comprendre comment le modèle voit votre prompt

Le modèle ne lit pas du texte : il traite des tokens. La distinction n’a rien d’académique, puisqu’elle détermine ce que vous payez, ce qui tient dans votre fenêtre de contexte et, parfois, pourquoi le modèle bute sur un mot que vous jugiez trivial. Comprendre la tokenisation vous donne trois prises concrètes sur votre application : l’optimisation de vos prompts, la maîtrise de vos coûts et l’explication de comportements qui paraissent inexplicables tant qu’on raisonne en mots.

Qu’est-ce qu’un token ?

Un token est l’unité de base que le modèle manipule. Ce n’est ni un mot, ni un caractère, mais un fragment de texte produit par un algorithme d’encodage, le BPE (Byte Pair Encoding), qui fusionne itérativement les séquences de caractères les plus fréquentes du corpus. En moyenne, un token représente environ 4 caractères en anglais, mais ce ratio varie fortement selon la langue. Le script ci-dessous vous le fait constater sur une phrase anglaise et son équivalent français, et surtout affiche le découpage réel : voir le tokeniseur couper « aujourd’hui » vaut toutes les explications théoriques.

import tiktoken

# Encodage o200k, utilisé par les modèles GPT récents
enc = tiktoken.get_encoding("o200k_base")

texte_en = "Hello, how are you today?"
texte_fr = "Bonjour, comment allez-vous aujourd'hui ?"

tokens_en = enc.encode(texte_en)
tokens_fr = enc.encode(texte_fr)

print(f"Anglais : {len(tokens_en)} tokens pour {len(texte_en)} caractères")
print(f"Français : {len(tokens_fr)} tokens pour {len(texte_fr)} caractères")

# Visualiser le découpage
for t in tokens_fr:
    print(f"  Token {t}: '{enc.decode([t])}'")

L’impact de la langue sur le coût

Le français consomme en moyenne 20 à 30 % de tokens de plus que l’anglais pour exprimer la même idée, parce qu’il est moins représenté dans le corpus d’entraînement du tokeniseur et que ses mots s’y trouvent donc plus souvent découpés. La première conséquence est financière : vous payez au token d’entrée et de sortie, et une base de connaissances francophone coûte mécaniquement plus cher que sa traduction anglaise, à contenu identique. La deuxième touche la fenêtre de contexte, qui se remplit plus vite avec des documents français — un historique de conversation qui tenait sur trente échanges n’en tiendra plus que vingt-quatre. La troisième est la latence : chaque token de sortie étant généré séquentiellement, une réponse française met plus de temps à s’afficher qu’une réponse anglaise de contenu équivalent.

~4
Caractères par token (EN)
~3
Caractères par token (FR)
2,50 $
Input GPT-5.6 Terra (par MTok)
200K
Encodage BPE o200k

Trois pièges qui coûtent cher

Les mots rares et les néologismes ouvrent la série. Peu fréquents dans le corpus d’entraînement, ils sont éclatés en sous-tokens, ce qui peut dégrader la compréhension du modèle. La remarque vaut aussi, et surtout, pour vos références produit internes et vos noms de code maison, que le tokeniseur n’a jamais rencontrés :

# "Anticonstitutionnellement" sera découpé en plusieurs tokens
tokens = enc.encode("Anticonstitutionnellement")
print(f"{len(tokens)} tokens")
for t in tokens:
    print(f"  '{enc.decode([t])}'")

Le JSON et le code structuré réservent une surprise du même ordre. Accolades, crochets et guillemets consomment chacun un token, si bien qu’un JSON indenté revient sensiblement plus cher que sa version minifiée. Sur un prompt few-shot qui embarque plusieurs exemples de payloads, l’écart n’est pas payé une fois : il est payé à chaque appel, toute la journée.

json_verbose = '''{
    "nom": "Dupont",
    "prenom": "Jean",
    "age": 42
}'''

json_compact = '{"nom":"Dupont","prenom":"Jean","age":42}'

print(f"Verbose : {len(enc.encode(json_verbose))} tokens")
print(f"Compact : {len(enc.encode(json_compact))} tokens")

Le piège le plus discret reste le formatage lui-même : les espaces en début de ligne, les lignes vides et l’indentation comptent aussi. Un system prompt soigneusement aligné pour la lisibilité de l’équipe coûte davantage, à contenu strictement identique, qu’un prompt compact. Ce n’est pas une raison pour écrire illisible, c’est une raison pour faire l’arbitrage en connaissance de cause.

Optimiser vos prompts

La règle d’or est de mesurer avant d’optimiser : tiktoken vous donne le compte exact, alors que l’intuition se trompe régulièrement d’un facteur deux. Une fois la mesure faite, préférez les instructions concises — « Réponds en JSON » dit rigoureusement ce que dit « Je voudrais que tu me répondes en utilisant le format JSON », pour trois fois moins de tokens. Dans les blocs de contexte, les abréviations passent très bien : le modèle interprète « Q: » et « R: » aussi sûrement que « Question : » et « Réponse : ». Enfin, compressez le contexte métier en résumant les documents longs en amont, plutôt que de recopier dix pages de documentation à chaque requête pour n’en exploiter qu’un paragraphe.

Calcul de coût

def estimer_cout(prompt: str, reponse_estimee: int = 500,
                 model: str = "gpt-5.6-terra") -> dict:
    """Estime le coût d'un appel API."""
    enc = tiktoken.get_encoding("o200k_base")
    tokens_in = len(enc.encode(prompt))

    # Prix GPT-5.6 Terra, juillet 2026 (vérifier la grille actuelle)
    prix_input = 2.50 / 1_000_000   # par token
    prix_output = 15.00 / 1_000_000  # par token

    cout = (tokens_in * prix_input) + (reponse_estimee * prix_output)

    return {
        "tokens_input": tokens_in,
        "tokens_output_estime": reponse_estimee,
        "cout_estime_usd": round(cout, 6)
    }

Cette fonction devient vite un utilitaire de projet : branchée sur vos prompts avant un déploiement, elle vous dit ce que coûtera une journée de trafic pendant qu’il est encore temps d’agir. Prolongez-la par un exercice qui se révèle plus instructif qu’il n’en a l’air. Installez tiktoken (pip install tiktoken), tokenisez votre system prompt le plus complexe, repérez les segments les plus coûteux — ce sont presque toujours les exemples few-shot et les blocs JSON — puis réécrivez-le en visant 20 % de tokens en moins sans perdre une seule information. Vous découvrirez au passage combien de phrases de votre prompt ne servaient qu’à vous rassurer.

Tarifs relevés le 5 août 2026 — les prix évoluent régulièrement : avant tout calcul de budget, vérifiez la grille en vigueur sur la tarification officielle OpenAI.

Points clés à retenir

  • Un token n’est pas un mot : c’est un fragment issu du BPE
  • Le français coûte 20-30 % de tokens en plus que l’anglais
  • Mesurez systématiquement vos prompts avec tiktoken
  • Optimisez le JSON et le formatage pour réduire les coûts
  • La fenêtre de contexte se mesure en tokens, pas en mots