Darkwood Blog Blog
  • Articles
  • Veille
  • Releases
  • CrĂ©ateurs
fr
  • de
  • en
Connexion
  • Blog
  • Articles
  • Veille
  • Releases
  • CrĂ©ateurs

🌐 Nolife Langage - Ne parlez pas de coĂ»t, mais d'investissement.

le 6 septembre 2026

Connectez-vous pour réagir à cet article

🚀 1

🌐 Nolife Langage - Ne parlez pas de coĂ»t. Parlez d'investissement.

Le chiffre ne change pas. C’est le contexte qui change.

CoĂ»t donne l’impression d’une perte. Investissement donne l’impression d’une action que vous alliez de toute façon entreprendre, avec un retour sur investissement Ă  la clĂ©. Basique donne l’impression d’une option de second ordre. Indispensable donne l’impression de ce dont vous avez besoin. Standard est gĂ©nĂ©rique. PersonnalisĂ© a Ă©tĂ© conçu spĂ©cialement pour vous.

J’ai entendu cet argumentaire dans une vidĂ©o de vente :

Ne dites pas « 1 000 $ », dites « 999 $ », ça semble moins cher. Ne dites pas « achetez maintenant », dites « il n’en reste plus que trois ». Ne dites jamais le mot « basique », dites « essentiel ». Ne dites jamais « standard », dites toujours « sur mesure ». Le mot « peu », ne le dites pas, dites toujours « en quantitĂ© limitĂ©e ». Et n’utilisez jamais le mot « coĂ»t », dites toujours « investissement ».

Les mots ont leur importance quand on essaie d’inciter les gens Ă  acheter. Je voulais savoir ce qui se passe lorsque le lecteur n’est pas seulement un ĂȘtre humain, mais aussi un tokeniseur.

La premiĂšre surprise est venue de l’allemand. Sur ce corpus, avec l’encodage o200k_base, le mot maßgeschneidert, plus percutant sur le plan commercial, a pris cinq tokens. Standard n’en a pris qu’un. Soit +400 %. Unverzichtbar pour Basis est passĂ© de 1 Ă  4. Le discours commercial s’est amplifiĂ©. Le compteur de tokens a Ă©voluĂ© dans le sens inverse.

 signification
 |
 |
coût en tokens ----+---- persuasion

Il s’agit lĂ  de trois axes diffĂ©rents. Une expression peut gagner sur l’un et perdre sur un autre. Cet article est la petite expĂ©rience de Darkwood qui a tentĂ© de les garder sĂ©parĂ©s.

Les mots ont déjà un prix

Les six substitutions en anglais ne constituent pas un jeu de cartes. Elles forment un laboratoire : suffisamment petit pour ĂȘtre tokenisĂ©, suffisamment intĂ©ressant sur le plan sĂ©mantique pour faire l’objet d’un dĂ©bat.

Original Remplacement cadre (prétendu)
1 000 $ 999 $ semble moins cher
acheter maintenant il n’en reste que trois raretĂ©
de base essentiel nécessaire, sans perte de valeur
standard personnalisĂ© conçu pour l’acheteur
peu limité rareté
coût investissement rendement attendu, pas une perte

Je n’ai pas effectuĂ© de test A/B sur le taux de conversion. Je ne prĂ©tends pas que la question psychologique soit tranchĂ©e. Je prĂ©tends simplement que ces substitutions mĂ©ritent d’ĂȘtre prises en compte.

En anglais, « coĂ»t » → « investissement » est l’exemple le plus clair : mĂȘme idĂ©e, cadre diffĂ©rent. Sur « o200k_base », cela n’a pas non plus d’incidence pour le tokeniseur. Les deux versions ont Ă©tĂ© mesurĂ©es Ă  1 token. Le nombre n’a pas bougĂ©. Le message a tout de mĂȘme changĂ©.

« $1 000 » → « $999 » a eu un double effet : un prix plus attractif et moins de tokens (4 → 2). La raretĂ© a pris le sens inverse. « Acheter maintenant » correspond Ă  2 tokens ; « Plus que trois en stock » en compte 3.

C’est dĂ©jĂ  le triangle. Le sens peut rester proche. La persuasion peut s’intensifier. Les tokens peuvent augmenter, diminuer ou rester inchangĂ©s.

Ensuite, le modĂšle attribue un autre prix aux mots

Les API et les fenĂȘtres de contexte ne facturent pas au mot. Elles facturent en tokens : des fragments de texte obtenus aprĂšs qu’un tokeniseur a dĂ©coupĂ© la chaĂźne de caractĂšres. Un tokeniseur n’est pas un dictionnaire. C’est une compression de sĂ©quences d’octets qu’il a souvent rencontrĂ©es. L’anglais est surreprĂ©sentĂ© dans cet historique. D’autres langues, et mĂȘme d’autres orthographes anglaises de la mĂȘme notion, peuvent se retrouver en un plus grand nombre de fragments.

C’est l’article de Damian Zygmuntowicz sur le coĂ»t cachĂ© des tokens selon les langues — avec le mot polonais przedsiębiorstwo comme exemple provocateur — qui m’a poussĂ© Ă  me pencher sur la question. Je n’ai pas reproduit les comptages en polonais. Darkwood est disponible en anglais, en français et en allemand. Ce sont ces langues que j’ai mesurĂ©es.

L’unitĂ© de mesure a son importance. Les caractĂšres ne sont pas des tokens. Les mots ne sont pas des tokens. Les tokens d’entrĂ©e ne sont pas les tokens de sortie. Les accĂšs au cache ne sont pas des factures. Une heuristique « octets / 4 » est une estimation, pas une mesure. J’ai exĂ©cutĂ© localement le BPE d’OpenAI avec « yethee/tiktoken » :

  • Principal : o200k_base (famille GPT-4o)
  • Secondaire : cl100k_base (famille GPT-4 / 3.5-turbo)

Ce ne sont ni des jetons Claude, ni des jetons Gemini, ni des « jetons LLM universels ». L’encodage fait partie du rĂ©sultat.

Trois langues, une seule idée

J’ai rĂ©digĂ© deux courts passages parallĂšles — une annonce d’atelier et une ligne de prix — en anglais, en français et en allemand. MĂȘme sens, intentionnellement. Petit corpus : version 1.0.2, hachage 7510f01cf7c3
. Il ne s’agit pas d’une Ă©tude statistique du « français » ou de l’« allemand ». Un laboratoire dĂ©terministe.

Puis j’ai comptĂ©.

Sur ce corpus avec o200k_base, la version anglaise utilisait 46 tokens, la version française 58 (+26,09 % par rapport à l’anglais), et la version allemande 63 (+36,96 % par rapport à l’anglais).

Langue Mots Caractùres Tokens (o200k_base) Tokens / mot par rapport à l’anglais
Anglais 41 240 46 1,12 référence
Français 46 273 58 1,26 +26,09 %
Allemand 41 298 63 1,54 +36,96 %

Ces pourcentages s’appliquent Ă  ce corpus et Ă  ce tokeniseur. Ils ne constituent pas une pĂ©nalisation du français ou de l’allemand.

L’allemand a utilisĂ© le mĂȘme nombre de mots que l’anglais, mais davantage de caractĂšres. Il a Ă©galement utilisĂ© plus de tokens par mot. L’heuristique « octets / 4 » a donnĂ© des estimations de 60 / 71 / 76 et a surestimĂ© toutes les langues. Elle a toutefois masquĂ© l’ampleur de l’écart dans le classement.

J’ai mĂȘme essayĂ© de rendre l’allemand plus naturel. Le remplacement du calque aufgezeichnete FĂŒhrung par gefilmten Rundgang a rĂ©duit le nombre de caractĂšres de 301 Ă  298 et a augmentĂ© le nombre de tokens o200k_base de 62 Ă  63. Moins de caractĂšres. Un token de plus. La longueur du texte n’est pas le problĂšme.

Cela dépend du tokeniseur

MĂȘmes textes, deuxiĂšme encodage.

Langue o200k_base vs EN cl100k_base vs EN
Anglais 46 référence 46 référence
Français 58 +26,09 % 71 +54,35 %
Allemand 63 +36,96 % 73 +58,70 %

L'anglais est restĂ© Ă  46. Le français a bondi de +26,09 % Ă  +54,35 %. L'allemand est passĂ© de +36,96 % Ă  +58,70 %. L'encodage prĂ©cĂ©dent Ă©tait plus sĂ©vĂšre pour le français et l'allemand. La prime linguistique n'est pas une propriĂ©tĂ© du français. C'est une propriĂ©tĂ© de ce corpus × cet encodage.

C’est lĂ  tout l’intĂ©rĂȘt d’utiliser deux tokeniseurs. Si je n’avais publiĂ© que o200k_base, j’aurais sous-estimĂ© Ă  quel point un mĂȘme texte en français peut paraĂźtre « coĂ»teux » sous cl100k_base.

Maintenant, modifions les mots

J’ai pris les six Ă©changes commerciaux, rĂ©digĂ© leurs Ă©quivalents idiomatiques en français et en allemand, puis j’ai Ă©tiquetĂ© deux intentions :

  • persuasion — modifier le cadre de rĂ©fĂ©rence de l’acheteur (peut coĂ»ter plus de tokens)
  • token_opt — exprimer une idĂ©e similaire avec moins de tokens (ce qui peut affaiblir le cadre)

Ne choisissez jamais en silence la formulation la moins coûteuse en la qualifiant de meilleure. La « persuasion » est ici identifiée, et non mesurée. Les lignes « token_opt » sont des hypothÚses de laboratoire. Les phrases FR/DE sont des ébauches, et non une étude de traduction.

Quelques lignes sur o200k_base :

Lang Intention Original Remplacement Avant AprĂšs
en persuasion 1 000 $ 999 $ 4 2
en persuasion coût investissement 1 1
en persuasion achetez maintenant il n'en reste plus que trois 2 3
en persuasion standard personnalisé 1 2
de persuasion Standard sur mesure 1 5
de persuasion Basis indispensable 1 4
de token_opt sur mesure adapté 5 2
en token_opt plus que trois en stock 3 restants 3 2
fr persuasion achetez maintenant plus que trois en stock 3 5

Les quatre sommets du triangle, pour cette série :

  • Ton commercial plus fort, plus de tokens : « standard » → « sur mesure » ; en allemand « maßgeschneidert » (+400 %).
  • MĂȘmes tokens, cadre diffĂ©rent : en anglais « cost » → « investment » (1 → 1).
  • Discours commercial moins percutant, moins de tokens : maßgeschneidert → passend (5 → 2).
  • Tarification incitative qui rĂ©duit Ă©galement le BPE : $1 000 → $999 (4 → 2).

La raretĂ© coĂ»te souvent des tokens. En français, achetez maintenant → plus que trois en stock est passĂ© de 3 Ă  5. Puis token_opt l’a condensĂ© en 3 restants (5 → 3). Des tokens moins coĂ»teux. Un ton de vente moins agressif. Ces deux mesures sont rĂ©elles. Une seule d’entre elles est « meilleure », et cela dĂ©pend de l’axe qui vous intĂ©resse.

Les lignes rouges sont les plus intéressantes

Neuf des vingt-sept paires de lignes utilisaient plus de tokens aprÚs la réécriture. Les neuf relÚvent de la persuasion. Aucune ne relÚve de token_opt.

C'est en allemand que cela devient frappant :

Original Remplacement Avant AprĂšs Delta
Base unverzichtbar 1 4 +3
Standard maßgeschneidert 1 5 +4
Coûts Investition 1 2 +1
peu begrenzt 2 3 +1
acheter maintenant plus que trois disponibles 3 4 +1

Ce n’est pas un benchmark ratĂ©. L’optimisation de la persuasion n’est pas l’optimisation des tokens. Un mot plus percutant sur le plan commercial peut ĂȘtre incompatible avec le tokeniseur. Si j’avais Ă©cartĂ© les lignes rouges, j’aurais publiĂ© un conte de fĂ©es sur une formulation qui permet toujours de faire des Ă©conomies.

ConsidĂ©rĂ© comme un bloc, le niveau de persuasion sur ce corpus est passĂ© de 36 Ă  45 tokens (−25 % « Ă©conomisĂ©s », c’est-Ă -dire que cela coĂ»te plus cher). La persuasion en allemand seule : 12 → 20 (−66,67 %). La persuasion en anglais n’a pas eu d’impact (10 → 10). token_opt a ensuite rĂ©cupĂ©rĂ© des tokens, y compris en allemand (+45,45 % globalement). Plusieurs lignes de token_opt rendent moins coĂ»teuse la mĂȘme idĂ©e que la ligne de persuasion venait de rendre plus coĂ»teuse. C’est le groupe tĂ©moin : mĂȘmes idĂ©es, intention opposĂ©e.

62 → 62

Si je regroupe toutes les paires en un seul total, j’obtiens ceci :

Jetons avant Jetons aprùs Économie
persuasion, tout 36 45 −9
token_opt, tout 26 17 +9
mixte, tout 62 62 0

Soixante-deux entrĂ©s. Soixante-deux sortis. On dirait que la formulation n’a eu aucun effet.

Ce n’est pas le cas. Les substitutions individuelles ont Ă©voluĂ© dans les deux sens. L’agrĂ©gat « mixte » les a annulĂ©es. Le « mixte » en allemand reste Ă  −13,04 % (23 → 26). Le « mixte » en anglais « Ă©conomise » toujours 2 tokens. Le zĂ©ro toutes langues correspond Ă  la persuasion −9 plus token_opt +9.

C’est un avertissement contre les rĂ©sumĂ©s de rĂ©fĂ©rence. Un agrĂ©gat peut effacer le phĂ©nomĂšne que vous essayez de comprendre. J’ai failli publier « 62 → 62 » comme titre. Cela aurait Ă©tĂ© malhonnĂȘte.

Quel est le coût financier ?

J’ai estimĂ© le coĂ»t des paires de jetons — et non des passages — pour un million de requĂȘtes, en utilisant un instantanĂ© obsolĂšte de gpt-4o-mini (2 aoĂ»t 2026) : 0,15 $ / 0,60 $ par million de jetons d’entrĂ©e / de sortie. Il s’agit d’une estimation, pas d’une facture. Ce corpus est minuscule. Une requĂȘte ne coĂ»te qu’une fraction de centime. Je ne vais pas prĂ©tendre le contraire.

Pour 1 000 000 de requĂȘtes, toutes langues confondues :

Intention Entrée enregistrée Sortie enregistrée
persuasion −1,35 $ −5,40 $
token_opt +1,35 $ +5,40 $
mixed 0,00 $ 0,00 $

La valeur « mixte » de 0,00 $ correspond Ă  la mĂȘme annulation en dollars. À cette Ă©chelle d’un million de requĂȘtes, la saisie de persuasion en allemand passe Ă  elle seule de 1,80 $ Ă  3,00 $ (Ă©conomie de −1,20 $). L’échelle peut rendre une habitude tangible. Ce laboratoire particulier n’est pas en soi une simulation de facturation.

La taxe contextuelle invisible

Le modĂšle dispose toujours de la mĂȘme fenĂȘtre contextuelle en jetons. Ce qui change, c’est la quantitĂ© de ce contenu en langage naturel qui y tient.

J’ai rempli une fenĂȘtre hypothĂ©tique de 100 000 tokens avec des copies de l’offre parallĂšle. DĂ©nominateur : les tokens mesurĂ©s dans le passage, et non les totaux par paire. Il ne s’agit pas d’une fenĂȘtre de contexte de produit. Le français ne dispose pas d’une fenĂȘtre plus petite ; le mĂȘme budget de tokens contient simplement moins de copies de ce texte en français.

Sur o200k_base :

Langue Copies qui tiennent par rapport à l’anglais Perte par rapport à l’anglais
Anglais 2 173,91 référence 0,00
Français 1 724,14 −20,69 % 449,77
Allemand 1 587,30 −26,98 % 586,61

La mĂȘme fenĂȘtre de tokens couvre une partie moins importante de ce corpus français, et encore moins de ce corpus allemand. En passant Ă  cl100k_base, la comparaison français vs anglais donne −35,21 % de copies. Le codage modifie le nombre de copies couvertes. VĂ©rification : 100 000 / 63 = 1 587,30 ; 2 173,91 − 1 587,30 = 586,61.

Les Ă©conomies rĂ©alisĂ©es sur le corpus de la paire Ă©taient minimes. L’impact sur la capacitĂ© est dĂ©jĂ  visible.

Caveman et le coĂ»t de l’optimisation elle-mĂȘme

Pour cette expĂ©rience, je me suis penchĂ© sur Caveman — un projet open source visant Ă  compresser l’écriture des agents de codage, et non un deuxiĂšme benchmark que j’aurais effectuĂ© sur ce corpus. Je ne l’ai pas portĂ©. L’intĂ©rĂȘt rĂ©side dans la mĂ©thodologie.

Caveman rend compte d’une compression rĂ©elle et publie Ă©galement des cas oĂč la surcharge annule ou inverse les Ă©conomies rĂ©alisĂ©es. Une sortie plus courte n’implique pas automatiquement un coĂ»t total infĂ©rieur. La rĂ©duction de la sortie n’est pas une facture. Pour obtenir un Ă©cart honnĂȘte, il faut un groupe tĂ©moin : ils comparent par rapport Ă  une consigne concise, et non par rapport au silence.

C’est pourquoi j’ai sĂ©parĂ© persuasion de token_opt, et pourquoi les neuf lignes rouges figurent toujours dans l’article. Si la voie « optimisĂ©e » coĂ»te plus cher, il faut le montrer. Un benchmark qui n’affiche que les lignes vertes n’est qu’une brochure.

La variable locale o200k_base correspond toujours Ă  OpenAI BPE exĂ©cutĂ© sur ma machine. Il ne s’agit pas d’une facture Claude, mĂȘme si les Ă©valuations hors ligne de Caveman utilisent le mĂȘme encodage. Produit diffĂ©rent. MĂȘme rigueur : Ă©tiqueter le compteur, conserver la rĂ©gression.

Développement avec Symfony et Darkwood Flow

L’expĂ©rience consiste en une petite application console Symfony 8.1 sous PHP 8.5.4. Pas de base de donnĂ©es, pas d’API HTTP, pas de front-end. Tokeniseur : yethee/tiktoken 1.1.1. Orchestration : darkwood/flow 8.1.6, effectivement utilisĂ© — la commande ne peut pas afficher de tableaux si Flow n’a pas Ă©tĂ© exĂ©cutĂ©.

Le pipeline comprend sept tĂąches :

LoadCorpus
    → TokenizeBefore
    → ApplyCandidates
    → TokenizeAfter
    → Compare
    → EstimateCost
    → Report

Chaque Ă©tape est explicite. Chargement des deux passages et des 27 paires. Tokenisation de l’offre parallĂšle. Enregistrement des remplacements Ă©tiquetĂ©s dĂ©jĂ  prĂ©sents dans le corpus. Tokeniser chaque paire. Comparer, effectuer une auto-vĂ©rification, diviser les agrĂ©gats par intention. Estimer le coĂ»t. GĂ©nĂ©rer un rapport. La trace affichĂ©e en est la preuve : COMPARE : auto-vĂ©rification RÉUSSIE.

php bin/console app:language:benchmark
php bin/console app:language:benchmark --format=json

Le fichier JSON est enregistrĂ© dans var/benchmark/. Je souhaitais disposer d’une mesure que je puisse faire Ă©voluer sans dissimuler les Ă©tapes dans un script nommĂ© run.php.

PHP 8.6 : valeurs par défaut en lecture seule

PHP 8.6 permet Ă  une propriĂ©tĂ© d’instance ordinaire d’avoir une valeur par dĂ©faut :

public readonly string $evidence = 'ESTIMATED';

Sur cette machine, cela génÚre une erreur de compilation : La propriété en lecture seule Demo::$evidence ne peut pas avoir de valeur par défaut. L'environnement d'exécution est PHP 8.5.4. Je n'ai pas activé la fonctionnalité de la version 8.6.

Une valeur par dĂ©faut sur un paramĂštre de constructeur promu fonctionnait dĂ©jĂ  Ă  partir de la version 8.1. Le RFC de la version 8.6 indique que ce n’est pas un objectif : il s’agit d’une valeur par dĂ©faut de paramĂštre, et non d’une valeur par dĂ©faut de propriĂ©tĂ©. PricingAssumptions utilise cette ancienne approche. Dans les deux cas, l’instantanĂ© de tarification reste un objet de configuration immuable. Cette note en marge n’affecte pas le nombre de tokens.

PHP utilise des références, pas des pointeurs C

Un zval est une balise de type associĂ©e Ă  une valeur. Les chaĂźnes de caractĂšres et les tableaux sont copiĂ©s Ă  l’écriture. $alias = $state copie un identifiant d’objet (spl_object_id Ă©gal Ă  true ; les deux noms ont vu leurs traces passer de 7 Ă  8). En PHP, l’opĂ©rateur & encapsule un zval dans IS_REFERENCE / zend_reference. $ref++ a incrĂ©mentĂ© l’entier ($n est devenu 3). Cela n’a pas parcouru la mĂ©moire.

Une rĂ©fĂ©rence PHP n’est pas simplement un pointeur C exposĂ© au code PHP. Flow encapsule chaque retour de tĂąche dans un nouvel Ip avec $data en lecture seule ; le retour de BenchmarkState rĂ©utilise le descripteur. Zend utilise des pointeurs C en interne. Le PHP en espace utilisateur ne vous en fournit pas. php bin/console app:language:benchmark --explain-values affiche ce tableau. Pas de FFI. Cette encadrĂ© ne modifie pas non plus le nombre de tokens.

Ce que j’ai appris

Les langues naturelles ne sont pas Ă©quivalentes en termes de tokenisation. Sur ce corpus avec o200k_base, le français utilisait 58 tokens lĂ  oĂč l’anglais en utilisait 46, et l’allemand 63. Modifiez l’encodage et le « premium » Ă©volue en consĂ©quence.

La persuasion et l’efficacitĂ© en termes de tokens peuvent entrer en conflit. Maßgeschneidert est un meilleur mot de vente, mais un moins bon citoyen du BPE. Le mot anglais investment est neutre. Une tarification « de charme » peut accidentellement aider les deux axes. Les textes jouant sur la raretĂ© n’y parviennent souvent pas.

Le nombre de caractĂšres est un piĂštre substitut Ă  un vĂ©ritable tokeniseur. La phrase allemande, plus naturelle, comptait moins de caractĂšres mais plus de tokens. La formule octets / 4 a surestimĂ© toutes les langues et aplani l’écart.

Les agrĂ©gats peuvent masquer des tendances opposĂ©es. 62 → 62 est une annulation, et non pas « le choix des mots n’a pas d’importance ». SĂ©parez les intentions, sinon vous optimiserez un zĂ©ro.

L’efficacitĂ© contextuelle importe mĂȘme lorsque le corpus de paires est minuscule. La mĂȘme fenĂȘtre de tokens contient moins d’exemplaires de ce texte en français, et encore moins de celui en allemand.

L’optimisation a son propre surcoĂ»t. Publiez la ligne en rouge.

Je n’ai pas mesurĂ© l’utilisation en temps rĂ©el du prestataire, le taux de conversion ni une traduction professionnelle. La prochaine expĂ©rience honnĂȘte, si j’en mĂšne une, portera sur une seule paire EN/FR/DE fournie par un prestataire sur les mĂȘmes passages.

D’ici lĂ  : mesurez la charge de travail rĂ©elle avant de l’optimiser. Et lorsque le total combinĂ© reste inchangĂ©, examinez les lignes.

Sources

  • 3 publications LinkedIn
  • tiktoken-php
  • Caveman
  • Code source : https://github.com/matyo91/nolife-language
  • Diapositives : https://github.com/matyo91/slidewire

Connectez-vous pour réagir à cet article

🚀 1

Site

  • Plan du Site
  • Contact
  • Mentions lĂ©gales

Network

  • Hello
  • Blog
  • Apps
  • Photos

Social

Darkwood 2026, tous droits réservés