Crea pipeline RAG multimodali migliori con FiftyOne, LlamaIndex e Milvus
Introduzione
Al recente Unstructured Data Meetup ospitato da Zilliz, Jacob Marks, ingegnere di machine learning e developer evangelist presso Voxel51, ha discusso le complessità della creazione di pipeline RAG multimodali robuste utilizzando FiftyOne, LlamaIndex e Milvus.
Guarda il replay del talk di Jacob al meetup
Questo talk si è concentrato su come possiamo utilizzare i nostri dati per costruire una pipeline RAG multimodale migliore. Ha sottolineato l’uso di strumenti gratuiti e open-source, sfruttando in particolare FiftyOne per la gestione e la visualizzazione dei dati, Milvus come vector store e LlamaIndex per orchestrare i large language models (LLMs).
Prima di esaminare la RAG multimodale, diamo un’occhiata a una panoramica della RAG in generale.
Panoramica della RAG in un contesto basato su testo
Jacob inizia spiegando la Retrieval Augmented Generation (RAG) basata su testo e come funziona. Saremo brevi, poiché abbiamo già trattato in dettaglio i sistemi RAG basati su testo in questo manuale RAG in quattro parti.
La RAG potenzia le capacità dei large language models (LLM) aumentando la loro conoscenza con dati esterni pertinenti. Gli LLM, pur essendo addestrati su dataset vastissimi, spesso presentano limitazioni come cutoff della conoscenza e allucinazioni. La RAG mitiga questi problemi recuperando e incorporando documenti rilevanti da un database vettoriale esterno come Milvus o Zilliz Cloud per fornire agli utenti risposte più accurate e contestualmente pertinenti.
L’architettura di un sistema RAG basato su testo è semplice. Diamo un’occhiata al processo RAG.
Retrieval Augmented Generation (RAG)
Fig 1: Processo RAG di integrazione degli LLM con database vettoriali
Nel diagramma sopra, i documenti vengono suddivisi in segmenti di testo più piccoli e poi trasformati in rappresentazioni numeriche note come vector embeddings. Questi embedding sono archiviati in un database vettoriale come Milvus.
Quando un utente fornisce un prompt, anche questo viene convertito in un embedding vettoriale e utilizzato per interrogare il database vettoriale alla ricerca dei passaggi di testo più rilevanti. Combinati con il prompt originale, questi passaggi rilevanti formano un input ricco di contesto per l’LLM. Infine, l’LLM elabora questo input per generare una risposta più accurata e contestualmente pertinente.
Questo approccio è altamente efficace per i sistemi che dipendono esclusivamente dal testo. Tuttavia, un sistema RAG basato su testo è insufficiente per i sistemi che necessitano di più tipi di dati per prendere decisioni informate. Prendiamo, ad esempio, un negozio di e-commerce. Non possiamo fare affidamento solo sul testo per presentare il prodotto più rilevante a un utente; abbiamo bisogno di immagini dei prodotti, descrizioni e altro ancora. È qui che la Multimodal RAG si rivela preziosa, sfruttando i moderni LLM multimodali per integrare varie modalità di dati.
Cosa sono gli LLM multimodali e le loro applicazioni
Gli LLM multimodali come GPT-4o e Qwen-VL sono sistemi di intelligenza artificiale in grado di elaborare e comprendere più tipi di dati, come testo, immagini, audio e video. Integrano e interpretano informazioni provenienti da varie modalità, consentendo loro di generare didascalie descrittive per le immagini, rispondere a domande sui video e creare contenuti che combinano testo con elementi visivi. Questa capacità permette loro di comprendere meglio e generare risposte arricchite contestualmente grazie ai diversi tipi di dati in input.
Vengono applicati in vari ambiti, tra cui servizi medici, retail e altro.
Nel settore dei servizi medici, nell’ambito medico sono presenti immagini mediche visive, note cliniche basate su testo e referti medici. Gli LLM multimodali sintetizzano queste informazioni multimodali e aiutano i medici nel loro lavoro. Un esempio è Med-PaLM LLM, che sfrutta sia dati testuali sia visivi per migliorare il processo decisionale medico e gli esiti dell’assistenza ai pazienti.
Nel retail, gli LLM multimodali creano annunci pubblicitari personalizzati e migliorano le funzionalità di ricerca dei prodotti. Elaborano e integrano vari tipi di dati, come descrizioni testuali, immagini dei prodotti e dati di interazione dei clienti (ad es., recensioni e query di ricerca). Analizzando queste informazioni multimodali, questi LLM possono generare annunci pubblicitari personalizzati su misura per le preferenze individuali e la cronologia di navigazione.
Anche con queste funzionalità avanzate, gli LLM multimodali hanno le stesse limitazioni di quelli basati su testo. Soffrono di knowledge cutoff e allucinazioni. Per mitigare questi problemi, avremo bisogno di un RAG multimodale.
Comprendere il RAG multimodale
Il RAG multimodale è una tecnica di IA avanzata che combina il recupero delle informazioni e la modellazione generativa per migliorare le capacità degli LLM multimodali. Per capire come funziona il RAG multimodale, diamo un’occhiata alla seguente pipeline di recupero RAG multimodale.
Fig 2- Pipeline di recupero RAG multimodale
Fig 2: Pipeline di recupero RAG multimodale
Quando gli utenti pongono una domanda, un modello di embedding converte prima la query in un embedding. Questo embedding viene poi utilizzato per interrogare un database vettoriale multimodale come Milvus, che memorizza embedding di documenti correlati, inclusi testo e immagini. Il database vettoriale recupera i vicini più prossimi alla domanda, essenzialmente i documenti più rilevanti. I documenti recuperati si combinano con la domanda originale per formare un prompt multimodale, incorporando sia contesto testuale sia visivo. Un LLM multimodale elabora quindi questo prompt arricchito, integrando i diversi tipi di dati per generare una risposta più accurata e contestualmente rilevante.
Nella prossima sezione, passiamo alla pratica e vediamo come implementare una pipeline RAG multimodale usando FiftyOne, LLamaIndex e Milvus.
Implementare una pipeline RAG multimodale usando FiftyOne, LLamaIndex e Milvus
Ci sono due modi per implementare una pipeline RAG multimodale usando FiftyOne, LLamaIndex e Milvus. Uno è scrivere il proprio codice, che offre maggiore controllo ma richiede più tempo, e l’altro è usare plugin che consentono di aggiungere funzionalità all’App FiftyOne.
Questa sezione esplorerà l’implementazione della pipeline RAG multimodale usando il fiftyone-multimodal-rag-plugin alimentato dal database vettoriale Milvus. Se vuoi programmare da zero, ecco una guida per principianti sulla generazione di embedding vettoriali multimodali con Milvus e FiftyOne.
Configurazione del tuo ambiente
Jacob approfondisce una demo con il plugin multimodale installato nel talk. Rallentiamo un attimo, poiché un passaggio cruciale dell’installazione non è menzionato esplicitamente né nella demo né nella guida all’installazione del plugin su GitHub. Si tratta del passaggio di installazione di Milvus.
Per usare il plugin, devi avere già un’istanza Milvus in esecuzione sul tuo computer. Il plugin Fiftyone si basa su Milvus per memorizzare e recuperare embedding multimodali. Il plugin presume che Milvus sia in esecuzione su http://localhost:19530. Se non hai Milvus installato, segui la documentazione di Milvus per installarlo ed eseguirlo.
Dopo aver installato ed eseguito Milvus, segui queste linee guida di installazione per installare e configurare il fiftyone-multimodal-rag-plugin. Una volta completata la configurazione, avvia l’app FiftyOne e sfoglia le operazioni disponibili per vedere le funzionalità fornite dal plugin.
Fig 3- Pagina di selezione delle operazioni disponibili in FiftyOne
Fig 3: Pagina di selezione delle operazioni disponibili in FiftyOne
Creiamo ora la pipeline RAG.
Passaggio 1: Creare un Dataset dai Documenti LLamaIndex
Questo passaggio consiste nel selezionare una cartella contenente le tue immagini e i tuoi file di testo dal tuo computer. Incorporerai questi dati multimodali e memorizzerai gli embedding multimodali in Milvus. Per caricare la cartella del tuo dataset, seleziona l’operazione Create a Dataset from the LLamaIndex Documents. Quindi, assegna un nome al tuo dataset e scegli la sua directory.
Fig 4- Creazione di un dataset da documenti LLamaIndex
Fig 4: Creazione di un dataset da documenti LLamaIndex
Fai clic su Execute per caricare e visualizzare il tuo dataset.
Fig 5- Visualizzazione di un dataset multimodale in FiftyOne
Fig 5: Visualizzazione di un dataset multimodale in FiftyOne
Nella visualizzazione, puoi vedere che il dataset è composto da immagini e testo, rendendolo multimodale. Il passaggio successivo consiste nel creare un indice RAG multimodale del dataset sopra.
Passaggio 2: Integrare LlamaIndex con Milvus per creare un indice RAG multimodale
Per creare un indice RAG multimodale utilizzando LlamaIndex e Milvus, devi integrare le due librerie per gestire e recuperare in modo efficiente i dati multimodali. LlamaIndex gestisce l’ingestione e l’embedding dei dati multimodali in rappresentazioni vettoriali. Questi embedding vengono poi memorizzati in Milvus per il recupero successivo durante le query.
Nella pagina di selezione delle operazioni di FiftyOne, seleziona l’operazione Create Multimodal RAG Index. Quindi, assegna un nome al tuo indice e fai clic su execute.
Fig 6- Creazione di un indice RAG multimodale utilizzando LLamaIndex e Milvus
Fig 6: Creazione di un indice RAG multimodale utilizzando LLamaIndex e Milvus
L’esecuzione richiederà del tempo, a seconda delle dimensioni del tuo dataset, quindi abbi pazienza. Durante questo processo, il tuo dataset verrà convertito in embedding vettoriali e memorizzato in Milvus. Più grande è il tuo dataset, più tempo sarà necessario per creare l’indice. Dopo la creazione dell’indice RAG, puoi procedere a interrogarlo.
Passaggio 3: Interrogare l’indice RAG multimodale
Questo passaggio di query richiede il maggior tempo di esecuzione nella pipeline RAG. Come tutti sappiamo, a nessuno piace un’applicazione lenta. Ecco perché il database vettoriale da interrogare dovrebbe essere veloce durante il processo di recupero, pur essendo accurato. È qui che Milvus, il database vettoriale open-source più ampiamente adottato, vince.
Jacobs parla di Milvus nel talk, ma poiché il plugin astrae la maggior parte di ciò che accade sotto il cofano, potremmo non vedere pienamente i vantaggi di Milvus nelle pipeline RAG multimodali. Ma vediamo perché la maggior parte degli sviluppatori RAG multimodali, incluso lo sviluppatore del fiftyone-multimodal-rag-plugin, ha scelto di usare Milvus:
Archiviazione e recupero vettoriale su scala di miliardi: Milvus gestisce in modo efficiente dati vettoriali su scala di miliardi, garantendo un accesso rapido con latenza a livello di millisecondi.
Scalabilità orizzontale: Milvus è altamente scalabile e si adatta per soddisfare le tue esigenze in evoluzione man mano che la tua azienda cresce.
Ideale per RAG: Milvus è un’infrastruttura indispensabile per costruire varie applicazioni GenAI, in particolare la retrieval augmented generation (RAG).
Recupero ad alta velocità: Con algoritmi di ricerca ottimizzati, Milvus consente un recupero rapido e accurato dei vettori pertinenti, essenziale per applicazioni in tempo reale come sistemi di IA interattivi e motori di raccomandazione.
Gestione dei dati multimodali: Milvus supporta vari tipi di dati e può eseguire ricerche ibride. Questa capacità consente di combinare la ricerca multimodale, la ricerca ibrida sparsa e densa e la ricerca ibrida densa e full-text, offrendo funzionalità di ricerca versatili e flessibili.
Per interrogare il tuo indice RAG multimodale, vai alla pagina di selezione Operations e seleziona l'operazione Query Multimodal RAG Index. Quindi, inserisci la tua query, seleziona l'indice da utilizzare, l'LLM per generare una risposta, il numero di risultati di testo e, infine, il numero di risultati di immagini da includere.
Fig 7- Interrogazione di un indice RAG multimodale basato su Milvus
Fig 7: Interrogazione di un indice RAG multimodale basato su Milvus
Il plugin utilizza quindi Milvus per eseguire una ricerca di similarità vettoriale e recuperare gli embedding più pertinenti in base alla tua query. Gli embedding recuperati forniscono il contesto per generare una risposta utilizzando il modello linguistico di grandi dimensioni selezionato. Ecco i risultati per la query precedente:
Fig 8- Risultati dell'interrogazione di un indice RAG multimodale
Fig 8: Risultati dell'interrogazione di un indice RAG multimodale
I risultati mostrano l'indice e il modello che hai utilizzato durante l'esecuzione della query e la risposta generata dal modello linguistico di grandi dimensioni.
Finora hai completato tutti i passaggi per creare una pipeline RAG multimodale utilizzando FiftyOne, LLamaIndex e Milvus.
Conclusione
La presentazione di Jacob ha evidenziato il potenziale dell'integrazione di FiftyOne, LlamaIndex e Milvus per costruire potenti pipeline RAG multimodali. Questi strumenti potenziano le capacità dei sistemi multimodali sfruttando in modo efficiente dati testuali e visivi per migliorare il recupero dei dati e ottenere risposte ricche di contesto. Seguendo i passaggi descritti, puoi sfruttare i punti di forza di questi strumenti open-source, con Milvus che fornisce un'archiviazione vettoriale robusta e un recupero ad alta velocità, portando i tuoi progetti a nuovi livelli.
Ulteriori risorse
Continua a leggere

Smarter Autoscaling in Zilliz Cloud: Always Optimized for Every Workload
With the latest upgrade, Zilliz Cloud introduces smarter autoscaling—a fully automated, more streamlined, elastic resource management system.

How to Use Anthropic MCP Server with Milvus
MCP + Milvus: Streamline AI agent development with standardized data access, eliminating integration hassles while enhancing context and flexibility.

Similarity Metrics for Vector Search
Exploring five similarity metrics for vector search: L2 or Euclidean distance, cosine distance, inner product, and hamming distance.


