Large Language Models sind aus dem Alltag kaum noch wegzudenken – trotz eines großen Mankos: Ihr Wissen ist auf den Trainingszeitpunkt begrenzt. Sie können keine neuen Informationen berücksichtigen, die nach dem letzten Training entstanden sind, und ihr internes Wissen ist unvollständig und teils fehlerhaft. Der Open-Source-Tipp in diesem Monat zeigt, wie Sie dieses Problem mithilfe von Retrieval-augmented Generation lösen.
Wenn wir uns mit einem Large Language Model (LLM) unterhalten, beispielsweise einem Chatbot, dann ist die Erwartungshaltung zumeist die, dass wir über ein API auf eine Art Knowledge-Base zurückgreifen und eine 100 Prozent korrekte Antwort auf unsere Frage bekommen. Dies ist natürlich nicht so. Ein LLM wurde während einer Trainingsphase mit sehr vielen Textbeispielen trainiert. Auf dieser Basis versucht das LLM dann auf eine Frage die bestmögliche Antwort zurückzuliefern.
Dabei spielt Statistik eine große Rolle. Das LLM versucht, Textbausteine korrekt zusammenzusetzen. Ob das Ergebnis am Ende einen Sinn ergibt, ist allerdings nicht immer gewährleistet. Der Anwender bekommt also eine Antwort zurück und es sieht oberflächlich so aus, als ob das LLM seinen Job wie erwartet erledigt hat. Doch ob die Antwort wirklich richtig und sinnvoll ist, ist alles andere als garantiert. Dieses Problem ist auch als Halluzination von LLMs und generativen KI-Modellen im Allgemeinen bekannt.
Bessere Antworten bei dynamischen Daten
Ein LLM benötigt also Unterstützung, um qualitativ hochwertige Antworten zu generieren. Und dies gilt insbesondere dann, wenn es um Daten geht, die sich im Laufe der Zeit ändern. Denken Sie wieder an das Beispiel des zuvor genannten Chatbots, der beispielsweise innerhalb einer Supportabteilung zum Einsatz kommt. Nach dem Training des LLM wurden neue Supportdokumente veröffentlicht, die bei der Lösung bestimmter Probleme unterstützen. Das LLM weiß von diesen Dokumenten allerdings nichts und kann in dem Fall somit wahrscheinlich keine Hilfestellung leisten.
Wenn wir uns mit einem Large Language Model (LLM) unterhalten, beispielsweise einem Chatbot, dann ist die Erwartungshaltung zumeist die, dass wir über ein API auf eine Art Knowledge-Base zurückgreifen und eine 100 Prozent korrekte Antwort auf unsere Frage bekommen. Dies ist natürlich nicht so. Ein LLM wurde während einer Trainingsphase mit sehr vielen Textbeispielen trainiert. Auf dieser Basis versucht das LLM dann auf eine Frage die bestmögliche Antwort zurückzuliefern.
Dabei spielt Statistik eine große Rolle. Das LLM versucht, Textbausteine korrekt zusammenzusetzen. Ob das Ergebnis am Ende einen Sinn ergibt, ist allerdings nicht immer gewährleistet. Der Anwender bekommt also eine Antwort zurück und es sieht oberflächlich so aus, als ob das LLM seinen Job wie erwartet erledigt hat. Doch ob die Antwort wirklich richtig und sinnvoll ist, ist alles andere als garantiert. Dieses Problem ist auch als Halluzination von LLMs und generativen KI-Modellen im Allgemeinen bekannt.
Bessere Antworten bei dynamischen Daten
Ein LLM benötigt also Unterstützung, um qualitativ hochwertige Antworten zu generieren. Und dies gilt insbesondere dann, wenn es um Daten geht, die sich im Laufe der Zeit ändern. Denken Sie wieder an das Beispiel des zuvor genannten Chatbots, der beispielsweise innerhalb einer Supportabteilung zum Einsatz kommt. Nach dem Training des LLM wurden neue Supportdokumente veröffentlicht, die bei der Lösung bestimmter Probleme unterstützen. Das LLM weiß von diesen Dokumenten allerdings nichts und kann in dem Fall somit wahrscheinlich keine Hilfestellung leisten.
Natürlich ließe sich das LLM nun einfach mit den zusätzlich veröffentlichen Informationen trainieren, um so dessen Wissen zu erweitern. Allerdings erfordert ein solcher Trainingsprozess immense Hardwareressourcen sowie Zeit und die Mitarbeiter müssten über das notwendige Know-how verfügen, wie sie ein LLM neu trainieren können.
Die Frage ist also, wie lässt sich das Wissen eines LLM erweitern, ohne einen komplett neuen Trainingsprozess durchlaufen zu müssen. Und genau hier kommt die Retrieval-augmented Generation, oder RAG, zum Einsatz. Diese besteht im Kern aus zwei wesentlichen Komponenten:
1. Retrieval (Abruf): Eine externe Datenquelle, beispielsweise eine Knowledge-Base, wird dem LLM zur Verfügung gestellt. Das LLM kann, vereinfacht gesagt, Daten aus dieser Quelle abrufen. Es identifiziert anhand einer Vektordatenbank die relevanten Informationen, um im nächsten Schritt eine Antwort auf die gestellte Frage zu erzeugen.
2. Generation (Erzeugung): Das LLM nutzt die abgerufenen Informationen aus der Vektordatenbank als zusätzlichen Kontext, um eine fundierte und akkurate Antwort auszugeben.
Der RAG-Prozess lässt sich vereinfacht so darstellen: Zunächst wird eine Nutzeranfrage in einen semantischen Vektor umgewandelt. Dieser dient als Suchschlüssel, um in einer Datenbank ähnliche Inhalte zu finden. In dieser Datenbank liegen dabei zum Beispiel aktuelle Supportartikel. Die gefundenen Texte oder Textausschnitte erhält das LLM anschließend zusammen mit der ursprünglichen Anfrage. Auf Basis dieser Informationen formuliert die KI dann ihre Antwort – gestützt auf das aktuelle und kontextrelevante Wissen.
RamaLama mit RAG Support
In der IT-Administrator Ausgabe 12/2024 [1] haben wir bereits das Tool RamaLama [2] vorgestellt. Dieses ermöglicht den Einsatz unterschiedlicher KI-Modelle auf dem lokalen System. Die Modelle laufen dann innerhalb von Containern, die RamaLama selbst verwaltet. Für einen performanten Betrieb greift das Tool auf die lokale GPU eines Systems zurück.
Kontextbezogene Daten, also beispielsweise die zuvor genannten Supportartikel, liegen zumeist in einem Textformat vor – also etwa als PDF-, DOCX- oder Markdown-File. Diese Daten gilt es nun in einer Vektordatenbank zu speichern, um sie für das LLM zugänglich zu machen. Mit Docling [3] steht ein Open-Source-Parser für eine Vielzahl von unterschiedlichen Textformaten zur Verfügung. Neben Docling zum Erzeugen von Vektordaten unterstützt RamaLama auch die Vektordatenbank Qdrant [4]. Somit müssen Sie sich also nicht selbst um das Erzeugen und das Speichern der Vektordaten kümmern, sondern lagern diese Aufgabe bequem an RamaLama aus.
RamaLama Container und LLM Workflow
Das Bild zeigt den kompletten Workflow, wie Sie mithilfe von RamaLama ein LLM lokal auf Ihrem System starten, das über kontextbasiertes Wissen verfügt. Dieses zusätzliche Wissen stellt RamaLama anhand der Qdrant-Vektordatenbank zur Verfügung.
RamaLama kann einem LLM kontextbasiertes Wissen aus einer Vektordatenbank zur Verfügung stellen.
Nun möchten wir einem LLM dieses kontextbasierte Wissen mittels RAG beibringen. Dabei soll das Granite-Modell zusätzliches Know-how zum Setup von externen Identity Providern (IdP) in Kombination mit dem Identity Management Framework FreeIPA [5] erlangen. Starten Sie das LLM über RamaLama zuerst mit ramalama run granite3.3. RamaLama kümmert sich selbstständig darum, das LLM zu laden und innerhalb eines Containers zu starten. Fragen Sie die KI nun nach dem Setup von externen IdPs in Kombination mit FreeIPA, erhalten Sie zwar eine Antwort, diese ist aber nicht korrekt und das LLM stellt lediglich kontextbezogene Textbausteine zusammen, die als Ganzes aber wenig Sinn ergeben.
Um das LLM nun durch zusätzliches Wissen zu erweitern, parsen wir die relevanten Dokumente zuerst und schreiben das Ergebnis in eine Vektordatenbank. Hierfür erzeugen Sie mithilfe von RamaLama ein OCI-kompatibles Container-Image. RamaLama wandelt die übergebenen Dokumente mittels Docling um und schreibt diese dann in eine Vektordatenbank, die Teil des Container-Images ist:
Anstelle einer einzelnen Datei lässt sich hier natürlich auch ein Ordner angeben, in dem mehrere Dateien liegen, oder wahlweise eine Web-URL verwenden. Hat alles geklappt, sehen Sie das soeben erzeugte Container-Image nun auch in der Ausgabe von podman image list. Starten Sie jetzt einen neuen Container und stellen die Vektordatenbank dem LLM zur Verfügung, um so erneut interaktiv mit dem Chatbot zu kommunizieren:
ramalama run --rag localhost/ragdata granite3.3
Stellen die nun erneut die gleiche Frage wie zuvor, bekommen Sie korrekte und detaillierte Informationen darüber, wie Sie einen externen Identity Provider in ein FreeIPA-basiertes Identity-Management-System einbinden. Im nächsten Schritt könnten Sie nun das neue Image auf eine Registry laden, beispielsweise mit ramalama push, sodass auch andere Benutzer von Ihren kontextbasierten Daten profitieren.
Fazit
RamaLama unterstützt Docling zum Konvertieren einer Vielzahl unterschiedlicher Dokumentenformate und erlaubt es, diese in eine vektorbasierte Datenbank zu speichern. Diese können Sie dann LLMs mithilfe der Retrieval-augmented Generation zur Verfügung stellen, um qualitativ hochwertige und kontextbezogene Antworten zu generieren.