Wird geladen

Der vollständige RAG-Ablauf

Lektion 364 Min.

Nachdem wir nun die Grundlagen von RAG, Text-Chunking und Embeddings behandelt haben, gehen wir Schritt für Schritt die vollständige RAG-Pipeline durch. Dieses detaillierte Beispiel zeigt dir genau, wie alle Teile in einer echten Implementierung zusammenpassen.

Schritt 1: Zerlege deinen Quelltext in Chunks

Zunächst nehmen wir unser Quelldokument und zerlegen es in überschaubare Chunks. Für dieses Beispiel verwenden wir zwei einfache Textabschnitte:

  • Abschnitt 1: Medizinische Forschung - "Dieses Jahr brachte bedeutende Fortschritte in unserem Verständnis von XDR-47, einem 'Bug', den wir zuvor noch nicht gesehen haben."
  • Abschnitt 2: Softwareentwicklung - "Diese Abteilung widmete sich intensiv der Untersuchung verschiedener Infektionsvektoren in unseren verteilten Systemen"

Schritt 2: Generiere Embeddings

Als Nächstes wandeln wir jeden Text-Chunk in numerische Embeddings um. Um dieses Konzept zu verdeutlichen, stellen wir uns vor, wir hätten ein perfektes Embedding-Modell, das immer genau zwei Zahlen zurückgibt, und wir wüssten, wofür jede Zahl steht:

In unserem imaginären Modell:

  • Erste Zahl: Wie stark der Text das medizinische Feld behandelt
  • Zweite Zahl: Wie stark der Text die Softwareentwicklung behandelt

Unser Abschnitt zur medizinischen Forschung erhält also ein Embedding von [0.97, 0.34] - sehr medizinisch, etwas softwarebezogen aufgrund des Wortes "Bug". Der Abschnitt zur Softwareentwicklung erhält [0.30, 0.97] - sehr softwarefokussiert, aber "Infektionsvektoren" hat medizinische Konnotationen.

Normalisierung

Bevor diese Embeddings gespeichert werden, durchlaufen sie einen Normalisierungsprozess, der jeden Vektor so skaliert, dass er eine Magnitude von 1,0 hat. Dies wird in der Regel automatisch von deiner Embedding-API übernommen, aber es ist wichtig zu verstehen, dass dies geschieht.

Nach der Normalisierung werden unsere Embeddings zu [0.944, 0.331] und [0.295, 0.955]. Wir können diese auf einem Einheitskreis visualisieren, wobei jeder Punkt genau auf dem Rand des Kreises liegt.

Schritt 3: Speichern in der Vektordatenbank

Die normalisierten Embeddings werden in einer Vektordatenbank gespeichert - einer spezialisierten Datenbank, die für das Speichern, Vergleichen und Durchsuchen langer Zahlenlisten wie unserer Embeddings optimiert ist.

An diesem Punkt machen wir eine Pause. Die gesamte bisherige Arbeit war Vorverarbeitung, die im Voraus geschieht. Jetzt warten wir darauf, dass ein Nutzer eine Anfrage stellt.

Schritt 4: Verarbeite die Nutzeranfrage

Wenn ein Nutzer eine Frage stellt wie "Ich interessiere mich für das Unternehmen. Was genau hat die Softwareentwicklungsabteilung dieses Jahr gemacht?", führen wir seine Anfrage durch dasselbe Embedding-Modell.

Diese Anfrage wird als [0.1, 0.89] eingebettet - niedriger medizinischer Wert, hoher Softwareentwicklungswert. Nach der Normalisierung wird sie zu [0.112, 0.993].

Schritt 5: Finde ähnliche Embeddings

Jetzt fragen wir die Vektordatenbank: "Finde das gespeicherte Embedding, das diesem Embedding der Nutzeranfrage am nächsten kommt." Die Datenbank gibt den Abschnitt zur Softwareentwicklung zurück, da er am ähnlichsten ist.

Wie Ähnlichkeit funktioniert: Kosinus-Ähnlichkeit

Die Vektordatenbank verwendet die Kosinus-Ähnlichkeit, um zu bestimmen, welche Embeddings am ähnlichsten sind. Diese misst den Kosinus des Winkels zwischen zwei Vektoren.

Wichtige Punkte zur Kosinus-Ähnlichkeit:

  • Die Ergebnisse liegen im Bereich von -1 bis 1
  • Werte nahe 1 bedeuten sehr ähnlich
  • Werte nahe 0 bedeuten senkrecht (nicht verwandt)
  • Werte nahe -1 bedeuten völlig entgegengesetzt

Die Berechnung verwendet die Skalarprodukt-Formel: cos(a) = (A · B) / (||A|| · ||B||)

In unserem Beispiel hat die Nutzeranfrage eine Kosinus-Ähnlichkeit von 0,983 mit dem Chunk zur Softwareentwicklung und nur 0,398 mit dem Chunk zur medizinischen Forschung. Der Chunk zur Softwareentwicklung ist eindeutig die bessere Übereinstimmung.

Kosinus-Distanz

Du wirst in der Dokumentation von Vektordatenbanken oft auf "Kosinus-Distanz" stoßen. Dies ist einfach 1 - Kosinus-Ähnlichkeit, was uns eine leichter interpretierbare Zahl liefert, bei der:

  • Werte nahe 0 hohe Ähnlichkeit bedeuten
  • Größere Werte geringere Ähnlichkeit bedeuten

Schritt 6: Erstelle den finalen Prompt

Schließlich nehmen wir die Frage des Nutzers und den relevantesten Text-Chunk, den wir gefunden haben, und kombinieren sie zu einem Prompt für Claude:

Der Prompt enthält sowohl die Frage des Nutzers als auch den relevanten Kontext aus unserem Dokument, sodass Claude eine fundierte Antwort basierend auf den spezifischen Informationen in unserer Wissensdatenbank geben kann.

Der vollständige Ablauf

Das ist die gesamte RAG-Pipeline von Anfang bis Ende:

  1. Zerlege Quelldokumente in Chunks
  2. Generiere Embeddings für jeden Chunk
  3. Speichere Embeddings in einer Vektordatenbank
  4. Wenn ein Nutzer eine Frage stellt, bette seine Anfrage ein
  5. Finde die ähnlichsten gespeicherten Embeddings mithilfe der Kosinus-Ähnlichkeit
  6. Füge die relevanten Chunks zusammen mit der Frage des Nutzers zu einem Prompt hinzu
  7. Sende den erweiterten Prompt an Claude für eine Antwort

Das Verständnis dieses Prozesses und der dahinterstehenden Mathematik wird dir helfen, effektiv mit Vektordatenbanken zu arbeiten und Probleme zu beheben, wenn dein RAG-System nicht die erwarteten Ergebnisse liefert.