Combien coûte vraiment un assistant IA dans un helpdesk : notre journal d'appels
Les éditeurs vendent des « crédits » dont le coût de revient est un secret. Voici le nôtre, ligne par ligne.
Tous les outils de support vendent aujourd'hui de l'IA, et presque tous la vendent en « crédits ». Un crédit, c'est une unité dont le prix est affiché et dont le coût de revient ne l'est jamais. On ne peut donc pas répondre à la seule question qui compte quand on signe : est-ce que ce prix a un rapport avec la dépense réelle, ou est-ce une marge déguisée en unité de mesure ?
Nous avons pris le parti inverse. Chaque appel au modèle est journalisé avec ses jetons entrants et sortants, sa durée, son statut et son coût. Ce journal est visible dans l'écran de gouvernance de chaque espace, exportable, et le voici.
Pourquoi les micro-euros
La première décision technique est aussi celle qui rend l'exercice possible. Le coût d'un appel est stocké en millionièmes d'euro, pas en centimes.
Un triage — catégoriser un ticket entrant, lui donner une priorité et détecter sa langue — coûte environ 0,00023 €. En centimes, arrondi, cela vaut zéro. Un compteur en centimes afficherait donc « 0,00 € » sur dix mille triages, et personne ne saurait dire si le compteur est juste ou en panne. C'est le genre de zéro qui fait perdre des mois : il ressemble exactement à un compteur cassé.
{
"capability": "reply_draft",
"provider": "scaleway (fr-par)",
"model": "gemma-4-26b-a4b-it",
"actor_kind": "agent",
"actor_name": "Lea Marchand",
"ticket_id": "4821",
"input_tokens": 1834,
"output_tokens": 213,
"cost_micros": 565,
"duration_ms": 1420,
"redactions": { "email": 2, "iban": 1 },
"status": "ok"
}Une ligne, un appel. 565 micro-euros, soit 0,000565 €, pour un brouillon de réponse tiré de 1 834 jetons de contexte et rendant 213 jetons de texte, en 1,4 seconde. Le champ `redactions` dit ce que la rédaction a masqué avant l'envoi au modèle : deux adresses email et un IBAN. C'est une preuve, pas une promesse — et c'est la raison pour laquelle ce champ est dans le journal et pas dans une plaquette.
Le coût par capacité
Un assistant de support n'est pas une fonction, c'en est quatre ou cinq, et leurs coûts n'ont rien à voir entre eux. Le tableau ci-dessous est mesuré, pas modélisé.
| Capacité | Contexte typique | Sortie | Coût par appel | Fréquence |
|---|---|---|---|---|
| Triage à l'arrivée | ~400 jetons | ~40 jetons | 0,00023 € | Un par ticket |
| Résumé d'un fil | ~2 500 jetons | ~200 jetons | 0,00080 € | À la demande |
| Brouillon de réponse | ~1 800 jetons | ~210 jetons | 0,00057 € | Une à trois fois par ticket |
| Réponse au client (déflexion) | ~1 600 jetons | ~180 jetons | 0,00051 € | Selon le trafic du portail |
| Indexation d'un article | ~900 jetons | vecteur | 0,00006 € | Une fois par publication |
Deux observations, dont la seconde surprend tout le monde. D'abord, le contexte coûte plus que la réponse : un brouillon dépense l'essentiel de son budget à lire le fil, les articles et les macros, et très peu à écrire. Optimiser un assistant de support, c'est donc d'abord choisir ce qu'on lui donne à lire — pas raccourcir ses réponses.
Ensuite, l'indexation est presque gratuite, et c'est contre-intuitif parce qu'elle porte sur toute la base de connaissances. Un vecteur d'embedding coûte un ordre de grandeur de moins qu'une génération. Indexer trois mille articles coûte moins qu'écrire deux cents brouillons.
Un refus est un appel, et il coûte
Notre assistant refuse de répondre quand rien dans la base ne répond à la question. Ce refus est journalisé au même titre qu'une réponse, avec un statut `refused`, et il coûte le même prix en contexte : le modèle a lu le fil et les sources avant de constater qu'il n'avait rien à dire.
C'est une ligne de coût que personne ne mentionne, et elle a une conséquence de pilotage : un taux de refus élevé n'est pas seulement une déception d'usage, c'est une dépense sans contrepartie. Il dit aussi, très précisément, quel article il faut écrire ensuite. Nous journalisons les refus pour cette raison-là autant que pour la comptabilité.
L'arithmétique, pour de vrai
Prenons un service de support qui traite 1 000 tickets par mois avec un usage franc de l'assistant : triage systématique, deux brouillons par ticket en moyenne, un résumé sur un ticket long sur cinq.
| Poste | Volume mensuel | Coût unitaire | Total |
|---|---|---|---|
| Triage | 1 000 | 0,00023 € | 0,23 € |
| Brouillons | 2 000 | 0,00057 € | 1,14 € |
| Résumés | 200 | 0,00080 € | 0,16 € |
| Indexation | 40 articles | 0,00006 € | 0,002 € |
| Total | ≈ 1,53 € par mois |
Un euro cinquante. Pour mille tickets. C'est le chiffre que l'industrie du « crédit » ne peut pas afficher, parce qu'il rendrait le prix des crédits difficile à défendre.
À dix mille tickets par mois, le même calcul donne environ 15 € de dépense d'inférence. À cette échelle, le coût de l'IA côté agent n'est plus une ligne budgétaire : il est inférieur au coût du siège d'un seul agent. C'est la raison pour laquelle nous l'incluons dans le prix du siège au lieu de le facturer à l'usage. Facturer 1,53 € avec un compteur, une facturation et un support de facturation coûterait plus cher que l'inférence elle-même.
Là où le coût cesse d'être négligeable
Tout ce qui précède concerne l'IA côté agent : elle assiste quelqu'un qui est déjà payé pour être là. Le calcul change complètement quand l'IA répond au client, seule, sur un portail ouvert au public.
- Le volume n'est plus borné par le nombre d'agents. Un portail public reçoit des questions de gens qui n'auraient jamais ouvert de ticket — c'est le but, et c'est aussi le risque de facture.
- Chaque échange est plusieurs appels : la question, la recherche de sources, la réponse, souvent une relance.
- Et il faut compter les appels qui ne produisent rien : un visiteur qui teste, un robot, une question hors sujet.
C'est pour cette raison que la déflexion est chez nous sous quota, avec un prix de dépassement écrit au contrat — 0,49 € par résolution — et non incluse. Un éditeur qui inclut la déflexion « sans limite » fait l'un de ces trois choix : il la bride en silence, il l'a provisionnée dans un prix par siège plus élevé, ou il ne l'a pas encore vue arriver.
Ce que ce journal permet, et que la moyenne ne permet pas
Publier un coût moyen aurait été plus flatteur et beaucoup moins utile. Le journal par appel autorise trois choses qu'une moyenne interdit :
- 1Attribuer. Le coût est porté par un espace, un agent et un ticket. On sait donc quelle équipe dépense, et sur quel type de demande.
- 2Arrêter net. Quand un quota est atteint, l'assistant s'arrête et propose des crédits. Jamais une facture découverte en fin de mois : c'est la promesse que rend possible le fait de compter à l'appel.
- 3Auditer. Chaque ligne porte le fournisseur, le modèle et les rédactions appliquées. Le jour où un client demande où sont passées ses données, la réponse est une requête, pas une note d'intention.
Vérifiez-le
Ces nombres viennent de notre propre exploitation et vous n'avez aucune raison de nous croire sur parole. Trois façons de contrôler :
- Le code qui compte est sous licence AGPL-3.0 : la fonction qui calcule `cost_micros` est lisible, avec les tarifs du fournisseur en clair. Voir la page open source.
- Sur votre propre espace, l'écran de gouvernance affiche votre journal, avec export. Aucun chiffre agrégé par nous entre vos appels et vous.
- Les tarifs d'inférence de notre fournisseur sont publics. Multipliez-les par les jetons du journal : vous devez retomber sur les mêmes micro-euros. Si ce n'est pas le cas, c'est un bug, et il nous intéresse.
Un chiffre qu'on ne peut pas recalculer n'est pas une mesure, c'est une affirmation.
C'est aussi vrai pour les nôtres. Voilà pourquoi ils sont écrits ici avec leur méthode, leurs unités et le moyen de les contredire — et pourquoi l'assistant est le seul module du produit dont la page parle de coût avant de parler de magie.
Nous ne publions pas d'article sans un chiffre mesuré chez nous, du code qu'on peut aller lire, ou une limite avouée. C'est la seule façon d'écrire sur ce métier sans répéter ce que tout le monde écrit déjà.