Session systèmes 1/4 · Exercices

Tokenizers et budgets de tokens

Atelier A — Le même texte, deux tokenizers

Durée : 20 minutes · Format : en binôme, un poste chacun · Données sensibles : aucune

Tokenisez chaque élément du jeu de textes préparé avec deux tokenizers de familles de modèles différentes. Notez le compte de tokens dans chaque cellule, puis calculez le rapport entre les deux tokenizers ainsi que le rapport entre l’anglais et le français. Inscrivez l’identifiant du tokenizer en tête de chaque colonne : un compte sans identifiant n’est pas un résultat.

Échantillon de texteCompte tokenizer ACompte tokenizer B
Paragraphe en anglais (environ 100 mots)
Sa traduction française, même sens
Un extrait Python de 15 lignes
Une ligne de 10 emoji
Un schéma d’outil JSON, mis en forme
Corrigé détaillé

Le paragraphe anglais se situe autour de 120 à 140 tokens pour une centaine de mots : le compte dépasse donc le nombre de mots même dans le meilleur des cas. Sa traduction française coûte sensiblement plus avec le même tokenizer, couramment 15 à 30 pour cent, parce que les séquences accentuées et moins fréquentes se découpent en davantage de morceaux. L’extrait Python est dominé par l’indentation, la ponctuation et les fragments d’identifiants, il coûte donc bien plus par caractère visible que de la prose. Chaque emoji consomme typiquement plusieurs tokens parce qu’il repose sur un repli au niveau des octets, et les séquences de teinte de peau ou de drapeau coûtent encore davantage. Entre les deux tokenizers, les totaux diffèrent d’environ 10 à 25 pour cent sur les mêmes lignes, et c’est tout l’objet de l’atelier : le nombre appartient au tokenizer, pas au texte.

Atelier B — Budgétiser une requête complète

Durée : 25 minutes · Format : en binôme, une fiche par binôme · Données sensibles : aucune

Construisez le budget de tokens complet d’une requête d’assistant réaliste face à une fenêtre de contexte annoncée, puis décidez quoi couper lorsque cela ne tient pas.

  1. Assemblez une requête réaliste : une invite système, six tours d’historique de conversation, deux schémas d’outils, trois passages récupérés et une question utilisateur.
  2. Mesurez chaque composant séparément avec le vrai tokenizer, en prenant le chat template entièrement rendu et non le texte brut.
  3. Ajoutez une réserve de sortie dimensionnée pour la réponse que vous attendez réellement, puis faites le total.
  4. Comparez le total à une fenêtre de contexte déclarée, par exemple 8 000 tokens, et notez le dépassement ou la marge disponible.
  5. En cas de dépassement, rédigez une politique explicite précisant ce qui est supprimé, ce qui est résumé et dans quel sens la troncature s’applique, puis mesurez à nouveau.
Corrigé détaillé

La requête rendue est systématiquement plus volumineuse que la somme des parties visibles, parce que le chat template ajoute des marqueurs de rôle et des tokens spéciaux à chaque tour. Dans une construction typique, les deux schémas d’outils représentent à eux seuls 400 à 900 tokens et les trois passages récupérés 900 à 2 000, si bien que la question utilisateur est en général la plus petite ligne de la fiche. Avec une réserve de sortie de 1 000 tokens, la plupart des binômes dépassent une fenêtre de 8 000 tokens dès leur premier essai. Les politiques praticables consistent à conserver l’invite système intacte, à résumer les tours d’historique les plus anciens et à supprimer les passages récupérés en partant du moins bien classé, sans jamais tronquer un schéma d’outil au milieu d’un objet, ce qui casserait l’analyse syntaxique. Après nouvelle mesure, le total doit passer sous la fenêtre avec une marge visible, et le binôme doit pouvoir nommer précisément le contenu sacrifié.

Atelier C — Épingler le trio et le casser volontairement

Durée : 10 minutes · Format : démonstration menée par le formateur, les participants suivent · Données sensibles : aucune

Chargez un tokenizer épinglé à une révision de modèle explicite, tokenisez une courte invite avec son chat template, puis substituez délibérément un tokenizer d’une autre famille et observez ce qui change.

  1. Chargez le tokenizer en épinglant un identifiant de révision exact plutôt qu’une étiquette mouvante comme la branche par défaut.
  2. Rendez une conversation de deux tours à travers le chat template et affichez les identifiants de tokens obtenus avec les morceaux décodés.
  3. Repérez les tokens spéciaux dans la sortie et notez leur position par rapport au contenu des messages.
  4. Substituez un tokenizer d’une autre famille de modèles, rendez à nouveau la même conversation et comparez identifiants, comptes et placement des tokens spéciaux.
  5. Notez les trois champs qui doivent figurer dans votre configuration : révision du modèle, révision du tokenizer, version du chat template.
Corrigé détaillé

Le chargement épinglé produit une suite d’identifiants stable, reproductible à l’identique demain, ce qui est toute la raison d’être de l’épinglage. Les morceaux décodés montrent les espaces initiales rattachées aux mots et les tokens spéciaux encadrant chaque segment de rôle : la charge rendue est donc visiblement plus longue que le texte brut des messages. Après la substitution, la suite d’identifiants est entièrement différente, le compte de tokens bouge de façon notable, et les tokens spéciaux sont soit renommés, soit déplacés, soit absents. Rien ne déclenche d’erreur : la chaîne mal appariée s’exécute et renvoie du texte, ce qui explique précisément pourquoi cette panne survit jusqu’en production. À retenir : révision du modèle, révision du tokenizer et version du chat template forment une unité atomique et doivent être versionnées ensemble.

Ouvrir l’outil interactif — tokenizer