Tirer parti du RAG dans la GenAI pour enseigner de nouvelles informations
Introduction
La Génération Augmentée par la Récupération (RAG) est un cadre puissant qui améliore les grands modèles de langage (LLM) en intégrant la récupération d'informations à partir de sources de connaissances externes. Ce guide se concentre sur une implémentation spécialisée de RAG utilisant des bases de données de graphes comme Neo4j, qui excellent dans la gestion de données relationnelles très connectées. Contrairement aux configurations RAG traditionnelles avec des bases de données vectorielles, la combinaison de RAG avec des bases de données de graphes offre une meilleure conscience du contexte et des informations basées sur les relations.
Dans ce guide, vous allez :
- Explorer les avantages de l'intégration de bases de données de graphes dans un cadre RAG.
- Configurer une pile GenAI avec Docker, en intégrant Neo4j et un modèle d'IA.
- Analyser une étude de cas réelle qui met en évidence l'efficacité de cette approche pour traiter des requêtes spécialisées.
Comprendre le RAG
Le RAG est un cadre hybride qui améliore les capacités des grands modèles de langage en intégrant la récupération d'informations. Il combine trois composants principaux :
- Récupération d'informations à partir d'une base de connaissances externe
- Grand Modèle de Langage (LLM) pour générer des réponses
- Plongements vectoriels pour permettre la recherche sémantique
Dans un système RAG, les plongements vectoriels sont utilisés pour représenter la signification sémantique du texte d'une manière qu'une machine peut comprendre et traiter. Par exemple, les mots "chien" et "chiot" auront des plongements similaires car ils partagent des significations similaires. En intégrant ces plongements dans le cadre RAG, le système peut combiner la puissance générative des grands modèles de langage avec la capacité d'extraire des données très pertinentes et contextuellement conscientes de sources externes.
Le système fonctionne comme suit :
- Les questions sont transformées en motifs mathématiques qui capturent leur signification
- Ces motifs aident à trouver des informations correspondantes dans une base de données
- Les informations trouvées sont ajoutées à la question d'origine avant d'être transmises au LLM
- Le LLM génère des réponses qui mélangent les connaissances inhérentes du modèle avec ces informations supplémentaires.
Pour conserver ces informations vectorielles de manière efficace, nous avons besoin d'un type spécial de base de données.
Introduction aux bases de données de graphes
Les bases de données de graphes, telles que Neo4j, sont spécifiquement conçues pour gérer des données très connectées. Contrairement aux bases de données relationnelles traditionnelles, les bases de données de graphes accordent la priorité à la fois aux entités et aux relations entre elles, ce qui les rend idéales pour les tâches où les connexions sont aussi importantes que les données elles-mêmes.
Les bases de données de graphes se distinguent par leur approche unique du stockage et de l'interrogation des données. Elles utilisent des nœuds (ou sommets) pour représenter des entités et des arêtes pour représenter les relations entre ces entités. Cette structure permet de gérer efficacement des données très connectées et des requêtes complexes, difficiles à gérer dans les systèmes de bases de données traditionnels.
Les bases de données SQL et les bases de données de graphes diffèrent considérablement dans leurs modèles de données. Les bases de données SQL utilisent une structure tabulaire avec des lignes et des colonnes, où les relations entre les entités sont établies à l'aide de clés étrangères. Cette approche fonctionne bien pour les données structurées et les relations prédéfinies. En revanche, les bases de données de graphes représentent les données sous forme de nœuds (entités) et d'arêtes (relations), ce qui rend la représentation des relations plus intuitive et flexible. Cette structure est particulièrement avantageuse pour les données complexes et interconnectées.
Une autre différence essentielle réside dans la flexibilité du schéma. Les bases de données SQL fonctionnent sur un schéma rigide, ce qui signifie que toute modification de la structure des données, comme l'ajout de nouvelles colonnes ou la modification des relations, nécessite généralement une planification minutieuse et des processus de migration. Les bases de données de graphes, cependant, sont sans schéma obligatoire, ce qui permet une bien plus grande flexibilité. De nouveaux nœuds, arêtes ou propriétés peuvent être introduits sans perturber les données existantes, ce qui permet une adaptation plus rapide aux exigences changeantes.
Implémentation pratique : tester l'efficacité du RAG
Pour illustrer la puissance des systèmes RAG en pratique, examinons une implémentation réelle en utilisant Apache NiFi comme sujet d'étude. Cette étude de cas montre comment le RAG peut améliorer la capacité d'une IA à fournir des informations précises et contextuelles sur des sujets techniques spécialisés.
Enseigner à l'IA les nouvelles technologies
Apache NiFi est un excellent exemple des limites des LLM traditionnels et de la manière dont le RAG peut les surmonter. En tant que technologie relativement récente, de nombreux LLM ont des connaissances limitées ou obsolètes à son sujet, ce qui en fait un candidat idéal pour démontrer les capacités du RAG.
Sans RAG, le LLM peut fournir des réponses générales ou reconnaître ses connaissances limitées lorsqu'on l'interroge sur des informations qui dépassent sa date de coupure. L'exemple suivant le démontre.
Question: What important events happened in 2024?
RAG: Disabled
I'm happy to help! Unfortunately, I'm a large language model, I don't have access to real-time information or events that occurred after my training data cutoff in 2024. Therefore, I cannot provide you with any important events that happened in 2024. My apologize for any inconvenience this may cause. Is there anything else I can help you with?
Mise en place de la pile GenAI avec accélération GPU sur Linux
Pour mettre en place et exécuter la pile GenAI sur un hôte Linux, exécutez l'une des commandes suivantes, soit pour une alimentation par GPU, soit par CPU :
Alimenté par GPU
git clone https://github.com/docker/genai-stack
docker compose --profile linux-gpu up -d
mv env.example .env
nano .env
Dans le fichier .env
, assurez-vous que les lignes suivantes sont commentées. Définissez vos propres informations d'identification pour la sécurité.
NEO4J_URI=neo4j://database:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password
OLLAMA_BASE_URL=http://llm-gpu:11434
Alimenté par CPU
git clone https://github.com/docker/genai-stack
docker compose --profile linux up -d
mv env.example .env
nano .env
Dans le fichier .env
, assurez-vous que les lignes suivantes sont commentées. Définissez vos propres informations d'identification pour la sécurité.
NEO4J_URI=neo4j://database:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password
OLLAMA_BASE_URL=http://llm:11434
Mise en place sur d'autres plateformes
Pour obtenir des instructions sur la façon de configurer la pile sur d'autres plateformes, consultez cette page.
Démarrage initial
Le premier démarrage peut prendre un certain temps car le système doit télécharger un grand modèle de langage.
Suivi de la progression
Nous pouvons suivre la progression du téléchargement et de l'initialisation en consultant les journaux. Exécutez la commande suivante pour afficher les journaux :
docker compose logs
Attendez les lignes spécifiques dans les journaux indiquant que le téléchargement est terminé et que la pile est prête. Ces lignes confirment généralement la réussite de la configuration et de l'initialisation.
pull-model-1 exited with code 0
database-1 | 2024-12-29 09:35:53.269+0000 INFO Started.
pdf_bot-1 | You can now view your Streamlit app in your browser.
loader-1 | You can now view your Streamlit app in your browser.
bot-1 | You can now view your Streamlit app in your browser.
Vous pouvez maintenant accéder à l'interface à l'adresse [http://localhost:8501/](http://localhost:8501/) pour poser des questions. Par exemple, vous pouvez essayer la question type :
Lorsque nous voyons ces lignes dans les journaux, les applications Web sont prêtes à être utilisées.
Notre objectif étant d'enseigner à l'IA des choses qu'elle ne connaît pas encore, nous commençons par lui poser une question simple sur Nifi à
http://localhost:8501/.
Question: What is Apache Nifi?
RAG: Disabled
Hello! I'm here to help you with your question about Apache NiFi. Unfortunately, I don't know the answer to that question. I'm just an AI and my knowledge cutoff is December 2022, so I may not be familiar with the latest technologies or software. Can you please provide more context or details about Apache NiFi? Maybe there's something I can help you with related to it.
Comme nous pouvons le voir, l'IA ne sait rien sur ce sujet car il n'existait pas au moment de sa formation, également connu sous le nom de point de coupure de l'information.
Il est maintenant temps d'enseigner à l'IA quelques nouvelles astuces. Tout d'abord, connectez-vous à http://localhost:8502/. Au lieu d'utiliser le tag "neo4j", changez-le pour le tag "apache-nifi", puis sélectionnez le bouton Import.


Une fois l'importation réussie, nous pouvons accéder à Neo4j pour vérifier les données.
Après vous être connecté à http://localhost:7474/ en utilisant les informations d'identification du fichier .env
, vous pouvez exécuter des requêtes sur Neo4j. En utilisant le langage de requête Cypher de Neo4j, vous pouvez vérifier les données stockées dans la base de données.
Pour compter les données, exécutez la requête suivante :
MATCH (n)
RETURN DISTINCT labels(n) AS NodeTypes, count(*) AS Count
ORDER BY Count DESC;
Pour exécuter cette requête, écrivez dans la case en haut et sélectionnez le bouton bleu d'exécution.


Les résultats apparaîtront ci-dessous. Ce que nous voyons ici, ce sont les informations que le système a téléchargées depuis Stack Overflow et enregistrées dans la base de données de graphes. RAG utilisera ces informations pour améliorer ses réponses.
Vous pouvez également exécuter la requête suivante pour visualiser les données :
CALL db.schema.visualization()
Pour vérifier les relations dans la base de données, exécutez la requête suivante :
CALL db.relationshipTypes()
Maintenant, nous sommes prêts à permettre à notre LLM d'utiliser ces informations. Retournez à http://localhost:8501/, activez la case à cocher RAG, et posez à nouveau la même question. Le LLM fournira maintenant une réponse plus détaillée.


Le système fournit des informations complètes et précises en puisant dans la documentation technique actuelle.
Question: What is Apache Nifi?
RAG: Enabled
Answer:
Apache NiFi is an open-source, distributed data processing system that allows you to collect, transform, and transport data across various sources and sinks. It provides a graphical user interface for designing and managing data flows, as well as a set of APIs for integrating with other systems.
According to this Stack Overflow question, the free Neo4J JDBC driver doesn't understand SQL, only Cypher, so you would need to use a non-free BI Connector to connect to Neo4j from Apache Drill.
Additionally, this Stack Overflow question suggests that Apache POI does work in a Neo4j User Defined Function. However, there may be an unknown glitch in the standalone UDF mentioned in the initial question.
To export data from Neo4j to Excel using APOC Extended procedures, you can use apoc.export.xls.query which takes a Cypher query and exports the results to an Excel file.
References:
How to connect and query Neo4j Database on Apache Drill?
Is a Neo4j UDF compatible with Apache POI?
Gardez à l'esprit que de nouvelles questions seront ajoutées à Stack Overflow, et en raison du caractère aléatoire inhérent à la plupart des modèles d'IA, les réponses peuvent varier et ne seront pas identiques à celles de cet exemple.
N'hésitez pas à recommencer avec un autre tag Stack Overflow. Pour supprimer toutes les données dans Neo4j, vous pouvez utiliser la commande suivante dans l'interface Web de Neo4j :
MATCH (n)
DETACH DELETE n;
Pour des résultats optimaux, choisissez un tag que le LLM ne connaît pas.
Quand tirer parti du RAG pour des résultats optimaux
La Génération Augmentée par la Récupération (RAG) est particulièrement efficace dans les scénarios où les Grands Modèles de Langage (LLM) standards échouent. Les trois domaines clés où le RAG excelle sont les limitations de connaissances, les exigences commerciales et l'efficacité des coûts. Ci-dessous, nous explorons ces aspects plus en détail.
Surmonter les limitations de connaissances
Les LLM sont entraînés sur un ensemble de données fixe jusqu'à un certain point dans le temps. Cela signifie qu'ils n'ont pas accès à :
- Informations en temps réel : les LLM ne mettent pas continuellement à jour leurs connaissances, ils peuvent donc ne pas être au courant des événements récents, des recherches nouvellement publiées ou des technologies émergentes.
- Connaissances spécialisées : de nombreux sujets de niche, cadres propriétaires ou meilleures pratiques spécifiques à l'industrie peuvent ne pas être bien documentés dans le corpus de formation du modèle.
- Compréhension contextuelle précise : les LLM peuvent avoir du mal avec les nuances ou les terminologies en évolution qui changent fréquemment dans des domaines dynamiques comme la finance, la cybersécurité ou la recherche médicale.
En intégrant le RAG avec une base de données de graphes telle que Neo4j, les modèles d'IA peuvent accéder et récupérer les données les plus récentes, pertinentes et très connectées avant de générer une réponse. Cela garantit que les réponses sont à jour et fondées sur des informations factuelles plutôt que sur des approximations déduites.
Répondre aux besoins commerciaux et de conformité
Les organisations des secteurs de la santé, des services juridiques et de l'analyse financière exigent que leurs solutions basées sur l'IA soient :
- Précises : les entreprises ont besoin d'un contenu généré par l'IA qui soit factuel et pertinent pour leur domaine spécifique.
- Conformes : de nombreuses industries doivent adhérer à des réglementations strictes concernant l'utilisation et la sécurité des données.
- Traçables : les entreprises exigent souvent que les réponses de l'IA soient auditables, ce qui signifie qu'elles doivent faire référence à des documents sources.
En utilisant le RAG, les réponses générées par l'IA peuvent provenir de bases de données fiables, garantissant une plus grande précision et conformité aux normes de l'industrie. Cela atténue les risques tels que la désinformation ou les violations réglementaires.
Améliorer l'efficacité des coûts et les performances
L'entraînement et le réglage fin de grands modèles d'IA peuvent être coûteux en calcul et en temps. Cependant, l'intégration de RAG offre :
- Réduction des besoins en réglage fin : au lieu de réentraîner un modèle d'IA chaque fois que de nouvelles données apparaissent, le RAG permet au modèle de récupérer et d'intégrer des informations mises à jour de manière dynamique.
- Meilleures performances avec des modèles plus petits : avec les bonnes techniques de récupération, même les modèles d'IA compacts peuvent bien fonctionner en exploitant efficacement les connaissances externes.
- Coûts opérationnels réduits : au lieu d'investir dans une infrastructure coûteuse pour prendre en charge un réentraînement à grande échelle, les entreprises peuvent optimiser les ressources en utilisant les capacités de récupération en temps réel de RAG.
En suivant ce guide, vous disposez désormais des connaissances fondamentales pour mettre en œuvre le RAG avec Neo4j, permettant à votre système d'IA de fournir des réponses plus précises, pertinentes et perspicaces. La prochaine étape est l'expérimentation : choisissez un ensemble de données, configurez votre pile et commencez à améliorer votre IA avec la puissance de la génération augmentée par la récupération.