Fangen Sie diesen Halloween einen niedlichen Geist mit Milvus
Eine Version dieses Artikels ist auf DZone veröffentlicht.
Ich habe gerade einen Vortrag auf der All Things Open gehalten, und es ist kaum zu glauben, dass Retrieval Augmented Generation (RAG) mittlerweile so wirkt, als wäre es eine Technik, die wir schon seit Jahren einsetzen.
Dafür gibt es einen guten Grund, denn in den letzten zwei Jahren ist es in Tiefe und Breite enorm gewachsen, da der Nutzen von RAG grenzenlos ist. Die Fähigkeit, die Ergebnisse generierter Resultate von Large Language Models zu verbessern, nimmt ständig zu, da Varianten, Verbesserungen und neue Paradigmen die Entwicklung vorantreiben.
Heute werden wir uns ansehen:
Praktische Anwendungen für multimodales RAG
- Bildsuche mit Filtern
- Die besten Halloween-Geister finden
Verwendung von Ollama, LLava 7B und LLM Reranking
Fortgeschrittenes multimodales RAG lokal ausführen
Ich werde einige dieser neuen Fortschritte im Bereich RAG nutzen, um ein paar Halloween-Probleme zu lösen. Schauen wir uns die Probleme an: herauszufinden, ob etwas ein Geist ist, und welcher der süßeste Katzengeist ist?
Praktische Anwendungen für multimodales RAG
Ist etwas ein Geist? Bildsuche mit Filtern und clip-vit-base-patch32
Wir möchten ein Tool für alle Geisterdetektoren da draußen entwickeln, indem wir dabei helfen festzustellen, ob etwas ein „Geist“ ist. Dazu verwenden wir unsere gehostete „ghosts“-Collection, die eine Reihe von Feldern enthält, nach denen wir filtern können, sowie unseren multimodal kodierten Vektor durchsuchen kann. Wir ermöglichen es jemandem, ein Geisterfoto über ein Google-Formular, eine Streamlit-App, einen S3-Upload und ein Jupyter-Notebook einzureichen. Wir kodieren diese Abfrage, die eine Kombination aus Text und/oder Bild sein kann, indem wir das CLIP-Modell von OpenAI mit dem Sentence Transformer von Hugging Face verwenden. Dadurch können wir unser mutmaßliches Geisterbild kodieren und es nutzen, um unsere Collection zu durchsuchen und seine Ähnlichkeit zu prüfen. Wenn die Ähnlichkeit hoch genug ist, können wir es als „Geist“ betrachten.
Collection-Design
Bevor Sie eine Anwendung erstellen, sollten Sie sicherstellen, dass sie gut definiert ist, mit allen Feldern, die Sie möglicherweise benötigen, sowie den Typen und Größen, die Ihren Anforderungen entsprechen.
Für unsere Collection von „ghosts“ benötigen wir mindestens:
Ein id-Feld vom Typ INT64, das als Primärschlüssel festgelegt ist und für die automatische ID-Generierung konfiguriert ist
Das nächste Feld in unserem Schema ist ghostclass, ein skalarer VARCHAR-String der Länge 20, der die traditionellen Klassifizierungen von Geistern enthält, wie Class I, Class II, Fake und Class IV.
Danach kommt category, ein größerer skalarer VARCHAR-String der Länge 256, der unsere Kurzbeschreibungen enthält, die Klassifizierungen wie Fake, Ghost, Deity, Unstable und Legend sind.
Wir fügen ein Feld für s3path hinzu, das als großer skalarer VARCHAR-String der Länge 1.024 definiert ist und einen S3 Path zum Bild des Objekts enthält.
Schließlich und am wichtigsten: vector, das unseren Gleitkomma-Vektor mit der Dimension 512 enthält.
Da wir nun unser Datenschema haben, können wir es erstellen und für schaurige Analysen unserer Daten verwenden.
Schritt 1: Mit Milvus Standalone verbinden
Schritt 2: Das CLIP-Modell laden
Schritt 3: Definieren Sie unsere Collection mit ihrem Schema aus Vektoren und Skalaren.
Schritt 4: Kodieren Sie unser Bild, um es für eine Abfrage zu verwenden.
Schritt 5: Führen Sie die Abfrage gegen die Ghosts-Collection in unserer eigenständigen Milvus-Datenbank aus und suchen Sie nur nach denen, die nach category nicht Fake gefiltert sind. Wir beschränken es auf ein Ergebnis.
Schritt 6: Prüfen Sie die Distanz; wenn sie 0.8 oder höher ist, betrachten wir dies als Geist. Wir tun dies, indem wir die verdächtige Entität mit unserer großen Datenbank tatsächlicher Geisterfotos vergleichen; wenn etwas der aktuellen Klasse von Geist entspricht, sollte es unseren vorhandenen ähnlich sein.
Schritt 7: Das Ergebnis wird mit dem potenziellen Geist und seiner nächsten Übereinstimmung angezeigt.
Wie Sie in unserem Beispiel sehen können, haben wir eine ausreichend nahe Übereinstimmung mit einem ähnlichen "ghost" gefunden, der nicht in der Kategorie Fake war.
In einer separaten Halloween-Anwendung werden wir eine andere Collection und ein anderes Kodierungsmodell für einen separaten Anwendungsfall betrachten, der ebenfalls Halloween-Geister betrifft.
Den süßesten Katzengeist mit dem Visualized BGE model finden
Wir möchten die süßesten Katzengeister und vielleicht andere finden, um Preise zu gewinnen, sie in Social-Media-Beiträgen zu posten oder für andere wichtige Vorhaben.
Collection-Design
Bevor Sie eine Anwendung erstellen, sollten Sie sicherstellen, dass Sie festgelegt haben, welche Felder Sie möglicherweise benötigen. Für diesen einfachen Anwendungsfall werden wir ein dynamisches Schema mit automatischer ID-Generierung haben. Auf diese Weise müssen wir die Felder nicht definieren, und es werden Felder für id und vector erstellt.
Für unsere Collection „ghostslocal“ werden diese automatisch für uns erstellt:
Ein id-Feld vom Typ INT64, das als Primärschlüssel festgelegt ist und automatische ID-Generierung hat
Wir haben diese Collection so eingestellt, dass dynamische Felder aktiviert sind; während der Dateneinfügung werden wir ein wichtiges hinzufügen.
Schließlich und am wichtigsten: vector, das unseren Gleitkomma-Vektor der Dimension 768 enthält.
Nachdem wir nun unser Datenschema haben, können wir den süßesten Geist finden.
Schritt 1: Mit Milvus Standalone verbinden
Schritt 2: Das Modell BAAI/bge-base-en-v1.5 laden
Schritt 3: Unsere Collection mit ihrem Schema aus Vektoren und Skalaren definieren.
Schritt 4: Durch unsere Bilderliste iterieren, sie kodieren und sie für eine spätere Einfügung zu einem dict hinzufügen.
Schritt 5: ****Unsere Bilder einfügen, image_path wird als dynamisches Feld in unserem Schema für diese Collection erstellt.
Schritt 6: Die Textabfrage „Show me the cutest cat ghost“ vektorkodieren, um sie für eine Abfrage zu verwenden.
Schritt 5: Unsere Ähnlichkeitssuche ausführen
Schritt 6: Durch die Ergebnisse iterieren und das Bild anzeigen, das zur süßesten Katze passt.
Unsere Vektorsuche ist ziemlich einfach: Wir kodieren einfach unseren Text, der nach dem süßesten Katzengeist sucht (in seinem kleinen Halloween-Kostüm). Milvus fragt den 768-dimensionalen Gleitkomma-Vektor ab und findet die nächste Übereinstimmung für uns. Bei all den gruseligen Ghulen und Geistern in unserer Datenbank kann man mit diesen Ergebnissen kaum streiten.
Verwendung von Ollama, LLava 7B und LLM-Reranking
Fortgeschrittenes RAG lokal ausführen
Okay, das ist ein bisschen Süßes UND Saures, wir können beide Themen gleichzeitig behandeln. Wir können diese gesamte fortgeschrittene RAG-Technik lokal ausführen, indem wir Milvus Lite, Ollama, LLava 7B und ein Jupyter Notebook. nutzen. Wir werden eine multimodale Suche mit einem generativen Reranker durchführen. Dabei wird ein LLM verwendet, um die Bilder zu bewerten und die besten Ergebnisse zu erklären. Zuvor haben wir das mit dem leistungsstarken GPT-4o-Modell gemacht. Ich erziele gute Ergebnisse mit LLava 7B, das lokal mit Ollama gehostet wird. Zeigen wir, wie das offen, lokal und kostenlos läuft!
Wir werden den vorhandenen Beispielcode wiederverwenden, um das Panoramafoto aus den Bildern zu erstellen, die von unserer hybriden Suche nach einem Bürofoto mit Geistern mit dem Text „computer monitor with ghost“ zurückgegeben wurden. Anschließend senden wir dieses Foto an das von Ollama gehostete LLaVA7B-Modell mit Anweisungen, wie die Ergebnisse zu bewerten sind. Wir erhalten eine Rangliste, eine Erklärung und ein Bild zurück.
Unser Suchbild und neun Ergebnisse
Vom LLM zurückgegebene Ergebnisse für die Reihenfolge der Rangliste.
Unsere einfache und schnelle Milvus-Abfrage, um Ergebnisse zu erhalten, die an das LLM weitergegeben werden.
Den vollständigen Code findest du in unserem example github, und du kannst beliebige Bilder deiner Wahl verwenden, wie das Beispiel zeigt. Es gibt außerdem einige Referenzen und dokumentierten Code, einschließlich einer StreamLit-Anwendung, mit der du selbst experimentieren kannst.
Fazit
Wie du sehen kannst, ist multimodales RAG nicht nur nicht beängstigend, sondern macht Spaß und ist für viele Anwendungen nützlich.
Wenn du daran interessiert bist, fortgeschrittenere KI-Anwendungen zu erstellen, dann ist die Verwendung von Milvus und multimodalem RAG eine großartige Kombination für die Entwicklung von Anwendungen. Du kannst jetzt über reinen Text hinausgehen und Bilder und mehr hinzufügen. Multimodales RAG eröffnet viele neue Möglichkeiten für LLM-Generierung, Suche und KI-Anwendungen im Allgemeinen.
Wir würden gerne hören, was du denkst!
Wenn dir dieser Artikel gefällt, würden wir uns sehr freuen, wenn du uns einen Stern auf GitHub geben könntest! Du bist außerdem herzlich eingeladen, unserer Milvus-Community auf Discord beizutreten, um deine Erfahrungen zu teilen. Bitte nimm an einem oder allen unserer Meetups teil, um lokale Community und Code vor Ort zu erleben und gleichzeitig Zugriff auf unsere Youtube-Bibliothek mit aufgezeichneten Meetup-Vorträgen, Demos und Deep Dives zu erhalten.
Wenn du mehr erfahren möchtest, sieh dir unser Bootcamp repository auf GitHub an, mit Beispielen dafür, wie man Multimodal-RAG-Apps mit Milvus erstellt.
Weitere Ressourcen
Weiterlesen

A Developer's Guide to Exploring Milvus 2.6 Features on Zilliz Cloud
Milvus 2.6 marks a shift from “vector search + glue code” to a more advanced retrieval engine, and it is now Generally Available (GA) on Zilliz Cloud (a managed Milvus service).

Our Journey to 35K+ GitHub Stars: The Real Story of Building Milvus from Scratch
Join us in celebrating Milvus, the vector database that hit 35.5K stars on GitHub. Discover our story and how we’re making AI solutions easier for developers.

What Exactly Are AI Agents? Why OpenAI and LangChain Are Fighting Over Their Definition?
AI agents are software programs powered by AI that can perceive their environment, make decisions, and take actions to achieve a goal—often autonomously.



