Revenir au contenu principal

Unifiez les données de vos patients avec RAG multi-modal

Comprenez comment utiliser la recherche vectorielle de Databricks avec des intégrations multimodales pour améliorer vos applications RAG avec des capacités multimodales

par Austin Choi et Jordan Soldo

  • Superpouvoirs intermodaux : les modèles d'intégration multimodaux vous permettent de rechercher entre différentes modalités à l'aide de requêtes textuelles sans balises ni métadonnées en plaçant différents types de données dans un espace sémantique partagé.
  • Créez, recherchez, déployez : Apprenez à créer un système RAG multimodal complet sur Databricks en convertissant des images en intégrations, en les stockant dans des tables Delta et en permettant une recherche de similarité puissante avec AI Search.
  • Connexions de contenu transparentes : améliorez vos applications RAG en comblant le fossé entre les modalités, rendant même les documents complexes tels que les PDF avec des types de contenu mixtes entièrement consultables et contextuellement pertinents.

Introduction : Des données diverses pour l'IA

La recherche multimodale représente un défi majeur dans les systèmes d'IA modernes. Les systèmes de recherche traditionnels peinent à rechercher efficacement différents types de données sans métadonnées ou étiquetage étendus. Ceci est particulièrement problématique pour les entreprises de soins de santé qui gèrent de grands volumes de contenu diversifié, y compris du texte, des images, de l'audio, et plus encore, résultant souvent en des sources de données non structurées.

Une image comparant les données non structurées et structurées.
Figure 1 : Ces sources ne communiquent pas bien entre elles, surtout si elles proviennent de systèmes différents

Toute personne travaillant dans le domaine de la santé comprend la difficulté de fusionner des données non structurées avec des données structurées. Un exemple courant est la documentation clinique, où les notes cliniques manuscrites ou les résumés de sortie des patients sont souvent soumis sous forme de PDF, d'images et de formats similaires. Cela doit être soit converti manuellement, soit traité à l'aide de la reconnaissance optique de caractères (OCR) pour trouver les informations nécessaires. Même après cette étape, vous devez mapper les données à vos données structurées existantes pour les utiliser efficacement.

Pour ce blog, nous allons examiner ce qui suit :

  1. Comment charger des modèles multimodaux open source sur Databricks
  2. Utiliser le modèle open source pour générer des embeddings sur des données non structurées
  3. Stocker ces embeddings dans un index de recherche vectorielle (AWS | Azure | GCP)
  4. Utiliser Genie Spaces (AWS | Azure | GCP) pour interroger nos données structurées
  5. Utiliser DSPy pour créer un agent d'appel multi-outils qui utilise le Genie Space et l'index de recherche vectorielle pour répondre à l'entrée

À la fin de ce blog, vous verrez comment les embeddings multimodaux permettent ce qui suit pour les soins de santé :

  1. Des données plus diverses en utilisant tout le contenu d'un PDF, pas seulement le texte
  2. La flexibilité d'utiliser n'importe quelles données ensemble. Dans le domaine de la santé, c'est particulièrement précieux car vous ne savez peut-être pas avec quel type de données vous devrez travailler
  3. L'unification des données grâce à un agent, permettant une réponse plus complète
Une idée conceptuelle de la façon dont vos données peuvent être unifiées par des agents et des embeddings multimodaux
Figure 2 : Une idée conceptuelle de la façon dont vos données peuvent être unifiées par des agents et des embeddings multimodaux

Qu'est-ce qu'un Embedding ?

Un espace d'embedding (AWS | Azure | GCP) est une représentation mathématique n-dimensionnelle d'enregistrements qui permet à une ou plusieurs modalités de données d'être stockées sous forme de vecteurs de nombres à virgule flottante. Ce qui est utile, c'est que dans un espace d'embedding bien construit, les enregistrements de sens similaire occupent un espace similaire. Par exemple, imaginons que nous ayons une image de cheval, le mot « camion » et un enregistrement audio d'un chien qui aboie. Nous passons ces trois points de données complètement différents dans notre modèle d'embedding multimodal et obtenons les résultats suivants :

  • Image de cheval : [0.92, 0.59, 0.17]
  • « Camion » : [0.19, 0.93, 0.81]
  • Aboiement de chien : [0.94, 0.11, 0.86]

Voici une représentation visuelle de l'endroit où les nombres existeraient dans un espace d'embedding :

Une représentation 2D de données multidimensionnelles dans un espace d'embedding.

En pratique, les dimensions de l'espace d'embedding seront de l'ordre de centaines ou de milliers, mais pour l'illustration, utilisons un espace à 3 dimensions. Nous pouvons imaginer que la première position de ces vecteurs représente « l'animalité », la seconde « le transport » et la troisième « le bruit ». Cela aurait du sens étant donné les embeddings, mais généralement, nous ne savons pas ce que chaque dimension représente. L'important est qu'ils représentent le sens sémantique des enregistrements.

Il existe plusieurs façons de créer un espace d'embedding multimodal, notamment en entraînant simultanément plusieurs encodeurs (comme CLIP), en utilisant des mécanismes de cross-attention (comme DALL-E), ou en utilisant diverses méthodes d'alignement post-entraînement. Ces méthodes permettent au sens de l'enregistrement de transcender la modalité d'origine et d'occuper un espace partagé avec d'autres enregistrements ou formats disparates.

Cet espace sémantique partagé est ce qui permet de puissantes capacités de recherche intermodale. Lorsqu'une requête textuelle et une image partagent des représentations vectorielles similaires, elles partagent probablement des significations sémantiques similaires, ce qui nous permet de trouver des images pertinentes basées sur des descriptions textuelles sans balises ou métadonnées explicites.

Modèles d'Embedding Multimodaux : Partage des Espaces d'Embedding

Pour implémenter efficacement la recherche multimodale, nous avons besoin de modèles capables de générer des embeddings pour différents types de données au sein d'un espace vectoriel partagé. Ces modèles sont spécifiquement conçus pour comprendre les relations entre différentes modalités et les représenter dans un espace mathématique unifié.

Plusieurs modèles d'embedding multimodaux puissants sont disponibles en juin 2025 :

  • Multimodal Embed 4 de Cohere : Un modèle polyvalent qui excelle dans l'embedding de données textuelles et d'images avec une grande précision et performance.
  • Nomic-Embed : Offre de solides capacités pour l'embedding de divers types de données dans un espace unifié. C'est l'un des rares modèles entièrement open source.
  • Meta ImageBind : Un modèle impressionnant qui peut gérer six modalités différentes, y compris les images, le texte, l'audio, la profondeur, le thermique et les données IMU.
  • CLIP (Contrastive Language-Image pretraining) : Développé par OpenAI, CLIP est entraîné sur une gamme variée de paires image-texte et peut combler efficacement le fossé entre les données visuelles et textuelles.

Considérations architecturales clés

Chez Databricks, nous fournissons l'infrastructure et les outils pour héberger, évaluer et développer une solution de bout en bout, personnalisable à votre cas d'utilisation. Considérez les scénarios suivants lorsque vous commencez à déployer ce cas d'utilisation :

Évolutivité et performance

  • Les options de traitement doivent être sélectionnées en fonction de la taille du jeu de données : traitement en mémoire pour les petits jeux de données ou le travail de développement, par rapport au service de modèles (AWS | Azure | GCP) pour les charges de travail de production nécessitant un débit élevé
  • Points de terminaison Databricks Vector Storage Optimized par rapport aux points de terminaison Standard (AWS | Azure | GCP). Si vous avez beaucoup de vecteurs, envisagez le stockage optimisé pour stocker plus de vecteurs (environ 250M+)

Considérations relatives aux coûts

  • Pour les implémentations à grande échelle, la diffusion de modèles d'intégration et l'utilisation d'AI Query (AWS | Azure | GCP) pour l'inférence par lots est plus efficace que le traitement en mémoire.
  • Déterminez si vous avez besoin d'une mise à jour déclenchée ou continue pour votre index de recherche vectorielle (AWS | Azure | GCP)
  • Encore une fois, comparez les points de terminaison Storage Optimized aux points de terminaison Standard.
  • Vous pouvez suivre ces coûts avec le SKU Serverless Real-time Inference
  • Envisagez d'utiliser les politiques de budget (AWS | Azure | GCP) pour vous assurer que vous suivez avec précision votre consommation

Excellence opérationnelle

  • Utilisez des pipelines et des flux de travail (AWS | Azure | GCP) et des Databricks Asset Bundles (AWS | Azure | GCP) sur Databricks pour détecter les changements dans les données sources et mettre à jour les intégrations en conséquence
  • Utilisez AI Search Delta Sync (AWS | Azure | GCP) pour automatiser complètement la synchronisation avec votre index, sans gestion de pipelines nécessaire
  • AI Search gère automatiquement les échecs, les nouvelles tentatives et les optimisations pour garantir la fiabilité.

Considérations relatives au réseau et à la sécurité

  • Utilisez les profils de conformité Databricks (AWS | Azure | GCP) pour la conformité HIPAA dans votre espace de travail
  • Utilisez Databricks Secret Manager ou des systèmes de gestion de clés pour gérer vos secrets
  • Veuillez consulter l'explication de la confiance et de la sécurité (AWS | Azure | GCP) dans notre documentation pour savoir comment Databricks gère vos données pour les services gérés par l'IA.

Répartition technique de la solution

Pour la mise en œuvre complète de cette solution, veuillez visiter ce dépôt ici : Lien Github

Cet exemple utilisera des informations synthétiques sur les patients comme données structurées et des exemples d'explications des avantages au format PDF comme données non structurées. Tout d'abord, des données synthétiques sont générées pour être utilisées avec un Genie Space. Ensuite, le modèle d'intégration multimodale Nomic, un modèle d'intégration multimodale open source à la pointe de la technologie, est chargé sur Databricks Model Serving pour générer des intégrations sur des exemples d'explications des avantages trouvés en ligne.

Ce processus peut sembler compliqué, mais Databricks fournit des outils intégrés qui permettent une solution complète de bout en bout. À un niveau élevé, le processus ressemble à ce qui suit :

  1. Ingestion via Autoloader (AWS | Azure | GCP)
  2. ETL avec Lakeflow Declarative Pipelines (AWS | Azure | GCP)
  3. Création d'intégrations avec des modèles d'intégration multimodale hébergés sur Databricks
  4. Hébergement des intégrations dans un index de recherche vectorielle (AWS | Azure | GCP)
  5. Diffusion avec Model Serving (AWS | Azure | GCP)
  6. Framework d'agent pour sécuriser, déployer et gouverner l'agent

Création de Genie Space

Ce Genie Space sera utilisé comme outil pour convertir le langage naturel en une requête SQL afin d'interroger nos données structurées.

Étape 1 : Générer des données synthétiques de patients

Dans cet exemple, la bibliothèque Faker sera utilisée pour générer des informations aléatoires sur les patients. Nous créerons deux tables pour diversifier nos données : Visites de patients et Lieux de pratique, avec des colonnes telles que les raisons de visite, les fournisseurs d'assurance et les types d'assurance.

Étape 2 : Créer un espace Genie pour les informations sur les patients

Pour interroger les données en langage naturel, nous pouvons utiliser un espace Genie Databricks (AWS | Azure | GCP) pour convertir notre requête en langage naturel et récupérer les données pertinentes sur les patients. Dans l'interface utilisateur Databricks, cliquez simplement sur l'onglet Genie dans la barre de gauche → Nouveau → sélectionnez les tables patient_visits et practice_locations.

Les utilisateurs professionnels interagissent avec les données en langage naturel dans un espace Genie.

Nous avons besoin de l'ID de l'espace Genie pour capturer le numéro qui suit rooms. Vous pouvez voir un exemple ci-dessous :

Étape 3 : Créer la fonction qui représentera l'outil Genie que notre agent utilisera.

Puisque nous utilisons DSPy, tout ce que nous avons à faire est de définir une fonction Python.

C'est tout ! Mettons en place le workflow de génération multi-modale maintenant.

Génération d'incorporations multi-modales

Pour cette étape, nous utiliserons le modèle entièrement open source colNomic-embed-multimodal-7b sur HuggingFace pour générer des incorporations pour nos données non structurées, dans ce cas, des PDF. Nous avons sélectionné le modèle de Nomic en raison de sa licence Apache 2.0 et de ses hautes performances sur les benchmarks.

La méthode de génération de vos incorporations variera en fonction de votre cas d'utilisation et de votre modalité. Consultez les meilleures pratiques de recherche vectorielle Databricks (AWS | Azure | GCP) pour comprendre ce qui convient le mieux à votre cas d'utilisation.

Étape 1 : Charger, enregistrer et servir le modèle sur Databricks

Nous avons besoin que ce modèle soit disponible dans Unity Catalog (UC) de Databricks, nous utiliserons donc MLflow pour le charger depuis Huggingface et l'enregistrer. Ensuite, nous pourrons déployer le modèle sur un point de terminaison de service de modèle.

Le modèle Python inclut une logique supplémentaire pour gérer les entrées d'images, qui se trouve dans le dépôt complet.

Les volumes UC sont conçus comme des systèmes de fichiers pour héberger n'importe quel fichier et c'est là que nous stockons nos données non structurées. Vous pouvez les utiliser à l'avenir pour stocker d'autres fichiers, tels que des images, et répéter le processus si nécessaire. Cela inclut le modèle ci-dessus. Dans le dépôt, vous verrez que le cache fait référence à un volume.

Étape 2 : Charger nos PDF dans une liste

Vous aurez un dossier appelé sample_pdf_sbc contenant des exemples de résumés d'avantages et de couverture. Nous devons préparer ces PDF pour les incorporer.

Étape 3 : Convertir vos PDF en images pour être incorporés par le modèle colNomic.

Le modèle colNomic-embed-multimodal-7b est spécifiquement entraîné pour reconnaître le texte et les images au sein d'une image, une entrée courante des PDF. Cela permet au modèle d'exceller dans la récupération de ces pages.

Cette méthode vous permet d'utiliser tout le contenu d'un PDF sans avoir besoin d'une stratégie de découpage de texte pour garantir une récupération efficace. Le modèle lui-même peut bien incorporer ces images dans son propre espace d'incorporation.

Nous utiliserons pdf2image pour convertir chaque page du PDF en image, la préparant pour l'incorporation.

Étape 4 : Générer les incorporations

Maintenant que nous avons les images des PDF, nous pouvons générer les incorporations. En même temps, nous pouvons enregistrer les incorporations dans une table Delta avec des colonnes supplémentaires que nous récupérerons aux côtés de notre recherche vectorielle, comme le chemin d'accès au fichier à l'emplacement du volume.

Étape 5 : Créer un index et un point de terminaison de recherche vectorielle

La création d'un index de recherche vectorielle peut se faire via l'interface utilisateur ou l'API. La méthode API est présentée ci-dessous.

Il ne nous reste plus qu'à tout lier avec un Agent.

Unir les données avec DSPy

Nous utilisons DSPy pour cela en raison de sa conception déclarative en Python pur. Il nous permet d'itérer et de développer rapidement, en testant différents modèles pour voir lesquels fonctionneront le mieux pour notre cas d'utilisation. Plus important encore, la nature déclarative nous permet de modéliser notre Agent afin de pouvoir isoler la logique de l'Agent des outils et nous concentrer sur la définition de la manière dont l'agent doit accomplir sa tâche.

Et le meilleur ? Pas d'ingénierie de prompt manuelle !

Étape 1 : Définir vos dspy.Signatures

Cette signature spécifie et applique les entrées et sorties, tout en expliquant comment la signature doit fonctionner.

Étape 2 : Ajouter votre signature à un dspy.module

Le module prendra les instructions de la signature et créera un prompt optimal à envoyer au LLM. Pour ce cas d'utilisation particulier, nous allons construire un module personnalisé appelé `MultiModalPatientInsuranceAnalyzer()`.

Ce module personnalisé décomposera les signatures en étapes, un peu comme en « chaînant » des appels, dans la méthode forward. Nous suivons ce processus :

  1. Prendre les signatures définies ci-dessus et les initialiser dans la classe
  2. Définir vos outils. Ils n'ont besoin d'être qu'une fonction Python
    1. Pour cet article, vous créerez un outil de recherche vectorielle et un outil Genie Space. Ces deux outils utiliseront le SDK Databricks pour effectuer un appel API à ces services.
    2. Définir votre logique dans la méthode forward. Dans notre cas, nous savons que nous devons extraire des mots-clés, interroger l'index de recherche vectorielle, puis passer le tout dans l'appel LLM final pour obtenir une réponse.

Étape 3 : Tout est prêt ! Lancez-le maintenant !

Examinez les outils utilisés par l'Agent et le raisonnement suivi par l'Agent pour répondre à la question.

Prochaines étapes

Une fois que vous avez un Agent fonctionnel, nous vous recommandons ce qui suit :

  1. Utilisez les Agents personnalisés Agent Bricks pour déployer vos agents sur des points de terminaison d'agents et les gérer/versionner à l'aide d'Unity Catalog
  2. Utilisez le framework d'évaluation d'agents Databricks (AWS | Azure | GCP) pour effectuer des évaluations et vous assurer que vos agents fonctionnent comme prévu

Le framework d'évaluation sera crucial pour comprendre l'efficacité avec laquelle l'index de recherche vectorielle récupère les informations pertinentes pour votre agent RAG. En suivant ces métriques, vous saurez où apporter des ajustements, qu'il s'agisse de changer le modèle d'intégration ou d'ajuster les invites interagissant avec le LLM.

Vous devriez également surveiller si l'API de modèle fondamental (AWS | Azure | GCP) est suffisante pour votre cas d'utilisation. À un certain point, vous atteindrez les limites d'API pour les API de modèles fondamentaux, vous devrez donc passer au débit provisionné (AWS | Azure | GCP) pour avoir un point de terminaison plus fiable pour votre LLM.

De plus, gardez un œil attentif sur vos coûts par rapport au service de modèles serverless (AWS | Azure | GCP). La plupart de ces coûts proviendront du service de modèles serverless du SKU Databricks et peuvent augmenter à mesure que vous augmentez l'échelle.

Consultez ces blogs pour comprendre comment faire cela sur Databricks.

De plus, les architectes de solutions de livraison (DSA) de Databricks aident à accélérer les initiatives de données et d'IA dans les organisations. Les DSA fournissent un leadership architectural, optimisent les plateformes pour le coût et les performances, améliorent l'expérience des développeurs et pilotent l'exécution réussie des projets. Ils comblent le fossé entre le déploiement initial et les solutions de qualité de production, en travaillant en étroite collaboration avec diverses équipes, notamment l'ingénierie des données, les chefs techniques, les dirigeants et d'autres parties prenantes pour garantir des solutions sur mesure et une valeur plus rapide. Contactez votre équipe de compte Databricks pour en savoir plus.


Commencez par créer votre propre application GenAI ! Consultez la documentation pour commencer.

Chez Databricks, vous disposez de tous les outils nécessaires pour développer cette solution de bout en bout. Consultez les blogs ci-dessous pour en savoir plus sur la gestion et l'utilisation de votre nouvel agent avec les agents personnalisés Agent Bricks.

(Cet article de blog a été traduit à l'aide d'outils basés sur l'intelligence artificielle) Article original

Recevez les derniers articles dans votre boîte mail

Abonnez-vous à notre blog et recevez les derniers articles directement dans votre boîte mail.