? Awesome Retrieval Augmented Generation (RAG)
Dieses Repository enthält eine kuratierte Awesome List und allgemeine Informationen zu Retrieval-Augmented Generation (RAG)-Anwendungen in generativer KI.
Retrieval-Augmented Generation (RAG) ist eine Technik in der generativen KI, bei der zusätzlicher Kontext aus externen Quellen abgerufen wird, um den generativen Prozess von Large Language Models (LLMs) zu bereichern. Dieser Ansatz ermöglicht es LLMs, aktuelle, spezifische oder vertrauliche Informationen zu integrieren, die ihnen möglicherweise allein aus ihren Daten vor dem Training fehlen.
Inhalt
- Allgemeine Informationen zu RAG
- Ansätze
- ? Frameworks, die RAG erleichtern
- Techniken
- Metriken
- ? Datenbanken
Allgemeine Informationen zu RAG
Bei herkömmlichen RAG-Ansätzen wird ein grundlegendes Framework verwendet, um Dokumente abzurufen, die den Kontext einer LLM-Eingabeaufforderung bereichern. Wenn Sie beispielsweise nach Materialien für die Renovierung eines Hauses fragen, verfügt der LLM möglicherweise über allgemeine Kenntnisse über Renovierungen, ihm fehlen jedoch spezifische Details zum jeweiligen Haus. Die Implementierung einer RAG-Architektur ermöglicht ein schnelles Suchen und Abrufen relevanter Dokumente, wie z. B. Blaupausen, um individuellere Antworten anzubieten. Dadurch wird sichergestellt, dass das LLM spezifische Informationen zum Renovierungsbedarf berücksichtigt und so die Genauigkeit seiner Antworten erhöht.
Eine typische RAG-Implementierung folgt diesen wichtigen Schritten:
- Teilen Sie die Wissensdatenbank auf: Teilen Sie den Dokumentenkorpus in kleinere, überschaubare Teile auf.
- Einbettungen erstellen: Wenden Sie ein Einbettungsmodell an, um diese Textblöcke in Vektoreinbettungen umzuwandeln und so ihre semantische Bedeutung zu erfassen.
- In einer Vektordatenbank speichern: Speichern Sie die Einbettungen in einer Vektordatenbank und ermöglichen Sie so einen schnellen Abruf basierend auf semantischer Ähnlichkeit.
- Behandeln Sie Benutzeranfragen: Konvertieren Sie die Benutzeranfrage in eine Einbettung, indem Sie dasselbe Modell verwenden, das auf die Textblöcke angewendet wurde.
- Relevante Daten abrufen: Durchsuchen Sie die Vektordatenbank nach Einbettungen, die aufgrund ihrer semantischen Ähnlichkeit weitgehend mit der Einbettung der Abfrage übereinstimmen.
- Verbessern Sie die Eingabeaufforderung: Integrieren Sie die relevantesten Textabschnitte in die Eingabeaufforderung des LLM, um wertvollen Kontext für die Generierung einer Antwort bereitzustellen.
- Generieren Sie eine Antwort: Das LLM nutzt die erweiterte Eingabeaufforderung, um eine Antwort zu liefern, die genau und auf die Anfrage des Benutzers zugeschnitten ist.
Ansätze
RAG-Implementierungen variieren in ihrer Komplexität und reichen vom einfachen Abrufen von Dokumenten bis hin zu fortgeschrittenen Techniken, die iterative Feedbackschleifen und domänenspezifische Verbesserungen integrieren. Zu den Ansätzen können gehören:
- Corrective RAG (CRAG): Methoden zur Korrektur oder Verfeinerung der abgerufenen Informationen vor der Integration in LLM-Antworten.
- Retrieval-Augmented Fine-Tuning (RAFT): Techniken zur Feinabstimmung von LLMs speziell für erweiterte Abruf- und Generierungsaufgaben.
- Selbstreflektierendes RAG: Modelle, die Abrufstrategien basierend auf dem Feedback zur Modellleistung dynamisch anpassen.
- RAG Fusion: Techniken, die mehrere Abrufmethoden für eine verbesserte Kontextintegration kombinieren.
- Temporal Augmented Retrieval (TAR): Berücksichtigung zeitkritischer Daten in Abrufprozessen.
- Plan-then-RAG (PlanRAG): Strategien mit Planungsphasen vor der Ausführung von RAG für komplexe Aufgaben.
- GraphRAG: Ein strukturierter Ansatz, der Wissensgraphen für eine verbesserte Kontextintegration und Argumentation nutzt.
- FLARE – Ein Ansatz, der eine aktive, durch Abruf erweiterte Generierung zur Verbesserung der Antwortqualität beinhaltet.
- Kontextbezogener Abruf – Verbessert den Abruf, indem relevanter Kontext zu Dokumentabschnitten vor dem Abruf hinzugefügt wird, wodurch die Relevanz von Informationen erhöht wird, die aus großen Wissensdatenbanken abgerufen werden.
? Frameworks, die RAG erleichtern
- Haystack – LLM-Orchestrierungs-Framework zum Erstellen anpassbarer, produktionsbereiter LLM-Anwendungen.
- LangChain – Ein Allzweck-Framework für die Arbeit mit LLMs.
- Semantischer Kernel – Ein SDK von Microsoft zur Entwicklung generativer KI-Anwendungen.
- LlamaIndex – Framework zum Verbinden benutzerdefinierter Datenquellen mit LLMs.
- Cognita – Open-Source-RAG-Framework zum Erstellen modularer und produktionsbereiter Anwendungen.
- Verba – Open-Source-Anwendung für RAG sofort einsatzbereit.
- Mastra – Typescript-Framework zum Erstellen von KI-Anwendungen.
Techniken
Datenbereinigung
- Datenbereinigungstechniken: Vorverarbeitungsschritte zur Verfeinerung von Eingabedaten und zur Verbesserung der Modellleistung.
Aufforderung
- Strategien
- Tagging und Labeling: Hinzufügen semantischer Tags oder Labels zu abgerufenen Daten, um die Relevanz zu erhöhen.
- Reason and Action (ReAct) (ReAct): Integration von Argumentationsfunktionen, um LLM-Antworten basierend auf dem abgerufenen Kontext zu steuern.
- Chain of Thought (CoT): Ermutigt das Modell, Probleme Schritt für Schritt durchzudenken, bevor es eine Antwort liefert.
- Verifizierungskette (CoVe): Veranlassung des Modells, jeden Schritt seiner Argumentation auf Richtigkeit zu überprüfen.
- Selbstkonsistenz: Generierung mehrerer Argumentationspfade und Auswahl der konsistentesten Antwort.
- Zero-Shot-Eingabeaufforderung: Entwerfen von Eingabeaufforderungen, die das Modell ohne Beispiele leiten.
- Few-Shot-Eingabeaufforderung: Bereitstellung einiger Beispiele in der Eingabeaufforderung, um das gewünschte Antwortformat zu veranschaulichen.
- Caching
- Prompt Caching: Optimiert LLMs durch Speichern und Wiederverwenden vorberechneter Aufmerksamkeitszustände.
Chunking
- Chunking mit fester Größe
- Teilen Sie den Text für eine effiziente Verarbeitung in Segmente mit einheitlicher Größe auf.
- Teilt Texte basierend auf Größe und Überlappung in Abschnitte auf.
- Beispiel: Aufteilung nach Zeichen (LangChain).
- Beispiel: SentenceSplitter (LlamaIndex).
- Rekursives Chunking
- Hierarchische Segmentierung mittels rekursiver Algorithmen für komplexe Dokumentstrukturen.
- Beispiel: Rekursive Aufteilung nach Zeichen (LangChain).
- Dokumentbasiertes Chunking
- Segmentieren Sie Dokumente basierend auf Metadaten oder Formatierungshinweisen für eine gezielte Analyse.
- Beispiel: MarkdownHeaderTextSplitter (LangChain).
- Beispiel: Bild- und Texteinbettungen mit Modellen wie OpenCLIP verarbeiten.
- Semantisches Chunking
- Extrahieren sinnvoller Abschnitte basierend auf semantischer Relevanz und nicht auf willkürlichen Grenzen.
- Agentisches Chunking
- Interaktive Chunking-Methoden, bei denen LLMs die Segmentierung steuern.
Einbettungen
- Einbettungsmodell auswählen
- MTEB-Bestenliste : Entdecken Sie den Benchmark von Hugging Face zur Bewertung von Modelleinbettungen.
- Benutzerdefinierte Einbettungen : Entwickeln Sie maßgeschneiderte Einbettungen für bestimmte Domänen oder Aufgaben, um die Modellleistung zu verbessern. Benutzerdefinierte Einbettungen können domänenspezifische Terminologie und Nuancen erfassen. Zu den Techniken gehören die Feinabstimmung vorab trainierter Modelle an Ihrem eigenen Datensatz oder das Training von Einbettungen von Grund auf mithilfe von Frameworks wie TensorFlow oder PyTorch.
Abruf
- Suchmethoden
- Vector Store Flat Index
- Einfache und effiziente Form des Abrufs.
- Inhalte werden vektorisiert und als flache Inhaltsvektoren gespeichert.
- Hierarchischer Indexabruf
- Grenzen Sie Daten hierarchisch auf verschiedene Ebenen ein.
- Führt Abrufe in hierarchischer Reihenfolge aus.
- Hypothetische Fragen
- Wird verwendet, um die Ähnlichkeit zwischen Datenbankblöcken und Abfragen zu erhöhen (dasselbe gilt für HyDE).
- LLM wird verwendet, um für jeden Textblock spezifische Fragen zu generieren.
- Wandelt diese Fragen in Vektoreinbettungen um.
- Gleicht während der Suche Abfragen mit diesem Index von Fragevektoren ab.
- Hypothetische Dokumenteinbettungen (HyDE)
- Wird verwendet, um die Ähnlichkeit zwischen Datenbankblöcken und Abfragen zu erhöhen (dasselbe gilt für hypothetische Fragen).
- LLM wird verwendet, um eine hypothetische Antwort basierend auf der Anfrage zu generieren.
- Wandelt diese Antwort in eine Vektoreinbettung um.
- Vergleicht den Abfragevektor mit dem hypothetischen Antwortvektor.
- Kleine bis große Rückholung
- Verbessert den Abruf durch die Verwendung kleinerer Blöcke für die Suche und größerer Blöcke für den Kontext.
- Kleinere untergeordnete Blöcke beziehen sich auf größere übergeordnete Blöcke
- Neuordnung : Verbessert die Suchergebnisse in RAG-Pipelines durch Neuordnung der ursprünglich abgerufenen Dokumente und Priorisierung derjenigen, die für die Abfrage semantisch am relevantesten sind.
Metriken
Suchmetriken
Diese Metriken werden verwendet, um die Ähnlichkeit zwischen Einbettungen zu messen, was entscheidend für die Bewertung ist, wie effektiv RAG-Systeme externe Dokumente oder Datenquellen abrufen und integrieren. Durch die Auswahl geeigneter Ähnlichkeitsmetriken können Sie die Leistung und Genauigkeit Ihres RAG-Systems optimieren. Alternativ können Sie benutzerdefinierte Metriken entwickeln, die auf Ihre spezifische Domäne oder Nische zugeschnitten sind, um domänenspezifische Nuancen zu erfassen und die Relevanz zu verbessern.
Kosinusähnlichkeit
- Misst den Kosinus des Winkels zwischen zwei Vektoren in einem mehrdimensionalen Raum.
- Sehr effektiv zum Vergleichen von Texteinbettungen, bei denen die Richtung der Vektoren semantische Informationen darstellt.
- Wird häufig in RAG-Systemen verwendet, um die semantische Ähnlichkeit zwischen Abfrageeinbettungen und Dokumenteinbettungen zu messen.
Punktprodukt
- Berechnet die Summe der Produkte entsprechender Einträge zweier Zahlenfolgen.
- Entspricht der Kosinusähnlichkeit, wenn Vektoren normalisiert werden.
- Einfach und effizient, wird häufig mit Hardwarebeschleunigung für umfangreiche Berechnungen verwendet.
Euklidischer Abstand
- Berechnet den geradlinigen Abstand zwischen zwei Punkten im euklidischen Raum.
- Kann mit Einbettungen verwendet werden, kann jedoch aufgrund des „Fluchs der Dimensionalität“ in hochdimensionalen Räumen an Wirksamkeit verlieren.
- Wird häufig in Clustering-Algorithmen wie K-Means nach Dimensionsreduktion verwendet.
Jaccard-Ähnlichkeit
- Misst die Ähnlichkeit zwischen zwei endlichen Mengen als Größe des Schnittpunkts dividiert durch die Größe der Vereinigung der Mengen.
- Nützlich beim Vergleichen von Tokensätzen, z. B. in Bag-of-Words-Modellen oder N-Gramm-Vergleichen.
- Weniger anwendbar auf durch LLMs erzeugte kontinuierliche Einbettungen.
Hinweis: Kosinusähnlichkeit und Skalarprodukt gelten im Allgemeinen als die effektivsten Metriken zur Messung der Ähnlichkeit zwischen hochdimensionalen Einbettungen.
Metriken zur Antwortbewertung
Diese Metriken bewerten die Qualität und Relevanz der von Ihrem RAG-System generierten Antworten und bewerten, wie genau, kontextuell angemessen und zuverlässig sie sind. Durch die Anwendung dieser Bewertungsmetriken können Sie Einblicke in die Leistung Ihres Systems gewinnen und Verbesserungsmöglichkeiten identifizieren.
- Automatisiertes Benchmarking
- Menschen als Richter
- Models als Juroren
Werkzeuge
Diese Tools können Sie bei der Bewertung der Leistung Ihres RAG-Systems unterstützen, von der Verfolgung des Benutzerfeedbacks über die Protokollierung von Abfrageinteraktionen bis hin zum Vergleich mehrerer Bewertungsmetriken im Zeitverlauf.
- LangFuse : Open-Source-Tool zur Verfolgung von LLM-Metriken, Beobachtbarkeit und Prompt-Management.
- Ragas : Framework, das bei der Bewertung von RAG-Pipelines hilft.
- LangSmith : Eine Plattform zum Erstellen produktionstauglicher LLM-Anwendungen, mit der Sie Ihre Anwendung genau überwachen und bewerten können.
- Hugging Face Evaluate : Tool zur Berechnung von Metriken wie BLEU und ROUGE zur Bewertung der Textqualität.
- Gewichtungen und Verzerrungen : Verfolgt Experimente, protokolliert Metriken und visualisiert die Leistung.
? Datenbanken
Die folgende Liste enthält mehrere Datenbanksysteme, die für Retrieval Augmented Generation (RAG)-Anwendungen geeignet sind. Sie decken eine Reihe von RAG-Anwendungsfällen ab und unterstützen die effiziente Speicherung und den Abruf von Vektoren zur Generierung von Antworten oder Empfehlungen.
Benchmarks
- Auswahl einer Vektordatenbank
Verteilte Datenverarbeitungs- und Bereitstellungs-Engines:
- Apache Cassandra: Verteiltes NoSQL-Datenbankverwaltungssystem.
- MongoDB Atlas: Weltweit verteilter Multimodell-Datenbankdienst mit integrierter Vektorsuche.
- Vespa: Open-Source-Engine zur Verarbeitung und Bereitstellung großer Datenmengen, die für Echtzeitanwendungen entwickelt wurde.
Suchmaschinen mit Vektorfunktionen:
- Elasticsearch: Bietet neben herkömmlichen Suchfunktionen auch Vektorsuchfunktionen.
- OpenSearch: Verteilte Such- und Analyse-Engine, abgeleitet von Elasticsearch.
Vektordatenbanken:
- Chroma DB: Eine KI-native Open-Source-Einbettungsdatenbank.
- Milvus: Eine Open-Source-Vektordatenbank für KI-gestützte Anwendungen.
- Pinecone: Eine serverlose Vektordatenbank, optimiert für maschinelle Lernworkflows.
- Oracle AI Vector Search: Integriert Vektorsuchfunktionen in die Oracle-Datenbank für semantische Abfragen basierend auf Vektoreinbettungen.
Relationale Datenbankerweiterungen:
- Pgvector: Eine Open-Source-Erweiterung für die Vektorähnlichkeitssuche in PostgreSQL.
Andere Datenbanksysteme:
- Azure Cosmos DB: Global verteilter Datenbankdienst mit mehreren Modellen und integrierter Vektorsuche.
- Couchbase: Eine verteilte NoSQL-Cloud-Datenbank.
- Lantern: Eine datenschutzbewusste persönliche Suchmaschine.
- LlamaIndex: Verwendet einen unkomplizierten In-Memory-Vektorspeicher für schnelles Experimentieren.
- Neo4j: Graphdatenbank-Managementsystem.
- Qdrant: Eine Open-Source-Vektordatenbank für die Ähnlichkeitssuche.
- Redis Stack: Ein In-Memory-Datenstrukturspeicher, der als Datenbank, Cache und Nachrichtenbroker verwendet wird.
- SurrealDB: Eine skalierbare Multimodelldatenbank, optimiert für Zeitreihendaten.
- Weaviate: Eine Open-Source-Cloud-native Vektorsuchmaschine.
Bibliotheken und Tools für die Vektorsuche:
- FAISS: Eine Bibliothek für die effiziente Ähnlichkeitssuche und das Clustering dichter Vektoren, die für die Verarbeitung großer Datensätze konzipiert und für den schnellen Abruf nächster Nachbarn optimiert ist.