L'addition de la réflexion

Un modèle réflexif a dépensé 866 tokens et 53 secondes pour dire « Bug ». Les trois interrupteurs qui coupent la réflexion dans Ollama — et l'addition mesurée qui dit quand les basculer.

HUMANpar @mrsaynothing1h8 min de lecture

reçu · bench local-llm · lfm3:1.7b · 2026-10-29 · machine CPU · 17 tok/s divisé à la main

Lancez ollama run <model> --think=false (CLI), tapez /set nothink (dans une session), ou envoyez "think": false dans le corps de /api/chat ou /api/generate. N'utilisez --hidethinking que si vous voulez garder la réflexion mais la cacher — le compteur, lui, tourne toujours. Laissez tomber /no_think dans les prompts : ça réduit, ça ne coupe pas.

01Demandez-le vous-même — la facture, imprimée

C'est le run réel loggé, rejoué. Deux demandes d'un mot de notre bench : « Bug » a coûté 866 tokens de réflexion et 53.5 secondes à froid. « Crash » a coûté 589 tokens et 34.4 secondes à chaud. Puis la même demande, réflexion coupée. Regardez le compteur.

MRSN BENCH × THINKING MODE
──────── · ────────
question d'un mot« bug ou pas ? »
réflexion866 tokens
génération @ 17 tok/s50.9s
chargement du modèle 2.33s
réponse« Bug »
TOTAL53.53s
run 1 sur 2, log réel : eval_count 866 · total 53.53s — appuyez sur un bouton ci-dessus pour le rejouer
le compteur est honnête·

composite d'un run réel loggé — lfm3:1.7b, 2026-10-29 · la ligne « réflexion coupée » est une division, pas un run mesuré, et le dit

L'intérêt du ×1 : à 17 tokens par seconde, vous pouvez lire la réflexion pendant qu'elle vous facture. C'est ce que fait chaque chat qui « semble lent » sur une machine CPU — il imprime une facture que vous n'avez jamais demandé à voir, un token toutes les 59 millisecondes.

02Pourquoi mon modèle Ollama réfléchit-il si longtemps ?

Parce que les derniers petits modèles sont des penseurs hybrides : les mêmes poids font le chat et la chaîne de pensée, et la plupart des front-ends laissent la réflexion activée par défaut. Chaque « hmm, laissez-moi revoir » que vous voyez défiler est un vrai token facturé à votre vrai débit en tokens par seconde — et sur une machine CPU, c'est 17/s, pas les centaines qu'une GPU se permet. Le calcul n'a rien de glamour : 866 tokens de réflexion ÷ 17 tok/s ≈ 51 secondes de facturation avant que la réponse commence.

vous : « bug ou pas ? un mot. » lfm3:1.7b 866 tokens de monologue intérieur 17 tok/s « Bug. » · 53.5s
Le mot le plus cher que notre machine ait jamais prononcé. Il lui a fallu 866 tokens de réflexion pour décider.

03Comment désactiver la réflexion dans Ollama ?

Trois interrupteurs, tous officialisés dans la doc d'ollama elle-même. Choisissez l'altitude où vous êtes :

$ ollama run lfm3:1.7b --think=false
>>> bug or not? one word.
Crash

vérifiez : aucun bloc de réflexion dans la sortie ; la réponse arrive en une poignée de tokens — d'après notre arithmétique de bench, environ une seconde de frappe au lieu de cinquante.

POST /api/chat
{ "model": "lfm3:1.7b",
  "messages": [{"role":"user","content":"bug or not? one word."}],
  "think": false }

vérifiez : la réponse ne porte aucun champ thinking — avec "think": true, le même endpoint sépare le monologue de la réponse dans son propre champ.

Et le piège qui ressemble à un interrupteur sans en être un : --hidethinking. Le modèle continue de réfléchir — plein tarif — et on ne vous imprime simplement pas le détail. Cacher le reçu, ce n'est pas ne pas payer.

le tiroir des pièges — cinq choses qui mordent

Un Modelfile ne peut pas l'épingler. PARAMETER think false renvoie une erreur « unknown parameter » — think n'existe que dans le corps de la requête. Chaque client doit penser à l'envoyer ; aucun défaut côté serveur ne peut être fixé.

L'endpoint compatible OpenAI parle un autre dialecte. /v1/chat/completions n'accepte pas think — l'outillage qui l'emprunte utilise reasoning_effort à la place, et un simple think:false n'y fait silencieusement rien.

/no_think dans le prompt est une poussée, pas un interrupteur. Ça réduit le monologue ; les modèles hybrides peuvent quand même réfléchir. Le flag dans le corps de requête, c'est la coupure honnête.

Certains modèles prennent des niveaux, pas des booléens. Les métadonnées de réflexion récentes acceptent des niveaux nommés (low, medium, high) — définis par le modèle ; vérifiez la model card, pas vos espérances.

num_predict est un plafond de budget, pas un interrupteur. Il limite le total de tokens en incluant la réflexion — votre réponse peut être amputée avant même la fin de la réflexion. Mauvais outil pour ce travail.

04Combien coûte réellement la réflexion ? Le reçu.

Lignes brutes du log du bench — les champs renommés -ms portent des nanosecondes (les unités du log elles-mêmes mentent ; on a divisé à la main), et les champs de débit sont revenus null, donc le tokens-par-seconde est notre propre division longue : 866 ÷ 50.9 ≈ 17.

{"model":"lfm3:1.7b","load_ms":2326837325,"eval_count":866,"total_ms":53533988331,"response":"Bug"}
{"model":"lfm3:1.7b","load_ms":530219,"eval_count":589,"total_ms":34362526621,"response":"Crash"}
↑ soulignés en rouge : les lignes de facturation — 53.5s et 34.4s de génération, 866 et 589 tokens, pour deux réponses d'un mot

source : notre log de bench, 2026-10-29 · lfm3:1.7b · VM CPU seule · contexte 4096

ligne de l'additiondemande à froiddemande à chaudréflexion coupée
tokens générés866589≈ une poignée
temps de génération @ 17 tok/s≈ 51s≈ 34s≈ 1s ou moins
demande totale (mesurée)53.5s34.4s— non mesuré*
chargement du modèle2.33s0.53msmême modèle, même chargement
la réponse« Bug »« Crash »même classe de mot

* ligne d'honnêteté : on a mesuré le côté réflexion ; la colonne « réflexion coupée » est une division au même tok/s, étiquetée comme arithmétique — la loi des reçus couvre la moitié mesurée, cette phrase couvre le reste.

« Bug » est le mot le plus cher que notre machine ait jamais produit. Il a coûté cinquante secondes de réflexion à décider.

05Quand faut-il laisser la réflexion activée ?

Quand la réponse vaut plus que l'attente — c'est tout le contrat. L'addition achète quelque chose de réel sur :

  • Maths et logique multi-étapes — le monologue est le travail ; le couper, c'est couper la précision que vous êtes venu chercher.
  • Revue de code et planification — le modèle a besoin de son brouillon ; --hidethinking est légitimement bon ici, puisque vous payez de toute façon.
  • Tout ce où 50 secondes bat le faux — du triage lancé chaque nuit, pas en interactif.

Coupez-la quand la demande a une forme de classification : réponses d'un mot, routage, consultations, extraction, « est-ce que cette ligne de log contient une défaillance ». Payer 866 tokens pour départager deux mots, c'est louer une chambre vide — la chambre est agréable, mais vous n'y êtes pas.

06Le compromis honnête

Voilà ce qui reste non résolu. Couper la réflexion rend le modèle plus rapide et plus bête précisément sur les tâches pour lesquelles vous l'avez acheté — et la garder activée transforme chaque demande anodine en cinquante secondes d'attente. Le vrai réglage de l'IA locale, ce n'est pas la taille du modèle ; c'est qui tient le compteur. Le cloud cache cette addition dans un abonnement ; sur votre machine, vous voyez chaque token s'imprimer.

Ce que je veux vraiment et n'ai pas encore : une ligne de Modelfile qui épingle think par modèle, pour que « Bug » coûte une seconde sans que chaque client ait à se souvenir du flag. La demande est ouverte dans les issues d'Ollama. D'ici là, le compteur est à vous de regarder — ou à vous de basculer.

Fin en deux questions, selon la loi de la maison : 1) Quelle est la plus grosse facture de réflexion que vous ayez attrapée sur votre propre machine ? 2) L'avez-vous déjà surpris à facturer une question qui n'avait pas besoin de réflexion ?

FIN DE TRANSMISSION
PROVENANCE
pick : « ollama turn off thinking » — autocomplétion DDG, cité 2026-10-31 (Loi 3c) · demande famille : « best ollama model for reasoning » adjacent
reçus : log de bench lfm3:1.7b 2026-10-29 — eval_count 866 / 589 · totaux 53.53s / 34.36s · chargement 2.33s / 0.53ms · 17 tok/s divisés à la main (champs de débit API null) · syntaxe vérifiée vs ollama.com/blog/thinking + docs.ollama.com/capabilities/thinking, aujourd'hui
predict (pré-enregistré) : les impressions « ollama turn off thinking » apparaissent dans GSC ≤7d après publication
forme sur le site : l'addition interactive = voie app ; le jumeau statique peint ce reçu · traductions ×5 même run · dev.to discuss-first