Skalierung der Suche mit Milvus: Massive Datensätze mühelos bewältigen
Oft werde ich gefragt: „Warum sollte ich mir die Mühe machen, eine Vektordatenbank wie Milvus zu verwenden, wenn ich einfach NumPy oder FAISS nutzen kann?“ Es gibt viele Gründe: Skalierbarkeit, einfache Verwaltung, Datenpersistenz und einer der wichtigsten: Skalierung. Wenn man mit Millionen oder Milliarden von Vektoren arbeitet, braucht man eine Lösung, die dafür entwickelt wurde, ein solches Volumen zu bewältigen.
In diesem Blogbeitrag werden wir sehen, wie wir mit einem Beispielanwendungsfall von 40 Millionen Vektoren mit Milvus arbeiten können. Wir zeigen außerdem, wie Funktionen wie Metadatenfilterung Ihre Suchergebnisse erheblich verbessern können – eine wesentliche Fähigkeit, die in nicht zweckgebunden entwickelten Vektordatenbanken oft fehlt, was ein großer Nachteil ist.
Milvus: eine Vektordatenbank, die für Skalierung entwickelt wurde
Milvus ist eine beliebte Open-Source-Vektordatenbank, die KI-Anwendungen mit hochperformanter und skalierbarer Vektorähnlichkeitssuche antreibt.
Zu den wichtigsten Funktionen, die Vektorsuche im großen Maßstab ermöglichen, gehören:
- Eine verteilte Architektur: Milvus verfügt über eine verteilte Architektur, die es ermöglicht, nahtlos horizontal zu skalieren und Daten sowie Arbeitslast auf mehrere Knoten zu verteilen. Diese Fähigkeit gewährleistet hohe Verfügbarkeit und Ausfallsicherheit, selbst unter hoher Last.
- Optimierte Indexierung: Milvus unterstützt verschiedene Indexierungstechniken wie IVF_FLAT und HNSW, aber auch einen GPU-Index , um Suchgeschwindigkeiten zu beschleunigen. Es unterstützt außerdem DiskANN, wenn Sie die Kosten Ihrer Vector DB senken müssen; die Suche wäre etwas langsamer, aber deutlich günstiger.
- Suche in Milliarden von Vektoren: Eine der herausragenden Funktionen von Milvus ist die Fähigkeit, Milliarden von Vektoren effizient zu verarbeiten und zu durchsuchen. Diese Fähigkeit ist entscheidend für Anwendungen, die schnelle und großvolumige Vektorähnlichkeitssuchen erfordern.
- Verschiedene Rechenoptionen: Milvus kann die Leistung von GPUs und CPUs nutzen und Aufgaben intelligent der am besten geeigneten Hardware zuweisen, um optimale Leistung zu erzielen. Diese Fähigkeit ermöglicht parallele Verarbeitung und erhebliche Geschwindigkeitsverbesserungen, insbesondere bei rechenintensiven Operationen.
Der Datensatz: Millionen von Wikipedia-Artikel-Embeddings
Wir verwenden einen Datensatz aus Wikipedia, der mit einem Cohere Embedding Model transformiert wurde; er ist frei auf Hugging Face verfügbar.
Vorschau des Datensatzes
Abbildung 1: Vorschau des Datensatzes
Jedes Beispiel enthält einen vollständigen Wikipedia-Artikel, der bereinigt wurde, um Markdown und unerwünschte Abschnitte (Referenzen usw.) zu entfernen.
Der Datensatz enthält mehr als 300 Sprachen, aber für unseren Anwendungsfall konzentrieren wir uns auf Englisch, das 41,5 Mio. Vektoren enthält. Das Spannende daran ist, dass die Embeddings sprachübergreifend sind! Das bedeutet, dass Sie über mehrere Sprachen hinweg suchen und sich auf die Fähigkeit des Modells verlassen können, ähnliche Bedeutungen zu finden, selbst in verschiedenen Sprachen.
Mehrsprachig vs. sprachübergreifend.png
Abbildung 2: Mehrsprachig vs. sprachübergreifend (Bildquelle)
Erste Schritte mit Milvus
In diesem Abschnitt zeigen wir Ihnen, wie Sie mit Milvus beginnen, einschließlich der Installation des Milvus SDK oder der Einrichtung von Zilliz Cloud, der Verbindung zu Milvus, der Erstellung von Collections usw.
Installation des Milvus SDK
Beginnen Sie mit der Installation des Milvus SDK, indem Sie pip install pymilvus ausführen. Der Einfachheit halber werden wir Milvus auf Zilliz Cloud (der vollständig verwalteten Version von Milvus) bereitstellen. Je nach Umfang der von Ihnen verwendeten Daten können Sie entweder Milvus auf Kubernetes bereitstellen oder Zilliz Cloud verwenden.
- Wenn Sie eine größere Datenmenge haben, sagen wir mehr als eine Million Vektoren, können Sie einen leistungsfähigeren Milvus-Server auf Docker oder Kubernetes einrichten. Verwenden Sie in diesem Setup bitte die Server-URI, z. B.
http://localhost:19530, als Ihre URI. - Wenn Sie Zilliz Cloud, den vollständig verwalteten Cloud-Dienst für Milvus, verwenden möchten, passen Sie
uriundtokenan, die dem Public Endpoint und API key in Zilliz Cloud entsprechen.
Eine Schritt-für-Schritt-Anleitung
- Mit Milvus verbinden: Stellen Sie zunächst eine Verbindung zu Ihrer Milvus-Instanz her:
from pymilvus import MilvusClient
client = MilvusClient(uri=<ZILLIZ_CLOUD_URI>, token=<ZILLIZ_TOKEN>)
- Ein Schema erstellen: Definieren Sie das Schema, das zur Erstellung unserer Milvus Collection verwendet wird.
# Define the schema for the collection
embedding_dim = 1024
schema = [
{"name": "id", "dtype": "int64", "is_primary": True, "auto_id": True},
{"name": "text_vector", "dtype": "float_vector", "dim": embedding_dim},
{"name": "title", "dtype": "varchar", "max_length": 5000},
{"name": "text", "dtype": "varchar", "max_length": 5000},
]
- Eine Collection erstellen: Nun erstellen wir die Collection, die wir zum Speichern der Embeddings verwenden werden.
# Create the collection if it doesn't exist
collection_name = "cohere_embeddings"
if not client.has_collection(collection_name):
client.create_collection(collection_name=collection_name, schema=schema)
- Einen Index erstellen: Um die Vektorsuche effizient zu machen, müssen wir einen Index für das Vektorfeld erstellen, an dem wir interessiert sind. Ein Vektorindex ist ein spezialisierter Indextyp, der zum Speichern und Durchsuchen von Vektoren entwickelt wurde.
# Define and create index
index_params = {
"metric_type": "COSINE",
"index_type": "HNSW",
"params": {"M": 8, "efConstruction": 64},
}
client.create_index(collection_name=collection_name, field_name="text_vector", index_params=index_params)
# Load the collection
client.load_collection(collection_name=collection_name)
- Daten einfügen: Befüllen Sie die Collection
cohere_embeddingsmit dem Dataset von Hugging Face. Abhängig von den Ihnen zur Verfügung stehenden Ressourcen möchten Sie möglicherweise entweder eine Teilmenge davon herunterladen, z. B. nur eine bestimmte Sprache, sie in einen Bucket wie S3 oder GCP hochladen, oder Sie können sie auch von Hugging Face streamen.
Wenn sich ein Dataset im Streaming-Modus befindet, können Sie direkt darüber iterieren, ohne das gesamte Dataset herunterladen zu müssen. Die Daten werden schrittweise heruntergeladen, während Sie über das Dataset iterieren; dies ist nützlich, wenn Sie nicht genügend Speicherplatz auf Ihrer Festplatte haben, um das Dataset herunterzuladen, oder wenn Sie nicht warten möchten, bis Ihr Dataset heruntergeladen wurde, bevor Sie es verwenden.
# Insert data into our collection
def insert_batch(client, collection_name, batch_data):
client.insert(collection_name=collection_name, data=batch_data)
batch_data.clear()
# Get the data from HuggingFace and create some batch
def insert_data(client, collection_name):
batch_size = 1000 # Adjust the batch size as needed
batch_data = []
docs = load_dataset(
"Cohere/wikipedia-2023-11-embed-multilingual-v3",
"en", # Nur Englisch
split="train",
streaming=True, # Ermöglicht es uns, über den Datensatz zu iterieren
)
for doc in tqdm(docs, desc="Daten für Milvus streamen und vorbereiten"):
title = doc["title"][:4500] # Titel können sehr lang sein
text = doc["text"][:4500] # Text kann sehr lang sein
emb = doc["emb"] # Der Einbettungsvektor
batch_data.append({"title": title, "text_vector": emb, "text": text})
if len(batch_data) >= batch_size:
insert_batch(client, collection_name, batch_data)
if batch_data:
insert_batch(client, collection_name, batch_data)
Skalare Filterung: Ein leistungsstarkes Werkzeug im großen Maßstab
Wenn Sie mit Millionen oder Milliarden von Vektoren arbeiten, wird Filterung zu mehr als nur einem Nice-to-have – sie ist unverzichtbar. Und genau hier spielt Milvus wirklich seine Stärken aus.
Hier ist, warum der Filterungsansatz von Milvus ein echter Game-Changer ist:
- Bitset-Zauberei: Milvus verwendet kompakte Bitsets, um darzustellen, welche Vektoren Ihren Filterkriterien entsprechen. Diese Bitsets können dank Low-Level-CPU-Operationen schneller manipuliert werden, als Sie „vector similarity search“ sagen können. Es ist, als hätten Sie einen Supercomputer, der Milliarden von Datenpunkten sofort durchsuchen kann.
- Reduzierung des Suchraums: Im Gegensatz zu einigen anderen Lösungen (z. B. pgvector), die nur Post-Filtering anbieten, wendet Milvus Metadatenfilter an, bevor die Vektorähnlichkeitssuche ausgeführt wird. Dadurch wird die Anzahl der zu verarbeitenden Vektoren drastisch reduziert. Außerdem können Sie Ihre Suche von Milliarden von Vektoren auf nur die Tausenden eingrenzen, die wirklich relevant sind – in Millisekunden.
- Skalare Indexierung (wenn Sie sie benötigen): Für Felder, nach denen Sie häufig filtern, können Sie in Milvus skalare Indizes erstellen. Stellen Sie sich das so vor, als würden Sie Milvus einen Spickzettel für Ihre Daten geben. Auch wenn sie nicht immer standardmäßig vorhanden sind, können diese Indizes bei korrekter Einrichtung Ihre Filterleistung enorm beschleunigen.
Das Schöne an Milvus ist, dass es diese Funktionen nicht nur anbietet – es sorgt dafür, dass sie im großen Maßstab funktionieren. Egal, ob Sie mit 40 Millionen Vektoren oder 40 Milliarden arbeiten.
Suche mit exakter Filterung
Dokumente mit einem bestimmten Titel finden.
FILTER_TITLE = "British Arab Commercial Bank"
res = milvus_client.query(
collection_name=collection_name,
filter=f'title like "{FILTER_TITLE}"',
output_fields=["title", "text"]
)
for elt in res:
pprint(elt)
Dies gibt Dokumente über die British Arab Commercial Bank zurück
{'id': 450933285225527270,
'text': 'The British Arab Commercial Bank PLC (BACB) is an international '
'wholesale bank incorporated in the United Kingdom that is authorised '
'by the Prudential Regulation Authority (PRA) and regulated by the '
'PRA and the Financial Conduct Authority (FCA). It was founded in '
'1972 as UBAF Limited, adopted its current name in 1996, and '
'registered as a public limited company in 2009. The bank has clients '
'trading in and out of developing markets in the Middle East and '
'Africa.',
'title': 'British Arab Commercial Bank'}
{'id': 450933285225527271,
'text': 'BACB has a head office in London, and three representative offices '
'in Algiers in Algeria, Tripoli in Libya and Abidjan in the Cote '
"D'Ivoire. The bank has 17 sister banks across Europe, Asia and "
'Africa. It is owned by three main shareholders - the Libyan Foreign '
'Bank (87.80%), Banque Centrale Populaire (6.10%) and Banque '
"Extérieure d'Algérie (6.10%).",
'title': 'British Arab Commercial Bank'}
Suche mit Präfix-/Infix-/Postfix-Filterung
Nach Dokumenten suchen, die ein bestimmtes Wort enthalten.
res = milvus_client.query(
collection_name=collection_name,
filter='text like "%Calectasia%"', # Infix
# filter='text like "Calect%"', # Suffix
# filter='text like "%lectasia"', # Prefix
output_fields=["title", "text"],
limit=5,
)
for elt in res:
pprint(elt)
Dies gibt Dokumente zurück, die das Wort "Calectasia" enthalten.
{'id': 450933285225527360,
'text': 'Calectasia is a genus of about fifteen species of flowering plants '
'in the family Dasypogonaceae and is endemic to south-western '
'Australia. Plants is this genus are small, erect shrubs with '
'branched stems covered by leaf sheaths. The flowers are star-shaped, '
'lilac-blue to purple and arranged singly on the ends of short '
'branchlets.',
'title': 'Calectasia'}
{'id': 450933285225527361,
'text': 'Plants in the genus Calectasia are small, often rhizome-forming '
'shrubs with erect, branched stems with sessile leaves arranged '
'alternately along the stems, long and about wide, the base held '
'closely against the stem and the tip pointed. The flowers are '
'arranged singly on the ends of branchlets and are bisexual, the '
'three sepals and three petals are similar to each other, and joined '
'at the base forming a short tube but spreading, forming a star-like '
'pattern with a metallic sheen. Six bright yellow or orange stamens '
'form a tube in the centre of the flower with a thin style extending '
'beyond the centre of the tube.',
'title': 'Calectasia'}
Suche mit Filterung mit "Not In"
Schließen Sie bestimmte Titel von Ihrer Suche aus.
res = milvus_client.query(
collection_name=collection_name,
filter='title not in ["British Arab Commercial Bank", "Calectasia"]',
output_fields=["title", "text"],
limit=10,
)
for elt in res:
pprint(elt)
Dies gibt Dokumente zurück, deren Titel nicht "British Arab Commercial Bank" oder "Calectasia" sind.
{'id': 450933285225527281,
'text': 'The Commonwealth Skyranger, first produced as the Rearwin Skyranger, '
'was the last design of Rearwin Aircraft before the company was '
'purchased by a new owner and renamed Commonwealth Aircraft. It was '
'a side-by-side, two-seat, high-wing taildragger.',
'title': 'Commonwealth Skyranger'}
{'id': 450933285225527282,
'text': 'The Rearwin company had specialized in aircraft powered by small '
'radial engines, such as their Sportster and Cloudster, and had even '
'purchased the assets of LeBlond Engines to make small radial engines '
'in-house in 1937. By 1940, however, it was clear Rearwin would need '
'a design powered by a small horizontally opposed engine to remain '
'competitive. Intended for sport pilots and flying businessmen, the '
'"Rearwin Model 165" first flew on April 9, 1940. Originally named '
'the "Ranger," Ranger Engines (who also sold several engines named '
'"Ranger") protested, and Rearwin renamed the design "Skyranger." The '
'overall design and construction methods allowed Rearwin to take '
'orders for Skyrangers then deliver the aircraft within 10 weeks.',
'title': 'Commonwealth Skyranger'}
Cohere 🤝 Milvus: Eine leistungsstarke Kombination, die die Vektorähnlichkeitssuche einfacher und effizienter macht
Führen wir eine Ähnlichkeitssuche mit Cohere-Embeddings durch. Wir betten die Abfrage Who founded Wikipedia ein und verwenden sie, um unsere Milvus-Collection zu durchsuchen. Dies ist dasselbe Embedding-Modell, das zur Kodierung der Wikipedia Embeddings verwendet wurde.
Wir werden die Integration zwischen Milvus und Cohere über PyMilvus Model verwenden; installieren Sie sie mit pip install "pymilvus[model]" .
from pymilvus.model.dense import CohereEmbeddingFunction
cohere_ef = CohereEmbeddingFunction(
model_name="embed-multilingual-v3.0",
input_type="search_query",
embedding_types=["float"]
)
query = 'Who founded Wikipedia'
embedded_query = cohere_ef.encode_queries([query])
response = embedded_query[0]
print(response[:10])
Dies gibt die relevantesten Wikipedia-Artikel über die Gründer von Wikipedia zurück.
res = milvus_client.search(data=response, collection_name=collection_name, output_fields=["text"], limit=3)
for elt in res:
pprint(elt)
Was zu Folgendem führt:
[{'distance': 0.7344469428062439,
'entity': {'text': 'Larry Sanger and Jimmy Wales are the ones who started '
'Wikipedia. Wales is credited with defining the goals of '
'the project. Sanger created the strategy of using a wiki '
"to reach Wales' goal. On January 10, 2001, Larry Sanger "
'proposed on the Nupedia mailing list to create a wiki as '
'a "feeder" project for Nupedia. Wikipedia was launched '
'on January 15, 2001. It was launched as an '
'English-language edition at www.wikipedia.com, and '
'announced by Sanger on the Nupedia mailing list. '
'Wikipedia\'s policy of "neutral point-of-view" was '
'enforced in its initial months and was similar to '
'Nupedia\'s earlier "nonbiased" policy. Otherwise, there '
"weren't very many rules initially, and Wikipedia "
'operated independently of Nupedia.'},
'id': 450933285241797095},
{'distance': 0.7239157557487488,
'entity': {'text': 'Wikipedia was originally conceived as a complement to '
'Nupedia, a free on-line encyclopedia founded by Jimmy '
'Wales, with articles written by highly qualified '
'contributors and evaluated by an elaborate peer review '
'process. The writing of content for Nupedia proved to be '
'extremely slow, with only 12 articles completed during '
'the first year, despite a mailing-list of interested '
'editors and the presence of a full-time editor-in-chief '
'recruited by Wales, Larry Sanger. Learning of the wiki '
'concept, Wales and Sanger decided to try creating a '
'collaborative website to provide an additional source of '
'rapidly produced draft articles that could be polished '
'for use on Nupedia.'},
'id': 450933285225827849},
{'distance': 0.7191773653030396,
'entity': {'text': "The foundation's creation was officially announced by "
'Wikipedia co-founder Jimmy Wales, who was running '
'Wikipedia within his company Bomis, on June 20, 2003.'},
'id': 450933285242058780}]
Überprüfen wir die Leistungsmetriken unseres Clusters und konzentrieren uns dabei auf die Latenz unserer Suchabfragen. Wir verwenden die Zilliz Cloud API, um sowohl die durchschnittlichen als auch die 99.-Perzentil-(P99)-Latenzwerte abzurufen.
Zunächst prüfen wir die durchschnittliche Latenz:
> curl --request POST \
--url https://api.cloud.zilliz.com/v2/clusters/<cluster_id>/metrics/query \
[...]
"metricQueries": [
{
"name": "REQ_SEARCH_LATENCY",
"stat": "AVG"
}
}'
[{"name":"REQ_SEARCH_LATENCY","stat":"AVG","unit":"millisecond","values":[{"timestamp":"2024-08-26T11:09:53Z","value":"2.0541596873255163"}]}]
Diese Abfrage gibt eine durchschnittliche Latenz von 2,05 Millisekunden zurück.
Als Nächstes prüfen wir die P99-Latenz:
> curl --request POST \
--url https://api.cloud.zilliz.com/v2/clusters/<cluster_id>/metrics/query \
[...]
"metricQueries": [
{
"name": "REQ_SEARCH_LATENCY",
"stat": "P99"
}
}'
[{"name":"REQ_SEARCH_LATENCY","stat":"P99","unit":"millisecond","values":[{"timestamp":"2024-08-26T11:09:53Z","value":"4.949999999999999"}]}]
Die P99-Latenz wird mit 4,95 Millisekunden angegeben.
Diese Ergebnisse zeigen eine beeindruckende Leistung: Unsere durchschnittliche Abfragelatenz liegt bei knapp über 2 Millisekunden, wobei 99 % der Abfragen in weniger als 5 Millisekunden abgeschlossen werden. Dies demonstriert die Effizienz unseres Milvus-Clusters bei der Verarbeitung von Suchoperationen, selbst in großem Maßstab.
Erstellen eines einfachen RAG-Systems mit Milvus
Retrieval Augmented Generation (RAG) ist eine fortschrittliche KI-Technik zur Verringerung von Halluzinationen in großen Sprachmodellen (LLMs) wie ChatGPT.
In diesem Beispiel können wir die Ergebnisse aus Milvus verwenden, um ein einfaches RAG-System zu erstellen. Dadurch kann ein LLM auf in Milvus gespeicherte Informationen zugreifen und diese nutzen.
context = "\n".join(
[line_with_distance[0] for line_with_distance in retrieved_lines_with_distances]
)
question = "Who created Wikipedia?"
SYSTEM_PROMPT = """
Human: You are an AI assistant. You are able to find answers to the questions from the contextual passage snippets provided.
"""
USER_PROMPT = f"""
Use the following pieces of information enclosed in <context> tags to provide an answer to the question enclosed in <question> tags.
<context>
{context}
</context>
<question>
{question}
</question>
"""
from openai import OpenAI
client = OpenAI(
base_url = 'http://localhost:11434/v1',
api_key='ollama', # required, but unused
)
response = client.chat.completions.create(
model="llama3.1",
messages=[
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": USER_PROMPT},
],
)
print(response.choices[0].message.content)
According to the provided context, Larry Sanger and Jimmy Wales are the ones who started Wikipedia. Specifically, Jimmy Wales defined the goals of the project, while Larry Sanger created the strategy of using a wiki to achieve those goals.
Über die Grundlagen hinaus: Erweiterte Funktionen von Milvus für verbesserte Skalierbarkeit
Milvus bietet noch mehr erweiterte Funktionen für die Verarbeitung riesiger Datensätze:
- Datenpartitionierung: Für Sammlungen, die beispielsweise Daten von mehreren Benutzern oder Mandanten enthalten, bietet Milvus Partitionsschlüssel und -namen, um Daten logisch zu trennen. Diese Funktion ermöglicht effizientes Metadaten-Filtering, etwa nach Benutzer-ID oder Organisationsname.
- Bereichssuche: Vektoren innerhalb eines angegebenen Entfernungsbereichs von einem Abfragevektor effizient finden, wodurch präzisere und flexiblere Ähnlichkeitssuchen in hochdimensionalen Räumen ermöglicht werden.
- Hybride Suche: Ermöglicht es Benutzern, in einer einzigen Abfrage über mehrere Vektorspalten hinweg zu suchen. Beispielsweise können Sie Textvektor und Bildvektor für multimodale Daten oder dichten Vektor und spärlichen Vektor kombinieren, um semantische Suche und Volltextsuche zu nutzen. Diese Funktion bietet vielseitige und flexible Suchfunktionalität.
Weitere Details finden Sie in der Milvus-Dokumentation.
Fazit
Milvus bietet eine robuste und skalierbare Lösung für die Arbeit mit Milliarden von Vektoren. Seine leistungsstarken Funktionen wie Filterung und verteilte Architektur machen es zur perfekten Wahl für anspruchsvolle KI-Anwendungen.
Unsere Leistungstests haben die beeindruckenden Fähigkeiten von Milvus gezeigt:
- Durchschnittliche Abfragelatenz: 2,05 Millisekunden
- Latenz im 99. Perzentil (P99): 4,95 Millisekunden
Diese Ergebnisse zeigen, dass Milvus konsistent Suchzeiten von unter 5 ms liefern kann, selbst bei der Verarbeitung von Millionen von Vektoren. Wenn Sie also Anwendungen erstellen möchten, die riesige Datensätze verarbeiten und blitzschnelle Suchergebnisse liefern können, ist Milvus definitiv einen Blick wert.
Wenn Ihnen dieser Blogbeitrag gefällt, ziehen Sie bitte in Betracht, uns einen Stern auf GitHub zu geben. Sie sind außerdem herzlich eingeladen, Ihre Erfahrungen mit der Milvus-Community zu teilen, indem Sie unserem Discord beitreten.
Weitere Ressourcen
- Was ist Retrieval Augmented Generation (RAG)?
- RAG mit Milvus, vLLM und Metas Llama 3.1 erstellen
- Generative-AI-Ressourcen-Hub | Zilliz
- Top-Performing-AI-Modelle für Ihre GenAI-Apps | Zilliz
- Das richtige Embedding-Modell für Ihre Daten auswählen
- Die Landschaft des GenAI-Ökosystems: Jenseits von LLMs und Vektordatenbanken
Weiterlesen

How to Improve Retrieval Quality for Japanese Text with Sudachi, Milvus/Zilliz, and AWS Bedrock
Learn how Sudachi normalization and Milvus/Zilliz hybrid search improve Japanese RAG accuracy with BM25 + vector fusion, AWS Bedrock embeddings, and practical code examples.

How to Build RAG with Milvus, QwQ-32B and Ollama
Hands-on tutorial on how to create a streamlined, powerful RAG pipeline that balances efficiency, accuracy, and scalability using the QwQ-32B and Milvus.

Vector Databases vs. Object-Relational Databases
Use a vector database for AI-powered similarity search; use an object-relational database for complex data modeling with both relational integrity and object-oriented features.



