Einleitung
Zur aktuellen Zeit des KI-Booms stehen viele Unternehmen vor der Herausforderung, die transformative Kraft dieser Technologie in ihre eigenen Prozesse zu integrieren. Insbesondere der Gedanke an selbstgehostete und sichere Alternativen zu kommerziellen KI-Modellen, wie etwa ChatGPT, ist in der Wirtschaft präsent. Viele streben nach individuellen Lösungen, stoßen jedoch auf den erheblichen Aufwand, der mit dem Modelltraining und Fine-Tuning verbunden ist. Hier kommt das RAG1-Prinzip ins Spiel, ein Verfahren, das die Notwendigkeit aufwendiger Trainingsprozesse überflüssig machen kann.
In diesem Blogbeitrag werden wir genauer darauf eingehen, was RAG ist, wie es funktioniert und wie man mithilfe dieses Ansatzes beeindruckende Chatbots erstellen kann, ohne auf kommerzielle KI-Modelle oder zeitintensives Training zurückgreifen zu müssen.
Ansätze
Zu Beginn der Entwicklung eines Chatbots stellt sich unter anderem die Frage, wie dieser Zugriff auf das nötige Wissen erhält, um auf oft sehr spezifische Fragen zu antworten.
Eine Möglichkeit wäre, ein eigenes großes Sprachmodell (LLM) von Grund auf selbst zu entwickeln und zu trainieren. Doch bei zu erwartenden Kosten von mehreren Millionen Euro dürften die Allermeisten diese Idee schnell verwerfen.
Eine weniger kostspielige Alternative ist das sogenannte Finetuning. Bei dieser Methode wird ein meist bereits nutzbares Modell mit den eigenen relevanten Daten nachträglich trainiert. So wird ermöglicht, ein LLM deutlich schneller und kostengünstiger mit eigenen Daten zu trainieren. Allerdings ist dies zwar eine gute Möglichkeit, um beispielsweise den Tonfall des großen Sprachmodells an benutzerspezifische Bedürfnisse anzupassen, doch bringt das Finetuning auch einen großen Nachteil mit sich. Bei einem vortrainierten Modell ist es schwierig, gezielt veraltete bzw. nicht gewünschte Informationen zu entfernen. Daher ist nicht garantiert, dass bei Antworten auf das neu antrainierte Wissen zugegriffen wird. Außerdem müsste bei jedem Update der Daten ein neuer Finetunig-Zyklus durchlaufen werden, um das Modell aktuell zu halten.
Aufgrund dieser Umstände hat sich das RAG-Verfahren etabliert. Wobei dieses je nach Use Case auch mit den oben genannten Möglichkeiten kombiniert werden kann.
Retrieval-Augmented Generation
Also, wie funktioniert das RAG-Prinzip und welche Vorteile hat es? Wie bereits beschrieben, wird dem LLM dabei kein spezifisches Wissen antrainiert, sondern tatsächlich „auf Abruf“ mitgegeben.
Stellt man an einen RAG-basierten ChatBot eine Frage, so landet diese nicht gleich beim LLM, da dieses womöglich nicht über das nötige Wissen verfügt, um diese beantworten zu können. Stattdessen wird zuvor eine Wissensdatenbank auf Informationen hin durchsucht, die zur gestellten Frage passen. Die Frage wird nun um die abgerufenen Informationen und eventuell weiteren Anweisungen erweitert und an das große Sprachmodell zu Generierung einer Antwort übergeben.
Die Datenbank ist notwendig, da es in der Regel nicht möglich ist, alle Informationen, auf die das LLM bei Bedarf zurückgreifen soll, als Kontext zur Beantwortung einer Anfrage an das LLM zu übergeben. Schon einzelne längere Dokumente können das Tokenlimit2 des LLMs überschreiten. Auch führt zu viel irrelevanter Kontext häufig zu einer schlechteren Antwort des LLMs. Daher ist es sinnvoll, die Dokumente einzeln abzuspeichern und längere Dokumente in kleinere Abschnitte zu unterteilen. Aus diesen Abschnitten können dann z.B. mit Hilfe des BM25-Algorithmus, oder der Abfrage durch einen Embedding-Vektor, einzelne, für die Beantwortung der Frage relevante Abschnitte ausgewählt werden.
Embeddingmodelle & Vektordatenbanken

Für die Abfrage durch einen Embedding-Vektor werden zunächst alle Textabschnitte durch ein darauf spezialisiertes Sprachmodell (Embeddingmodell) in Vektoren umgewandelt (s. Schema in Abb. 1). Diese Vektoren werden anschließend in einer Vektordatenbank zusammen mit den entsprechenden Textabschnitten und ggf. weiteren Metadaten gespeichert. Wird nun eine Frage an den Chatbot gestellt, wird auch diese durch das gleiche Embeddingmodell in einen Vektor umgewandelt. Daraufhin werden, einfach ausgedrückt, Vektoren mit der geringsten Distanz zum Abfrage-Vektor aus der Datenbank gesucht. So wird sichergestellt, dass eine semantische Ähnlichkeit zwischen der Frage und den an das LLM übergebenen Textabschnitten besteht.
Beispielarchitektur
In diesem Abschnitt wird ein grundsätzlicher Architekturvorschlag auf AWS beschrieben, welcher sich bei anderen Cloudanbietern oder On-Prem ähnlich umsetzen lässt. Außerdem wird auf einige Schwierigkeiten eingegangen, die bei der Umsetzung eines RAG Use Cases beachtet werden sollten. Die grundsätzliche Architektur kann dabei in zwei Abschnitte unterteilt werden, die Beladung der Datenbank und die User-Anfrage an den Chatbot.
Beladen der Datenbank
Zunächst werden Daten verschiedener Formate in einen S3-Bucket geladen. Durch den Upload getriggert, liest eine Lambda-Funktion den Text der Dokumente ein und unterteilt diesen wiederrum in kleinere Abschnitte. An dieser Stelle können auch OCR-Dienste wie AWS Textract verwendet werden, um beispielsweise die Verarbeitung von Text in Bildern zu ermöglichen. Hierbei ist es wichtig, das Format der zugrundeliegenden Daten zu beachten und eine sinnvolle Unterteilung der Texte zu wählen. Auch sollte auf das Tokenlimit des Embeddingmodells geachtet werden, da zu lange Textabschnitte nicht vollständig in Vektoren umgewandelt werden. Es empfiehlt sich, die Texte so zu unterteilen, dass zusammenhängende Paragraphen bzw. Sätze auch möglichst zusammen eingebettet werden. Um den Kontext zwischen aufeinanderfolgenden Paragraphen nicht zu verlieren, sollten sich Abschnitte außerdem überschneiden.
Im nächsten Schritt werden die Texte in einen weiteren S3-Bucket geladen, wodurch eine weitere Lambda-Funktion getriggert wird. Diese übergibt die Textabschnitte zur Generierung von Vektoren an ein Embeddingmodell, welches auf einem Sagemaker-Endpunkt bereitgestellt wird. Bei der Umwandlung in Vektoren ist auf Fachjargon bzw. Abkürzungen zu achten, auf die das Embeddingmodell gegebenenfalls nicht trainiert wurde.
Davon ausgehend, dass nicht dauerhaft neue Daten geladen werden, ist es sinnvoll einen asynchronen Endpunkt zu wählen, um Kosten zu sparen. Anschließend können die Vektoren und Textabschnitte zusammen mit Metadaten in die Vektordatenbank geladen werden.
Anfragen an den Chatbot
Die Benutzeroberfläche des Chatbots kann zum Beispiel auf streamlit basierend auf einer EC2-Instanz bereitgestellt werden. Anfragen an den Chatbot werden an das Embeddingmodell weitergeleitet und in einen Vektor umgewandelt und dieser mit den Daten in der Vektordatenbank abgeglichen. Wie oben beschrieben, können auch in diesem Schritt Fachjargon und Abkürzungen zu ungenauen Ergebnissen führen. Die zurückgegebenen Textabschnitte werden anschließend zusammen mit der gestellten Frage und weiteren Anweisungen an ein LLM auf einem Sagemaker-Endpunkt übergeben und die generierte Antwort schlussendlich in der Benutzeroberfläche angezeigt. Hierbei gibt es noch einen letzten, wichtigen Punkt zu beachten: Auch wenn die RAG-Methode seltener in Halluzinationen und Falschantworten resultiert, sollte der Chatbot in der Lage sein, auf verwendete Quellen zu verweisen, sodass die Antwort nachvollziehbar ist und überprüft werden kann. Dazu können die in der Vektordatenbank gespeicherten Metadaten um einen Link zum jeweiligen Quelldokument erweitert werden und dieser durch das Sprachmodell in die Antwort integriert werden.
Zusammenfassung
RAG bietet eine effiziente Lösung für die Herausforderungen bei der Entwicklung von Chatbots in Zeiten des KI-Booms. Im Gegensatz zu aufwendigem Modelltraining oder Finetuning setzt RAG auf die Idee des „Abrufens“ von relevantem Wissen, anstatt es im Modell selbst zu speichern. Dieses Verfahren ermöglicht die Erstellung beeindruckender Chatbots ohne den Bedarf an teuren, selbst entwickelten Sprachmodellen oder zeitraubendem Training. Die Nutzung einer Wissensdatenbank, die Informationen auf Abruf bereitstellt, sorgt für eine präzise Antwortgenerierung. Die RAG-Methode vermeidet die Einschränkungen von trainierten Modellen, da sie nicht auf kontinuierliches Training angewiesen ist. Mit einer strukturierten Architektur, die Datenbankbeladung und Benutzeranfragen effektiv handhabt, stellt RAG eine vielversprechende Methode dar, um fortschrittliche und zugleich kosteneffiziente Chatbots zu entwickeln, die sich auf spezifisches Wissen fokussieren.
Autoren:
Leon Topp, Lukas Schiffers