Le RAG est l’une des meilleures (et plus simples) façons de spécialiser un LLM sur vos propres données, mais appliquer avec succès RAG en pratique implique plus que simplement assembler des modèles préentraînés…
Qu’est-ce que RAG ? Au plus haut niveau, RAG est une combinaison d’un LLM préentraîné avec une base de connaissances externe (interrogeable). Au moment de l’inférence, nous pouvons rechercher un contexte textuel pertinent dans cette base de connaissances et l’ajouter à la requête du LLM. Ensuite, le LLM peut utiliser ses capacités d’apprentissage en contexte pour exploiter ce contexte ajouté et produire une sortie plus factuelle/ancrée.
Implémentation simple. Nous pouvons créer un pipeline RAG minimal en utilisant un modèle d’embedding préentraîné et un LLM en :
- Séparant la base de connaissances en morceaux de taille fixe.
- Vectorisant chaque morceau avec un modèle d’embedding.
- Vectorisant la requête d’entrée au moment de l’inférence et utilisant la recherche vectorielle pour trouver des morceaux pertinents.
- Ajoutant des morceaux pertinents à la requête du LLM.
Cette approche simple fonctionne, mais construire une application RAG performante nécessite bien plus. Voici cinq voies que nous pouvons suivre pour affiner notre pipeline RAG.
(1) Recherche hybride : En fin de compte, la composante de recherche de RAG n’est qu’un moteur de recherche. Ainsi, nous pouvons améliorer considérablement la recherche en utilisant des idées de la recherche. Par exemple, nous pouvons effectuer à la fois une recherche lexicale et vectorielle (c’est-à-dire une recherche hybride), ainsi qu’un réarrangement via un cross-encoder pour récupérer les données les plus pertinentes.
(2) Nettoyer les données : Les données utilisées pour RAG peuvent provenir de plusieurs sources avec différents formats (par exemple, pdf, markdown et plus), ce qui pourrait entraîner des artefacts (par exemple, logos, icônes, symboles spéciaux et blocs de code) qui pourraient perturber le LLM. Nous pouvons résoudre cela en créant un pipeline de prétraitement ou de nettoyage des données (manuellement ou en utilisant LLM-comme-juge) qui normalise, filtre et extrait correctement les données pour RAG.
(3) Ingénierie de la requête : Appliquer avec succès RAG ne se résume pas seulement à récupérer le bon contexte, l’ingénierie de la requête joue un rôle massif. Une fois que nous avons les données pertinentes, nous devons créer une requête qui i) inclut ce contexte et ii) le formate de manière à obtenir une sortie ancrée du LLM. Tout d’abord, nous avons besoin d’un LLM avec une fenêtre de contexte suffisamment grande. Ensuite, nous pouvons adopter des stratégies comme la diversité et la sélection perdue-au-milieu pour nous assurer que le contexte est correctement incorporé dans la requête.
(4) Évaluation : Nous devons également mettre en œuvre des pipelines d’évaluation reproductibles et précis pour RAG qui capturent les performances de l’ensemble du système, ainsi que de ses composants individuels. Nous pouvons évaluer le pipeline de recherche à l’aide de métriques de recherche typiques (DCG et nDCG), tandis que la composante de génération de RAG peut être évaluée avec une approche LLM-comme-juge. Pour évaluer l’ensemble du pipeline RAG, nous pouvons également tirer parti de systèmes comme RAGAS.
(5) Collecte de données : Dès que nous déployons notre application RAG, nous devrions commencer à collecter des données qui peuvent être utilisées pour améliorer l’application. Par exemple, nous pouvons affiner les modèles de recherche sur des paires de requêtes d’entrée avec des morceaux textuels pertinents, affiner le LLM sur des sorties de haute qualité, ou même effectuer des tests AB pour mesurer quantitativement si les changements apportés à notre pipeline RAG bénéficient aux performances.
Qu’est-ce qui vient ensuite ? Au-delà des idées explorées ci-dessus, il existe une variété de voies pour améliorer RAG. Une fois que nous avons mis en place une suite d’évaluation robuste, nous pouvons tester diverses améliorations à l’aide de métriques hors ligne et de tests AB en ligne.