Cattura un Fantasmino Carino questo Halloween con Milvus
Una versione di questo articolo è pubblicata su DZone.
Ho appena tenuto un talk a All Things Open ed è difficile credere che la Retrieval Augmented Generation (RAG) ora sembri una tecnica che utilizziamo da anni.
C’è una buona ragione per questo, poiché negli ultimi due anni è esplosa in profondità e ampiezza, dato che l’utilità della RAG è sconfinata. La capacità di migliorare i risultati generati dai large language models migliora costantemente mentre varianti, miglioramenti e nuovi paradigmi spingono le cose in avanti.
Oggi esamineremo:
Applicazioni pratiche per la RAG multimodale
- Ricerca di immagini con filtri
- Trovare i migliori fantasmi di Halloween
Utilizzo di Ollama, LLava 7B e LLM Reranking
Esecuzione locale di RAG multimodale avanzata
Userò un paio di questi nuovi progressi nello stato della RAG per risolvere un paio di problemi di Halloween. Diamo un’occhiata ai problemi: capire se qualcosa è un fantasma e qual è il fantasma gatto più carino?
Applicazioni pratiche per la RAG multimodale
Qualcosa è un fantasma? Ricerca di immagini con filtri e clip-vit-base-patch32
Vogliamo creare uno strumento per tutti i rilevatori di fantasmi là fuori, aiutando a determinare se qualcosa è un “fantasma”. Per farlo useremo la nostra raccolta “ghosts” ospitata, che contiene diversi campi su cui possiamo filtrare oltre a cercare nel nostro vettore codificato multimodale. Permettiamo a qualcuno di inviare una foto di un fantasma tramite Google form, app Streamlit, caricamento S3 e Jupyter notebook. Codifichiamo quella query, che può essere una combinazione di testo e/o immagine, utilizzando il modello CLIP di OpenAI con Sentence Transformer di Hugging Face. Questo ci permette di codificare la nostra immagine di presunto fantasma e usarla per cercare nella nostra raccolta e verificarne la somiglianza. Se la somiglianza è abbastanza alta, allora possiamo considerarlo un "fantasma".
Progettazione della raccolta
Prima di creare qualsiasi applicazione dovresti assicurarti di averla ben definita con tutti i campi di cui potresti aver bisogno e con i tipi e le dimensioni che corrispondono alle tue esigenze.
Per la nostra raccolta di “ghosts”, come minimo avremo bisogno di:
Un campo id di tipo INT64, impostato come chiave primaria e configurato per avere la generazione automatica dell’ID
Il campo successivo nel nostro schema è ghostclass, che è una stringa scalare VARCHAR di lunghezza 20 che contiene le classificazioni tradizionali dei fantasmi come Class I, Class II, Fake e Class IV.
Dopo di quello c’è category, che è una stringa scalare VARCHAR più grande di lunghezza 256 che contiene le nostre brevi descrizioni che sono classificazioni come Fake, Ghost, Deity, Unstable e Legend.
Aggiungiamo un campo per s3path, definito come una grande stringa scalare VARCHAR di lunghezza 1.024 che contiene un percorso S3 all’immagine dell’oggetto.
Infine e soprattutto, vector, che contiene il nostro vettore in virgola mobile di dimensione 512.
Ora che abbiamo il nostro schema dei dati, possiamo crearlo e utilizzarlo per analisi spettrali sui nostri dati.
Passaggio 1: Connettersi a Milvus Standalone
Passaggio 2: Caricare il modello CLIP
Passaggio 3: Definiamo la nostra collection con il suo schema di vettori e scalari.
Passaggio 4: Codifichiamo la nostra immagine da usare per una query.
Passaggio 5: Eseguiamo la query sulla collection ghosts nel nostro database Milvus standalone e cerchiamo solo quelli filtrati per category diversa da Fake. Limitiamo il risultato a un solo elemento.
Passaggio 6: Controlliamo la distanza: se è 0.8 o superiore, considereremo questo un fantasma. Lo facciamo confrontando l’entità sospetta con il nostro grande database di foto di veri fantasmi; se qualcosa appartiene alla classe corrente di fantasma, dovrebbe essere simile a quelli esistenti.
Passaggio 7: Il risultato viene visualizzato con il potenziale fantasma e la sua corrispondenza più vicina.
Come puoi vedere nel nostro esempio, abbiamo trovato una corrispondenza abbastanza vicina a un "ghost" simile che non era nella categoria Fake.
In un’applicazione di Halloween separata, esamineremo una collection diversa e un modello di codifica diverso per un caso d’uso separato che coinvolge anch’esso fantasmi di Halloween.
Trovare il fantasma gatto più carino con il modello Visualized BGE
Vogliamo trovare i fantasmi gatto più carini e forse altri per vincere premi, pubblicare post sui social media o altre iniziative importanti.
Progettazione della collection
Prima di creare qualsiasi applicazione, dovresti assicurarti di aver determinato quali campi potresti aver bisogno. Per questo semplice caso d’uso useremo uno schema dinamico con generazione automatica dell’id. In questo modo non dobbiamo definire i campi e ne verranno creati con i campi id e vector.
Per la nostra collection “ghostslocal”, questi verranno creati automaticamente per noi:
Un campo id di tipo INT64, impostato come chiave primaria e configurato per avere la generazione automatica dell’ID
Abbiamo impostato questa collection per abilitare i campi dinamici; ne aggiungeremo uno importante durante l’inserimento dei dati.
Infine e soprattutto, vector, che contiene il nostro vettore in virgola mobile di dimensione 768.
Ora che abbiamo il nostro schema dei dati, possiamo trovare il fantasma più carino.
Passaggio 1: Connettersi a Milvus Standalone
Passaggio 2: Caricare il modello BAAI/bge-base-en-v1.5
Passaggio 3: Definire la nostra collection con il suo schema di vettori e scalari.
Passaggio 4: Iterare attraverso il nostro elenco di immagini, codificarle e aggiungerle a un dict per l’inserimento successivo.
Passaggio 5: Inserire ****le nostre immagini, image_path viene creato come campo dinamico nel nostro schema per questa collection.
Passaggio 6: Codificare in vettore la query di testo, “Mostrami il fantasma gatto più carino”, da usare per una query.
Passaggio 5: Eseguire la nostra ricerca di similarità
Passaggio 6: Iterare i risultati e mostrare l’immagine che corrisponde al gatto più carino.
La nostra ricerca vettoriale è piuttosto semplice: codifichiamo semplicemente il nostro testo cercando il fantasma gatto più carino (nel suo piccolo costume di Halloween). Milvus interrogherà il vettore in virgola mobile a 768 dimensioni e ci troverà la corrispondenza più vicina. Con tutti gli spettrali ghoul e fantasmi nel nostro database, è difficile discutere questi risultati.
Usare Ollama, LLava 7B e il reranking LLM
Esecuzione di RAG avanzato in locale
Ok, questo è un piccolo scherzetto E dolcetto, possiamo trattare entrambi gli argomenti allo stesso tempo. Siamo in grado di eseguire tutta questa tecnica RAG avanzata localmente utilizzando Milvus Lite, Ollama, LLava 7B e un Jupyter Notebook. Faremo una ricerca multimodale con un reranker generativo. Questo utilizza un LLM per classificare le immagini e spiegare i risultati migliori. In precedenza lo abbiamo fatto con il modello super potente GPT-4o. Sto ottenendo buoni risultati con LLava 7B ospitato localmente con Ollama. Mostriamo come eseguirlo in modo aperto, locale e gratuito!
Riutilizzeremo il codice di esempio esistente per creare la foto panoramica dalle immagini restituite dalla nostra ricerca ibrida di una foto di ufficio con fantasmi con il testo “computer monitor with ghost”. Poi inviamo quella foto al modello LLaVA7B ospitato su Ollama con istruzioni su come classificare i risultati. Riceviamo una classifica, una spiegazione e un’immagine.
La nostra immagine di ricerca e nove risultati
Risultati restituiti dall’LLM per l’ordine della lista classificata.
La nostra query Milvus semplice e veloce per ottenere risultati da fornire all’LLM.
Puoi trovare il codice completo nel nostro esempio github e puoi usare qualsiasi immagine a tua scelta, come mostra l’esempio. Ci sono anche alcuni riferimenti e codice documentato, inclusa un’applicazione StreamLit con cui sperimentare autonomamente.
Conclusione
Come puoi vedere, il RAG multimodale non solo non fa paura, è anche divertente e utile per molte applicazioni.
Se sei interessato a creare applicazioni AI più avanzate, usare Milvus e il RAG multimodale è un’ottima combinazione per sviluppare applicazioni. Ora puoi andare oltre il solo testo e aggiungere immagini e altro ancora. Il RAG multimodale apre molte nuove strade per la generazione con LLM, la ricerca e le applicazioni AI in generale.
Ci piacerebbe sapere cosa ne pensi!
Se ti piace questo articolo, apprezzeremmo molto se potessi darci una stella su GitHub! Sei anche il benvenuto nella nostra community Milvus su Discord per condividere le tue esperienze. Unisciti a uno o a tutti i nostri meetup per una community locale di persona e codice, ottenendo anche accesso alla nostra libreria Youtube di talk, demo e approfondimenti registrati dei meetup.
Se ti interessa saperne di più, dai un’occhiata al nostro repository Bootcamp su GitHub per esempi su come creare app RAG multimodali con Milvus.
Ulteriori risorse
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.

Introducing Zilliz Cloud Global Cluster: Region-Level Resilience for Mission-Critical AI
Zilliz Cloud Global Cluster delivers multi-region resilience, automatic failover, and fast global AI search with built-in security and compliance.

Zilliz Cloud Now Available in Azure North Europe: Bringing AI-Powered Vector Search Closer to European Customers
The addition of the Azure North Europe (Ireland) region further expands our global footprint to better serve our European customers.



