Retrieval-Augmented Generation (RAG)-Projekt
If this project helps you, consider buying me a coffee ☕. Your support helps me keep contributing to the open-source community!
Die offizielle Plattform von bRAGAI wird bald gestartet. Tragen Sie sich auf die Warteliste ein, um zu den Early Adopters zu gehören!
Dieses Repository enthält eine umfassende Untersuchung der Retrieval-Augmented Generation (RAG) für verschiedene Anwendungen. Jedes Notebook bietet eine detaillierte, praktische Anleitung zum Einrichten und Experimentieren mit RAG, von der Einführungsstufe bis hin zu fortgeschrittenen Implementierungen, einschließlich Mehrfachabfragen und benutzerdefinierten RAG-Builds.
Projektstruktur
Wenn Sie direkt loslegen möchten, sehen Sie sich die Datei full_basic_rag.ipynb
an -> diese Datei enthält einen Standard-Startercode für einen vollständig anpassbaren RAG-Chatbot.
Stellen Sie sicher, dass Sie Ihre Dateien in einer virtuellen Umgebung ausführen (siehe Abschnitt „ Get Started
“).
Die folgenden Notizbücher finden Sie im Verzeichnis tutorial_notebooks/
.
[1]_rag_setup_overview.ipynb
Dieses Einführungsnotizbuch bietet einen Überblick über die RAG-Architektur und ihren grundlegenden Aufbau. Das Notizbuch geht durch:
- Umgebungs-Setup : Konfigurieren der Umgebung, Installieren erforderlicher Bibliotheken und API-Setups.
- Erstmaliges Laden von Daten : Grundlegende Dokumentlader und Datenvorverarbeitungsmethoden.
- Einbettungsgenerierung : Generieren von Einbettungen mithilfe verschiedener Modelle, einschließlich der Einbettungen von OpenAI.
- Vector Store : Einrichten eines Vektorspeichers (ChromaDB/Pinecone) für eine effiziente Ähnlichkeitssuche.
- Grundlegende RAG-Pipeline : Erstellen einer einfachen Abruf- und Generierungspipeline als Basis.
[2]_rag_with_multi_query.ipynb
Aufbauend auf den Grundlagen werden in diesem Notizbuch Techniken zur Mehrfachabfrage in der RAG-Pipeline vorgestellt und Folgendes untersucht:
- Einrichtung mehrerer Abfragen : Konfigurieren mehrerer Abfragen, um den Abruf zu diversifizieren.
- Erweiterte Einbettungstechniken : Verwendung mehrerer Einbettungsmodelle zur Verfeinerung des Abrufs.
- Pipeline mit Multi-Querying : Implementierung der Multi-Query-Verarbeitung, um die Relevanz bei der Antwortgenerierung zu verbessern.
- Vergleich und Analyse : Vergleich der Ergebnisse mit Single-Query-Pipelines und Analyse von Leistungsverbesserungen.
[3]_rag_routing_and_query_construction.ipynb
Dieses Notebook befasst sich eingehender mit der Anpassung einer RAG-Pipeline. Es umfasst:
- Logisches Routing: Implementiert funktionsbasiertes Routing zur Klassifizierung von Benutzeranfragen an geeignete Datenquellen basierend auf Programmiersprachen.
- Semantisches Routing: Verwendet Einbettungen und Kosinusähnlichkeit, um Fragen entweder an eine mathematische oder physikalische Eingabeaufforderung weiterzuleiten und so die Antwortgenauigkeit zu optimieren.
- Abfragestrukturierung für Metadatenfilter: Definiert ein strukturiertes Suchschema für YouTube-Tutorial-Metadaten und ermöglicht erweiterte Filterung (z. B. nach Anzahl der Aufrufe, Veröffentlichungsdatum).
- Strukturierte Suchaufforderung: Nutzt LLM-Eingabeaufforderungen, um Datenbankabfragen zum Abrufen relevanter Inhalte basierend auf Benutzereingaben zu generieren.
- Integration mit Vector Stores: Verknüpft strukturierte Abfragen mit Vector Stores für einen effizienten Datenabruf.
[4]_rag_indexing_and_advanced_retrieval.ipynb
In Fortsetzung der vorherigen Anpassung werden in diesem Notizbuch folgende Themen behandelt:
- Vorwort zum Dokument-Chunking: Verweist auf externe Ressourcen für Dokument-Chunking-Techniken.
- Indizierung mit mehreren Darstellungen: Richtet eine Indizierungsstruktur mit mehreren Vektoren für die Verarbeitung von Dokumenten mit unterschiedlichen Einbettungen und Darstellungen ein.
- In-Memory-Speicher für Zusammenfassungen: Verwendet InMemoryByteStore zum Speichern von Dokumentzusammenfassungen neben übergeordneten Dokumenten und ermöglicht so einen effizienten Abruf.
- MultiVectorRetriever-Setup: Integriert mehrere Vektordarstellungen, um relevante Dokumente basierend auf Benutzerabfragen abzurufen.
- RAPTOR-Implementierung: Erkundet RAPTOR, ein erweitertes Indexierungs- und Abrufmodell, mit Verknüpfung zu ausführlichen Ressourcen.
- ColBERT-Integration: Demonstriert die ColBERT-basierte Vektorindizierung und -abfrage auf Token-Ebene, die kontextuelle Bedeutung auf einer feinkörnigen Ebene erfasst.
- Wikipedia-Beispiel mit ColBERT: Ruft Informationen über Hayao Miyazaki unter Verwendung des ColBERT-Abrufmodells zur Demonstration ab.
[5]_rag_retrieval_and_reranking.ipynb
Dieses abschließende Notebook fasst die RAG-Systemkomponenten zusammen, wobei der Schwerpunkt auf Skalierbarkeit und Optimierung liegt:
- Laden und Aufteilen von Dokumenten: Lädt und segmentiert Dokumente zur Indizierung und bereitet sie für die Vektorspeicherung vor.
- Generierung mehrerer Suchanfragen mit RAG-Fusion: Verwendet einen auf Eingabeaufforderungen basierenden Ansatz, um mehrere Suchanfragen aus einer einzigen Eingabefrage zu generieren.
- Reciprocal Rank Fusion (RRF): Implementiert RRF, um mehrere Abruflisten neu zu ordnen und Ergebnisse für eine verbesserte Relevanz zusammenzuführen.
- Retriever- und RAG-Ketten-Setup: Konstruiert eine Retrieval-Kette zur Beantwortung von Abfragen, wobei fusionierte Rankings und RAG-Ketten verwendet werden, um kontextrelevante Informationen abzurufen.
- Cohere Re-Ranking: Demonstriert das Re-Ranking mit dem Cohere-Modell für zusätzliche kontextbezogene Komprimierung und Verfeinerung.
- CRAG- und Self-RAG-Retrieval: Erkundet fortgeschrittene Retrieval-Ansätze wie CRAG und Self-RAG mit Links zu Beispielen.
- Untersuchung der Auswirkungen von Langkontexten: Links zu Ressourcen, die die Auswirkungen des Abrufs von Langkontexten auf RAG-Modelle erläutern.
Erste Schritte
Voraussetzungen: Python 3.11.7 (bevorzugt)
Klonen Sie das Repository :
git clone https://github.com/bRAGAI/bRAG-langchain.git
cd bRAG-langchain
Erstellen Sie eine virtuelle Umgebung
python -m venv venv
source venv/bin/activate
Abhängigkeiten installieren : Stellen Sie sicher, dass Sie die in der Datei requirements.txt
aufgeführten erforderlichen Pakete installieren.
pip install -r requirements.txt
Führen Sie die Notebooks aus : Beginnen Sie mit [1]_rag_setup_overview.ipynb
um sich mit dem Einrichtungsprozess vertraut zu machen. Gehen Sie nacheinander die anderen Notebooks durch, um fortgeschrittenere RAG-Konzepte zu erstellen und damit zu experimentieren.
Umgebungsvariablen einrichten :
Notizbuchreihenfolge : Um das Projekt strukturiert zu verfolgen:
Beginnen Sie mit [1]_rag_setup_overview.ipynb
Fahren Sie mit [2]_rag_with_multi_query.ipynb
fort
Gehen Sie dann durch [3]_rag_routing_and_query_construction.ipynb
Fahren Sie mit [4]_rag_indexing_and_advanced_retrieval.ipynb
fort
Beenden Sie mit [5]_rag_retrieval_and_reranking.ipynb
Verwendung
Nachdem Sie die Umgebung eingerichtet und die Notebooks nacheinander ausgeführt haben, können Sie:
Experimentieren Sie mit Retrieval-Augmented Generation : Verwenden Sie das grundlegende Setup in [1]_rag_setup_overview.ipynb
um die Grundlagen von RAG zu verstehen.
Implementieren Sie Multi-Querying : Erfahren Sie, wie Sie die Antwortrelevanz durch die Einführung von Multi-Querying-Techniken in [2]_rag_with_multi_query.ipynb
verbessern können.
Eingehende Notizbücher (in Arbeit)
- Kontextpräzision mit RAGAS + LangSmith
- Leitfaden zur Verwendung von RAGAS und LangSmith zur Bewertung der Kontextpräzision, Relevanz und Antwortgenauigkeit in RAG.
- Bereitstellen der RAG-Anwendung
- Leitfaden zur Bereitstellung Ihrer RAG-Anwendung
The notebooks and visual diagrams were inspired by Lance Martin's LangChain Tutorial.