Arrêter les hallucinations des chatbots : RAG, recherche vectorielle, segmentation en blocs et mécanismes de contrôle.
Une solution de conception de système pour un chatbot d’assistance qui crée des politiques : RAG, embeddings et recherche ANN, taille des blocs, prompts de contextualisation, limites de contexte et surveillance.
Un chatbot de support est interrogé au sujet de la politique de remboursement de l’entreprise et en invente une. Cette politique n’existe pas, mais le client s’y conforme et l’entreprise finit par la respecter. C’est là le problème d’hallucination sous sa forme la plus coûteuse, et c’est un sujet préféré lors des entretiens de conception de systèmes, car il relie l’infrastructure d’intelligence artificielle à l’architecture classique.
Pourquoi les modèles inventent-ils des choses
Un grand modèle de langage est un générateur de texte probabiliste. Il ne connaît pas les faits, il prédit le token suivant le plus plausible. Lorsque la réponse n’est pas présente dans ses données d’entraînement ou dans son contexte, il produit quelque chose qui semble correct mais ne l’est pas. Si le texte d’entraînement contient de nombreuses politiques de remboursement d’autres entreprises, le modèle générera une politique qui correspond au schéma, même si elle est erronée pour cette entreprise.
Ce n’est pas vraiment une erreur, mais plutôt une conséquence du fonctionnement de la technologie. Le fine-tuning seul ne suffit pas non plus, car il est impossible d’intégrer tous les faits possibles dans les poids du modèle. La principale solution est la génération augmentée par récupération d’informations, ou RAG : au lieu de demander au modèle de répondre en se basant uniquement sur ses paramètres, on récupère d’abord des documents pertinents et on les inclut dans la demande.
Un exemple d’application concerne un chatbot de support client qui répond aux questions concernant les produits, les politiques et la résolution de problèmes. Il donne des réponses assurées, mais parfois prétend qu’un produit possède une fonctionnalité qui lui manque ou invente des politiques. Comment s’assurer que ses réponses soient basées sur la documentation réelle ?
Les sujets à aborder dans une bonne réponse incluent :
- les raisons pour lesquelles les modèles génèrent des hallucinations et pourquoi le fine-tuning ne suffit pas
- le processus RAG consistant à récupérer du contexte avant de générer une réponse
- les bases de données vectorielles et la recherche sémantique basée sur les embeddings
Comment RAG réduit les hallucinations
Avec RAG, le système récupère d’abord du matériel pertinent dans une base de connaissances et l’intègre à l’encadrement en tant que contexte. Sans cela, le modèle devine en se basant sur ses paramètres. Avec cela, le modèle lit la réponse dans les documents fournis. Il génère toujours des tokens, mais le contexte le restreint. Si les documents indiquent qu’il n’y a pas de remboursement, le modèle ne inventera pas une période de retour de 30 jours.
Bases de données vectorielles et embeddings
Comment le système trouve-t-il les documents appropriés ? Chaque document est converti en une représentation vectorielle, c’est-à-dire une représentation numérique à haute dimension de son sens, et la requête est traitée de la même manière. La base de données vectorielle renvoie les documents dont les représentations vectorielles sont les plus proches de celles de la requête.
Quatre composants assurent ce travail :
- Modèle d’embedding. Il associe du texte à des vecteurs de manière à ce que des textes similaires produisent des vecteurs similaires. Parmi les options figurent text-embedding-3-small d’OpenAI, qui compte 1536 dimensions, ainsi que des modèles open source tels que BGE ou E5.
- Base de données vectorielle. Elle stocke les embeddings et prend en charge la recherche par voisin le plus proche approximatif (ANN). Parmi les choix on trouve Pinecone géré, ainsi que Weaviate, Qdrant, pgvector (une extension de PostgreSQL) et Milvus.
Chunking
Un document de politique de 50 pages ne peut pas être récupéré dans son intégralité, il doit donc être divisé en parties. La taille des chunks influence à la fois la précision de la récupération et l’efficacité d’utilisation de la fenêtre de contexte.
- Un fragment trop petit perd son contexte. Il peut s’agir de la phrase « Les articles endommagés pendant le transport ne sont pas » avec le reste de la phrase dans le fragment suivant, ce qui empêche le modèle de répondre correctement.
- Un fragment trop grand dilue le signal utile avec du texte irrelevant et remplit la fenêtre de bruit.
- La superposition protège contre les limites entre fragments. Une fenêtre glissante avec une superposition de 10 à 20 % empêche les informations de rester coincées entre les fragments.
Une valeur par défaut appropriée pour la documentation consiste à diviser le texte par les titres de section, à limiter la taille des fragments à environ 500 à 1000 tokens et à assurer une superposition de 50 à 100 tokens entre les fragments voisins. Chaque fragment doit être autonome, représentant une pensée complète.
La conception des prompts en tant que deuxième ligne de défense
Même en cas de récupération d’informations, un modèle peut ignorer le contexte et inventer des réponses de toute façon ; il est donc essentiel que la demande le lie fermement au matériel fourni. Les éléments clés sont :
- Un rôle. Une phrase comme "Vous êtes un assistant de support client" définit le personnage à adopter.
- Un ancrage dans le contexte. Une instruction exigeant de répondre uniquement à partir du contexte fourni empêche le modèle d’utiliser des informations mémorisées ailleurs.
- Une solution en cas d’incertitude. Dire au modèle de préciser qu’il ne peut pas répondre lorsque le contexte ne contient pas la réponse est l’instruction la plus importante. Sans elle, le modèle devine.
- Des citations. Exiger des sources documentaires oblige le modèle à attribuer ses affirmations, ce qui rend plus difficile la fabrication de contenus falsifiés.
- Une interdiction des connaissances extérieures. Une interdiction explicite d’utiliser des informations en dehors du contexte renforce encore la règle d’ancrage.
Gestion de la fenêtre de contexte
Que se passe-t-il si les fragments pertinents ne tiennent pas, ou si une question comporte plusieurs parties nécessitant de nombreux fragments ? Les modèles modernes disposent de grandes fenêtres, comme 128 K de tokens pour GPT-4o et jusqu’à 1 M pour Gemini, mais remplir ces fenêtres de matériel secondaire diminue la qualité des réponses. Quatre stratégies peuvent aider :
- Classer par pertinence. Récupérer dix fragments, les classer en fonction de leur score et les ajouter du meilleur au pire jusqu’à épuisement du budget de tokens, en supprimant d’abord les moins pertinents.
- Décomposer la requête. Pour une question comme "Parlez-moi de la politique de remboursement et des délais d’expédition", la diviser en sous-requêtes, les traiter chacune séparément et répondre aux deux dans une seule réponse.
- Résumer les sujets étendus. Lorsqu’un sujet couvre de nombreux fragments, demander au modèle de les résumer d’abord et utiliser ce résumé comme contexte pour la réponse finale.
L’architecture complète
En résumé, les principales décisions sont les suivantes :
- Chunking sémantique. Division aux frontières naturelles telles que les titres et les paragraphes, avec des segments d’environ 500 tokens et une superposition de 50 tokens, chacun étant autonome.
- Récupération en deux étapes. La recherche ANN produit 20 candidats, puis un réclassificateur à base de cross-encoder sélectionne les 3 meilleurs.
- Basse température. Une valeur d’environ 0,2 sur une échelle de 0 à 2 rend le modèle moins inventif et diminue les risques de fabrication de contenus.
À surveiller
- Taux d’hallucinations. Pourcentage de réponses contenant des informations absentes du contexte fourni, mesuré par une évaluation automatisée ou un examen humain. Un objectif raisonnable est inférieur à 1 pour cent.
Les quatre niveaux de défense
Les hallucinations ne signifient pas que l’IA est défectueuse. C’est un problème de conception. Un modèle non contraint choisit toujours la plausibilité plutôt que l’exactitude, car c’est ce pour quoi il a été entraîné. Quatre niveaux permettent de y remédier :
- Récupération. Fournir des documents pertinents afin que le modèle réponde à partir d’eux et non de sa mémoire.
- Induction. Restreindre le modèle au contexte donné, lui demander d’avouer son ignorance et exiger des citations.
- Règles de contrôle. Filtrer les sorties, vérifier les citations et calculer des scores de confiance, en rejetant tout ce qui ne peut pas être vérifié par rapport au contexte.
La règle la plus importante : un chatbot qui dit avec assurance « Je ne sais pas » est bien supérieur à celui qui invente une réponse avec assurance.