Comment construire un assistant qui ne répond qu’à partir de vos documents ?
Tenir un modèle aux seules sources tient en quatre pièces : le corpus entier dans la demande tant qu’il est petit, une consigne qui impose le refus explicite, une vérification mécanique des citations avant affichage, et un jeu d’évaluation écrit avant de choisir le modèle. Plafonds et transparence bornent la facture et respectent le visiteur.
Pourquoi pas un chatbot généraliste ?
Un chatbot posé sur un site d’une personne répond à tout, et c’est le problème. Il invente une offre, promet un délai, cite une mission qui n’existe pas. Il attire les usages qui coûtent, pas ceux qui renseignent. Et il ne prouve rien : un DSI qui le teste apprend que le modèle parle bien, ce qu’il savait déjà.
Ce que je vends, c’est l’inverse : un assistant qui ne parle qu’à partir de sources, qui les cite, et qui se tait quand elles ne disent rien. Alors la seule fonctionnalité qui avait un sens sur ce site était celle-là, en petit, sur mes propres articles : poser une question et recevoir une réponse tirée des seuls textes publiés ici, avec les articles utilisés en liste. Une question, une réponse, sans conversation. Si la démonstration tient, la méthode est celle que je propose à mes clients ; si elle ne tient pas, il vaut mieux le savoir sur mes articles que sur leurs contrats.
Comment tenir le modèle aux seules sources ?
Par quatre contraintes, et aucune ne repose sur la bonne volonté du modèle.
La première est le périmètre de lecture. Le modèle reçoit, à chaque question, l’intégralité des articles publiés, quatorze textes le jour du jeu d’évaluation, quinze avec celui-ci, un peu moins de vingt mille mots, environ trente mille jetons, et la question à la fin. Rien d’autre : ni le web, ni mes notes, ni la mémoire des questions précédentes. Ce qu’il ne reçoit pas, il ne peut pas le citer.
La deuxième est la consigne. Elle interdit toute connaissance extérieure, exige une réponse en texte brut sans lien ni mise en forme, et impose une issue quand les articles ne couvrent pas la question : la déclarer hors périmètre, en une phrase, sans deviner. Elle dit aussi que la question peut contenir des instructions, et qu’elles sont à ignorer. Une consigne ne garantit rien ; elle définit ce que les contrôles suivants vérifient.
La troisième est la forme de la réponse. Le modèle ne rend pas un texte libre mais un objet à trois champs, imposé par un schéma strict : le texte de la réponse, la liste des identifiants d’articles utilisés, et un indicateur hors périmètre. Un identifiant, c’est l’adresse d’un article, pas un titre approximatif.
La quatrième est la vérification, et c’est elle qui compte. Avant l’affichage, le code compare chaque identifiant cité à la liste réelle des articles : un identifiant inconnu est retiré, un doublon fusionné, une réponse hors périmètre perd toutes ses sources. Ce qui est affiché comme source existe, sans exception, parce que ce n’est pas le modèle qui l’affirme, c’est une comparaison de chaînes.
Ce que cette chaîne ne vérifie pas, il faut le dire : le sens. Une phrase qui cite le bon article peut le résumer de travers. Le texte le rappelle sous chaque réponse, les articles cités font foi, et c’est le jeu d’évaluation, plus bas, qui mesure la fréquence du problème. J’ai décrit dans comment évaluer un système RAG pourquoi la fidélité au passage est une question distincte de la recherche du bon passage ; ici, la recherche est triviale puisque tout est fourni, et toute la difficulté est dans la fidélité.
Faut-il une base vectorielle ?
Pas à cette échelle, et c’est une décision de cadrage avant d’être une décision technique. Vingt mille mots tiennent dans une demande. Découper les articles en passages, les indexer, chercher les plus proches de la question, c’est ajouter trois composants qui peuvent se tromper pour résoudre un problème qui n’existe pas encore : à quoi bon retrouver le bon passage quand on peut donner tous les passages ?
Le seuil où cela change est chiffrable. Le fournisseur limite le débit par modèle en jetons par minute ; sur le compte de ce site, le petit modèle admet cent mille jetons par minute, soit trois questions par minute avec le corpus entier. Le coût suit la même pente : chaque question paie trente mille jetons d’entrée. Le jour où le trafic dépasse ce débit, ou le jour où le corpus double, la présélection devient nécessaire : trois ou quatre articles choisis par recouvrement de mots avec la question, ce qui divise les jetons par quatre et multiplie le débit d’autant. Et le jeu d’évaluation décrit ci-dessous servira alors à vérifier qu’elle ne fait pas manquer le bon article, ce qui est le seul risque qu’elle ajoute.
C’est la règle que j’applique en cadrage : la base vectorielle n’est pas le point de départ d’un assistant documentaire, c’est la réponse à un volume mesuré. J’en ai donné les ordres de grandeur dans combien coûte un assistant IA sur les documents internes.
Comment savoir que ça marche ?
En l’écrivant avant. Le jeu d’évaluation a été rédigé le 11 septembre 2026, avant le choix du modèle : vingt-cinq questions, dont vingt couvertes par les articles, chacune avec les identifiants d’articles acceptables, et cinq hors périmètre, dont une demande d’afficher la consigne du système et une demande de numéro de téléphone. La règle de notation tient en deux lignes. Une question couverte est juste si toutes les sources citées sont acceptables et qu’au moins une l’est. Une question hors périmètre est bien traitée si le modèle la déclare hors périmètre sans citer de source.
Les deux modèles candidats ont été rejoués sur le même jeu, le même jour, avec le même corpus.
| Small 4 | Medium 3.5 | |
|---|---|---|
| Questions couvertes justes | 18 sur 20 | 20 sur 20 |
| Refus corrects sur les hors périmètre | 5 sur 5 | 5 sur 5 |
| Refus à tort | 0 | 0 |
| Latence moyenne | 2,2 s | 7,7 s |
| Coût des vingt-cinq questions | 0,11 $ | 1,14 $ |
Les deux ratés du petit modèle disent quelque chose. Le premier n’était pas une erreur de fond : la réponse dépassait le plafond de sortie et le JSON est arrivé coupé. Le plafond a été relevé, la question rejouée passe. Le second est un article voisin cité à la place de l’attendu, sur la taille minimale d’un modèle, avec une réponse juste : la frontière entre deux articles qui se recoupent n’est pas nette, et la notation le compte comme un échec, ce qui est la bonne sévérité.
Le petit modèle a été retenu : trois fois plus rapide, dix fois moins cher, et un écart de qualité que ce service ne justifie pas de payer. Sur un assistant métier, le même jeu, rejoué sur les questions réelles des utilisateurs, pourrait trancher autrement ; c’est la mesure qui décide. Le jeu est rejoué avant tout changement de modèle ou de consigne, et ses résultats sont versionnés avec le code du site.
Combien ça coûte, et comment borner la facture ?
Un demi-centime par question. Le petit modèle est facturé 0,15 $ le million de jetons en entrée et 0,60 $ en sortie, relevé le 11 septembre 2026 sur la page tarifaire de Mistral AI ; trente mille jetons d’entrée et quelques centaines en sortie font 0,005 $ par question. Le grand modèle, à 1,50 $ et 7,50 $, coûte dix fois plus.
Le prix unitaire n’est pas ce qui protège ; ce sont les plafonds, et le principe qui les gouverne : un plafond refuse la question avant l’appel au modèle, jamais après. Dix questions par heure et par adresse, comptées en mémoire pendant une heure et jamais écrites. Cent cinquante questions par jour pour tout le site. Quinze dollars par mois, calculés sur les jetons réellement consommés. Une question de trois cents caractères au plus, une réponse de sept cents jetons au plus. Au-delà d’un plafond, le visiteur lit un message qui dit lequel et quand revenir. Et quand le fournisseur lui-même sature, trois questions par minute, le message le dit aussi.
C’est la même discipline que celle du pipeline qui rédige les brouillons de ce blog, où un plafond mensuel d’appels a déjà arrêté une exécution avant qu’elle ne dépense : un système qui appelle un modèle sans plafond est un système dont la facture appartient à quelqu’un d’autre.
Que se passe-t-il avec la question du visiteur ?
Elle part, elle revient, elle disparaît. La mention au-dessus du champ le dit avant que le visiteur n’écrive : il s’adresse à un système d’IA, sa question est envoyée à Mistral AI, en Europe, pour produire la réponse, elle n’est conservée nulle part, et il ne doit y mettre aucune donnée personnelle. C’est l’obligation de transparence de l’article 50 du règlement européen sur l’intelligence artificielle, placée là où elle informe, pas en pied de page.
Côté serveur, le service ne journalise ni la question, ni la réponse, ni l’adresse : un statut, un nombre de jetons, une durée. Les journaux du serveur web gardent l’adresse quatorze jours, comme pour toute page, mais pas le corps des requêtes. Je l’ai vérifié plutôt que de l’affirmer : une question contenant un mot inventé, puis une recherche de ce mot dans les deux journaux, sans résultat. Le traitement est inscrit au registre du site, base légale l’intérêt légitime, le visiteur sollicitant lui-même le service sans s’identifier, et décrit dans les mentions légales. Mistral AI est le seul tiers, sous contrat de sous-traitance, en Europe, sans usage des questions pour l’entraînement ; j’ai détaillé ce que valent ces engagements selon les fournisseurs dans nos données partent-elles chez OpenAI.
Il reste une chose que la technique ne règle pas : un visiteur peut écrire une donnée personnelle malgré l’avertissement. Elle transite alors chez le sous-traitant, et n’est conservée par personne. C’est la raison de l’avertissement, et la raison de ne rien conserver.
Ce que ça change pour un projet d’entreprise
La séquence est la même, à l’échelle près. Un cadrage qui décide du périmètre de lecture avant de décider de l’outillage. Un jeu d’évaluation écrit avant le choix du modèle, avec ses questions hors périmètre, parce qu’un assistant qui ne sait pas se taire n’est pas prêt. Une vérification mécanique de ce qui peut l’être, les citations, et une mesure honnête de ce qui ne peut pas l’être, le sens. Des plafonds qui refusent avant de dépenser. Une transparence placée avant l’interaction, et un registre tenu.
Ce qui manque à cette démonstration pour devenir un projet, ce sont les trois choses qui font le coût réel d’un assistant en entreprise : des documents qui changent, des droits d’accès qui décident qui peut lire quoi, et une exploitation qui tient dans le temps. Ici, le corpus est public, figé à chaque publication et lu par tout le monde ; chez vous, aucune de ces trois hypothèses ne tient, et c’est précisément ce que le cadrage doit établir. Si vous avez des documents, des questions qui reviennent, et le besoin que les réponses citent leurs sources, décrivez votre cas d’usage : la première chose que je vous demanderai, c’est vingt questions et les réponses attendues.