Creazione di una demo di raccomandazione multimodale di prodotti utilizzando Milvus e Streamlit
La demo Milvus Composed Image Retrieval mostra la ricerca inversa di immagini, mentre la demo Milvus Multimodal RAG utilizza questa tecnica per le raccomandazioni di prodotti. Basta caricare un’immagine e inserire istruzioni testuali: il modello di embedding multimodale MagicLens di Google codificherà sia l’immagine sia il testo in un unico vettore multimodale. Questo vettore viene quindi utilizzato per trovare i prodotti Amazon più simili in un database vettoriale Milvus.
🎨🔍 Presentiamo la magia di Milvus: ricerca di immagini e shopping intelligente!
Hai mai desiderato trovare prodotti semplicemente mostrando una foto e descrivendo ciò che vuoi? Bene, ora puoi farlo! 🛍️✨
Ecco come funzionano le nostre fantastiche demo:
📸 Scatta una foto e digita ciò che stai cercando
🧙♂️ La nostra magia di Milvus trasforma il tuo input in uno speciale "vettore multimodale" (elegante, vero?)
🕵️♀️ Questo vettore diventa un super-investigatore per cercare nel nostro database vettoriale Milvus
🎉 Voilà! Trova prodotti Amazon che corrispondono alla tua immagine e descrizione
In questo blog, mostreremo come eseguire la demo Milvus Multimodal RAG.
Tecnologie utilizzate per il raccomandatore di prodotti multimodale
MagicLens di Google DeepMind è un modello di embedding multimodale che utilizza un’architettura dual-encoder per elaborare testo e immagini basandosi su CLIP (OpenAI 2021) oppure CoCa (Google Research 2022). MagicLens supporta diverse attività di retrieval, incluse image-to-image e text-to-image, fondendo pesi addestrati in uno spazio vettoriale comune. Addestrato su 36,7 milioni di triplette, può eseguire attività di retrieval image-to-image, text-to-image e di combinazione multimodale testo-immagine, superando i modelli precedenti con una dimensione del modello significativamente inferiore.
GPT-4o di OpenAI è un Multimodal Large Language Model generativo di OpenAI che integra testo, immagini e altri tipi di dati in un unico modello, potenziando i modelli linguistici tradizionali. Questa IA avanzata offre una comprensione e un’elaborazione più profonde di informazioni complesse, migliorando accuratezza e consapevolezza del contesto. Supporta applicazioni diverse, dal natural language processing alla computer vision.
Milvus è un database vettoriale open-source e distribuito per archiviare, indicizzare e cercare vettori per carichi di lavoro di Generative AI. La sua capacità di eseguire hybrid search, metadata filtering, reranking e gestire in modo efficiente trilioni di vettori rende Milvus una scelta di riferimento per i carichi di lavoro di IA e machine learning. Milvus può essere eseguito localmente, su un cluster o ospitato in Zilliz Cloud.
Streamlit è una libreria Python open-source che semplifica la creazione e l’esecuzione di applicazioni web. Consente agli sviluppatori di creare e distribuire dashboard, report di dati e semplici interfacce di machine learning utilizzando script Python semplici, senza richiedere una conoscenza approfondita delle tecnologie web come CSS o framework JavaScript come Node.js.
Preparare i dati
I dati in questa demo provengono dal dataset Amazon Reviews 2023. La fonte dati originale include 54 milioni di recensioni degli utenti su 48 milioni di articoli in 33 categorie, come elettrodomestici, bellezza, abbigliamento, sport, outdoor e un’ulteriore categoria “Unknown”.
Useremo solo un sottoinsieme di 5K articoli dei dati disponibili, campionando uniformemente per categoria. Scarica le immagini eseguendo download_images.py.
$ python download_images.py
Ogni riga di dati di prodotto è composta da metadati dell’articolo (come il nome della categoria e la valutazione media delle recensioni degli utenti) e URL delle immagini per le miniature e le immagini grandi del prodotto.
Per i dati vettoriali, questa demo utilizza un singolo vettore di embedding dell’immagine grande per prodotto.
Istruzioni di configurazione per MagicLens
Questa guida ti accompagna nella configurazione dell’ambiente e nel download dei pesi del modello per MagicLens, un potente sistema di recupero immagini sviluppato da Google DeepMind. Per informazioni più dettagliate, visita il repository GitHub di MagicLens.
Configurare l’ambiente
- Crea un ambiente conda:
$ conda create --name magic_lens python=3.9
- Attiva l’ambiente:
$ conda activate magic_lens
- Clona il repository Scenic:
$ git clone https://github.com/google-research/scenic.git
- Vai alla directory Scenic:
$ cd scenic
- Installa Scenic:
$ pip install
- Installa le dipendenze di CLIP:
$ pip install -r scenic/projects/baselines/clip/requirements.txt
- Installa Jax:
Se stai usando una GPU per l’elaborazione, potrebbe essere necessario installare la versione GPU corrispondente di Jax. Segui le istruzioni su la pagina della documentazione JAX per i passaggi dettagliati.
Ecco esempi per versioni CUDA specifiche (solo Linux):
Installazione CUDA 12:
$ pip install --upgrade "jax[cuda12_pip]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
Installazione CUDA 11:
$ pip install --upgrade "jax[cuda11_pip]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html
Scarica localmente i pesi del modello
- Torna alla cartella principale:
$ cd .. # This will take you back to the main directory where you cloned the demo.
- Scarica il modello (potrebbe richiedere autenticazione):
$ gsutil cp -R gs://gresearch/magiclens/models ./
Crea la collection Milvus e salva i vettori
Il server Milvus in questa demo è Milvus Lite con Milvus Client senza schema.
Crea una collection, codifica ogni immagine in vettori e carica i dati vettoriali in Milvus eseguendo index.py.
$ python index.py
Questo passaggio codificherà ogni immagine in un vettore a 768 dimensioni. Per ogni prodotto nel campione, il vettore dell’immagine, insieme ai metadati del prodotto associati, viene salvato in una collection Milvus chiamata “cir_demo_large” con AUTOINDEX (HNSW).
Indicizzazione e ricerca Milvus
A runtime, quando esegui una ricerca inversa per un’immagine e un testo, Milvus cercherà i top_k = 100 vettori immagine più vicini usando la distanza vettoriale COSINE.
Milvus ordina automaticamente i top_k in ordine decrescente (poiché valori più grandi della distanza COSINE indicano che sono più vicini).
Esegui il front end del server Streamlit
Aggiorna il tuo file locale
cfg.py, sostituendo i nomi dei percorsi con i tuoi percorsi locali per immagini e pesi del modello.Avvia l’app eseguendo dal tuo terminale:
$ streamlit run ui.py
- Usare l’app:
Carica un’immagine per guidare la ricerca del prodotto.
Inserisci un’istruzione testuale per guidare la ricerca.
Fai clic su "Search" per trovare prodotti simili dal database vettoriale Milvus.
Fai clic su "Ask GPT" per raccomandazioni basate sull'IA.
Figura 1- L'interfaccia della nostra app demo
Figura 1: L'interfaccia della nostra app demo
Come funziona questa app:
La funzione Search incorporerà la tua immagine e il tuo testo in un vettore utilizzando il modello di Embedding multimodale, MagicLens, che è lo stesso modello utilizzato per incorporare le immagini dei prodotti archiviate nel database vettoriale Milvus. Milvus eseguirà quindi una ricerca vettoriale Approximate Nearest Neighbor (ANN) per trovare le top_k immagini di prodotto più vicine al tuo vettore di input.
La funzione Ask GPT chiamerà il modello generativo multimodale OpenAI GPT-4o mini. Prenderà le prime 25 immagini dai risultati della ricerca, le inseririrà in un prompt e le invierà al modello. GPT-4o mini selezionerà quindi l'immagine migliore e spiegherà il motivo della sua scelta.
Figura 2- Le risposte fornite da GPT-4o mini
Figura 2: Le risposte fornite da GPT-4o mini
Riferimenti
Recupero di immagini multimodale su bootcamp: https://github.com/milvus-io/bootcamp/tree/master/bootcamp/tutorials/quickstart/apps/cir_with_milvus
RAG multimodale con raccomandazioni tramite riordinamento su bootcamp: https://github.com/milvus-io/bootcamp/tree/master/bootcamp/tutorials/quickstart/apps/multimodal_rag_with_milvus
Modello Google MagicLens: https://github.com/google-deepmind/magiclens
Video sulla teoria alla base di questa demo: https://youtu.be/uaqlXRCvjG4?si=e83DnUsLZvVnWt-0&t=51
Continua a leggere

Introducing Functions and Model Inference on Zilliz Cloud: Automatic Embedding and Reranking with Hosted Models
Zilliz Cloud Functions auto-generate embeddings via OpenAI, Voyage AI, Cohere, or Zilliz Hosted Models. Built-in reranking — just insert text and search.

Top 10 Context Engineering Techniques You Should Know for Production RAG
A practical guide to context engineering for production LLM systems, covering RAG, context processing, memory, agents, and multimodal context.

The Great AI Agent Protocol Race: Function Calling vs. MCP vs. A2A
Compare Function Calling, MCP, and A2A protocols for AI agents. Learn which standard best fits your development needs and future-proof your applications.




