Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique la génération augmentée de récupération (RAG) et les développeurs qui ont besoin de créer une solution RAG prête pour la production.
Pour en savoir plus sur deux façons de créer une application « conversation sur vos données », l’un des principaux cas d’utilisation de l’IA générative pour les entreprises, consultez Augmenter les llms avec RAG ou un réglage précis.
Le diagramme suivant montre les principales étapes de RAG :
Ce processus est appelé RAG naïf. Il vous aide à comprendre les parties de base et les rôles dans un système de conversation basé sur RAG.
Les systèmes RAG réels nécessitent davantage de prétraitement et de post-traitement pour gérer les articles, les requêtes et les réponses. Le diagramme suivant montre une configuration plus réaliste, appelée rag avancé :
Cet article vous donne une infrastructure simple pour comprendre les phases principales d’un système de conversation basé sur RAG réel :
- Phase d’ingestion
- Phase de pipeline d’inférence
- Phase d’évaluation
Consommation
L’ingestion signifie enregistrer les documents de votre organisation afin de trouver rapidement des réponses aux utilisateurs. Le principal défi est de trouver et d’utiliser les parties de documents qui correspondent le mieux à chaque question. La plupart des systèmes utilisent des incorporations vectorielles et la recherche de similarité cosinus pour faire correspondre les questions au contenu. Vous obtenez de meilleurs résultats lorsque vous comprenez le type de contenu (comme les modèles et le format) et organisez vos données correctement dans la base de données vectorielle.
Lors de la configuration de l’ingestion, concentrez-vous sur les étapes suivantes :
- Prétraitement et extraction du contenu
- Stratégie de segmentation
- Organisation de segmentation
- Stratégie de mise à jour
Prétraitement et extraction du contenu
La première étape de la phase d’ingestion consiste à prétraiter et à extraire le contenu de vos documents. Cette étape est cruciale, car elle garantit que le texte est propre, structuré et prêt pour l’indexation et la récupération.
Un contenu propre et précis améliore le fonctionnement d’un système de conversation basé sur RAG. Commencez par examiner la forme et le style des documents que vous souhaitez indexer. Suivez-ils un modèle défini, comme la documentation ? Si ce n’est pas le cas, quelles questions ces documents pourraient-ils répondre ?
Au minimum, configurez votre pipeline d’ingestion pour :
- Normaliser les formats de texte
- Gérer des caractères spéciaux
- Supprimer un contenu non lié ou ancien
- Suivre différentes versions du contenu
- Gérer le contenu avec des onglets, des images ou des tableaux
- Extraire les métadonnées
Certaines de ces informations, telles que les métadonnées, peuvent vous aider lors de la récupération et de l’évaluation si vous la conservez avec le document dans la base de données vectorielle. Vous pouvez également la combiner avec le bloc de texte pour améliorer l’incorporation de vecteurs du bloc.
Stratégie de segmentation
En tant que développeur, décidez comment décomposer des documents volumineux en blocs plus petits. La segmentation permet d’envoyer le contenu le plus pertinent au LLM afin qu’il puisse mieux répondre aux questions des utilisateurs. Pensez également à la façon dont vous allez utiliser les blocs après les avoir obtenu. Essayez les méthodes courantes du secteur et testez votre stratégie de segmentation dans votre organisation.
Lors de la segmentation, pensez à :
- Optimisation de la taille de bloc : choisissez la meilleure taille de bloc et comment la fractionner ( par section, paragraphe ou phrase).
- Chevauchement et segments de fenêtre glissante : déterminez si les blocs doivent être séparés ou superposés. Vous pouvez également utiliser une approche de fenêtre glissante.
- Small2Big : Si vous fractionnez par phrase, organisez le contenu afin que vous puissiez trouver des phrases voisines ou le paragraphe complet. Donner ce contexte supplémentaire au LLM peut l’aider à mieux répondre. Pour plus d’informations, consultez la section suivante.
Organisation de segmentation
Dans un système RAG, la façon dont vous organisez vos données dans la base de données vectorielle facilite et accélère la recherche des informations appropriées. Voici quelques façons de configurer vos index et recherches :
- Index hiérarchiques : utilisez des couches d’index. Un index de synthèse de niveau supérieur trouve rapidement un petit ensemble de blocs probables. Un index de deuxième niveau pointe vers les données exactes. Cette configuration accélère les recherches en réduisant les options avant de regarder en détail.
- Index spécialisés : choisissez des index qui correspondent à vos données. Par exemple, utilisez des index basés sur des graphiques si vos blocs se connectent les uns aux autres, comme dans les réseaux de citations ou les graphiques de connaissances. Utilisez des bases de données relationnelles si vos données se trouve dans des tables et filtrez avec des requêtes SQL.
- Index hybrides : combinez différentes méthodes d’indexation. Par exemple, utilisez d’abord un index récapitulative, puis un index basé sur un graphique pour explorer les connexions entre des blocs.
Optimisation de l’alignement
Rendre les blocs récupérés plus pertinents et plus précis en les mettant en correspondance avec les types de questions auxquelles ils répondent. Une façon est de créer un exemple de question pour chaque segment qui montre quelle question il répond le mieux. Cette approche vous aide de plusieurs façons :
- Correspondance améliorée : lors de la récupération, le système compare la question de l’utilisateur à ces exemples de questions pour trouver le meilleur segment. Cette technique améliore la pertinence des résultats.
- Données d’apprentissage pour les modèles Machine Learning : ces paires de segments de questions aident à entraîner les modèles Machine Learning dans le système RAG. Les modèles apprennent quels segments répondent aux types de questions.
- Gestion directe des requêtes : si la question d’un utilisateur correspond à un exemple de question, le système peut rapidement trouver et utiliser le bloc approprié, accélérant ainsi la réponse.
L’exemple de question de chaque segment agit comme une étiquette qui guide l’algorithme de récupération. La recherche devient plus ciblée et consciente du contexte. Cette méthode fonctionne bien lorsque les segments couvrent de nombreuses rubriques ou types d’informations différents.
Stratégies de mise à jour
Si votre organisation met souvent à jour les documents, vous devez conserver votre base de données à jour afin que le récupérateur puisse toujours trouver les dernières informations. Le composant retriever est la partie du système qui recherche la base de données vectorielle et retourne les résultats. Voici quelques façons de maintenir votre base de données vectorielle à jour :
Mises à jour incrémentielles :
- Intervalles réguliers : définissez les mises à jour pour qu’elles s’exécutent selon une planification (par exemple, quotidienne ou hebdomadaire) en fonction de la fréquence à laquelle les documents changent. Cette action conserve la base de données fraîche.
- Mises à jour basées sur les déclencheurs : configurez les mises à jour automatiques lorsque quelqu’un ajoute ou modifie un document. Le système réindexe uniquement les parties concernées.
mises à jour partielles:
- Réindexation sélective : Mettez à jour uniquement les parties de la base de données qui ont changé, pas toute la chose. Cette technique permet de gagner du temps et des ressources, en particulier pour les jeux de données volumineux.
- Encodage delta : stockez uniquement les modifications entre les anciens et les nouveaux documents, ce qui réduit la quantité de données à traiter.
Gestion des versions :
- Capture instantanée : enregistrez les versions de votre document définies à différents moments. Cette action vous permet de revenir en arrière ou de restaurer des versions antérieures si nécessaire.
- Contrôle de version de document : utilisez un système de contrôle de version pour suivre les modifications et conserver un historique de vos documents.
Mises à jour en temps réel :
- Traitement de flux : utilisez le traitement de flux pour mettre à jour la base de données vectorielle en temps réel lorsque les documents changent.
- Interrogation dynamique : utilisez des requêtes actives pour obtenir des réponses up-to-date, parfois en mélangeant des données actives avec des résultats mis en cache pour accélérer.
techniques d’optimisation :
- Traitement par lots : regroupez les modifications et appliquez-les ensemble pour économiser des ressources et réduire la surcharge.
-
Approches hybrides : mélanger différentes stratégies :
- Utilisez des mises à jour incrémentielles pour les petites modifications.
- Utilisez la réindexation complète pour les mises à jour significatives.
- Suivez et documentez les principales modifications apportées à vos données.
Choisissez la stratégie de mise à jour ou la combinaison qui répond à vos besoins. Réfléchir à:
- Taille du corpus de documents
- Fréquence de mise à jour
- Besoins en données en temps réel
- Ressources disponibles
Passez en revue ces facteurs pour votre application. Chaque méthode a des compromis en complexité, en coût et en combien de temps les mises à jour s’affichent.
Pipeline d’inférence
Vos articles sont désormais segmentés, vectorisés et stockés dans une base de données vectorielle. Ensuite, concentrez-vous sur l’obtention des meilleures réponses de votre système.
Pour obtenir des résultats précis et rapides, réfléchissez à ces questions clés :
- La question de l’utilisateur est-elle claire et susceptible d’obtenir la bonne réponse ?
- La question interrompt-elle les règles de l’entreprise ?
- Pouvez-vous réécrire la question pour aider le système à trouver de meilleures correspondances ?
- Les résultats de la base de données correspondent-ils à la question ?
- Devez-vous modifier les résultats avant de les envoyer au LLM pour vous assurer que la réponse est pertinente ?
- La réponse du LLM répond-elle entièrement à la question de l’utilisateur ?
- La réponse suit-elle les règles de votre organisation ?
L’ensemble du pipeline d’inférence fonctionne en temps réel. Il n’existe aucun moyen unique de configurer vos étapes de prétraitement et de post-traitement. Vous utilisez un mélange d’appels de code et LLM. L’un des principaux compromis est l’équilibrage de la précision et de la conformité avec les coûts et la vitesse.
Examinons les stratégies pour chaque étape du pipeline d’inférence.
Étapes de prétraitement des requêtes
Le prétraitement des requêtes démarre juste après l’envoi d’une question à l’utilisateur :
Ces étapes permettent de s’assurer que la question de l’utilisateur correspond à votre système et est prête à trouver les meilleurs blocs d’articles à l’aide de la similarité cosinus ou de la recherche « voisin le plus proche ».
Vérification de stratégie : utilisez la logique pour repérer et supprimer ou marquer du contenu indésirable, comme des données personnelles, une mauvaise langue ou des tentatives de rupture de règles de sécurité (appelées « jailbreaking »).
Réécriture des requêtes : modifiez la question si nécessaire : développez les acronymes, supprimez l’lang ou réhrasez-le pour vous concentrer sur de plus grandes idées (invite de retour en arrière).
Une version spéciale de l’invite de retours à pas est des incorporations de documents hypothétiques (HyDE). HyDE a la réponse LLM à la question, fait une incorporation à partir de cette réponse, puis recherche la base de données vectorielle avec elle.
Sous-requêtes
Les sous-requêtes décomposent une question longue ou complexe en questions plus petites et plus faciles. Le système répond à chaque petite question, puis combine les réponses.
Par exemple, si quelqu’un demande : « Qui a apporté des contributions plus importantes à la physique moderne, Albert Einstein ou Niels Bohr ? » vous pouvez le diviser en :
- Sous-requête 1 : « Qu’est-ce que Albert Einstein a contribué à la physique moderne ? »
- Sous-requête 2 : « Qu’est-ce que Niels Bohr a contribué à la physique moderne ? »
Les réponses peuvent inclure :
- Pour Einstein : la théorie de la relativité, l’effet photoélectrique et E=mc^2.
- Pour Bohr : le modèle d’atome d’hydrogène, travailler sur la mécanique quantique et le principe de l’opacité.
Vous pouvez ensuite poser des questions de suivi :
- Sous-requête 3 : « Comment les théories d’Einstein ont-ils changé la physique moderne ? »
- Sous-requête 4 : « Comment les théories de Bohr ont-ils changé la physique moderne ? »
Ces suivis examinent l’effet de chaque scientifique, comme :
- Comment le travail d’Einstein a conduit à de nouvelles idées dans la cosmologie et la théorie quantique
- Comment le travail de Bohr nous a aidés à comprendre les atomes et la mécanique quantique
Le système combine les réponses pour donner une réponse complète à la question d’origine. Cette méthode facilite la réponse aux questions complexes en les cassant en parties claires et plus petites.
Routeur de requête
Parfois, votre contenu réside dans plusieurs bases de données ou systèmes de recherche. Dans ces cas, utilisez un routeur de requête. Un routeur de requête choisit la meilleure base de données ou index pour répondre à chaque question.
Un routeur de requête fonctionne une fois que l’utilisateur pose une question, mais avant que le système recherche des réponses.
Voici comment fonctionne un routeur de requête :
- Analyse des requêtes : LLM ou un autre outil examine la question pour déterminer le type de réponse nécessaire.
- Sélection d’index : le routeur sélectionne un ou plusieurs index qui correspondent à la question. Certains index sont meilleurs pour les faits, d’autres pour des opinions ou des sujets spéciaux.
- Répartition des requêtes : le routeur envoie la question à l’index ou aux index choisis.
- Agrégation des résultats : le système collecte et combine les réponses des index.
- Génération de réponses : le système crée une réponse claire à l’aide des informations qu’il a trouvées.
Utilisez différents index ou moteurs de recherche pour :
- Spécialisation de type de données : certains index se concentrent sur les actualités, d’autres sur des documents universitaires ou sur des bases de données spéciales telles que les informations médicales ou juridiques.
- Optimisation du type de requête : certains index sont rapides pour des faits simples (comme des dates), tandis que d’autres gèrent des questions complexes ou d’experts.
- Différences algorithmiques : différents moteurs de recherche utilisent différentes méthodes, telles que la recherche vectorielle, la recherche par mot clé ou la recherche sémantique avancée.
Par exemple, dans un système de conseils médicaux, vous pouvez avoir :
- Index d’un document de recherche pour obtenir des détails techniques
- Index d’étude de cas pour des exemples réels
- Index d’intégrité général pour les questions de base
Si quelqu’un demande les effets d’un nouveau médicament, le routeur envoie la question à l’indice du document de recherche. Si la question concerne les symptômes courants, elle utilise l’index d’intégrité général pour une réponse simple.
Étapes de traitement post-récupération
Le traitement post-récupération se produit une fois que le système trouve des blocs de contenu dans la base de données vectorielle :
Ensuite, vérifiez si ces blocs sont utiles pour l’invite LLM avant de les envoyer au LLM.
Gardez ces choses à l’esprit :
- Des informations supplémentaires peuvent masquer les détails les plus importants.
- Les informations non pertinentes peuvent rendre la réponse pire.
Attention à l’aiguille dans un problème de botte de foin : les llms accordent souvent plus d’attention au début et à la fin d’une invite que le milieu.
En outre, n’oubliez pas la fenêtre de contexte maximale de LLM et le nombre de jetons nécessaires pour les invites longues, en particulier à grande échelle.
Pour gérer ces problèmes, utilisez un pipeline de traitement post-récupération avec des étapes telles que :
- Résultats de filtrage : conservez uniquement les blocs qui correspondent à la requête. Ignorez le reste lors de la génération de l’invite LLM.
- Re-classement : placez les blocs les plus pertinents au début et à la fin de l’invite.
- Compression d’invite : utilisez un petit modèle bon marché pour résumer et combiner des blocs dans une seule invite avant de l’envoyer au LLM.
Étapes de traitement postérieures à l’achèvement
Le traitement post-achèvement se produit après la question de l’utilisateur et tous les blocs de contenu accèdent au LLM :
Une fois que le LLM donne une réponse, vérifiez sa précision. Un pipeline de traitement post-achèvement peut inclure :
- Vérification des faits : recherchez des instructions dans la réponse qui prétend être des faits, puis vérifiez si elles sont vraies. Si une vérification des faits échoue, vous pouvez demander à nouveau au LLM ou afficher un message d’erreur.
- Vérification de stratégie : assurez-vous que la réponse n’inclut pas de contenu dangereux pour l’utilisateur ou votre organisation.
Évaluation
L’évaluation d’un système comme celui-ci est plus complexe que l’exécution de tests unitaires ou d’intégration réguliers. Réfléchissez à ces questions :
- Les utilisateurs sont-ils satisfaits des réponses ?
- Les réponses sont-elles exactes ?
- Comment collecter les commentaires des utilisateurs ?
- Existe-t-il des règles sur les données que vous pouvez collecter ?
- Pouvez-vous voir chaque étape prise par le système quand les réponses sont incorrectes ?
- Conservez-vous des journaux détaillés pour l’analyse de la cause racine ?
- Comment mettez-vous à jour le système sans rendre les choses pires ?
Capture et action sur les commentaires des utilisateurs
Collaborez avec l’équipe de confidentialité de votre organisation pour concevoir des outils de capture de commentaires, des données système et la journalisation pour les analyses d’investigation et la cause racine d’une session de requête.
L’étape suivante consiste à créer un pipeline d’évaluation. Un pipeline d’évaluation facilite et accélère la révision des commentaires et explique pourquoi l’IA a donné certaines réponses. Vérifiez chaque réponse pour voir comment l’IA l’a produite, si les blocs de contenu appropriés ont été utilisés et comment les documents ont été fractionnés.
En outre, recherchez des étapes de prétraitement ou de post-traitement supplémentaires susceptibles d’améliorer les résultats. Cette révision étroite trouve souvent des lacunes de contenu, en particulier lorsqu’aucune documentation correcte n’existe pour la question d’un utilisateur.
Vous avez besoin d’un pipeline d’évaluation pour gérer ces tâches à grande échelle. Un bon pipeline utilise des outils personnalisés pour mesurer la qualité des réponses. Il vous aide à voir pourquoi l’IA a donné une réponse spécifique, les documents qu’il a utilisés et la façon dont le pipeline d’inférence a fonctionné.
Jeu de données Golden
Une façon de vérifier le fonctionnement d’un système de conversation RAG consiste à utiliser un jeu de données d’or. Un jeu de données d’or est un ensemble de questions avec des réponses approuvées, des métadonnées utiles (telles que le type de rubrique et de question), des liens vers des documents sources et différentes façons dont les utilisateurs peuvent poser la même chose.
Un jeu de données d’or montre le « meilleur scénario de cas ». Les développeurs l’utilisent pour voir comment fonctionne le système et exécuter des tests lorsqu’ils ajoutent de nouvelles fonctionnalités ou mises à jour.
Évaluation des dommages
La modélisation des dommages vous permet de repérer les risques possibles dans un produit et de planifier les moyens de les réduire.
Un outil d’évaluation des préjudices doit inclure ces fonctionnalités clés :
- Identification des parties prenantes : vous aide à répertorier et regrouper tous les utilisateurs concernés par la technologie, y compris les utilisateurs directs, les personnes affectées indirectement, les générations futures et même l’environnement.
- Catégories de préjudices et descriptions : répertorie les préjudices possibles, tels que la perte de vie privée, la détresse émotionnelle ou les dommages économiques. Vous guide dans des exemples et vous aide à réfléchir à des problèmes attendus et inattendus.
- Évaluations de gravité et de probabilité : vous aide à juger la gravité et la probabilité de chaque préjudice, de sorte que vous pouvez décider ce qu’il faut corriger en premier. Vous pouvez utiliser des données pour prendre en charge vos choix.
- Stratégies d’atténuation : suggère des moyens de réduire les risques, tels que la modification de la conception du système, l’ajout de mesures de protection ou l’utilisation d’autres technologies.
- Mécanismes de commentaires : vous permet de recueillir des commentaires des parties prenantes afin de continuer à améliorer le processus à mesure que vous en apprenez davantage.
- Documentation et création de rapports : facilite la création de rapports qui montrent ce que vous avez trouvé et ce que vous avez fait pour réduire les risques.
Ces fonctionnalités vous aident à trouver et à corriger les risques, et vous aident également à créer une IA plus éthique et responsable en réfléchissant à tous les impacts possibles dès le départ.
Pour plus d’informations, consultez les articles suivants :
Test et vérification des dispositifs de protection
L’association rouge est essentielle : cela signifie qu’il faut agir comme un attaquant pour trouver des points faibles dans le système. Cette étape est particulièrement importante pour arrêter le jailbreak. Pour obtenir des conseils sur la planification et la gestion de l’association rouge pour l’IA responsable, consultez Planification de l’association rouge pour les modèles de langage volumineux (LLMs) et leurs applications.
Les développeurs doivent tester les dispositifs de protection du système RAG dans différents scénarios pour s’assurer qu’ils fonctionnent. Cette étape rend le système plus fort et aide également à affiner les réponses pour respecter les normes éthiques et les règles.
Considérations finales relatives à la conception de l’application
Voici quelques éléments clés à mémoriser de cet article qui peuvent vous aider à concevoir votre application :
- Générative IA non prévisible
- Modification de l’invite utilisateur et effet sur le temps et le coût
- Demandes LLM parallèles pour accélérer les performances
Pour créer une application IA générative, consultez Prise en main de la conversation à l’aide de votre propre exemple de données pour Python. Le didacticiel est également disponible pour .NET, javaet JavaScript.