Passa al contenuto principale

Unisci i dati dei tuoi pazienti con Multi-Modal RAG

Scopri come usare AI Search di Databricks con embedding multimodali per migliorare le tue applicazioni RAG con capacità multimodali.

di Austin Choi e Jordan Soldo

  • Superpoteri Cross-Modali: I modelli di embedding multimodali ti permettono di cercare tra diverse modalità usando query di testo senza tag o metadati, posizionando diversi tipi di dati in uno spazio semantico condiviso.\r\n* Costruisci, Cerca, Distribuisci: Impara a creare un sistema RAG multimodale completo su Databricks convertendo le immagini in embedding, memorizzandole in tabelle Delta e abilitando una potente ricerca di similarità con AI Search.\r\n* Connessioni di Contenuto Senza Soluzione di Continuità: Migliora le tue applicazioni RAG colmando il divario tra le modalità, rendendo anche documenti complessi come i PDF con tipi di contenuto misti completamente ricercabili e contestualmente rilevanti.

Introduzione: Dati Diversi Abilitano l'AI

Il recupero multimodale rappresenta una sfida significativa nei moderni sistemi di AI. I sistemi di recupero tradizionali faticano a cercare efficacemente tra diversi tipi di dati senza metadati o tag estesi. Questo è particolarmente problematico per le aziende sanitarie che gestiscono grandi volumi di contenuti diversi, inclusi testo, immagini, audio e altro, spesso risultando in fonti di dati non strutturati.

Un'immagine che confronta dati non strutturati e strutturati.
Figura 1: Queste fonti non comunicano bene tra loro, specialmente se provengono da sistemi diversi

Chiunque lavori nel settore sanitario comprende la difficoltà di unire dati non strutturati con dati strutturati. Un esempio comune è la documentazione clinica, dove note cliniche scritte a mano o riassunti di dimissione dei pazienti sono spesso inviati in PDF, immagini e formati simili. Questo deve essere convertito manualmente o elaborato utilizzando il Riconoscimento Ottico dei Caratteri (OCR) per trovare le informazioni necessarie. Anche dopo questo passaggio, è necessario mappare i dati ai dati strutturati esistenti per utilizzarli efficacemente.

Per questo blog, esamineremo quanto segue:

  1. Come caricare modelli multimodali open source su Databricks
  2. Utilizzare il modello open source per generare embedding su dati non strutturati
  3. Archiviare questi embedding in un indice di ricerca vettoriale (AWS | Azure | GCP)
  4. Utilizzare Genie Spaces (AWS | Azure | GCP) per interrogare i nostri dati strutturati
  5. Utilizzare DSPy per creare un agente di chiamata multi-strumento che utilizza Genie Space e l'indice di ricerca vettoriale per rispondere all'input

Alla fine di questo blog, vedrete come gli embedding multimodali abilitano quanto segue per il settore sanitario:

  1. Dati più diversi utilizzando tutto ciò che è in un PDF, non solo il testo
  2. La flessibilità di utilizzare qualsiasi dato insieme. Nel settore sanitario, questo è particolarmente prezioso poiché potreste non sapere con quale tipo di dati dovrete lavorare
  3. Unificazione dei dati tramite un Agente, consentendo una risposta più completa
Un'idea concettuale di come i vostri dati possono essere unificati tramite Agenti ed Embedding Multimodali
Figura 2: Un'idea concettuale di come i vostri dati possono essere unificati tramite Agenti ed Embedding Multimodali

Cos'è un Embedding?

Uno spazio di embedding (AWS | Azure | GCP) è una rappresentazione matematica n-dimensionale di record che consente di archiviare una o più modalità di dati come vettori di numeri in virgola mobile. Ciò che lo rende utile è che in uno spazio di embedding ben costruito, i record con significato simile occupano uno spazio simile. Ad esempio, immaginiamo di avere una foto di un cavallo, la parola "camion" e una registrazione audio di un cane che abbaia. Passiamo questi tre punti dati completamente diversi nel nostro modello di embedding multimodale e otteniamo quanto segue:

  • Immagine cavallo: [0.92, 0.59, 0.17]
  • "Camion": [0.19, 0.93, 0.81]
  • Cane che abbaia: [0.94, 0.11, 0.86]

Ecco una rappresentazione visiva di dove esisterebbero i numeri in uno spazio di embedding:

Una rappresentazione 2D di punti dati ad alta dimensione in uno spazio di embedding.

In pratica, le dimensioni dello spazio di embedding saranno centinaia o migliaia, ma per illustrare, usiamo uno spazio 3D. Possiamo immaginare che la prima posizione in questi vettori rappresenti la "animalità", la seconda la "trasportabilità" e la terza la "rumorosità". Questo avrebbe senso dati gli embedding, ma tipicamente non sappiamo cosa rappresenti ogni dimensione. L'importante è che rappresentino il significato semantico dei record.

Esistono diversi modi per creare uno spazio di embedding multimodale, inclusa la formazione simultanea di più encoder (come CLIP), l'uso di meccanismi di cross-attention (come DALL-E) o l'uso di vari metodi di allineamento post-addestramento. Questi metodi consentono al significato del record di trascendere la modalità originale e occupare uno spazio condiviso con altri record o formati disparati.

Questo spazio semantico condiviso è ciò che abilita potenti capacità di ricerca cross-modale. Quando una query di testo e un'immagine condividono rappresentazioni vettoriali simili, è probabile che condividano significati semantici simili, permettendoci di trovare immagini pertinenti basate su descrizioni testuali senza tag o metadati espliciti.

Modelli di Embedding Multimodali: Condivisione degli Spazi di Embedding

Per implementare efficacemente la ricerca multimodale, abbiamo bisogno di modelli in grado di generare embedding per diversi tipi di dati all'interno di uno spazio vettoriale condiviso. Questi modelli sono specificamente progettati per comprendere le relazioni tra diverse modalità e rappresentarle in uno spazio matematico unificato.

Diversi potenti modelli di embedding multimodali sono disponibili a partire da giugno 2025:

  • Cohere’s Multimodal Embed 4: Un modello versatile che eccelle nell'embedding di dati testuali e di immagini con alta precisione e prestazioni.
  • Nomic-Embed: Offre potenti capacità per l'embedding di vari tipi di dati in uno spazio unificato. È uno dei pochi modelli completamente open source.
  • Meta ImageBind: Un modello impressionante in grado di gestire sei diverse modalità, inclusi immagini, testo, audio, profondità, dati termici e IMU.
  • CLIP (Contrastive Language-Image pretraining): Sviluppato da OpenAI, CLIP è addestrato su una vasta gamma di coppie immagine-testo e può colmare efficacemente il divario tra dati visivi e testuali.

Considerazioni Architettoniche Chiave

In Databricks, forniamo l'infrastruttura e gli strumenti per ospitare, valutare e sviluppare una soluzione end-to-end, personalizzabile per il vostro caso d'uso. Considerate i seguenti scenari quando iniziate a implementare questo caso d'uso:

Scalabilità e Prestazioni

  • Le opzioni di elaborazione devono essere selezionate in base alla dimensione del dataset: elaborazione in memoria per dataset più piccoli o lavori di sviluppo, rispetto al Model Serving (AWS | Azure | GCP) per carichi di lavoro di produzione che richiedono un'elevata velocità di trasmissione
  • Endpoint ottimizzati per l'archiviazione vettoriale Databricks vs. endpoint standard (AWS | Azure | GCP). Se hai molti vettori, considera l'ottimizzazione dell'archiviazione per memorizzare più vettori (circa 250M+)

Considerazioni sui costi

  • Per implementazioni su larga scala, il serving di modelli di embedding e l'uso di AI Query (AWS | Azure | GCP) per l'inferenza batch è più efficiente dell'elaborazione in memoria.
  • Determina se hai bisogno di un aggiornamento attivato o continuo per il tuo indice di ricerca vettoriale (AWS | Azure | GCP)
  • Ancora, considera gli endpoint ottimizzati per l'archiviazione vs. gli endpoint standard.
  • Puoi monitorare questi costi con lo SKU di inferenza serverless in tempo reale
  • Considera l'uso delle politiche di budget (AWS | Azure | GCP) per assicurarti di monitorare accuratamente il tuo consumo

Eccellenza operativa

  • Utilizza pipeline e workflow (AWS | Azure | GCP) e Databricks Asset Bundles (AWS | Azure | GCP) su Databricks per rilevare i cambiamenti nei dati di origine e aggiornare di conseguenza gli embedding
  • Utilizza AI Search Delta Sync (AWS | Azure | GCP) per automatizzare completamente la sincronizzazione con il tuo indice, senza bisogno di gestire pipeline
  • AI Search gestisce automaticamente errori, tentativi e ottimizzazioni per garantire l'affidabilità.

Considerazioni su rete e sicurezza

  • Utilizza i profili di conformità Databricks (AWS | Azure | GCP) per la conformità HIPAA nel tuo workspace
  • Utilizza Databricks Secret Manager o sistemi di gestione delle chiavi per gestire i tuoi segreti
  • Ti invitiamo a consultare la spiegazione sulla fiducia e la sicurezza (AWS | Azure | GCP) nella nostra documentazione per capire come Databricks gestisce i tuoi dati per i servizi gestiti di IA.

Dettaglio della soluzione tecnica

Per l'implementazione completa di questa soluzione, visita questo repository qui: Link Github

Questo esempio utilizzerà informazioni sintetiche sui pazienti come dati strutturati ed esempi di spiegazioni dei benefici in formato PDF come dati non strutturati. Innanzitutto, vengono generati dati sintetici da utilizzare con uno Genie Space. Successivamente, il modello di embedding multimodale Nomic, un modello di embedding multimodale open source all'avanguardia, viene caricato su Databricks Model Serving per generare embedding su esempi di spiegazioni dei benefici trovati online.

Questo processo può sembrare complicato, ma Databricks fornisce strumenti integrati che consentono una soluzione completa e end-to-end. A un livello elevato, il processo è il seguente:

  1. Ingestione tramite Autoloader (AWS | Azure | GCP)
  2. ETL con Lakeflow Declarative Pipelines (AWS | Azure | GCP)
  3. Creazione di embedding con modelli di embedding multimodali ospitati su Databricks
  4. Ospita gli embedding in un indice di ricerca vettoriale (AWS | Azure | GCP)
  5. Serving con Model Serving (AWS | Azure | GCP)
  6. Framework dell'agente per proteggere, distribuire e governare l'agente

Creazione di Genie Space

Questo Genie Space verrà utilizzato come strumento per convertire il linguaggio naturale in una query SQL per interrogare i nostri dati strutturati.

Passaggio 1: Genera dati sintetici sui pazienti

In questo esempio, la libreria Faker verrà utilizzata per generare informazioni casuali sui pazienti. Creeremo due tabelle per diversificare i nostri dati: Visite Pazienti e Sedi di Pratica, con colonne come motivi della visita, fornitori di assicurazione e tipi di assicurazione.

Passaggio 2: Creare uno spazio Genie per le informazioni sui pazienti

Per interrogare i dati usando il linguaggio naturale, possiamo utilizzare gli spazi Databricks Genie (AWS | Azure | GCP) per convertire la nostra query in linguaggio naturale e recuperare i dati rilevanti dei pazienti. Nell'interfaccia utente di Databricks, basta cliccare sulla scheda Genie nella barra a sinistra → Nuovo → selezionare le tabelle patient_visits e practice_locations.

Utenti aziendali che interagiscono con i dati usando il linguaggio naturale in uno spazio Genie.

Abbiamo bisogno dell'ID dello spazio Genie per catturare il numero che segue 'rooms'. Puoi vedere un esempio qui sotto:

Passaggio 3: Creare la funzione che rappresenterà lo strumento Genie che il nostro Agente utilizzerà.

Dato che stiamo usando DSPy, tutto ciò che dobbiamo fare è definire una funzione Python.

Questo è tutto! Ora configuriamo il flusso di lavoro di generazione multimodale.

Generazione di embedding multimodali

Per questo passaggio, useremo il modello completamente open colNomic-embed-multimodal-7b su HuggingFace per generare embedding per i nostri dati non strutturati, in questo caso, i PDF. Abbiamo selezionato il modello di Nomic grazie alla sua licenza Apache 2.0 e alle sue alte prestazioni nei benchmark.

Il metodo per generare i tuoi embedding varierà a seconda del tuo caso d'uso e della modalità. Rivedi le Databricks AI Search Best Practices (AWS | Azure | GCP) per capire cosa è meglio per il tuo caso d'uso.

Passaggio 1: Caricare, registrare e servire il modello su Databricks

Abbiamo bisogno che questo modello sia disponibile all'interno di Databricks Unity Catalog (UC), quindi useremo MLflow per caricarlo da Huggingface e registrarlo. Successivamente, potremo distribuire il modello a un endpoint di servizio del modello.

Il modello Python include una logica aggiuntiva per gestire gli input di immagini, che si trova nel repository completo.

UC Volumes sono progettati come file system per ospitare qualsiasi file ed è dove archiviamo i nostri dati non strutturati. Puoi usarli in futuro per archiviare altri file, come immagini, e ripetere il processo secondo necessità. Questo include il modello sopra. Nel repository, vedrai che la cache si riferisce a un volume.

Passaggio 2: Caricare i nostri PDF in un elenco

Avrai una cartella chiamata sample_pdf_sbc contenente alcuni esempi di riepiloghi di benefici e copertura. Dobbiamo preparare questi PDF per incorporarli.

Passaggio 3: Convertire i PDF in immagini da incorporare con il modello colNomic.

Il modello colNomic-embed-multimodal-7b è specificamente addestrato per riconoscere testo e immagini all'interno di una singola immagine, un input comune dai PDF. Questo permette al modello di funzionare eccezionalmente bene nel recuperare queste pagine.

Questo metodo ti consente di utilizzare tutto il contenuto di un PDF senza la necessità di una strategia di suddivisione del testo per garantire che il recupero funzioni efficacemente. Il modello stesso può incorporare bene queste immagini nel proprio spazio di embedding.

Useremo pdf2image per convertire ogni pagina del PDF in un'immagine, preparandola per l'embedding.

Passaggio 4: Generare gli embedding

Ora che abbiamo le immagini PDF, possiamo generare gli embedding. Allo stesso tempo, possiamo salvare gli embedding in una Delta table con colonne aggiuntive che recupereremo insieme alla nostra AI Search, come il percorso del file alla posizione del Volume.

Passo 5: Creare un indice e un endpoint per la ricerca vettoriale

La creazione di un indice per la ricerca vettoriale può essere effettuata tramite UI o API. Il metodo API è mostrato di seguito.

Ora dobbiamo solo collegare tutto con un Agente.

Unire i dati con DSPy

Utilizziamo DSPy per questo grazie al suo design dichiarativo e puramente Python. Ci permette di iterare e sviluppare rapidamente, testando vari modelli per vedere quali funzioneranno meglio per il nostro caso d'uso. Ancora più importante, la natura dichiarativa ci consente di modularizzare il nostro Agente in modo da poter isolare la logica dell'Agente dagli strumenti e concentrarci sulla definizione di COME l'agente dovrebbe svolgere il suo compito.

E la parte migliore? Nessun prompt engineering manuale!

Passo 1: Definire le tue dspy.Signatures

Questa signature specifica e impone gli input e gli output, spiegando anche come la signature dovrebbe funzionare.

Passo 2: Aggiungi la tua signature a un dspy.module

Il modulo prenderà le istruzioni dalla signature e creerà un prompt ottimale da inviare all'LLM. Per questo particolare caso d'uso, costruiremo un modulo personalizzato chiamato `MultiModalPatientInsuranceAnalyzer()`.

Questo modulo personalizzato dividerà le signature in passaggi, quasi come “incatenare” chiamate, nel metodo forward. Seguiamo questo processo:

  1. Prendi le signature definite sopra e inizializzale nella classe
  2. Definisci i tuoi strumenti. Devono essere solo una funzione Python
    1. Per questo post, creerai uno strumento di ricerca vettoriale (AI Search tool) e uno strumento Genie Space (Genie Space tool). Entrambi questi strumenti utilizzeranno il Databricks SDK per effettuare una chiamata API a questi servizi.
    2. Definisci la tua logica nel metodo forward. Nel nostro caso, sappiamo che dobbiamo estrarre le parole chiave, interrogare l'indice di ricerca vettoriale (AI Search index), quindi passare tutto alla chiamata LLM finale per una risposta.

Passo 3: Fatto! Ora eseguilo!

Esamina quali strumenti ha utilizzato l'Agente e il ragionamento che ha seguito per rispondere alla domanda.

Prossimi passi

Una volta che hai un Agente funzionante, ti consigliamo quanto segue:

  1. Usa gli Agent Bricks Custom Agents per distribuire i tuoi agenti agli endpoint degli agenti e gestirli/versionarli usando Unity Catalog
  2. Usa il Databricks Agent Eval Framework (AWS | Azure | GCP) per eseguire valutazioni e assicurarti che i tuoi agenti funzionino secondo le tue aspettative

Il framework di valutazione sarà cruciale per capire quanto efficacemente l'indice di AI Search recupera informazioni rilevanti per il tuo agente RAG. Seguendo queste metriche, saprai dove apportare modifiche, dal cambiare il modello di embedding all'aggiustare i prompt che interagiscono con l'LLM.

Dovresti anche monitorare per vedere se la Foundation Model API (AWS | Azure | GCP) è sufficiente per il tuo caso d'uso. A un certo punto, raggiungerai i limiti dell'API per le Foundation Model API, quindi dovrai passare al Provisioned Throughput (AWS | Azure | GCP) per avere un endpoint più affidabile per il tuo LLM.

Inoltre, tieni d'occhio i costi relativi al serverless model serving (AWS | Azure | GCP). La maggior parte di questi costi deriverà dal serverless model serving SKU di Databricks e potrebbe aumentare man mano che scali.

Dai un'occhiata a questi blog per capire come farlo su Databricks.

Inoltre, i Delivery Solutions Architects (DSA) di Databricks aiutano ad accelerare le iniziative di Dati e AI in tutte le organizzazioni. I DSA forniscono leadership architetturale, ottimizzano le piattaforme per costi e prestazioni, migliorano l'esperienza degli sviluppatori e guidano l'esecuzione di progetti di successo. Fanno da ponte tra l'implementazione iniziale e le soluzioni di livello produttivo, lavorando a stretto contatto con vari team, inclusi ingegneri dei dati, responsabili tecnici, dirigenti e altri stakeholder per garantire soluzioni personalizzate e un tempo più rapido per il valore. Contatta il tuo team account Databricks per saperne di più.


Inizia costruendo la tua app GenAI! Consulta la documentazione per iniziare.

Su Databricks, hai tutti gli strumenti necessari per sviluppare questa soluzione end-to-end. Dai un'occhiata ai blog qui sotto per saperne di più sulla gestione e l'utilizzo del tuo nuovo Agente con gli Agent Bricks Custom Agents.

(Questo post sul blog è stato tradotto utilizzando strumenti basati sull'intelligenza artificiale) Post originale

Ricevi gli ultimi articoli nella tua casella di posta

Iscriviti al nostro blog e ricevi gli ultimi articoli direttamente nella tua casella di posta.