3 Schlüsselmuster zum Aufbau von multimodalem RAG: Ein umfassender Leitfaden
Large Language Models (LLMs) werden aufgrund ihrer Vielseitigkeit hoch geschätzt, da wir sie in zahlreichen KI-Anwendungen einsetzen können, wie etwa personalisierten Chatbots, Dokumentzusammenfassung, Frage-Antwort-Systemen für Dokumente, Dokumentklassifizierung und mehr.
Ein zentrales Problem bei der Verwendung von LLMs ist jedoch das Risiko der Halluzination. Halluzination bezeichnet ein Phänomen, bei dem LLMs höchst überzeugende, aber unwahre Antworten auf unsere Anfragen erzeugen. Es ist ziemlich schwierig, Halluzinationen von LLMs zu erkennen, insbesondere wenn wir ihnen Fragen zu Themen stellen, mit denen wir nicht wirklich vertraut sind.
Neben vielen anderen Methoden ist Retrieval Augmented Generation (RAG) ein Ansatz, der uns helfen kann, das Risiko von Halluzinationen durch LLMs zu verringern. In seiner frühen Implementierung wurde RAG häufiger nur für Texteingaben verwendet. Mit dem Fortschritt der KI-Technologien können wir RAG nun mit verschiedenen Datenmodalitäten nutzen, wie Bildern, Audio, Videos usw., was wir als multimodales RAG bezeichnen.
In diesem Artikel werden wir verschiedene Ansätze besprechen, wie wir multimodales RAG in unseren KI-Anwendungen implementieren können. Bevor wir uns mit multimodalem RAG befassen, lassen Sie uns zunächst die Grundlagen von RAG zusammenfassen.
Die Grundlagen von RAG
RAG ist ein neuartiger Ansatz, der dazu beiträgt, das Risiko von LLM-Halluzinationen zu verringern, indem einer Benutzeranfrage im Prompt relevanter Kontext bereitgestellt wird. Bevor das LLM auf eine Benutzeranfrage antwortet, kann es diesen relevanten Kontext als Grundlage für seine Antwort verwenden, was zu stärker kontextualisierten Antworten führt.
Wie der Name schon sagt, hat RAG drei Hauptkomponenten: Retrieval, Augmentation und Generation.
Retrieval: In dieser Komponente wird der relevanteste Kontext für eine Benutzeranfrage abgerufen. Es gibt zwei Phasen in dieser Komponente: Kandidaten-Retrieval und Reranking. In der Phase des Kandidaten-Retrievals werden die Top-n der vielversprechendsten Kontexte abgerufen. In der Reranking-Phase hingegen werden diese Kontexte anhand von Ähnlichkeitsmetriken wie Kosinus-Ähnlichkeit oder euklidischer Distanz eingestuft oder sortiert.
Augmentation: In dieser Komponente werden die vielversprechendsten Kontexte mit der ursprünglichen Benutzeranfrage integriert, um einen endgültigen, kohärenten Prompt zu bilden. Dieser endgültige Prompt dient dann als Eingabe für unser LLM.
Generation: In dieser Komponente generiert das LLM die Antwort auf Grundlage des Eingabe-Prompts, der die vielversprechenden Kontexte zur Beantwortung der Benutzeranfrage enthält. Die Antwort wird anschließend an den Benutzer zurückgesendet.
Abbildung: Der vollständige Workflow von RAG.
Allerdings müssen wir einige Dinge einrichten, bevor wir RAG in unserer Anwendung implementieren.
Zum Beispiel benötigen wir ein effizientes und skalierbares Speichersystem, um alle möglichen Kontexte zu speichern, bevor wir sie abrufen können. Da die für RAG typischerweise nützlichen Kontexte unstrukturierte Daten (Text, Bild usw.) sind, sind Vektordatenbanken die am häufigsten verwendeten Speichersysteme in RAG-Anwendungen.
In einer Vektordatenbank speichern wir typischerweise die Embedding-Repräsentation von Kontexten statt der Rohkontexte. Mit Embeddings können wir Ähnlichkeitssuchen durchführen, um die vielversprechendsten Kontexte für eine beliebige Anfrage zu finden. Daher benötigen wir auch ein Deep-Learning-Modell (Embedding-Modell), um unsere Rohkontexte in Embeddings umzuwandeln.
Embedding ähnlicher Wörter in einem zweidimensionalen Vektorraum.
Der Workflow der RAG-Pipeline von Anfang an sieht dann wie folgt aus:
Wandeln Sie Rohkontexte mithilfe eines Embedding-Modells in Embeddings um.
Speichern und indizieren Sie diese Embeddings in einer Vektordatenbank.
Wandeln Sie für jede gegebene Abfrage die Abfrage mithilfe desselben Embedding-Modells, das wir für die Rohkontexte verwendet haben, in ein Embedding um.
Führen Sie innerhalb der Vektordatenbank eine Ähnlichkeitssuche zwischen dem Abfrage-Embedding und den Kontext-Embeddings durch.
Rufen Sie die Top-n der relevantesten Kontexte ab und integrieren Sie diese Kontexte zusammen mit der ursprünglichen Abfrage in einen kohärenten Prompt als Eingabe für unser LLM.
Das LLM generiert eine Antwort auf die Abfrage, indem es die bereitgestellten relevanten Kontexte nutzt, um ein genaueres Ergebnis zu liefern.
Die Grundlagen von multimodalem RAG
Die Implementierung von RAG, die wir im vorherigen Abschnitt besprochen haben, erweist sich als wirklich hilfreich, um das Risiko von LLM-Halluzinationen zu verringern und die Gesamtqualität von LLM-Antworten zu verbessern. Wenn wir jedoch über die Kontexte in RAG sprechen, beziehen wir uns normalerweise auf Kontext als Text. Gleichzeitig wissen wir, dass wir in realen Anwendungen möglicherweise andere Modalitäten als Kontexte bereitstellen möchten, anstatt nur Text.
Nehmen wir an, wir möchten eine Sammlung von Dokumenten als Kontexte für eine interne Chatbot-Anwendung verwenden. Wie wir bereits wissen, besteht ein Dokument typischerweise nicht nur aus Text, sondern auch aus Bildern, Diagrammen und Tabellen, die viele nützliche Informationen enthalten, um Benutzeranfragen zu beantworten. Mit textbasiertem RAG können wir Informationen, die in diesen Bildern, Diagrammen und Tabellen enthalten sind, nicht als Kontexte speichern.
Multimodales RAG ist die Lösung für dieses Problem, denn mit dieser RAG-Methode können wir alle Kontexte aus verschiedenen Informationsquellen speichern und dadurch auch die Gesamtgenauigkeit von LLM-Antworten verbessern.
Abbildung: Multimodale RAG-Pipeline.
Dank der Entstehung und des Aufstiegs von multimodalem Embedding sowie multimodalen LLMs ist es uns jetzt möglich, multimodales RAG zu implementieren. Die Idee von multimodalem RAG ist genau dieselbe wie bei gewöhnlichem RAG, aber jetzt können wir Embeddings aus verschiedenen Datenmodalitäten speichern, wie Bildern, Audio und Videos. Allerdings müssen wir sicherstellen, dass wir multimodale Embedding-Modelle sowie multimodale LLMs verwenden, wenn wir multimodales RAG implementieren möchten.
Im Allgemeinen können wir multimodales RAG auf verschiedene Arten implementieren. Konkret gibt es drei verschiedene Muster, über die wir in diesem Artikel ausführlich sprechen werden:
Alle Modalitäten in einer primären Modalität verankern.
Alle Modalitäten in denselben Vektorraum einbetten.
Ein hybrider Abruf mit Zugriff auf Rohbilder.
Lassen Sie uns diese Muster nacheinander besprechen.
Muster 1: Alle Modalitäten in einer primären Modalität verankern (Multimedia zu Text)
Das erste Muster besteht darin, alle Modalitäten in eine primäre Modalität umzuwandeln. Obwohl Sie jede beliebige Modalität als primäre wählen können, wird Text in multimodalem RAG am häufigsten verwendet. Daher werden wir in diesem Abschnitt Text als unsere primäre Modalität verwenden.
Um verschiedene Modalitäten in Text umzuwandeln, besteht der Trick darin, ein multimodales LLM zu verwenden, um eine Textzusammenfassung unserer Daten zu generieren. Nehmen wir zum Beispiel an, wir haben ein Dokument, das eine Menge Text und ein Bild enthält. Da Text unsere primäre Modalität ist, müssen wir mit dem Text im Dokument nichts tun. Gleichzeitig können wir ein Vision Language Model (VLM) wie LLAVA, Gemini, Claude Sonnet, Qwen-VL, Pixtral usw. verwenden, das sowohl Bilder als auch Text als Eingaben akzeptiert, um eine Textzusammenfassung unseres Bildes zu generieren.
Sobald wir die Textzusammenfassung unseres Bildes haben, können wir diesen Text zusammen mit anderem Text im Dokument mithilfe eines textbasierten Embedding-Modells in Embeddings umwandeln. Es gibt viele textbasierte Embedding-Modelle, aus denen wir wählen können, wie zum Beispiel die von SentenceTransformers, OpenAI, VoyageAI usw. Die Embeddings dieser Texte werden dann in einer Vektordatenbank gespeichert und indexiert.
Abbildung: Pattern-1-Workflow.
Nun können wir für jede gegebene Anfrage diese mithilfe desselben textbasierten Embedding-Modells, das wir zuvor verwendet haben, in ein Embedding umwandeln. Danach können wir eine Ähnlichkeitssuche durchführen, um die relevantesten Kontexte zu finden, und anschließend die textbasierten Kontexte als Teil des Prompts für unsere textbasierten oder multimodalen LLMs verwenden.
Wenn Sie mehr über die Implementierungsdetails dieses Musters erfahren möchten, haben wir einen speziellen Artikel, der Sie durch die Schritte zum Aufbau eines multimodalen RAG mit diesem Muster führt.
Dieses Muster eignet sich perfekt, wenn Sie in Ihrem Anwendungsfall keinen Zugriff auf die rohen, nicht-textuellen Daten benötigen. Ihre Anwendung könnte Bilder als Eingaben akzeptieren, aber die Ausgabe ist immer textbasiert. Zum Beispiel könnten Sie eine Anwendung erstellen, die die Funktionalität hat, den Inhalt von Bildern in einem internen Dokument zu erklären.
Allerdings verlassen wir uns bei diesem Muster weiterhin auf textbasierte Kontexte, genau wie beim üblichen RAG-System. In realen Anwendungen möchten wir möglicherweise Bilder oder andere Modalitäten als Kontexte verwenden. Lassen Sie uns daher über das zweite Muster sprechen.
Pattern 2: Alle Modalitäten in denselben Vektorraum einbetten
Das zweite Muster beinhaltet die Umwandlung von Daten in allen Modalitäten in Embeddings im selben Vektorraum. Das Geheimnis hinter diesem Ansatz ist die Implementierung multimodaler Embedding-Modelle wie CLIP und ALIGN. Nehmen wir CLIP als Beispiel.
CLIP ist ein von OpenAI entwickeltes Modell, das sowohl Text als auch Bild als Eingabepaar übernimmt und darauf trainiert wurde, die Ähnlichkeit zwischen dem Text und dem Bild zu bestimmen. Infolgedessen gibt CLIP einen hohen Ähnlichkeitswert aus, wenn der Text mit dem Bild übereinstimmt, und umgekehrt.
Abbildung: Embeddings von Daten mit unterschiedlichen Modalitäten mit CLIP in einem dreidimensionalen Vektorraum.
Wie Sie oben sehen können, nehmen wir an, wir haben einen Satz „Ein lächelnder Hund“ und ein Bild eines lächelnden Hundes. CLIP wandelt zunächst sowohl den Text als auch das Bild in Embeddings mit ähnlichen Dimensionen um, und wenn wir den Vektorraum überprüfen, werden beide Embeddings wahrscheinlich nahe beieinander platziert sein.
Da wir ein multimodales Embedding-Modell haben, besteht der erste Schritt dieses Musters darin, unsere Daten in verschiedenen Modalitäten mit diesem multimodalen Embedding-Modell in Embeddings umzuwandeln. Anschließend speichern und indexieren wir diese Embeddings in einer Vektordatenbank wie Milvus oder Zilliz Cloud. Sobald wir eine Benutzeranfrage haben, wandeln wir sie mit demselben multimodalen Embedding-Modell um, und dann können wir eine Ähnlichkeitssuche durchführen, um die relevantesten Kontexte zu finden.
Abbildung: Pattern-2-Workflow.
Die abgerufenen Kontexte bei Anwendung dieses Musters können Daten mit einer Vielzahl von Modalitäten sein, wie etwa Bild und Text. Daher müssen wir ein multimodales LLM verwenden, um diese Kontexte zu berücksichtigen und die endgültige Antwort zu generieren. Wenn unsere Daten aus Bildern und Text bestehen, können wir ein Vision Language Model (VLM) wie LLAVA, Gemini, Claude Sonnet, Qwen-VL, Pixtral usw. verwenden.
Wenn Sie mehr über die Implementierungsdetails dieses Musters erfahren möchten, haben wir einen ausführlichen Artikel, der Sie durch die Schritte zum Aufbau eines multimodalen RAG mit diesem Muster führt. Beachten Sie jedoch, dass in diesem Artikel die Rohbilder nicht direkt in der Vektordatenbank gespeichert werden, sondern im lokalen Speicher.
Der Hauptvorteil dieses Musters ist seine Vielseitigkeit und Einfachheit. Die Implementierung eines multimodalen Embedding-Modells bedeutet, dass wir keinen zusätzlichen Schritt benötigen, um die Inhalte aller Modalitäten in eine primäre Modalität umzuwandeln, wie wir es im ersten Muster getan haben. Außerdem können die nach der Ähnlichkeitssuche abgerufenen Kontexte Daten beliebiger Modalitäten sein, statt nur einer bestimmten Modalität.
Da wir jedoch beliebige Datenmodalitäten als relevante Kontexte für unser multimodales LLM verwenden können, müssen wir bei der Implementierung dieses Musters auch die Rohdaten speichern. Das Problem ist, dass der Speicherbedarf von Nicht-Text-Daten wie Bildern groß ist, und ihre direkte Speicherung in einer Vektordatenbank kann zu einer ineffizienten Nutzung von Ressourcen führen. Dies wird letztendlich auch zu langsameren Abfragezeiten und höheren Speicherkosten führen.
Daher empfehlen wir, dieses Muster zu verwenden, wenn Sie Daten mit verschiedenen Modalitäten als Kontexte nutzen müssen, Skalierbarkeit jedoch für Ihren Anwendungsfall kein Anliegen ist.
Muster 3: Ein hybrider Abruf mit Zugriff auf Rohbilder.
Wenn Sie Daten mit verschiedenen Modalitäten als Kontexte verwenden müssen und Skalierbarkeit ebenfalls ein Anliegen ist, können Sie dieses Muster implementieren. Die Hauptidee dieses Musters ist die Trennung von Zuständigkeiten: Wir verwenden eine Vektordatenbank, um schnelle und effiziente Ähnlichkeitssuchen zur Ermittlung relevanter Kontexte durchzuführen, und nutzen dedizierte Objektspeichersysteme wie AWS S3 oder Google Cloud Storage, um die Rohdaten zu speichern.
Während der Implementierung dieses Musters müssen wir zwei verschiedene Schritte durchführen. Zuerst speichern wir die tatsächlichen Rohdaten in einem dedizierten Objektspeichersystem wie AWS S3 oder Google Cloud Storage. Zweitens speichern wir die Metadaten unserer Rohdaten in der Vektordatenbank, wie etwa die URL unseres Bildes, das sich im dedizierten Objektspeichersystem befindet.
Abbildung: Workflow von Muster 3.
Da wir ein separates System zum Speichern unserer Rohdaten verwenden, ist die Art und Weise, wie wir RAG durchführen, fast ähnlich wie beim ersten Muster. Nehmen wir an, Text ist unsere primäre Modalität. Das Erste, was wir tun müssen, ist, ein multimodales LLM zu verwenden, um Textzusammenfassungen unserer Rohdaten zu generieren. Anschließend können wir ein textbasiertes Embedding-Modell verwenden, um die Textzusammenfassungen in Embeddings umzuwandeln. Danach speichern wir die Embeddings sowie die Metadaten unserer Rohdaten (URL der Rohdaten im dedizierten Speichersystem) in einer Vektordatenbank.
Für eine beliebige Anfrage verwenden wir dasselbe multimodale LLM, um eine Textzusammenfassung zu generieren, und wandeln dann die Zusammenfassung der Anfrage mit demselben textbasierten Embedding-Modell in ein Embedding um. Anschließend können wir eine Ähnlichkeitssuche durchführen und die Textzusammenfassung sowie die URL der relevanten Kontexte abrufen. Schließlich können wir die Rohdaten über die abgerufene URL an ein multimodales LLM übergeben.
Auch hier können Sie auf diesen Artikel verweisen, der Sie durch die Schritte zum Aufbau eines multimodalen RAG mit diesem Muster führt. Beachten Sie jedoch, dass die Rohbilder in dem Artikel nicht in einem typischen produktionsreifen Speichersystem wie AWS oder GCP gespeichert werden, sondern im lokalen Speicher.
Von den drei Optionen ist dieses Muster aufgrund der Trennung der Speicherung von Rohdaten das am besten skalierbare. Wie wir vielleicht bereits wissen, sind Vektordatenbanken für die Abfrage unstrukturierter Daten optimiert, nicht für das Speichern und Bereitstellen großer binärer Objekte wie Bilder. Tatsächlich ist das Abrufen binärer Objekte aus Vektordatenbanken oft langsamer als das Abrufen aus einem dedizierten Objektspeichersystem.
Daher empfehlen wir Ihnen, dieses Muster zu verwenden, wenn Sie Daten mit verschiedenen Modalitäten als Kontexte nutzen möchten und Skalierbarkeit für Ihren Anwendungsfall ein wichtiges Anliegen ist.
Wie Milvus Vector Database multimodales RAG unterstützt
Wie in den vorherigen Abschnitten erwähnt, spielen Vektordatenbanken eine entscheidende Rolle bei der Anwendung von Retrieval Augmented Generation (RAG). Milvus ist eine Vektordatenbank, die sich aufgrund ihrer fortschrittlichen Funktionen perfekt für den Einsatz in Ihrem RAG-System oder anderen KI-Anwendungen eignet.
Milvus bietet Indexierungsmethoden, die von den einfachsten bis hin zu fortschrittlicheren wie IVFFLAT, HNSW und SCANN reichen, wodurch wir riesige Datensammlungen schnell und effizient speichern können. Die Implementierung dieser fortschrittlichen Indexierungsmethoden beschleunigt außerdem den Ähnlichkeitssuchprozess, um relevante Kontexte in einer RAG-Implementierung zu finden.
Einfache Integration von Milvus mit beliebten Tools für multimodales RAG.
Milvus bietet außerdem eine einfache Integration mit allen RAG-Komponenten, die wir im vorherigen Abschnitt besprochen haben, wie Embedding-Modelle, LLMs und Orchestrierungstools. In Bezug auf Embedding-Modelle können Sie beliebte Optionen von OpenAI, Cohere, SentenceTransformers, HuggingFace, VoyageAI und anderen direkt mit dem Python SDK von Milvus namens pymilvus verwenden. Sie können pymilvus mit einem einfachen pip-Befehl installieren:
pip install -U pymilvus
Nehmen wir nun an, Sie möchten das Embedding-Modell von SentenceTransformers verwenden; dies können Sie mit pymilvus ganz einfach wie folgt tun:
pip install "pymilvus[model]"
from pymilvus import model
sentence_transformer_ef = model.dense.SentenceTransformerEmbeddingFunction(
model_name='all-MiniLM-L6-v2', # Specify the model name
device='cpu' # Specify the device to use, e.g., 'cpu' or 'cuda:0'
)
doc = [
"Artificial intelligence was founded as an academic discipline in 1956."]
doc_embedding = sentence_transformer_ef.encode_documents(doc)
Mehr über die verschiedenen Arten von Embedding-Modellen, die von Pymilvus unterstützt werden, erfahren Sie auf dieser Integrationsseite.
In Bezug auf LLMs und Orchestrierungstools lässt sich Milvus problemlos in beliebte Frameworks wie vLLM, Ollama, Gemini, LlamaIndex und Langchain integrieren. Wenn Sie mehr über die Integration von Milvus und all diesen Tools erfahren möchten, haben wir eine Sammlung von Tutorials, die Sie auf dieser Seite ansehen können. Außerdem haben wir ein einfaches Tutorial, in dem Sie lernen können, wie Sie ein einfaches multimodales RAG mit Milvus erstellen, auf dieser Dokumentationsseite.
Fazit
Multimodales RAG stellt einen bedeutenden Fortschritt bei der Nutzung vielfältiger Datenmodalitäten dar, um die Genauigkeit von LLM-Antworten zu verbessern. Wir haben in diesem Artikel drei zentrale Muster zur Implementierung von multimodalem RAG besprochen: alle Modalitäten in einer primären Modalität zu verankern, sie in einen einheitlichen Vektorraum einzubetten oder hybrides Retrieval mit Zugriff auf Rohdaten einzusetzen. Die Wahl eines geeigneten Musters hängt von den spezifischen Anforderungen Ihrer KI-Anwendung ab.
Mit seinen fortschrittlichen Indexierungsmethoden und der einfachen Integration mit Embedding-Modellen, LLMs und Orchestrierungstools bietet die Milvus-Vektordatenbank ein geeignetes System für die Implementierung multimodaler RAG-Systeme. Da KI-Anwendungen in Umfang und Komplexität zunehmen, wird die Nutzung eines skalierbaren Vektordatenbanksystems wie Milvus immer wichtiger.
Weiterlesen

Zilliz Cloud BYOC Now Available Across AWS, GCP, and Azure
Zilliz Cloud BYOC is now generally available on all three major clouds. Deploy fully managed vector search in your own AWS, GCP, or Azure account — your data never leaves your VPC.

AI Agents Are Quietly Transforming E-Commerce — Here’s How
Discover how AI agents transform e-commerce with autonomous decision-making, enhanced product discovery, and vector search capabilities for today's retailers.

Selecting the Right ETL Tools for Unstructured Data to Prepare for AI
Learn the right ETL tools for unstructured data to power AI. Explore key challenges, tool comparisons, and integrations with Milvus for vector search.


