# Retrieval-Augmented Generation

Unter Retrieval-Augmented Generation (RAG) versteht man ein Softwaresystem, welches Information Retrieval mit einem Large Language Model kombiniert. Eine Abfrage, welche an das System gestellt wird, kann hierbei auf Informationen aus (externen) Informationsquellen, Datenbanken oder dem World Wide Web zugreifen statt nur auf die Trainingsdaten des Modells. Dies erhöht die Genauigkeit und Robustheit der generierten Inhalte, indem es die Modelle mit aktuellen und spezifischen Informationen versorgt. Typische Anwendungsfälle sind der Zugriff von Chatbots auf interne (Unternehmens-)Daten oder die Bereitstellung von Sachinformationen, die ausschließlich aus verlässlichen Quellen stammen sollen.

## Verfahren

Retrieval-Augmented Generation besteht im Wesentlichen aus vier Stufen:
* Datenindexierung
* Datenabruf
* Augmentierung
* Antwortgenerierung

### Datenindexierung

Die zu referenzierenden Daten werden im ersten Schritt in Worteinbettungen umgewandelt und in einer Vektordatenbank indexiert. Die Daten können hierbei sowohl unstrukturiert (Texte, Bilder, Video, Audio), semistrukturiert, strukturiert (z. B. aus einer relationalen Datenbank oder einem Wissensgraphen) vorliegen. In der Vektordatenbank werden hierbei die Worteinbettungen mit den originalen Daten verknüpft.
Abhängig von der jeweiligen Implementierung können auch Suchanfragen an das System und die zugehörigen Antworten durch ein RAG-System indexiert werden.

#### Chunking (aufteilen der Daten)

Im ersten Schritt werden die zu indexierenden Daten in kleinere Bestandteile (Chunks) aufgeteilt. Textdokumente können beispielsweise in kleinere Absätze aufgeteilt werden, während man Wissensgraphen in Sub-Graphen zerteilt. Bilder können nach den Objekten im Bild (Hund, Tisch, Gesicht etc.) mittels eines Segmentierungsmodells aufgeteilt werden. Bei relationalen Datenbanken kann man das Datenbankschema (z. B. DDL) nach zusammengehörigen Tabellen aufteilen, welche fusioniert (z. B. "join") werden müssen.
Die einzelnen Bestandteile werden anschließend mit Annotationen versehen, um sie der ursprünglichen Datenquelle zuordnen zu können.

#### Vektor-Generierung

Die einzelnen Chunks werden mittels Tokenisierung in Token zerlegt. Diese Token werden anschließend durch ein Einbettungsmodell in Worteinbettungen (Vektoren) übersetzt. Die Worteinbettungen werden dann in der Vektordatenbank gemeinsam mit den Chunks und Annotationen gespeichert.
Bei Bildinformationen wird hier das Bild von einem Bild-zu-Text Modell in eine Beschreibung übersetzt und diese Beschreibung für die Worteinbettung verwendet. Seltener wird das Bild selbst codiert, denn hierfür wird ein geeigneter Tokenizer benötigt, welcher Bilddaten verarbeiten kann. Wenn Bild- und Textdaten in derselben Datenbank gespeichert werden sollen, wird ein multimodaler Tokenizer benötigt. Ähnliches gilt für das Verarbeiten von Audio- und Videodaten.

#### Vernetzung von Daten

Komplexe RAG-Systeme besitzen die Möglichkeit die Daten miteinander automatisiert zu verknüpfen. Hierbei werden mittels eines Sprachmodells aus den indizierten Dokumenten ein Wissensgraph extrahiert und die innerhalb eines Dokuments beschriebenen Konzepte mit den jeweiligen Konzepten im Wissensgraphen verknüpft. Diese Verknüpfung ermöglicht eine formale Analyse der zuvor nur unstrukturiert vorgelegenen Daten.

### Datenabruf

Beim Datenabruf wird eine Suchanfrage des Benutzers zuerst in eine Worteinbettung umgewandelt. Anschließend wird ermittelt, welche in der Vektordatenbank gespeicherten Daten mit der Abfrage des Benutzers semantisch korrelieren. Werden hierbei relevante Daten gefunden, werden diese gewichtet (Ranking) und gefiltert.
Für die Berechnung der Korrelation können unterschiedliche Verfahren zum Einsatz kommen. Typisch ist die Verwendung von Okapi BM25, SPLADE, Dragon, oder eine Kombination mehrerer Verfahren.

#### Filterung

Die Filterung der Daten kann aus unterschiedlichen Gründen erfolgen. Hierbei gilt es die Vertraulichkeit der Daten, Jugendschutz-Einschränkungen, Urheberrechte und ähnliches zu berücksichtigen.

#### Rephrasing

Einige Systeme können die Suchergebnisse mittels eines Sprachmodells auf Relevanzkriterien bewerten. Werden keine relevanten Daten gefunden, kann ein weiterer Agent die Anfrage des Benutzers umformulieren (rephrasing) und eine neue Suche starten. Das System wird darin beschränkt, wie viele Versuche es hat und/oder wie lange es hierfür Zeit hat.
Da bei diesem Verfahren mehrere zusätzliche Schritte benötigt werden, ergibt sich ein erhöhter Arbeits- und Zeitaufwand für das System, um ein Ergebnis zu liefern. Der Vorteil besteht in der höheren Wahrscheinlichkeit ein günstiges Suchergebnis zu erhalten.

#### Relationale Daten

Bei relationalen Daten werden die Daten üblicherweise nicht vollständig in Dokumente umgewandelt und in der Vektordatenbank gespeichert, sondern nur das Datenschema. Bei der Suche wird das nötige Datenschema zurückgeliefert, aus dem ein Sprachmodell SQL-Quelltext erzeugt (Text-to-SQL). Dieser wird auf der Datenbank ausgeführt, um die benötigten Informationen zu generieren.
Hierbei gilt zu beachten, dass der neuerzeugte Quelltext fehlerhaft oder schadhaft sein kann. Die Anfrage muss daher sowohl auf syntaktische Richtigkeit (Halluzination von nicht-existenden Tabellen oder Spalten), als auch die Schädlichkeit (z. B. mögliche SQL-Injection) untersucht werden. Die Datenbankabfrage muss durch geeignete Rechtesetzung "Read-Only", also schreibgeschützt sein.

### Augmentierung

Im Augmentierungsprozess werden anwendungsspezifische Daten, etwa ein Systemprompt und die Metadaten des Benutzers, sowie die gefundenen Daten der Suchanfrage mit der Anfrage des Benutzers zusammengeführt. Komplexe RAG-Systeme können hierbei die Anfrage des Benutzers in unterschiedliche Wissensgebiete aufteilen und spezifisch behandeln.

### Antwortgenerierung

Im letzten Schritt wird die augmentierte Suchanfrage in ein Sprachmodell übergeben, welches die Daten mittels eines statistischen Modells in eine Antwort transformiert.
Zudem wird die vom Sprachmodell generierte Antwort mit Referenzen auf die Quellen der Daten verknüpft (typischerweise über einen URI), um dem Benutzer eine Nachvollziehbarkeit und Kontrollmöglichkeit der Antwort zu ermöglichen.

## Anwendungen

Da RAG-Systeme eine Erweiterung zu klassischen Suchmaschinen sind, sind die Einsatzbereiche überschneidend. Anwendungen für RAG-Systeme finden in der Kundenbetreuung, der Analyse medizinischer Informationen, juristischen Recherchen, der Bildung, wissenschaftlichen Forschung, Finanzanalyse, der Auswertung von Logdaten, sowie allen anderen Anwendungen, bei denen das Auffinden von Informationen relevant ist.

## Herausforderungen

RAG-Systeme weisen aufgrund einer Vielzahl an beteiligten Softwaresystemen und Akteuren eine hohe Komplexität in der Implementierung auf.
Zudem muss die Indexierung, die Gewichtung und die Filterung der Daten kontinuierlich an sich ständig ändernde Gegebenheiten angepasst und erweitert werden. Der Betrieb eines RAG-Systems ist somit nicht nur mit einem hohen Aufwand in der Implementierung, sondern auch mit einem kontinuierlichen Aufwand im Betrieb verbunden.

## Softwarepakete

Für die Implementierung von RAG-Systemen gibt es Softwarepakete, welche Anwendungsspezifisch angepasst werden müssen. Hierbei unterscheidet man zwischen komplexen Software-Frameworks, welche eine umfangreiche Orchestrierung von KI-Agenten und Programmierschnittstellen ermöglichen, sowie Softwarepaketen, welche eine Low-Code Umgebung bereitstellen.
Liste von Softwarepaketen zur Erstellung von RAG-Systemen (Stand: 3. Februar 2025) :
| Softwarepaket | Lizenz | Beschreibung |
| Microsoft Copilot Studio | Proprietär | Low-Code Web-Plattform in Microsoft 365 |
| Azure AI Studio | Proprietär | Low-Code Web-Plattform in Microsoft Azure. Auch komplexe Orchestrierung möglich. |
| PromptFlow | Open-Source | Technologie hinter Copilot Studio und Azure AI Studio. Ermöglicht eine komplexe Orchestrierung. Integration mit LangChain oder Semantic Kernel möglich. |
| Vertex AI Agent Builder | Proprietär | Low-Code Web-Plattform der Google Cloud |
| watsonx | Proprietär | Low-Code Orchestrierungs-Plattform von IBM |
| Firecrawl | Open-Source | API-Service zur Webseitenindexierung |
| LangChain und LangGraph | Open-Source | Framework für Orchestrierung von KI-Systemen |
| Kernel Memory | Open-Source | Framework zur Erstellung von RAG-Systemen |
| Semantic Kernel | Open-Source | Framework für Orchestrierung von KI-Systemen |
| Haystack | Open-Source | Framework zur Erstellung von RAG-Systemen |
| REALM | Open-Source | Google-Research-Projekt mit einer RAG-System Beispielimplementierung |
| RAGFlow | Open-Source | Ein Framework, das sich auf die Vereinfachung der Erstellung von RAG-basierten Anwendungen konzentriert, mit vorgefertigten Komponenten und Workflows. |
| txtai | Open-Source | Eine KI-gestützte Datenplattform, die Such- und Frage-Antwort-Funktionen bietet und sich leicht in bestehende Systeme integrieren lässt. |
| LlamaIndex | Open-Source | Ein Tool zum Aufbau von Indizes über Ihre Daten, um sie für LLMs (Large Language Models) zugänglich zu machen. |
| RAGAS | Open-Source | Ein Evaluierungsframework für RAG-Systeme, das Metriken zur Bewertung der Antwortqualität bietet. |
| RAGstack | Open-Source | Ein Stack zum Aufbau von RAG-Systemen mit Komponenten wie LangChain, FastAPI und anderen. |
| RAG Architect | Open-Source | Ein Framework zur Erstellung von RAG-Systemen mit Fokus auf Modularität und Erweiterbarkeit. |
| RAG End-to-End | Open-Source | Ein End-to-End-Beispiel für die Implementierung von RAG mit den Transformers von Hugging Face. |
| RAG Pipeline | Open-Source | Eine Pipeline innerhalb von Haystack zur Implementierung von RAG-Systemen. |
| STORM | Open-Source | Ein von der Stanford OVAL entwickelte LLM-gestützte Wissenskurationssystem, das Wikipedia-ähnliche Artikel basierend auf Internetrecherchen erstellt. |
| LLM-App | Open-Source | Ein Framework von Pathway, das die Erstellung von Anwendungen mit großen Sprachmodellen erleichtert. |
| Cognita | Open-Source | Ein von TrueFoundry entwickeltes Tool zur Integration von Wissensdatenbanken in KI-gestützte Anwendungen. |
| R2R | Open-Source | Ein von SciPhi-AI entwickeltes Framework zur Implementierung von Retrieval-zu-Response-Systemen. |
| Neurite | Open-Source | Ein von SatelliteComponent entwickeltes Tool zur neuronalen Informationsverarbeitung und -extraktion. |
| FlashRAG | Open-Source | Ein von RUC-NLPIR entwickeltes Framework für schnelle Retrieval-Augmented Generation. |
| Canopy | Open-Source | Ein von Pinecone entwickeltes Tool zur Verwaltung und Orchestrierung von Vektordatenbanken für RAG-Systeme. |
Zusätzlich gibt es auch fertige Softwarepakete wie Pieces for Developers, welche für das persönliche Datenmanagement eingesetzt werden können.
Retrieval Augmented Generation wird zudem in einigen Suchmaschinen wie Perplexity.ai, Google Gemini, Microsoft Bing, sowie SearchGPT eingesetzt.

## Referenzen

* ↑ Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze: Introduction to Information Retrieval. Hrsg.: Stanford University, Ludwig-Maximilians-Universität München. 2009, ISBN 978-0-521-86571-5 (englisch, stanford.edu).
* 1 2 3 4 Trey Grainger, Doug Turnbull, Max Irwin: AI-Powered Search. Hrsg.: Manning. 2024, ISBN 978-1-61729-697-0 (englisch, manning.com [abgerufen am 23. Juli 2024]).
* ↑ Penghao Zhao et al.: Retrieval-augmented generation for ai-generated content: A survey. 21. Juni 2024, doi:10.48550/arXiv.2402.19473, arxiv:2402.19473 (englisch).
* ↑ Tomaž Bratanič, Oskar Hane: Knowledge Graph-Enhanced RAG. Hrsg.: Manning. 2024, ISBN 978-1-63343-626-8 (englisch, manning.com [abgerufen am 23. Juli 2024]).
* ↑ Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alexander C. Berg, Wan-Yen Lo, Piotr Dollár, Ross Girshick: Segment Anything. 5. April 2023, doi:10.48550/arXiv.2304.02643, arxiv:2304.02643 (englisch).
* ↑ Junde Wu, Jiayuan Zhu, Yunli Qi: Medical Graph RAG: Towards Safe Medical Large Language Model via Graph Retrieval-Augmented Generation. 17. August 2024, doi:10.48550/arXiv.2408.04187, arxiv:2408.04187 (englisch).
* ↑ Olesya Bondarenko: Implement Semantic Search with ML and BERT. Hrsg.: Manning. (englisch, manning.com [abgerufen am 23. Juli 2024]).
* ↑ Stephen E. Robertson, Hugo Zaragoza: The Probabilistic Relevance Framework: BM25 and Beyond. Januar 2009, doi:10.1561/1500000019 (englisch, researchgate.net [PDF; 1,3 MB; abgerufen am 23. Juli 2024]).
* ↑ SPLADE. In: GitHub. Abgerufen am 17. August 2024 (englisch).
* ↑ Ayush Thakur: llmware/dragon-mistral-7b-v0: A Powerful LLM for RAG Applications. Medium, 22. Dezember 2023, abgerufen am 16. August 2024 (englisch).
* ↑ Pinterest Engineering: How we built Text-to-SQL at Pinterest. Medium, 2. April 2024, abgerufen am 17. August 2024 (englisch).
* ↑ Yunfan Gao, Yun Xiong, Xinyu Gao, Kangxiang Jia, Jinliu Pan, Yuxi Bi, Yi Dai, Jiawei Sun, Meng Wang, Haofen Wang: Retrieval-Augmented Generation for Large Language Models: A Survey. Tongji-Universität, Fudan-Universität, 27. März 2024, arxiv:2312.10997 (englisch).
* ↑ Keshav Unni: Better Customer Support Using Retrieval-Augmented Generation (RAG) at Thomson Reuters. Medium, 8. August 2023, abgerufen am 18. August 2024 (englisch).
* ↑ Tarunvel V S: RAG in Customer Support. Medium, 11. April 2024, abgerufen am 18. August 2024 (englisch).
* ↑ Adarsh: Enhancing Customer Service with Retrieval-Augmented Generation (RAG) in AI Chatbots. kommunicate.io, 6. August 2024, abgerufen am 18. August 2024 (englisch).
* ↑ Tanya Malhotra: MedGraphRAG: An AI Framework for Improving the Performance of LLMs in the Medical Field through Graph Retrieval Augmented Generation (RAG). 12. August 2024, abgerufen am 16. August 2024 (englisch).
* ↑ Junde Wu, Jiayuan Zhu, Yunli Qi: Medical Graph RAG: Towards Safe Medical Large Language Model via Graph Retrieval-Augmented Generation. 8. August 2024, doi:10.48550/arXiv.2408.04187, arxiv:2408.04187.
* ↑ Arunim Samat: Legal-RAG vs. RAG: A Technical Exploration of Retrieval Systems. truelaw.ai, 23. März 2024, abgerufen am 16. August 2024 (englisch).
* ↑ Enhancing Education with RAG: How Universities Can Benefit. ElementX.ai, abgerufen am 16. August 2024 (englisch).
* ↑ Unveiling the Impact of RAG AI in Education: Real Case Studies Revealed. MyScale, 17. März 2024, abgerufen am 16. August 2024 (englisch).
* ↑ Eduardo Alvarez: Transforming Financial Services with RAG: Personalized Financial Advice. Medium, 5. April 2024, abgerufen am 16. August 2024 (englisch).
* ↑ Embracing RAG in Financial Services: A New Frontier in AI Technologies. In: LinkedIn Pulse. RoSoft Ventures, 11. November 2023, abgerufen am 16. August 2024 (englisch).
* ↑ Harikiran Akella: Log Analysis with GenAI — With HandsOn. Medium, 21. März 2024, abgerufen am 16. August 2024 (englisch).
* ↑ Yi Xiao, Van-Hoang Le, Hongyu Zhang: Stronger, Cheaper and Demonstration-Free Log Parsing with LLMs. 12. Juni 2024, doi:10.48550/arXiv.2406.06156, arxiv:2406.06156 (englisch).
* ↑ Pieces. Abgerufen am 1. September 2024.