Un chatbot qui cite ses sources et refuse d'inventer
L'assistant documentaire de Telaria répond à des questions en langage naturel à partir de la documentation. Deux traits le caractérisent : chaque réponse s'accompagne de ses sources, et lorsque la documentation ne contient pas de quoi répondre, il le dit au lieu d'improviser — jusqu'à ne pas solliciter du tout le modèle de langage dans ce cas.
Cette pièce explique pourquoi ces traits ont été retenus. Elle ne décrit pas le composant dans le détail : pour les contrats, formats et paramètres, voir les fiches de référence du bundle produit doc-IA et du moteur RAG. Elle ne raconte pas non plus comment brancher l'assistant : c'est le rôle d'un guide.
Une surface, pas un produit isolé
Le chatbot n'est pas une pile IA à part entière. C'est une surface posée sur un cœur de récupération mutualisé — le même cœur que sollicitent le serveur MCP et la veille. Ce cadrage est expliqué dans la pièce sœur Un cœur, trois surfaces, et il éclaire les choix qui suivent : parce que la récupération et la génération sont séparées, le chatbot peut décider de récupérer sans générer. C'est cette séparation qui rend possible le comportement central décrit plus bas.
Le cœur retrouve des passages et leur provenance ; il n'invente pas. La génération d'une réponse en langage naturel vit dans la surface. Le chatbot est donc l'endroit où l'on assemble : récupérer d'abord, décider ensuite s'il y a matière à générer.
Le problème de fond : l'hallucination
Un modèle de langage sollicité seul produit toujours une réponse plausible, même quand il ne sait pas. C'est le mécanisme même de l'hallucination : le modèle comble un vide par du texte vraisemblable mais infondé. Pour un assistant censé représenter une documentation technique, c'est le pire des défauts — une réponse fausse mais bien tournée est plus dangereuse qu'une absence de réponse, parce qu'elle inspire confiance.
Le parti pris de Telaria est de traiter ce risque par construction, et non par des consignes que l'on espère voir respectées. Trois choix concourent à cet objectif.
Choix 1 — Répondre à partir de la documentation, pas de la mémoire du modèle
La réponse est fondée sur des passages effectivement récupérés dans le corpus, assemblés dans le contexte fourni au modèle. Le modèle n'est pas interrogé comme une encyclopédie ; il est utilisé comme un rédacteur à qui l'on fournit la matière et à qui l'on demande de la reformuler sans y ajouter.
Ce choix a été retenu parce qu'il déplace la question « le modèle sait-il ? » vers « la documentation contient-elle la réponse ? ». La seconde est vérifiable ; la première ne l'est pas. On ancre ainsi la réponse dans une source contrôlée, au lieu de la laisser flotter dans les paramètres opaques du modèle.
Choix 2 — Citer les sources, parce qu'une réponse doit être vérifiable
Chaque réponse expose les passages qui l'ont fondée : pour chacun, sa provenance (document, section, et un lien permettant d'y retourner). Ce n'est pas un ornement.
Citer, c'est rendre la réponse auditable. Le lecteur n'a pas à croire l'assistant sur parole : il peut suivre le lien, lire le passage d'origine, et juger lui-même si la reformulation est fidèle. Cette traçabilité est aussi un garde-fou contre le choix 1 lui-même : si une affirmation ne peut être rattachée à aucune source du contexte, c'est le signe d'une dérive — et le système est conçu pour n'exposer que des sources réellement présentes dans le contexte récupéré, jamais des références fabriquées.
La contrainte se formule simplement : pas d'affirmation sans source dans le périmètre documentaire. Elle transforme le chatbot d'un oracle en un guide de lecture.
Choix 3 — Ne pas appeler le modèle quand il n'y a rien à dire
C'est le choix le plus marquant, et il découle des deux précédents.
Lorsqu'une question est posée, le cœur RAG cherche d'abord les passages les plus proches sémantiquement, chacun assorti d'un score de pertinence. Deux cas se présentent :
- Aucun passage, ou meilleur score sous un seuil. La documentation ne contient pas de quoi répondre. Le système renvoie alors « information absente de la documentation » — sans même appeler le modèle de langage.
- Des passages suffisamment pertinents. On assemble le contexte et l'on demande au modèle une réponse sourcée.
Le point important est le premier cas. Beaucoup de systèmes appelleraient malgré tout le modèle en le priant, par consigne, de « dire qu'il ne sait pas ». Telaria choisit de ne pas lui laisser cette latitude : s'il n'y a pas de matière, il n'y a pas de génération. Le refus d'inventer n'est pas confié à la bonne volonté du modèle ; il est décidé en amont, par une règle déterministe sur le score de récupération.
Pourquoi ce choix est meilleur qu'une consigne
Trois raisons le justifient.
- Anti-hallucination par construction. Un modèle à qui l'on ne donne rien peut toujours inventer, même prié de s'abstenir. En coupant l'appel, on retire au modèle l'occasion même d'halluciner. La garantie ne dépend plus de la formulation du prompt ; elle est structurelle.
- Traçabilité préservée. Une réponse « hors documentation » est claire et honnête. Elle n'expose pas de source (il n'y en a pas) et ne prétend rien. Le lecteur sait exactement où il en est : l'information n'existe pas dans le corpus, point.
- Économie. Un appel au modèle a un coût. Payer une génération pour produire une variante de « je ne sais pas » est un gaspillage. Décider en amont, sur le résultat de la récupération, évite l'appel inutile. Ce n'est pas l'argument principal — l'honnêteté prime — mais il va dans le même sens, ce qui est le signe d'un bon arbitrage.
Le seuil de pertinence est le pivot de ce mécanisme : trop bas, le système générerait sur des passages peu liés à la question et risquerait la réponse plausible-mais-fausse ; trop haut, il refuserait de répondre à des questions pourtant couvertes. Sa valeur relève du calibrage et n'est pas le sujet ici ; ce qui compte, c'est qu'il existe une frontière explicite entre « il y a matière » et « il n'y en a pas ».
Ce que ces choix coûtent — les arbitrages assumés
Aucun de ces partis pris n'est gratuit.
- On ne répond qu'à ce que la documentation couvre. L'assistant est volontairement borné à son corpus. Il ne mobilisera pas la culture générale du modèle pour une question hors périmètre — et c'est délibéré : un assistant documentaire qui déborde de sa documentation n'est plus fiable.
- La qualité des réponses dépend de la qualité du corpus. Puisque la réponse vient des passages récupérés, une documentation lacunaire ou mal structurée se traduit par des réponses pauvres. Le chatbot ne masque pas les trous de la doc ; il les révèle. C'est inconfortable, mais sain.
- Le seuil est un réglage à tenir. Déplacer la frontière entre « répondre » et « s'abstenir » a des conséquences directes sur l'expérience. C'est une responsabilité continue, pas un paramètre que l'on fixe une fois.
Ces coûts ont été acceptés parce qu'ils vont tous dans le même sens que les bénéfices : un assistant dont on peut vérifier ce qu'il avance, et qui préfère se taire plutôt que d'inventer.
En une phrase
On ne demande pas au modèle de langage d'être honnête : on organise le système pour qu'il n'ait ni l'occasion d'inventer (pas de génération sans matière) ni la possibilité d'affirmer sans preuve (pas de réponse sans source).
Pour aller plus loin
- Un cœur, trois surfaces — pourquoi le chatbot n'est qu'une surface d'un cœur RAG mutualisé.
- Moteur RAG — référence — le cœur consommé : récupération, scoring, provenance.
- Bundle produit doc-IA — référence — le composant qui héberge la surface chatbot.