Last translated: 13 Jun 2025

Translation Not Available Yet

This repository's README hasn't been translated yet. Once translated, it will be easier to read and understand in your native language (中文).

Once translated, you'll be able to submit a PR to the repository.

Once translated, you'll be able to submit a PR to the repository.

Toutes les Techniques RAG : Une Approche Simple et Pratique ✨

Lisez ceci dans votre langue préférée :
Deutsch | Español | Français | 日本語 | 한국어 | Português | Русский | 中文

Python 3.7+ Nebius AI OpenAI Medium

Ce dépôt adopte une approche claire et pratique du Retrieval-Augmented Generation (RAG), décomposant les techniques avancées en implémentations simples et compréhensibles. Plutôt que de s'appuyer sur des frameworks comme LangChain ou FAISS, tout est construit ici en utilisant des bibliothèques Python familières telles que openai, numpy, matplotlib, et quelques autres.

L'objectif est simple : fournir un code lisible, modifiable et pédagogique. En se concentrant sur les fondamentaux, ce projet aide à démystifier le RAG et facilite la compréhension de son fonctionnement réel.

Mise à jour : 📢

  • (12-Mai-2025) Ajout d'un nouveau notebook sur la gestion des grandes données avec des graphes de connaissances.
  • (27-Avril-2025) Ajout d'un nouveau notebook qui trouve la meilleure technique RAG pour une requête donnée (Simple RAG + Reranker + Réécriture de requête).
  • (20-Mars-2025) Ajout d'un nouveau notebook sur le RAG avec apprentissage par renforcement.
  • (07-Mars-2025) Ajout de 20 techniques RAG au dépôt.

🚀 Que contient ce dépôt ?

Ce dépôt contient une collection de notebooks Jupyter, chacun se concentrant sur une technique RAG spécifique. Chaque notebook fournit :

  • Une explication concise de la technique.
  • Une implémentation étape par étape à partir de zéro.
  • Des exemples de code clairs avec des commentaires intégrés.
  • Des évaluations et comparaisons pour démontrer l'efficacité de la technique.
  • Des visualisations pour illustrer les résultats.

Voici un aperçu des techniques couvertes :

NotebookDescription
1. Simple RAGUne implémentation de base du RAG. Un excellent point de départ !
2. Découpage sémantiqueDivise le texte en fonction de la similarité sémantique pour obtenir des segments plus significatifs.
3. Sélecteur de taille de segmentExplore l'impact de différentes tailles de segments sur les performances de récupération.
4. RAG enrichi en contexteRécupère les segments voisins pour fournir plus de contexte.
5. En-têtes contextuels de segmentsAjoute des en-têtes descriptifs à chaque segment avant l'embedding.
6. RAG avec augmentation de documentsGénère des questions à partir des segments de texte pour enrichir le processus de récupération.
7. Transformation de requêteRéécrit, étend ou décompose les requêtes pour améliorer la récupération. Inclut Step-back Prompting et Sub-query Decomposition.
8. RerankerReclasse les résultats initialement récupérés en utilisant un LLM pour une meilleure pertinence.
9. RSEExtraction de segments pertinents : Identifie et reconstruit des segments continus de texte, en préservant le contexte.
10. Compression contextuelleImplémente une compression contextuelle pour filtrer et compresser les segments récupérés, maximisant les informations pertinentes.
11. RAG avec boucle de feedbackIntègre les retours utilisateurs pour apprendre et améliorer le système RAG au fil du temps.
12. RAG adaptatifSélectionne dynamiquement la meilleure stratégie de récupération en fonction du type de requête.
13. Self RAGImplémente Self-RAG, décide dynamiquement quand et comment récupérer, évalue la pertinence et juge le support et l'utilité.
14. Découpage en propositionsDécompose les documents en énoncés factuels atomiques pour une récupération précise.
15. RAG multimodalCombine texte et images pour la récupération, générant des légendes pour les images en utilisant LLaVA.
16. RAG par fusionCombine la recherche vectorielle avec la récupération basée sur des mots-clés (BM25) pour des résultats améliorés.
17. RAG en grapheOrganise les connaissances sous forme de graphe, permettant de parcourir des concepts liés.
18. RAG hiérarchiqueConstruit des index hiérarchiques (résumés + segments détaillés) pour une récupération efficace.
19. HyDE RAGUtilise des embeddings de documents hypothétiques pour améliorer la correspondance sémantique.
20. CRAGRAG correctif : Évalue dynamiquement la qualité de la récupération et utilise une recherche web comme solution de repli.
21. RAG avec RLMaximise la récompense du modèle RAG en utilisant l'apprentissage par renforcement.
Meilleur RAG FinderTrouve la meilleure technique RAG pour une requête donnée en utilisant Simple RAG + Reranker + Réécriture de requête.
22. Grandes données avec graphes de connaissancesGère de grands ensembles de données en utilisant des graphes de connaissances.

🗂️ Structure du dépôt

fareedkhan-dev-all-rag-techniques/
├── README.md                          <- You are here!
├── 01_simple_rag.ipynb
├── 02_semantic_chunking.ipynb
├── 03_chunk_size_selector.ipynb
├── 04_context_enriched_rag.ipynb
├── 05_contextual_chunk_headers_rag.ipynb
├── 06_doc_augmentation_rag.ipynb
├── 07_query_transform.ipynb
├── 08_reranker.ipynb
├── 09_rse.ipynb
├── 10_contextual_compression.ipynb
├── 11_feedback_loop_rag.ipynb
├── 12_adaptive_rag.ipynb
├── 13_self_rag.ipynb
├── 14_proposition_chunking.ipynb
├── 15_multimodel_rag.ipynb
├── 16_fusion_rag.ipynb
├── 17_graph_rag.ipynb
├── 18_hierarchy_rag.ipynb
├── 19_HyDE_rag.ipynb
├── 20_crag.ipynb
├── 21_rag_with_rl.ipynb
├── 22_big_data_with_KG.ipynb
├── best_rag_finder.ipynb
├── requirements.txt                   <- Python dependencies
└── data/
    └── val.json                       <- Sample validation data (queries and answers)
    └── AI_Information.pdf             <- A sample PDF document for testing.
    └── attention_is_all_you_need.pdf  <- A sample PDF document for testing (for Multi-Modal RAG).

🛠️ Pour commencer

  1. Clonez le dépôt :

    git clone https://github.com/FareedKhan-dev/all-rag-techniques.git
    cd all-rag-techniques
    
  2. Installez les dépendances :

    pip install -r requirements.txt
    
  3. Configurez votre clé API OpenAI :

    • Obtenez une clé API depuis Nebius AI.

    • Définissez la clé API comme variable d'environnement :

      export OPENAI_API_KEY='VOTRE_CLÉ_API_NEBIUS_AI'
      

      ou

      setx OPENAI_API_KEY "VOTRE_CLÉ_API_NEBIUS_AI"  # Sur Windows
      

      ou, dans votre script/notebook Python :

      import os
      os.environ["OPENAI_API_KEY"] = "VOTRE_CLÉ_API_NEBIUS_AI"
      
  4. Exécutez les notebooks :

    Ouvrez n'importe quel notebook Jupyter (fichiers .ipynb) en utilisant Jupyter Notebook ou JupyterLab. Chaque notebook est autonome et peut être exécuté indépendamment. Les notebooks sont conçus pour être exécutés séquentiellement dans chaque fichier.

    Remarque : Le fichier data/AI_Information.pdf fournit un document exemple pour les tests. Vous pouvez le remplacer par votre propre PDF. Le fichier data/val.json contient des requêtes exemple et des réponses idéales pour l'évaluation. Le fichier 'attention_is_all_you_need.pdf' est utilisé pour tester le notebook RAG multimodal.

💡 Concepts clés

  • Embeddings : Représentations numériques du texte qui capturent le sens sémantique. Nous utilisons l'API d'embedding de Nebius AI et, dans de nombreux notebooks, également le modèle d'embedding BAAI/bge-en-icl.

  • Vector Store : Une base de données simple pour stocker et rechercher des embeddings. Nous créons notre propre classe SimpleVectorStore en utilisant NumPy pour des calculs de similarité efficaces.

  • Similarité cosinus : Une mesure de similarité entre deux vecteurs. Des valeurs plus élevées indiquent une plus grande similarité.

  • Découpage : Division du texte en morceaux plus petits et gérables. Nous explorons diverses stratégies de découpage.

  • Récupération : Le processus de recherche des segments de texte les plus pertinents pour une requête donnée.

  • Génération : Utilisation d'un modèle de langage large (LLM) pour créer une réponse basée sur le contexte récupéré et la requête de l'utilisateur. Nous utilisons le modèle meta-llama/Llama-3.2-3B-Instruct via l'API de Nebius AI.

  • Évaluation : Évaluation de la qualité des réponses du système RAG, souvent en les comparant à une réponse de référence ou en utilisant un LLM pour noter la pertinence.

🤝 Contributions

Les contributions sont les bienvenues !