SECTEUR · LA MACHINE · WILLIAM LEEMANS
Ce qu’est un LLM
Lecture ~7 min
La première fois qu’un agent m’a sorti une fonction impeccable en trois secondes, j’ai trouvé ça magique. La première fois qu’il m’a inventé une méthode qui n’existait pas, aussi sûr de lui, j’ai trouvé ça inquiétant.
C’est le même mécanisme dans les deux cas, et il tient en trois mots: Large Language Model.
LE CRAFTOMANCER
Un mot avant de commencer, ici on apprends les concepts qui servent a l’ingénérie logicielle pour aller plus en profondeur un guide est disponible.
C’est quoi un LLM, au juste ?
Une machine à continuer du texte. Étant donné une séquence de tokens, elle produit une distribution de probabilité sur le token suivant. On en tire un, on l’ajoute à la séquence, on recommence. Prédire, tirer, ajouter, la boucle entière tient en trois mots, et il n’y en a pas d’autre.
Tout le reste, du simple chat aux agents, est de l’ingénierie construite autour d’elle. Quand un agent « décide » d’appeler un outil, il continue du texte dont le format ressemble à un appel d’outil. Quand il « s’excuse » d’une erreur, il continue du texte qui ressemble à ce qui suit habituellement une erreur dans ses données d’entraînement. C’est tout. Il n’y a plus d’intelligence derrière.
Voici la boucle en train de tourner, sur deux traces d’un vrai modèle. À chaque pas, les cinq candidats les plus probables et leur probabilité réelle.
La première est capturée en décodage glouton : on prend systématiquement le candidat de plus haute probabilité. Ça rend la trace reproductible, et ce n’est pas sous ce réglage que tourne votre agent — on y revient plus bas.
Vingt-six tokens d’affilée sans une faute. Retenez la raison plutôt que la
performance : fibonacci est un des idiomes les plus représentés du code
public. Là où votre code est banal, la continuation probable est la bonne, et
la machine a l’air de savoir.
Changez de sujet, et la même machine part ailleurs. La trace qui suit répond à un prompt qui dit explicitement Pydantic v2, et elle met le réglage du tirage sur un axe : même amorce, même graine, trois températures. Déroulez-la, puis arrêtez-vous sur un pas et changez de température, le commutateur ne rembobine pas.
À 0, le tirage se réduit à prendre le premier : c’est le décodage glouton. Barre pleine, le candidat survit à l’échantillonnage ; barre en contour, le sampler l’a écarté.
À température 0, elle enchaîne sur .dict(), l’API v1, supprimée depuis. Et
regardez bien, parce que c’est le détail qui compte : la bonne continuation
était là, dans les cinq candidats — .model à 10,2 % contre .dict à 50,6 %.
Rien, dans la fluidité de la sortie, ne distingue les deux traces. C’est la vraisemblance de la continuation qui est optimisée, jamais sa véracité.
Poussez maintenant la trace B à 0,7. Rien n’a changé de l’entrée, et la
distribution affichée au premier pas est la même au dixième de point près — la
sortie, elle, diverge dès ce premier pas et n’y revient jamais. À 1,2, le modèle
finit par appeler user.assess(), une méthode qui n’existe nulle part. Trois
exécutions, un seul réglage de différence.
Une question se pose ici, et cette Étape n’y répond pas : ces cinq nombres, d’où sortent-ils ? Ils tombent au bout du passage, quand la représentation construite à partir de votre demande est projetée sur le vocabulaire — « Du vecteur au token tiré » le déroule.
Pourquoi la même demande ne donne pas la même réponse ?
Parce que le token n’est pas pris dans la distribution : il y est tiré. Le décodage glouton de la trace A est un cas limite, utile pour capturer et rare en production. En usage réel, les probabilités sont les poids d’un tirage au sort, et ce tirage porte un nom : l’échantillonnage. La température règle à quel point il s’autorise à s’écarter du candidat de tête.
Reprenez l’étape décisive de la trace B. À 0, .dict sort à tous les coups :
une seule barre sur cinq reste pleine, le sampler a écarté les quatre autres, et
.model n’a même pas sa chance — c’est ce que veut dire « glouton ». Sous un
tirage sur cette même distribution, .model sort une fois sur dix : c’est ce
que veut dire ce 10,2 %. À 0,7, justement, .dict et .name tiennent debout
toutes les deux, à deux points l’une de l’autre, et c’est .name qui sort.
Les probabilités ne sont pas un classement qu’on lit. Ce sont les poids d’un tirage qu’on fait. Trois conséquences, et elles se prennent en session :
- La même demande ne redonne pas la même sortie. Deux exécutions divergent au premier token où deux candidats sont proches, et tout ce qui suit hérite de l’écart. Une réponse juste une fois n’est pas une réponse fiable — et aucune formulation de votre demande ne supprime le tirage : elle déplace la distribution, elle ne la remplace pas par un choix.
- Relancer est une stratégie, pas un aveu d’échec. C’est le geste que j’oubliais tout le temps au début, et c’est le moins cher qui existe : rien à écrire, un appel à payer. Si la bonne réponse est dans la distribution sans être en tête, la relance à l’identique a une chance réelle de la faire sortir. Monter la température, en revanche, élargit le tirage sans le viser — à 1,2, la trace B invente une méthode.
- Température zéro ne rend pas la sortie vraie, seulement reproductible. Le candidat de tête de la trace B est faux, et il l’est de façon parfaitement stable.
Pourquoi une erreur au token 40 contamine tout le reste ?
Parce que le troisième temps de la boucle — ajouter — est celui qu’on oublie. Le token tiré ne part pas dans une zone de brouillon : il devient une partie de l’entrée du tour suivant, au même titre que votre demande. On dit le modèle autorégressif : il se relit lui-même à chaque token, et il ne lit que ce qui précède. Il n’existe aucun mécanisme par lequel il reviendrait sur un token déjà émis.
J’aime bien l’image du stylo à encre. Pas de gomme, pas de retour arrière : ce qui est écrit est écrit, et la suite de la phrase doit faire avec.
D’où ce qui se passe quand l’agent se trompe au token 40 : les deux mille suivants sont produits sachant ce token. L’erreur cesse d’être une erreur, elle devient une prémisse. Une signature de fonction inventée à la ligne 3 sera respectée scrupuleusement jusqu’à la ligne 300, et le résultat sera cohérent — cohérent avec la faute.
C’est aussi pourquoi une sortie longue et bien tenue n’est pas un signe de justesse : la tenue est ce que la boucle produit de mieux, qu’elle parte du bon token ou du mauvais.
LE CRAFTOMANCER
« Non, ce n’est pas ça » relancé dans le fil ne retire rien. La sortie fausse reste dans le document, votre démenti s’ajoute par-dessus, et le modèle continue désormais un texte qui contient les deux. Vous n’avez pas corrigé, vous avez ajouté une contradiction. Repartez d’une entrée corrigée plutôt que d’empiler.
En pratique
- La sortie est fausse ? Deux gestes, dans cet ordre : relancer telle quelle, puis changer l’entrée. Argumenter avec l’agent n’est ni l’un ni l’autre.
- Plus le candidat de tête domine, moins relancer sert. Quand la même erreur revient trois fois, ce n’est plus le tirage, c’est l’entrée.
- Une session qui part de travers se repart, elle ne se rattrape pas. Le contexte propre coûte moins cher que la contradiction empilée.
- Ce qui compte se vérifie mécaniquement, à chaque fois. Le tirage recommence à chaque appel ; votre relecture d’hier ne couvre pas la sortie d’aujourd’hui.
D’où viennent ces cinq nombres ?
Cette Étape décrit la boucle vue du dehors : ce qu’elle produit, et ce que ça change pour vous. « Le modèle de bout en bout » l’ouvre. Deux de ses sections reprennent exactement d’ici :
- Pourquoi les empiler — ce que chaque couche fait à votre demande avant qu’une distribution existe, et pourquoi aucune ne « décide ».
- Du vecteur au token tiré — la projection sur le vocabulaire d’où sortent les cinq candidats, et le tirage qui en choisit un.
Vérifiez votre modèle
Quatre questions pour voir si le modèle mental tient. Cliquez une réponse : le verdict s’affiche.
jack in — choisissez votre réponse
La seule opération qu’effectue un LLM, c’est…
Pourquoi une réponse assurée ne dit-elle rien de sa fiabilité ?
Une demande a donné une sortie fausse. Vous la relancez, mot pour mot. Le résultat…
L’agent a inventé une signature de fonction à la ligne 3. Trois cents lignes plus loin, elle est encore utilisée. Pourquoi ?