Direkt zum Hauptinhalt

Vereinigen Sie die Daten Ihrer Patienten mit Multi-Modal RAG

Erfahren Sie, wie Sie die Vektorsuche von Databricks mit multimodalen Einbettungen verwenden, um Ihre RAG-Anwendungen mit multimodalen Funktionen zu erweitern

von Austin Choi und Jordan Soldo

  • Cross-Modal Superkräfte: Multimodale Einbettungsmodelle ermöglichen die Suche über verschiedene Modalitäten hinweg mit Textabfragen, ohne Tags oder Metadaten, indem verschiedene Datentypen in einem gemeinsamen semantischen Raum platziert werden.
  • Erstellen, Suchen, Bereitstellen: Erfahren Sie, wie Sie ein vollständiges multimodales RAG-System auf Databricks erstellen, indem Sie Bilder in Einbettungen umwandeln, sie in Delta-Tabellen speichern und leistungsstarke Ähnlichkeitssuche mit AI Search ermöglichen.
  • Nahtlose Inhaltsverbindungen: Verbessern Sie Ihre RAG-Anwendungen, indem Sie die Lücke zwischen Modalitäten schließen, sodass selbst komplexe Dokumente wie PDFs mit gemischten Inhaltstypen vollständig durchsuchbar und kontextbezogen relevant sind.

Einleitung: Vielfältige Daten ermöglichen KI

Multimodale Suche stellt eine bedeutende Herausforderung in modernen KI-Systemen dar. Traditionelle Suchsysteme haben Schwierigkeiten, effektiv über verschiedene Datentypen hinweg zu suchen, ohne umfangreiche Metadaten oder Tags. Dies ist besonders problematisch für Unternehmen im Gesundheitswesen, die große Mengen vielfältiger Inhalte verwalten, darunter Text, Bilder, Audio und mehr, was oft zu unstrukturierten Datenquellen führt.

Ein Bild, das unstrukturierte und strukturierte Daten vergleicht.
Abbildung 1: Diese Quellen kommunizieren nicht gut miteinander, insbesondere wenn sie aus verschiedenen Systemen stammen

Jeder, der im Gesundheitswesen tätig ist, versteht die Schwierigkeit, unstrukturierte Daten mit strukturierten Daten zu verschmelzen. Ein gängiges Beispiel hierfür ist die klinische Dokumentation, bei der handschriftliche klinische Notizen oder Entlassungsberichte von Patienten oft in PDFs, Bildern und ähnlichen Formaten eingereicht werden. Diese müssen entweder manuell konvertiert oder mittels Optical Character Recognition (OCR) verarbeitet werden, um die notwendigen Informationen zu finden. Selbst nach diesem Schritt müssen Sie die Daten mit Ihren vorhandenen strukturierten Daten abgleichen, um sie effektiv nutzen zu können.

In diesem Blogbeitrag werden wir Folgendes untersuchen:

  1. Wie man Open-Source-Multimodale Modelle auf Databricks lädt
  2. Verwendung des Open-Source-Modells zur Generierung von Embeddings auf unstrukturierten Daten
  3. Speicherung dieser Embeddings in einem Vektorsuchindex (AWS | Azure | GCP)
  4. Verwendung von Genie Spaces (AWS | Azure | GCP) zur Abfrage unserer strukturierten Daten
  5. Verwendung von DSPy zur Erstellung eines Multi-Tool-Calling-Agenten, der den Genie Space und den Vektorsuchindex verwendet, um auf die Eingabe zu antworten

Am Ende dieses Blogbeitrags werden Sie sehen, wie multimodale Embeddings im Gesundheitswesen Folgendes ermöglichen:

  1. Vielfältigere Daten durch die Nutzung von allem in einer PDF, nicht nur des Textes
  2. Die Flexibilität, beliebige Daten zusammen zu verwenden. Im Gesundheitswesen ist dies besonders wertvoll, da man nie weiß, mit welcher Art von Daten man arbeiten muss
  3. Vereinheitlichung von Daten durch einen Agenten, was eine umfassendere Antwort ermöglicht
Eine konzeptionelle Idee, wie Ihre Daten durch Agenten und multimodale Embeddings vereinheitlicht werden können
Abbildung 2: Eine konzeptionelle Idee, wie Ihre Daten durch Agenten und multimodale Embeddings vereinheitlicht werden können

Was ist ein Embedding?

Ein Embedding-Raum (AWS | Azure | GCP) ist eine n-dimensionale mathematische Darstellung von Datensätzen, die es ermöglicht, eine oder mehrere Datenmodalitäten als Vektoren von Gleitkommazahlen zu speichern. Das Nützliche daran ist, dass in einem gut konstruierten Embedding-Raum Datensätze mit ähnlicher Bedeutung einen ähnlichen Raum einnehmen. Stellen Sie sich zum Beispiel vor, wir hätten ein Bild eines Pferdes, das Wort „LKW“ und eine Audioaufnahme eines bellenden Hundes. Wir geben diese drei völlig unterschiedlichen Datenpunkte in unser multimodales Embedding-Modell ein und erhalten Folgendes zurück:

  • Pferdebild: [0.92, 0.59, 0.17]
  • „LKW“: [0.19, 0.93, 0.81]
  • Hundebellen: [0.94, 0.11, 0.86]

Hier ist eine visuelle Darstellung, wo die Zahlen in einem Embedding-Raum liegen würden:

Eine 2D-Darstellung von hochdimensionalen Datenpunkten in einem Embedding-Raum.

In der Praxis sind die Dimensionen des Embedding-Raums Hunderte oder Tausende, aber zur Veranschaulichung verwenden wir 3-Raum. Wir können uns vorstellen, dass die erste Position in diesen Vektoren „Tierhaftigkeit“, die zweite „Transportmittelhaftigkeit“ und die dritte „Lautstärke“ darstellt. Das wäre angesichts der Embeddings sinnvoll, aber typischerweise wissen wir nicht, was jede Dimension darstellt. Wichtig ist, dass sie die semantische Bedeutung der Datensätze darstellen.

Es gibt mehrere Möglichkeiten, einen multimodalen Embedding-Raum zu erstellen, darunter das gleichzeitige Training mehrerer Encoder (wie CLIP), die Verwendung von Cross-Attention-Mechanismen (wie DALL-E) oder die Verwendung verschiedener Post-Training-Alignment-Methoden. Diese Methoden ermöglichen es der Bedeutung des Datensatzes, die ursprüngliche Modalität zu überschreiten und einen gemeinsamen Raum mit anderen unterschiedlichen Datensätzen oder Formaten einzunehmen.

Dieser gemeinsame semantische Raum ermöglicht leistungsstarke cross-modale Suchfunktionen. Wenn eine Textabfrage und ein Bild ähnliche Vektordarstellungen teilen, teilen sie wahrscheinlich ähnliche semantische Bedeutungen, was es uns ermöglicht, relevante Bilder anhand von Textbeschreibungen ohne explizite Tags oder Metadaten zu finden.

Multimodale Embedding-Modelle: Gemeinsame Embedding-Räume

Um multimodale Suche effektiv zu implementieren, benötigen wir Modelle, die Embeddings für verschiedene Datentypen in einem gemeinsamen Vektorraum generieren können. Diese Modelle sind speziell dafür konzipiert, die Beziehungen zwischen verschiedenen Modalitäten zu verstehen und sie in einem einheitlichen mathematischen Raum darzustellen.

Mehrere leistungsstarke multimodale Embedding-Modelle sind ab Juni 2025 verfügbar:

  • Cohere's Multimodal Embed 4: Ein vielseitiges Modell, das Text- und Bilddaten mit hoher Genauigkeit und Leistung hervorragend einbettet.
  • Nomic-Embed: Bietet starke Fähigkeiten zum Einbetten verschiedener Datentypen in einem einheitlichen Raum. Es ist eines der wenigen vollständig Open-Source-Modelle.
  • Meta ImageBind: Ein beeindruckendes Modell, das sechs verschiedene Modalitäten verarbeiten kann, darunter Bilder, Text, Audio, Tiefe, thermische Daten und IMU-Daten.
  • CLIP (Contrastive Language-Image pretraining): Entwickelt von OpenAI, wird CLIP auf einer Vielzahl von Bild-Text-Paaren trainiert und kann die Lücke zwischen visuellen und textlichen Daten effektiv schließen.

Wichtige architektonische Überlegungen

Bei Databricks stellen wir die Infrastruktur und die Werkzeuge zur Verfügung, um eine End-to-End-Lösung zu hosten, zu bewerten und zu entwickeln, die an Ihren Anwendungsfall angepasst werden kann. Berücksichtigen Sie die folgenden Szenarien, wenn Sie mit der Bereitstellung dieses Anwendungsfalls beginnen:

Skalierbarkeit & Leistung

  • Die Verarbeitungsoptionen müssen basierend auf der Datensatzgröße ausgewählt werden: In-Memory-Verarbeitung für kleinere Datensätze oder Entwicklungsarbeiten, im Gegensatz zu Model Serving (AWS | Azure | GCP) für Produktions-Workloads, die einen hohen Durchsatz erfordern
  • Databricks Vektorspeicher-optimierte Endpunkte im Vergleich zu Standardendpunkten (AWS | Azure | GCP). Wenn Sie viele Vektoren haben, sollten Sie speicheroptimierte Endpunkte in Betracht ziehen, um mehr Vektoren zu speichern (ca. 250 Mio.+).

Kostenüberlegungen

  • Für groß angelegte Implementierungen ist das Bereitstellen von Embedding-Modellen und die Verwendung von AI Query (AWS | Azure | GCP) für Batch-Inferenz effizienter als die In-Memory-Verarbeitung.
  • Bestimmen Sie, ob Sie ein getriggertes oder kontinuierliches Update für Ihren Vektorsuchindex benötigen (AWS | Azure | GCP)
  • Erwägen Sie erneut speicheroptimierte Endpunkte im Vergleich zu Standardendpunkten.
  • Sie können diese Kosten mit der Serverless Real-time Inference SKU verfolgen.
  • Erwägen Sie die Verwendung von Budgetrichtlinien (AWS | Azure | GCP), um sicherzustellen, dass Sie Ihren Verbrauch genau verfolgen.

Betriebliche Exzellenz

  • Verwenden Sie Pipelines und Workflows (AWS | Azure | GCP) und Databricks Asset Bundles (AWS | Azure | GCP) auf Databricks, um Änderungen an Quelldaten zu erkennen und Embeddings entsprechend zu aktualisieren.
  • Verwenden Sie AI Search Delta Sync (AWS | Azure | GCP), um die Synchronisierung mit Ihrem Index vollständig zu automatisieren, ohne dass Pipelines verwaltet werden müssen.
  • AI Search behandelt Fehler, Wiederholungsversuche und Optimierungen automatisch, um die Zuverlässigkeit zu gewährleisten.

Netzwerk- und Sicherheitsüberlegungen

  • Verwenden Sie Databricks Compliance Profiles (AWS | Azure | GCP) für HIPAA-Konformität in Ihrem Workspace.
  • Verwenden Sie Databricks Secret Manager oder Key Management Systems zur Verwaltung Ihrer Geheimnisse.
  • Bitte lesen Sie die Erklärung zu Vertrauen und Sicherheit (AWS | Azure | GCP) in unserer Dokumentation, um zu erfahren, wie Databricks Ihre Daten für KI-verwaltete Dienste verarbeitet.

Technische Lösungsaufschlüsselung

Für die vollständige Implementierung dieser Lösung besuchen Sie bitte dieses Repository hier: Github Link

Dieses Beispiel verwendet synthetische Patienteninformationen als strukturierte Daten und Beispiel-Leistungsbeschreibungen im PDF-Format als unstrukturierte Daten. Zuerst werden synthetische Daten generiert, die mit einem Genie Space verwendet werden können. Dann wird das Nomic Multi-Modal Embedding-Modell, ein hochmodernes Open-Source-Modell für multimodale Embeddings, auf Databricks Model Serving geladen, um Embeddings auf Beispiel-Leistungsbeschreibungen zu generieren, die online gefunden wurden.

Dieser Prozess klingt kompliziert, aber Databricks bietet integrierte Tools, die eine vollständige End-to-End-Lösung ermöglichen. Im Großen und Ganzen sieht der Prozess wie folgt aus:

  1. Ingestion über Autoloader (AWS | Azure | GCP)
  2. ETL mit Lakeflow Declarative Pipelines (AWS | Azure | GCP)
  3. Erstellung von Embeddings mit multimodalen Embedding-Modellen, die auf Databricks gehostet werden.
  4. Hosting der Embeddings in einem Vektorsuchindex (AWS | Azure | GCP)
  5. Bereitstellung mit Model Serving (AWS | Azure | GCP)
  6. Agent Framework zur Sicherung, Bereitstellung und Verwaltung des Agenten.

Erstellung eines Genie Space

Dieser Genie Space wird als Werkzeug verwendet, um natürliche Sprache in eine SQL-Abfrage umzuwandeln, mit der unsere strukturierten Daten abgefragt werden können.

Schritt 1: Generierung synthetischer Patientendaten

In diesem Beispiel wird die Faker-Bibliothek verwendet, um zufällige Patienteninformationen zu generieren. Wir erstellen zwei Tabellen zur Diversifizierung unserer Daten: Patient Visits und Practice Locations, mit Spalten wie Gründen für den Besuch, Versicherungsanbietern und Versicherungsarten.

Schritt 2: Erstellen Sie einen Patient Information Genie Space

Um Daten mit natürlicher Sprache abzufragen, können wir einen Databricks Genie Space (AWS | Azure | GCP) verwenden, um unsere Abfrage in natürliche Sprache umzuwandeln und relevante Patientendaten abzurufen. Klicken Sie in der Databricks-Benutzeroberfläche einfach auf die Registerkarte „Genie“ in der linken Leiste → Neu → wählen Sie die Tabellen „patient_visits“ und „practice_locations“ aus.

Geschäftsbenutzer, die mit natürlicher Sprache in einem Genie-Bereich Daten abfragen.

Wir benötigen die Genie Space ID, um die Zahl nach „rooms“ zu erfassen. Unten sehen Sie ein Beispiel:

Schritt 3: Erstellen Sie die Funktion, die das Genie-Tool repräsentiert, das unser Agent verwenden wird.

Da wir DSPy verwenden, müssen wir nur eine Python-Funktion definieren.

Das ist alles! Lassen Sie uns jetzt den Multi-Modal Generation Workflow einrichten.

Multi-Modal Embedding Generation

Für diesen Schritt verwenden wir das vollständig Open-Source-Modell colNomic-embed-multimodal-7b auf HuggingFace, um Embeddings für unsere unstrukturierten Daten, in diesem Fall PDFs, zu generieren. Wir haben Nomic's Modell aufgrund seiner Apache 2.0-Lizenz und seiner hohen Leistung in Benchmarks ausgewählt.

Die Methode zur Generierung Ihrer Embeddings hängt von Ihrem Anwendungsfall und Ihrer Modalität ab. Überprüfen Sie die Databricks AI Search Best Practices (AWS | Azure | GCP), um zu verstehen, was für Ihren Anwendungsfall am besten geeignet ist.

Schritt 1: Laden, Registrieren und Bereitstellen des Modells auf Databricks

Wir benötigen dieses Modell, damit es innerhalb von Databricks Unity Catalog (UC) verfügbar ist. Daher werden wir MLflow verwenden, um es von Huggingface zu laden und zu registrieren. Anschließend können wir das Modell an einem Model-Serving-Endpunkt bereitstellen.

Das Python-Modell enthält zusätzliche Logik zur Verarbeitung von Bildeingaben, die im vollständigen Repository zu finden ist.

UC Volumes sind wie Dateisysteme konzipiert, um beliebige Dateien zu hosten, und hier speichern wir unsere unstrukturierten Daten. Sie können sie in Zukunft verwenden, um andere Dateien wie Bilder zu speichern und den Prozess nach Bedarf zu wiederholen. Dies schließt das obige Modell ein. Im Repository sehen Sie, dass der Cache auf ein Volume verweist.

Schritt 2: Laden unserer PDFs in eine Liste

Sie haben einen Ordner namens „sample_pdf_sbc“, der einige Beispielzusammenfassungen von Leistungen und Deckungen enthält. Wir müssen diese PDFs vorbereiten, um sie einzubetten.

Schritt 3: Konvertieren Sie Ihre PDFs in Bilder, die vom colNomic-Modell eingebettet werden sollen.

Das colNomic-embed-multimodal-7b-Modell ist speziell darauf trainiert, Text und Bilder innerhalb eines Bildes zu erkennen, was eine gängige Eingabe von PDFs ist. Dies ermöglicht es dem Modell, diese Seiten außergewöhnlich gut abzurufen.

Diese Methode ermöglicht es Ihnen, den gesamten Inhalt eines PDFs zu nutzen, ohne eine Text-Chunking-Strategie zu benötigen, um sicherzustellen, dass die Abfrage effektiv funktioniert. Das Modell selbst kann diese Bilder gut in seinem eigenen Embedding-Raum einbetten.

Wir werden pdf2image verwenden, um jede Seite des PDFs in ein Bild zu konvertieren und es für die Einbettung vorzubereiten.

Schritt 4: Generieren Sie die Embeddings

Jetzt, da wir die PDF-Bilder haben, können wir die Embeddings generieren. Gleichzeitig können wir die Embeddings in einer Delta-Tabelle speichern, zusammen mit zusätzlichen Spalten, die wir zusammen mit unserer Vektorsuche abrufen werden, wie z. B. der Dateipfad zum Speicherort des Volumes.

Schritt 5: Erstellen Sie einen Vektorsuchindex und Endpunkt

Das Erstellen eines Vektorsuchindexes kann über die Benutzeroberfläche oder die API erfolgen. Die API-Methode ist unten gezeigt.

Jetzt müssen wir nur noch alles mit einem Agenten zusammenfügen.

Vereinigung der Daten mit DSPy

Wir verwenden DSPy dafür wegen seines deklarativen, reinen Python-Designs. Es ermöglicht uns, schnell zu iterieren und zu entwickeln und verschiedene Modelle zu testen, um zu sehen, welche für unseren Anwendungsfall am besten geeignet sind. Am wichtigsten ist, dass die deklarative Natur es uns ermöglicht, unseren Agenten zu modularisieren, damit wir die Logik des Agenten von den Werkzeugen isolieren und uns auf die Definition konzentrieren können, WIE der Agent seine Aufgabe erfüllen soll.

Und das Beste daran? Kein manuelles Prompt-Engineering!

Schritt 1: Definieren Sie Ihre dspy.Signatures

Diese Signatur gibt die Ein- und Ausgaben an und erzwingt sie, während sie auch erklärt, wie die Signatur funktionieren soll.

Schritt 2: Fügen Sie Ihre Signatur zu einem dspy.module hinzu

Das Modul nimmt die Anweisungen aus der Signatur und erstellt einen optimalen Prompt, der an die LLM gesendet wird. Für diesen speziellen Anwendungsfall bauen wir ein benutzerdefiniertes Modul namens `MultiModalPatientInsuranceAnalyzer()`.

Dieses benutzerdefinierte Modul zerlegt die Signaturen in Schritte, fast wie das „Verketten“ von Aufrufen, in der Forward-Methode. Wir folgen diesem Prozess:

  1. Nehmen Sie die oben definierten Signaturen und initialisieren Sie sie in der Klasse
  2. Definieren Sie Ihre Werkzeuge. Sie müssen nur eine Python-Funktion sein
    1. Für diesen Beitrag erstellen Sie ein Vektorsuchwerkzeug und ein Genie Space-Werkzeug. Beide Werkzeuge verwenden das Databricks SDK, um einen API-Aufruf an diese Dienste zu tätigen.
    2. Definieren Sie Ihre Logik in der Forward-Methode. In unserem Fall wissen wir, dass wir Schlüsselwörter extrahieren, die Vektorsuchindex abfragen und dann alles in den endgültigen LLM-Aufruf für eine Antwort übergeben müssen.

Schritt 3: Alles erledigt! Jetzt ausführen!

Überprüfen Sie, welche Werkzeuge der Agent verwendet hat und welche Überlegungen der Agent angestellt hat, um die Frage zu beantworten.

Nächste Schritte

Sobald Sie einen funktionierenden Agenten haben, empfehlen wir Folgendes:

  1. Verwenden Sie die Agent Bricks Custom Agents , um Ihre Agenten bereitzustellen und sie mit Unity Catalog zu verwalten/versionieren
  2. Verwenden Sie das Databricks Agent Eval Framework (AWS | Azure | GCP), um Auswertungen durchzuführen und sicherzustellen, dass Ihre Agenten die Erwartungen erfüllen

Das Evaluationsframework ist entscheidend, um zu verstehen, wie effektiv der AI Search Index relevante Informationen für Ihren RAG-Agenten abruft. Anhand dieser Metriken wissen Sie, wo Sie Anpassungen vornehmen müssen, von der Änderung des Embedding-Modells bis zur Anpassung der Prompts, die mit dem LLM interagieren.

Sie sollten auch überwachen, ob die Foundation Model API (AWS | Azure | GCP) für Ihren Anwendungsfall ausreicht. An einem bestimmten Punkt erreichen Sie die API-Limits für die Foundation Model APIs, sodass Sie auf Provisioned Throughput (AWS | Azure | GCP) umsteigen müssen, um einen zuverlässigeren Endpunkt für Ihr LLM zu haben.

Behalten Sie außerdem Ihre Kosten im Verhältnis zum Serverless Model Serving (AWS | Azure | GCP) genau im Auge. Die meisten dieser Kosten entstehen durch das Serverless Model Serving der Databricks SKU und können mit zunehmender Skalierung steigen.

Lesen Sie diese Blogs, um zu verstehen, wie Sie dies auf Databricks tun können.

Darüber hinaus helfen Databricks Delivery Solutions Architects (DSAs) bei der Beschleunigung von Daten- und KI-Initiativen in Organisationen. DSAs bieten architektonische Führung, optimieren Plattformen für Kosten und Leistung, verbessern die Entwicklererfahrung und treiben die erfolgreiche Projektausführung voran. Sie schließen die Lücke zwischen der anfänglichen Bereitstellung und produktionsreifen Lösungen und arbeiten eng mit verschiedenen Teams zusammen, darunter Data Engineering, technische Leiter, Führungskräfte und andere Stakeholder, um maßgeschneiderte Lösungen und eine schnellere Wertschöpfung zu gewährleisten. Kontaktieren Sie Ihr Databricks Account Team, um mehr zu erfahren.


Beginnen Sie mit dem Erstellen Ihrer eigenen GenAI-App! Schauen Sie sich die Dokumentation an, um loszulegen.

Bei Databricks haben Sie alle Werkzeuge, die Sie benötigen, um diese End-to-End-Lösung zu entwickeln. Schauen Sie sich die folgenden Blogs an, um mehr über die Verwaltung und Arbeit mit Ihrem neuen Agenten mit den Agent Bricks Custom Agents zu erfahren.

(Dieser Blogbeitrag wurde mit KI-gestützten Tools übersetzt.) Originalbeitrag

Erhalten Sie die neuesten Beiträge in Ihrem Posteingang

Abonnieren Sie unseren Blog und erhalten Sie die neuesten Beiträge direkt in Ihren Posteingang.