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
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.
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 :
À la fin de ce blog, vous verrez comment les embeddings multimodaux permettent ce qui suit pour les soins de santé :
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 :
Voici une représentation visuelle de l'endroit où les nombres existeraient 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.
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 :
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 :
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 :
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.
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.
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.

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 :
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.
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.
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.
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.
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.
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.
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.
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 !
Cette signature spécifie et applique les entrées et sorties, tout en expliquant comment la signature doit fonctionner.
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 :
Examinez les outils utilisés par l'Agent et le raisonnement suivi par l'Agent pour répondre à la question.
Une fois que vous avez un Agent fonctionnel, nous vous recommandons ce qui suit :
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
Abonnez-vous à notre blog et recevez les derniers articles directement dans votre boîte mail.