Nvidia se fait de la pub en lançant une application de RAG locale qui utilise un de ses GPU pour fonctionner.
Sous le capot c'est Llama 2 et une simple DB vectorielle (Faiss).
Bref, plus une démo marketing qu'un vrai produit :-)
Pinecone propose un RAG sur étagère avec ingestion de données puis conversation en quelques commandes depuis un terminal.
Sous le capot ça va ingérer les données d'un répertoire dans Pinecone (embeddings OpenAI ou autre) et permettre de les utiliser dans un RAG conversationnel.
L'outil expose aussi un serveur d'API pour une intégration dans une application.
Un article très technique sur la création d'un RAG.
L'auteur explore notamment plusieurs techniques pour le chunking sur la taille des chunks, le nombre de chunks retrouvés avec des métriques de qualité.
Un article sur l'architecture d'un RAG qui revient en détails sur les 4 composants principaux:
- data layer: ingestion des données et contrôle d'accès
- LLM layer: génération de la réponse augmentée
- reporting layer: monitoring et statistiques d'utilisation du RAG
- application layer: API et interfaces utilisateur
Un autre outil de RAG pour la documentation orienté développeurs.
C'est utilisable autant pour les questions internes d'une équipe sur son produit que par des développeurs externes intégrant des API.
Un RAG de recherche dans une documentation.
Ça permet de faire une recherche "instantanée" comme avec Algolia par exemple mais aussi un RAG avec réponse en langage naturel à partir des sources/
Une méta-étude qui regroupe les différents travaux autour des RAG.
C'est un inventaire assez exhaustif de toutes les techniques de construction et d'amélioration d'un RAG et donc un must-read avant de se lancer en production.
Un exemple pratique d'un RAG hybride avec recherche vectorielle + recherche "classique" avec scoring par mots clés et filtres.
C'est ce qu'on pourrait aussi avoir en utilisant Elasticsearch avec ses fonctions de scoring et sa recherche vectorielle knn.
Les résultats sont bien sur meilleurs que du vectoriel classique.
Un projet soutenu par Firefox qui sauvegarde les sites que vous visitez puis les utilise dans un RAG local construit avec PrivateGPT.
Cela permet de chercher dans les sites qu'on a pu visiter plutôt que tout internet.
Une vidéo qui résume les nouvelles fonctionnalités de Github Copilot.
On a notamment des Agents qu'il est capable d'invoquer pour poser des questions spécifiques. Ce sont des RAGs.
Par exemple @workspace
permet de poser des questions avec les fichiers du projet pour trouver un composant en particulier.
https://code.visualstudio.com/blogs/2023/11/13/vscode-copilot-smarter
Une autre méthode pour améliorer un RAG.
Ici après une première récupération et injection de documents, on va utiliser chaque phrase du LLM pour récupérer de nouveaux documents potentiels à ingérer lors de la génération.
Cela permet d'aller récupérer et injecter d'autres concepts qui ressortent lors des phases de restitution du LLM.
HyDE est une méthode pour améliorer la recherche d'un RAG.
Concrètement on prend la demande d'origine et on va générer plusieurs documents à partir de cette demande.
Ces documents vont avoir des champs sémantiques différents pour espérer retrouver un nombre plus importants de documents.
Par exemple, avec la demande suivante "Est-il possible d'ajouter un module de formation obligatoire à un utilisateur?"
Si on a 3 sources de données avec des profils rédacteurs différents alors on va demander à GPT de générer des réponses imaginaires:
- Github: "écrit une réponse hypothétique à cette demande du point de vue d'un développeur"
- Notion: "écrit une réponse hypothétique à cette demande du point de vue d'un Product Owner"
Un article qui compare différentes bases de données vectorielles pour stocker les embeddings des LLMs et faire de la recherche sémantique.
A noter que si vous avez déjà Postgres ou Elasticsearch, les deux proposent un mode vectoriel.
Les bases de données dédiées aux vecteurs comme Qdrant ou Pinecone ne sont vraiment intéressantes que pour des gros volumes (> 100 000 vecteurs)
Un framework RAG qui est déjà connecté à pleins d'outils et les synchronise dans des bases de données vectorielles.
Une méthode de résolution de tâche qui s'apparente à un Graph Of Though (GOT) et qui permet d'améliorer la qualité d'une réponse à une question.
Ce qu'ils appellent module pourrait se traduire par Agent LLM.
La question est d'abord analysée par un Agent "Branch" qui va générer des angles d'évaluation de la pertinence d'une future réponse.
Ensuite dans l'Agent "Solve", on fait répondre à la question par le LLM (on génère plusieurs réponses: A, B, C, etc) et on va ensuite faire générer un feedback sur les réponses en fonction des critères de chaque branche.
Finalement c'est l'Agent "Merge" qui va s'occuper de récupérer les feedback sur les réponses puis il va décider quelle réponse était la mieux entre A, B et C.
Excellente introduction sur RAG.
Les connaissances des LLMs sont "bloquées" dans le temps alors il est nécessaire des leur fournir des documents en provenance de source externes pour répondre à des questions.
Souvent on va stocker ces documents sous la forme d'embeddings dans des bases de données vectorielles. Cela permet de faire des recherches sémantiques et d'incorporer les documents à propos du sujet de la question posée au LLM.
Présentation d'un sujet de recherche autour des RAG afin d'améliorer leurs performances dans des cas ou certains documents insérés dans le prompt contiennent des informations sémantiquement proches mais non pertinentes.
Dans le cadre d'un LLM, la reflection consiste à le faire réfléchir sur la pertinence des informations qu'il a extraites.