Lisez ceci dans votre langue préférée :
Deutsch | Español | Français | 日本語 | 한국어 | Português | Русский | 中文
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.
Ce dépôt contient une collection de notebooks Jupyter, chacun se concentrant sur une technique RAG spécifique. Chaque notebook fournit :
Voici un aperçu des techniques couvertes :
Notebook | Description |
---|---|
1. Simple RAG | Une implémentation de base du RAG. Un excellent point de départ ! |
2. Découpage sémantique | Divise le texte en fonction de la similarité sémantique pour obtenir des segments plus significatifs. |
3. Sélecteur de taille de segment | Explore l'impact de différentes tailles de segments sur les performances de récupération. |
4. RAG enrichi en contexte | Récupère les segments voisins pour fournir plus de contexte. |
5. En-têtes contextuels de segments | Ajoute des en-têtes descriptifs à chaque segment avant l'embedding. |
6. RAG avec augmentation de documents | Génère des questions à partir des segments de texte pour enrichir le processus de récupération. |
7. Transformation de requête | Réécrit, étend ou décompose les requêtes pour améliorer la récupération. Inclut Step-back Prompting et Sub-query Decomposition. |
8. Reranker | Reclasse les résultats initialement récupérés en utilisant un LLM pour une meilleure pertinence. |
9. RSE | Extraction de segments pertinents : Identifie et reconstruit des segments continus de texte, en préservant le contexte. |
10. Compression contextuelle | Implémente une compression contextuelle pour filtrer et compresser les segments récupérés, maximisant les informations pertinentes. |
11. RAG avec boucle de feedback | Intègre les retours utilisateurs pour apprendre et améliorer le système RAG au fil du temps. |
12. RAG adaptatif | Sélectionne dynamiquement la meilleure stratégie de récupération en fonction du type de requête. |
13. Self RAG | Implé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 propositions | Décompose les documents en énoncés factuels atomiques pour une récupération précise. |
15. RAG multimodal | Combine texte et images pour la récupération, générant des légendes pour les images en utilisant LLaVA. |
16. RAG par fusion | Combine 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 graphe | Organise les connaissances sous forme de graphe, permettant de parcourir des concepts liés. |
18. RAG hiérarchique | Construit des index hiérarchiques (résumés + segments détaillés) pour une récupération efficace. |
19. HyDE RAG | Utilise des embeddings de documents hypothétiques pour améliorer la correspondance sémantique. |
20. CRAG | RAG correctif : Évalue dynamiquement la qualité de la récupération et utilise une recherche web comme solution de repli. |
21. RAG avec RL | Maximise la récompense du modèle RAG en utilisant l'apprentissage par renforcement. |
Meilleur RAG Finder | Trouve 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 connaissances | Gère de grands ensembles de données en utilisant des graphes de connaissances. |
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).
Clonez le dépôt :
git clone https://github.com/FareedKhan-dev/all-rag-techniques.git
cd all-rag-techniques
Installez les dépendances :
pip install -r requirements.txt
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"
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.
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.
Les contributions sont les bienvenues !