---
title: TokenOps : pourquoi un agent à 40 tours coûte 16×, et pas 4×
description: Une boucle d’agent relit tout son contexte à chaque tour, donc le coût de l’entrée hors cache croît avec le carré du nombre de tours. Le talk TokenOps de Gareth Bland chez Microsoft explique la grille tarifaire derrière, un score en trois ratios pour savoir si les tokens ont servi, et la courbe en S qui dit quand arrêter de dépenser.
date: 2026-10-08
tags: agents IA, coûts des LLM, observabilité, ingénierie agentique
---

Une tâche que votre agent termine en 10 tours vous coûte 1×. Laissez-le tourner 40 tours et vous vous attendriez à 4×. C’est **16×**. Chaque tour renvoie le contexte accumulé par les tours précédents, donc le coût de l’entrée hors cache croît avec le carré du nombre de tours, pas en ligne droite. La parade consiste à concevoir le contexte pour que l’essentiel soit lu depuis le cache, à un dixième du prix.

C’est ainsi que s’ouvre [TokenOps](https://www.youtube.com/watch?v=B4yovi_znxE), un talk de quatre minutes de Gareth Bland, chief data scientist chez Microsoft Frontier Company. Il définit TokenOps comme la data science qui permet à une entreprise de continuer à décider où doivent aller ses tokens : là où ils font le plus bouger les lignes. Un talk court, trois idées à garder.

## La grille tarifaire

Les fournisseurs de modèles ne facturent pas un prix unique par token. En prenant vos messages en entrée comme base 1×, voici l’échelle qu’il a montrée :

| Token | Coût | Ce que c’est |
|---|---|---|
| Sortie | 5× | Là où se fait le raisonnement, ce qu’un agent fait de plus utile |
| Entrée de base | 1× | Les messages que vous envoyez |
| Écriture en cache | en plus | Payée quand la boucle écrit du contexte dans le cache |
| Entrée en cache | 0,1× | Le contexte relu depuis le cache |

La partie chère est donc aussi la partie précieuse : le raisonnement, c’est de la sortie. Ce que vous contrôlez, c’est la part de l’entrée servie par le cache.

<figure class="fd-fig to-price-fig" aria-labelledby="to1-cap" data-desc="L’échelle de prix des tokens présentée dans le talk, en barres, avec vos messages en entrée comme base 1×. La sortie coûte 5× : c’est là que se fait le raisonnement, ce qu’un agent fait de plus utile. L’entrée de base, les messages que vous envoyez, coûte 1×. Les écritures en cache coûtent en plus, payées quand la boucle écrit du contexte dans le cache ; le talk ne leur donne pas de multiplicateur. L’entrée en cache, le contexte relu depuis le cache, coûte 0,1×. La part de l’entrée servie par le cache, c’est ce que vous contrôlez.">
<div class="to-in">
<ul class="to-bars">
<li class="to-bar to-bar-out"><p class="to-name">Sortie<span>là où se fait le raisonnement</span></p><p class="to-track"><i class="to-w5"></i></p><p class="to-x">5×</p></li>
<li class="to-bar"><p class="to-name">Entrée de base<span>les messages que vous envoyez</span></p><p class="to-track"><i class="to-w1"></i></p><p class="to-x">1×</p></li>
<li class="to-bar to-bar-write"><p class="to-name">Écriture en cache<span>payée quand la boucle écrit dans le cache</span></p><p class="to-track"><i class="to-w1"></i></p><p class="to-x">en plus</p></li>
<li class="to-bar to-bar-cached"><p class="to-name">Entrée en cache<span>relue depuis le cache</span></p><p class="to-track"><i class="to-w01"></i></p><p class="to-x">0,1×</p></li>
</ul>
</div>
<p class="mp-strip"><b>Ce que vous contrôlez</b><span>La part de l’entrée qui vient du cache.</span></p>
<figcaption id="to1-cap">L’échelle de prix qu’il a montrée, avec vos messages en entrée comme base 1×. Sortie, entrée de base et entrée en cache sont à l’échelle. Le talk ne donne pas de multiplicateur pour les écritures en cache : cette barre est seulement indiquée, pas mesurée.</figcaption>
</figure>

## Les boucles rendent le coût quadratique

Les agents ne répondent plus en une seule passe. Ils procèdent par tours : agir, regarder le résultat, raisonner, agir encore. Chaque tour transporte tout ce qui l’a précédé.

| Tours | Ce que vous prévoyez | Ce que coûte vraiment l’entrée hors cache |
|---|---|---|
| 10 | 1× | 1× |
| 40 | 4× | 16× |

Quatre fois plus de tours, seize fois plus cher. L’ingénierie de contexte sert à faire redescendre cette courbe : gardez la partie stable du contexte en tête et inchangée, pour que le fournisseur puisse la servir depuis le cache à 0,1×.

<figure class="fd-fig to-quad-fig" aria-labelledby="to2-cap" data-desc="Pourquoi 40 tours coûtent 16 fois plus que 10 tours, à l’échelle. Les tours vont de gauche à droite, de 0 à 40. La hauteur à chaque tour est le contexte que ce tour renvoie, donc l’aire est le coût de l’entrée hors cache. Les 10 premiers tours forment un petit triangle : 1×. À gauche, l’estimation en ligne droite, quatre de ces triangles côte à côte, soit 4×. À droite, ce qui se passe vraiment : le contexte ne cesse de grandir, chaque tour relit tout ce qui le précède, et l’aire pour 40 tours est un triangle quatre fois plus large et quatre fois plus haut, seize petits triangles : 16×. La parade : garder la partie stable du contexte en tête et inchangée, pour que le fournisseur puisse la servir depuis le cache à 0,1×.">
<div class="mp-two-row">
<div class="mp-two-card">
<p class="mp-two-who">Ce que vous prévoyez</p>
<p class="mp-two-name">4×</p>
<svg class="to-tri" viewBox="0 0 220 78" aria-hidden="true">
<polygon class="to-tile to-one" points="20,58 65,58 65,13"/><polygon class="to-tile to-c1" points="65,58 110,58 110,13"/><polygon class="to-tile to-c2" points="110,58 155,58 155,13"/><polygon class="to-tile to-c3" points="155,58 200,58 200,13"/>
<path class="to-base" d="M20,58 H200"/>
<text class="to-tick" x="65" y="74" text-anchor="middle">10</text><text class="to-tick" x="110" y="74" text-anchor="middle">20</text><text class="to-tick" x="155" y="74" text-anchor="middle">30</text><text class="to-tick" x="200" y="74" text-anchor="middle">40</text>
</svg>
<p class="mp-two-line">Quatre fois plus de tours</p>
<p class="mp-two-line">Chaque tranche de 10 tours coûte pareil</p>
</div>
<p class="mp-two-vs">contre</p>
<div class="mp-two-card mp-two-peter">
<p class="mp-two-who">Coût réel de l’entrée hors cache</p>
<p class="mp-two-name">16×</p>
<svg class="to-tri" viewBox="0 0 220 210" aria-hidden="true">
<polygon class="to-tile to-one" points="20,190 65,190 65,145"/><polygon class="to-tile to-c1" points="65,190 110,190 110,145"/><polygon class="to-tile to-c1" points="65,145 110,145 110,100"/><polygon class="to-tile to-c1" points="65,190 65,145 110,145"/><polygon class="to-tile to-c2" points="110,190 155,190 155,145"/><polygon class="to-tile to-c2" points="110,145 155,145 155,100"/><polygon class="to-tile to-c2" points="110,100 155,100 155,55"/><polygon class="to-tile to-c2" points="110,190 110,145 155,145"/><polygon class="to-tile to-c2" points="110,145 110,100 155,100"/><polygon class="to-tile to-c3" points="155,190 200,190 200,145"/><polygon class="to-tile to-c3" points="155,145 200,145 200,100"/><polygon class="to-tile to-c3" points="155,100 200,100 200,55"/><polygon class="to-tile to-c3" points="155,55 200,55 200,10"/><polygon class="to-tile to-c3" points="155,190 155,145 200,145"/><polygon class="to-tile to-c3" points="155,145 155,100 200,100"/><polygon class="to-tile to-c3" points="155,100 155,55 200,55"/>
<path class="to-out" d="M20,190 H200 V10 Z"/>
<text class="to-tick" x="65" y="206" text-anchor="middle">10</text><text class="to-tick" x="110" y="206" text-anchor="middle">20</text><text class="to-tick" x="155" y="206" text-anchor="middle">30</text><text class="to-tick" x="200" y="206" text-anchor="middle">40</text>
</svg>
<p class="mp-two-line">Chaque tour relit tout ce qui le précède</p>
<p class="mp-two-line">Quatre fois plus de tours, seize fois plus cher</p>
</div>
</div>
<p class="mp-strip"><b>La parade</b><span>Gardez la partie stable du contexte en tête et inchangée, pour qu’elle soit lue depuis le cache à 0,1×.</span></p>
<figcaption id="to2-cap">À l’échelle, tours 0 à 40 de gauche à droite. La hauteur à chaque tour est le contexte qu’il renvoie, donc l’aire est ce que vous payez en entrée hors cache. Le triangle encré correspond aux 10 premiers tours, 1×. Quarante tours en valent seize, pas quatre.</figcaption>
</figure>

## Les tokens ont-ils rapporté quelque chose ?

Le coût seul ne dit pas si la dépense en valait la peine. Bland note le travail des agents avec un **score d’efficacité agentique** fait de trois ratios, à lire comme un entonnoir, de tout le travail qu’un agent entame jusqu’à ce que ressentent les utilisateurs :

<div class="levels" role="group" aria-label="Le score d’efficacité agentique comme un entonnoir de trois ratios : achèvement autonome, efficacité des tokens et création de valeur, avec le merge en production et le service aux utilisateurs comme étapes entre eux">
  <div class="level">
    <p class="level-num">1</p>
    <h3>Achèvement autonome</h3>
    <p>Le travail terminé sans échec ni intervention humaine.</p>
  </div>
  <div class="level-step"><span>Mergé en production</span></div>
  <div class="level">
    <p class="level-num">2</p>
    <h3>Efficacité des tokens</h3>
    <p>Du travail terminé, ce qui a vraiment été livré.</p>
  </div>
  <div class="level-step"><span>Au service des utilisateurs</span></div>
  <div class="level level--focus">
    <p class="level-num">3</p>
    <h3>Création de valeur</h3>
    <p>De ce qui a été livré, ce qui a fait bouger les lignes.</p>
  </div>
</div>

Le troisième ratio, aucun tableau de bord de tokens ne peut vous le donner. Mon propre [Meterlex](/fr/projets/meterlex.html) chiffre chaque appel de modèle à partir des logs de session, ce qui couvre le côté coût. Il ne peut pas me dire si le travail d’une session a été mergé, encore moins si quelqu’un s’en est servi. Pour ça, il faut des données du dépôt et du produit, pas du fournisseur de modèles.

## La courbe en S : quand arrêter de dépenser

La dernière idée porte sur la position d’un produit. Les fonctionnalités rapportent selon une courbe en S, et Bland nomme trois zones :

<div class="levels" role="group" aria-label="Les trois zones de la courbe en S de la valeur des fonctionnalités : sous-investissement, effet de levier et surqualité, avec un seuil et la saturation comme étapes entre elles">
  <div class="level">
    <p class="level-num">Zone 1</p>
    <h3>Sous-investissement</h3>
    <p>Pas encore assez de fonctionnalités pour un MVP ou un pilote.</p>
  </div>
  <div class="level-step"><span>Seuil</span></div>
  <div class="level level--focus">
    <p class="level-num">Zone 2</p>
    <h3>Effet de levier</h3>
    <p>Chaque nouvelle fonctionnalité ou amélioration rapporte de la valeur aux utilisateurs.</p>
  </div>
  <div class="level-step"><span>Saturation</span></div>
  <div class="level">
    <p class="level-num">Zone 3</p>
    <h3>Surqualité</h3>
    <p>Peaufiner l’existant, ajouter ce que personne n’a demandé.</p>
  </div>
</div>

Avec les agents, entrer en zone 3 ne coûte presque rien. Quand une fonctionnalité coûte un prompt au lieu d’un sprint, rien ne vous empêche de tomber dans la surqualité (le gold plating), si ce n’est de savoir où vous en êtes sur la courbe. C’est sa conclusion : en ingénierie agentique, ce qui compte le plus, c’est de savoir où se situe votre équipe, ou votre prochaine fonctionnalité, sur la courbe en S.

## Ce que j’en retiens

- **Mesurez la courbe, pas la facture.** Un total mensuel cache la partie quadratique. Le nombre de tours par tâche et la part de l’entrée servie par le cache disent où part l’argent.
- **Le coût est le haut de l’entonnoir.** La dépense en tokens n’a de sens que rapportée à la part du travail mergée et à la part que les utilisateurs ont ressentie.
- **Dépensez là où la courbe est raide.** Le token le moins cher est celui que vous ne dépensez pas en surqualité.

<figure class="fd-fig to-take-fig" aria-labelledby="to3-cap" data-desc="Mes trois enseignements du talk, côte à côte. Un : mesurez la courbe, pas la facture. Un total mensuel cache la partie quadratique ; le nombre de tours par tâche et la part de l’entrée servie par le cache disent où part l’argent. Deux : le coût est le haut de l’entonnoir. La dépense en tokens n’a de sens que rapportée à la part du travail mergée et à la part que les utilisateurs ont ressentie. Trois : dépensez là où la courbe est raide. Sur la courbe en S des fonctionnalités, c’est dans le milieu raide que les tokens rapportent de la valeur ; le plateau du haut, c’est la surqualité, et le token le moins cher est celui que vous n’y dépensez pas.">
<ol class="mp-trio">
<li class="mp-trio-step">
<svg class="mp-grow-art" viewBox="0 0 120 110" aria-hidden="true">
<rect class="to-bill" x="8" y="8" width="30" height="40"/>
<rect class="mp-ln" x="13" y="15" width="20" height="3"/><rect class="mp-ln" x="13" y="22" width="16" height="3"/><rect class="mp-ln" x="13" y="29" width="20" height="3"/>
<rect class="to-total" x="13" y="38" width="20" height="4"/>
<path class="hx-axis-l" d="M10,58 V100 H112"/>
<path id="to3-curve" class="to-curve" d="M10,99 Q78,99 112,20"/>
<g class="fd-token fd-token-ui"><rect x="-4" y="-4" width="8" height="8"><animateMotion dur="4s" repeatCount="indefinite"><mpath href="#to3-curve"/></animateMotion></rect></g>
</svg>
<p class="mp-trio-n"><b>1</b>Mesurer la courbe</p>
<p class="mp-trio-what">Les tours par tâche et la part de l’entrée en cache, pas la facture du mois</p>
</li>
<li class="mp-trio-step">
<svg class="mp-grow-art" viewBox="0 0 120 110" aria-hidden="true">
<rect class="to-f to-f-cost" x="8" y="14" width="104" height="20"/>
<rect class="to-f to-f-merged" x="27" y="45" width="66" height="20"/>
<rect class="to-f to-f-felt" x="45" y="76" width="30" height="20"/>
</svg>
<p class="mp-trio-n"><b>2</b>Le coût est en haut</p>
<p class="mp-trio-what">Il n’a de sens que rapporté à ce qui est mergé et à ce que ressentent les utilisateurs</p>
</li>
<li class="mp-trio-step">
<svg class="mp-grow-art" viewBox="0 0 120 110" aria-hidden="true">
<path class="hx-axis" d="M42,8 V100 M82,8 V100"/>
<path class="hx-axis-l" d="M6,100 H114"/>
<path class="to-flat" d="M6,94 C26,94 34,92 42,86"/>
<path id="to3-steep" class="to-steep" d="M42,86 C56,74 66,34 82,24"/>
<path class="to-gold" d="M82,24 C94,17 104,16 114,16"/>
<g class="fd-token fd-token-ui"><rect x="-4" y="-4" width="8" height="8"><animateMotion dur="3s" repeatCount="indefinite"><mpath href="#to3-steep"/></animateMotion></rect></g>
</svg>
<p class="mp-trio-n"><b>3</b>Dépenser où ça monte</p>
<p class="mp-trio-what">Le token le moins cher est celui que vous ne dépensez pas en surqualité</p>
</li>
</ol>
<figcaption id="to3-cap">Ce que je surveillerais après ce talk : la forme du coût, l’entonnoir en dessous, et la position d’une fonctionnalité sur la courbe en S. Le haut en pointillés de la dernière courbe, c’est la surqualité.</figcaption>
</figure>
