Veröffentlicht am

Retrieval Augmented Generation – Proof of Concept

Proof-of-Concept-für-RAG

Das Wissen von Large Language Models (LLM) reicht nicht über die Daten hinaus, auf denen sie trainiert wurden. Mit Retrieval Augmented Generation (RAG) können wir LLMs für einen erweiterten Kontext einsetzen. Das ist ganz besonders nützlich, wenn wir die Power der großen Sprachmodelle in unsere Apps einbauen wollen, und zwar auch dann, wenn das verwendete Modell den Kontext unserer App ursprünglich nicht versteht.

Beispiel: Eine App soll Sachbearbeiter dabei unterstützen, Fakten zu sammeln und zu bewerten. Dazu darf weder ChatGPT noch Gemini oder anderer Cloud-Service eingesetzt werden, weil die Daten vertraulich sind und das Haus nicht verlassen dürfen.

Wir sind also auf ein Open-Source-Sprachmodell angewiesen, das aber den spezifischen Kontext unseres Unternehmens nicht versteht.

Der Artikel zeigt mit einem kleinen Experiment, dass auch die großen Modelle vor Irrtum nicht gefeit sind. Als Proof of Concept sehen wir Beispiel von drei Open Source Modellen, dass RAG Abhilfe schaffen kann.

Halluzination in LLMs – ChatGPT und Gemini

Die großen Modelle werden immer besser und damit für uns als Enduser immer zuverläßiger. Schade nur, können wir sie nicht unternehmensintern nutzen, gerade dann nicht, wenn keine vertraulichen Informationen in die Cloud geschickt werden dürfen. Doch auch die großen Modelle können sich irren.

Eine ganz einfache Frage zeigt die Grenzen:

Wann wurde der Bärengraben in Bern ursprünglich gebaut?

ChatGPT und Gemini – die Grenzen

Fragen wir zuerst OpenAI’s Flaggschiff ChatGPT 4o:

OpenAI 4o Hallunzination

Das tönt überzeugend, kann aber nicht sein: Wie in Bern jedes Kind weiß, hat Napoleon seinerzeit die Bären entführt und der kam vor 1857 vorbei. Auch die älteren OpenAI Modelle – 4 und 3.5 – wissen es nicht besser. 4o ist diesbezüglich also nicht gescheiter geworden.

Stellen wir wir Google’s Gemini dieselbe Frage:

Gemini-Hallunzination

Gemini meint 1441 sei das richtige Jahr und untermauert gleich noch mit Fakten. Schön bei Gemini: wir erhalten auch einen Link präsentiert. Folgen wir diesem, dann erfahren wir auf den ersten Blick und aus erster Hand, nämlich den Bärengraben-Betreibern: 1513 wurden die Bären als Kriegsbeute heimgebracht und im Stadtgraben gehalten.

Interessant, dass Gemini die Links nicht konsultiert, die es uns selbst präsentiert.

Betrachten wir als nächstes drei Open-Source-Modelle, die wir vielleicht in unsere Unternehmens-Apps einbauen wollen.

Open-Source-Modelle und ihre Grenzen

Wir betrachten drei Modelle: Llama3, Mistral und Phi3. Alle drei können wir herunterladen und lokal auf dem Laptop laufen lassen.

Diese Modelle sind interessant, weil wir die Daten nicht aus der Hand geben müssen und dennoch die Power von generativen Modellen nutzen können. Zusammen mit RAG, sogar mit Erfolg. Doch erkunden wir zuerst die Grenzen:

Llama3 und seine Grenzen

Llama3 stammt aus dem Hause Meta und wird freundlicherweise Open Source zur Verfügung gestellt. Es sei heute das fähigste offen verfügbare Modell.

Wir verwenden das Meta-Llama-3-8B Modell mit Release Datum 18. April 2024.

Llama3-Hallunzination

Pure Erfindung: da soll ein Tunnel von 1.2km Länge unter der Stadt Bern verlaufen und es gäbe schon Spuren davon aus der Römerzeit. Llama3 antwortet auf die in deutscher Sprache gestellte Frage mit Halluzinationen in englischer Sprache.

Mistral und die Grenzen

Wir verwenden das 7B Modell Version 0.3 von Mistral. Mistral AI ist ein französisches Unternehmen, das sich auf das Training vertrauenswürdiger KI-Modelle spezialisiert hat. Stellen wir auch diesem Modell die Bärengraben-Frage:

Mistral-Beispiel

Et voilà: Anders als die Meta-Ingenieure, haben die französischen Spezialisten bei Mistral AI auch Daten zum Berner Bärengraben im Training verwendet. Das Modell antwortet korrekt und in deutscher Sprache. Das eine Experiment macht keine Aussage über die allgmeine Zuverlässigkeit von Mistral – dazu würden wir weit mehr Beispiele verwenden.

Bevor wir zu RAG übergehen, untersuchen wir noch ein drittes Modell:

Phi3 und seine Grenzen

Phi3 ist das kleinste der drei untersuchten Open-Source-Modelle. Wir verwenden das 3.8B-Mini-Modell – es stammt  von Microsoft.

Phi3-Hallunzination

Sehr kreativ! Ich messe auf der Karte nach und finde heraus, dass die kürzeste Distanz zwischen Bern und Limmat in Luftlinie mehr als 100km beträgt. Und da soll bereits im 14. Jahrhundert ein Tunnel errichtet worden sein, der Bärengraben heißen soll? Microsoft hat sich beim Training seines Phi3-Modells offensichtlich nicht mit der Berner Stadtgeschichte abgegeben.

Retrieval Augmented Generation in a Nutshell

Mit RAG können wir den Wissenslücken der Modelle Abhilfe verschaffen. Untersuchen wir RAG an Phi3 – einerseits weil es das kleinste Modell ist und andererseits weil es – gleich wie das größere Llama3 – so kreativ geantwortet hat.

Die Graphik verdeutlicht die Idee von RAG:

RAG in a Nutshell

Der Prompt des Users wird nicht direkt ans generative Modell geschickt. Vielmehr wird er zu einem Vorverarbeitungsschritt herangezogen:

R = Retrieval: Mit Hilfe des User-Prompts wird nach kontextspezifischem Wissen gesucht. Gerne werden heute dazu Vektordatenbanken und Embedding-Modelle herangezogen. Gut geeignet ist auch klassische Key-Word-Suche oder auch eine hybride Suche, die die klassische Suche mit der Vektorsuche vereint.

A = Augmentation: Die Ergebnisse des Retrievals also der Suche, werden herangezogen, um den User-Prompt mit Kontext anzureichern. So ‘lernt’ das generative Modell, mit ihm bisher unbekannten Fakten umzugehen.

G = Generation: Den verbesserten Prompt präsentieren wir dem generativen Modell. Mit Hilfe des zusätzlichen Kontext sollte es die User-Frage korrekt beantworten können.

RAG funktioniert!

Natürlich reicht ein einziger Prompt nicht aus, um sicher zu sein, ob unser Modell der Wahl funktioniert. Mistral halluziniert bei anderen Fragen, bei denen Llama3 korrekt antwortet. Phi3 Mini als kleinstes der betrachteten Modelle, müssen wir noch besser untersuchen.

Bei unserem Beispiel haben auch die großen Modelle von OpenAI und Google versagt. RAG verbessert selbst das kleinste untersuchte Modell.

Neben der Wahl des Modells, dem Austesten des Prompts spielt das Retrieval eine zentrale Rolle bei RAG – je besser der Kontext desto besser das RAG.

RAG – Prompt Augmentation

In unserem Experiment zeigen wir den Effekt von RAG.

Das Retrieval erledigen wir von Hand: Wir suchen den geeigneten Kontext. Gemini hat uns ja mit einem Link über den Bärengraben in Bern versorgt. Klicken wir auf der Seite etwas weiter, dann finden wir eine schöne grafische Darstellung der historischen Entwicklung des Bärengrabens. Dort kopieren wir den Abschnitt zur Schaffung des Bärengrabens und verwenden diesen Chunk, so der Fachbegriff, um den Prompt anzureichern.

Genau so würde der zum User-Prompt passende Kontext automatisch in einer LLM-gestützten App gesucht und gefunden.

Jetzt reichern wir den Prompt an (augment the prompt) – der Screenshot zeigt das Ergebnis mit dem Phi3-Modell:

RAG-Prompt
  1. Der ursprüngliche Prompt des Users wird angereichert mit
  2. einer Anweisung, was zu tun ist und
  3. dem Kontext aus dem Retrieval-Schritt.
  4. Damit antworte das generative Modell korrekt.

Der Beweis ist erbracht – selbst das kleinste Modell, das wir verwendet haben, antwortet korrekt dank RAG.

Das Prompt-Pattern sehen wir in Schritt 2 – Phi3 ist in der Lage, dieses zu verstehen und umzusetzen.

Interessant dabei ist die Anweisung mit ‘ich weiss nicht’ zu antworten. Testen wir das aus und ersetzen das Wort ‘Bärengraben’ durch ‘Rosengarten’ – ebenfalls ein sehenswerter Ort in Bern. Hier das Ergebnis ebenfalls mit Phi3:

RAG Prompt Test

Phi3 enttäuscht uns nicht und antwortet wie erwartet.

Übrigens auch alle anderen Modelle liefern korrekte Antwort – alle in deutscher Sprache. Auf Screenshots verzichten wir.

  • Webinar:

    So baust du LLMs in deine Anwendungen ein

    Erfahre in diesem exklusiven Webinar, wie du LLMs in deine Anwendungen einbaust.

    Mehr Infos zum Webinar findest du in der ausführlichen Beschreibung.

    Das kostenlose Webinar findet statt am Montag, 8. Juli um 13:00-13:45 MEZ via ZOOM.

    Trage dich in die Liste ein und du erhältst den Zugangslink und später den Link zur Aufzeichnung.

  • Chatbot als Lernassistent
  • Prompt Engineering Personas und Wiederholungen
  • AI-Engineering-Fachglossar
  • EBook Tutorial: Cluster aus virtuellen Maschinen
  • Ebook: Apache ZooKeeper
  • Ebook: Realtime Streaming Pipelines
  • LSM-Trees: Log Structured Merge Trees
  • Aufbau einer Enterprise Search
  • Zeit Stream Analytics
  • B-Tree-Index in Datenbanken
  • Ordering Guarantee in Apache Kafka
  • CAP Theorem
  • MapReduce Funktionale Programmierung
  • Konzepte des HDFS
  • Optimistisches Concurrency Control