Optimierung von Multi-Agenten-Systemen mit Mistral Large, Mistral Nemo und Llama-agents
Agentische Systeme sind auf dem Vormarsch und helfen Entwicklern, intelligente, autonome Systeme zu erstellen. Große Sprachmodelle (LLMs) werden immer besser darin, vielfältige Anweisungen zu befolgen, was sie ideal für die Verwaltung dieser Agenten macht. Dieser Fortschritt eröffnet zahlreiche Möglichkeiten, komplexe Aufgaben mit minimalem menschlichem Eingreifen in so vielen Bereichen zu bewältigen. Beispielsweise können agentische Systeme dem Kundenservice zugutekommen, wo sie Kundenanfragen bearbeiten, Probleme lösen und sogar Produkte basierend auf Kundenpräferenzen upsellen können.
Dieser Beitrag bietet einen umfassenden Leitfaden zum Aufbau intelligenter Agenten mit llama-agents, kombiniert mit der Leistungsfähigkeit von Mistral LLMs und Milvus. Wir werden lernen, wie man Mistral Nemo für kosteneffiziente Aufgabenausführung, Mistral Large für anspruchsvolle Orchestrierung und Milvus für effiziente Speicherung und Abfrage von Vektordaten nutzt. Wir werden praktische Beispiele erkunden, darunter die Analyse von Finanzdokumenten und die Implementierung von Metadatenfilterung, um ein hochskalierbares und dynamisches Agentensystem zu erstellen. Folgen Sie den detaillierten Codebeispielen und Schritt-für-Schritt-Anleitungen, um Ihre eigenen leistungsstarken Agenten zu bauen.
Mitmachen
Ich habe dieses Tutorial in einem Webinar durchgearbeitet, dem Sie unten Schritt für Schritt folgen können.
Einführung in Llama-agents, Ollama & Mistral Nemo und Milvus Lite
Llama-agents ist eine Erweiterung von LlamaIndex zum Aufbau robuster und zustandsbehafteter Multi-Akteur-Anwendungen mit LLMs.
Ollama & Mistral Nemo – Ollama ist ein KI-Tool, mit dem Nutzer große Sprachmodelle wie Mistral Nemo lokal auf ihren Rechnern ausführen können. Dadurch können Sie mit diesen Modellen nach Ihren eigenen Bedingungen arbeiten, ohne ständige Internetverbindung oder Abhängigkeit von externen Servern zu benötigen.
Milvus Lite ist eine lokale und leichtgewichtige Version von Milvus, die auf Ihrem Laptop, Jupyter Notebook oder Google Colab laufen kann. Sie ermöglicht es Ihnen, Ihre unstrukturierten Daten effizient zu speichern und abzurufen.
Wie Llama-agents funktionieren
Llama-agents, entwickelt von LlamaIndex, ist ein Async-first-Framework zum Erstellen, Iterieren und Produktionsreifmachen von Multi-Agenten-Systemen, einschließlich Multi-Agenten-Kommunikation, verteilter Tool-Ausführung, Human-in-the-Loop und mehr!
In Llama-agents wird jeder Agent als Dienst betrachtet, der eingehende Aufgaben endlos verarbeitet. Jeder Agent zieht Nachrichten aus einer Message Queue und veröffentlicht Nachrichten darin.
Abbildung- Wie Llama-agents funktionieren.png
Abbildung: Wie Llama-agents funktionieren
Abhängigkeiten installieren
Installieren wir zunächst alle notwendigen Abhängigkeiten.
! pip install llama-agents pymilvus python-dotenv
! pip install llama-index-vector-stores-milvus llama-index-readers-file llama-index-embeddings-huggingface llama-index-llms-ollama llama-index-llms-mistralai
# This is needed when running the code in a Notebook
import nest_asyncio
nest_asyncio.apply()
from dotenv import load_dotenv
import os
load_dotenv()
Daten in Milvus laden
Wir werden einige Beispieldaten von llama-index herunterladen, die PDFs über Uber und Lyft enthalten. Wir werden diese Daten im gesamten Tutorial verwenden.
!mkdir -p 'data/10k/'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/uber_2021.pdf' -O 'data/10k/uber_2021.pdf'
!wget 'https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/10k/lyft_2021.pdf' -O 'data/10k/lyft_2021.pdf'
Nachdem wir die Daten nun auf unserem Rechner haben, können wir den Inhalt extrahieren und in der Milvus-Vektordatenbank speichern. Für das Embedding-Modell verwenden wir bge-small-en-v1.5, ein kompaktes Text-Embedding-Modell mit geringem Ressourcenverbrauch.
Als Nächstes erstellen wir eine Collection in Milvus, um unsere Daten zu speichern und abzurufen. Wir verwenden Milvus Lite, die leichtgewichtige Version von Milvus, einer leistungsstarken Vektordatenbank, die KI-Anwendungen mit Vektorähnlichkeitssuche unterstützt. Sie können Milvus Lite mit einem einfachen pip install pymilvus installieren.
Unsere PDFs werden in Vektoren umgewandelt, und wir werden sie in Milvus speichern.
from llama_index.vector_stores.milvus import MilvusVectorStore
from llama_index.core import Settings
from llama_index.embeddings.huggingface import HuggingFaceEmbedding
from llama_index.core import SimpleDirectoryReader, VectorStoreIndex, StorageContext, load_index_from_storage
from llama_index.core.tools import QueryEngineTool, ToolMetadata
# Define the default Embedding model used in this Notebook.
# bge-small-en-v1.5 is a small Embedding model, it's perfect to use locally
Settings.embed_model = HuggingFaceEmbedding(
model_name="BAAI/bge-small-en-v1.5"
)
input_files=["./data/10k/lyft_2021.pdf", "./data/10k/uber_2021.pdf"]
# Create a single Milvus vector store
vector_store = MilvusVectorStore(
uri="./milvus_demo_metadata.db",
collection_name="companies_docs"
dim=384,
overwrite=False,
)
# Create a storage context with the Milvus vector store
storage_context = StorageContext.from_defaults(vector_store=vector_store)
# Load data
docs = SimpleDirectoryReader(input_files=input_files).load_data()
# Build index
index = VectorStoreIndex.from_documents(docs, storage_context=storage_context)
# Define the query engine
company_engine = index.as_query_engine(similarity_top_k=3)
Verschiedene Tools definieren
Wir werden zwei Tools definieren, die spezifisch für unsere Daten sind. Das erste liefert Informationen über Lyft und das zweite über Uber. Wir werden später sehen, wie wir ein allgemeineres Tool erstellen können.
# Define the different tools that can be used by our Agent.
query_engine_tools = [
QueryEngineTool(
query_engine=company_engine,
metadata=ToolMetadata(
name="lyft_10k",
description=(
"Provides information about Lyft financials for year 2021. "
"Use a detailed plain text question as input to the tool."
),
),
),
QueryEngineTool(
query_engine=company_engine,
metadata=ToolMetadata(
name="uber_10k",
description=(
"Provides information about Uber financials for year 2021. "
"Use a detailed plain text question as input to the tool."
),
),
),
]
Den Agent mit Mistral Nemo einrichten 🐠
Um unseren Ressourcenverbrauch zu begrenzen und potenziell die Kosten unserer Anwendung zu senken, verwenden wir Mistral Nemo mit Ollama. Diese Kombination ermöglicht es uns, das Modell lokal auszuführen. Mistral Nemo ist ein kleines LLM, das ein großes Kontextfenster von bis zu 128k Tokens bietet, was bei der Arbeit mit großen Dokumenten sehr nützlich ist. Es wurde außerdem feinabgestimmt, um präzisen Anweisungen beim Schlussfolgern zu folgen, Mehrfachdialoge zu handhaben und Code zu generieren.
Richten wir nun den Agent mit Mistral Nemo ein.
from llama_index.llms.ollama import Ollama
from llama_index.core.agent import AgentRunner, ReActAgentWorker, ReActAgent
# Set up the agent
llm = Ollama(model="mistral-nemo", temperature=0.4)
agent = ReActAgent.from_tools(query_engine_tools, llm=llm, verbose=True)
# Example usage
response = agent.chat("Compare the revenue of Lyft and Uber in 2021.")
print(response)
Dieses LLM sollte eine Antwort ähnlich der folgenden erzeugen:
> Running step 7ed275f6-b0de-4fd7-b2f2-fd551e58bfe2. Step input: Compare the revenue of Lyft and Uber in 2021.
Thought: The current language of the user is: English. I need to use tools to help me answer the question.
Action: lyft_10k
Action Input: {'input': "What was Lyft's total revenue in 2021?"}
huggingface/tokenizers: The current process just got forked, after parallelism has already been used. Disabling parallelism to avoid deadlocks...
To disable this warning, you can either:
- Avoid using `tokenizers` before the fork if possible
- Explicitly set the environment variable TOKENIZERS_PARALLELISM=(true | false)
Observation: The total revenue for Lyft in 2021 was generated primarily from its ridesharing marketplace connecting drivers and riders, with revenue recognized from fees paid by drivers for using the Lyft Platform offerings in accordance with ASC 606.
> Running step 33064fd3-3c3a-42c4-ab5a-e7ebf8a9325b. Step input: None
Thought: I need to compare the revenue of Lyft and Uber in 2021.
Action: uber_10k
Action Input: {'input': "What was Uber's total revenue in 2021?"}
Observation: $17,455
> Running step 7eacfef4-d9da-4cbf-ac07-18f2ff6a3951. Step input: None
Thought: I have obtained Uber's total revenue for 2021. Now, I need to compare it with Lyft's.
Action: lyft_10k
Action Input: {'input': "What was Lyft's total revenue in 2021?"}
Observation: The total revenue for Lyft in 2021 was generated primarily from their ridesharing marketplace connecting drivers and riders. The revenue was recognized from fees paid by drivers for using the Lyft Platform offerings in accordance with ASC 606.
> Running step 88673e15-b74c-4755-8b9c-2b7ef3acea48. Step input: None
Thought: I have obtained both Uber's and Lyft's total revenues for 2021. Now, I need to compare them.
Action: Compare
Action Input: {'Uber': '$17,455', 'Lyft': '$3.6 billion'}
Observation: Error: No such tool named `Compare`.
> Running step bed5941f-74ba-41fb-8905-88525e67b785. Step input: None
Thought: I need to compare the revenues manually since there isn't a 'Compare' tool.
Answer: In 2021, Uber's total revenue was $17.5 billion, while Lyft's total revenue was $3.6 billion. This means that Uber generated approximately four times more revenue than Lyft in the same year.
Response without metadata filtering:
In 2021, Uber's total revenue was $17.5 billion, while Lyft's total revenue was $3.6 billion. This means that Uber generated approximately four times more revenue than Lyft in the same year.
Verwendung von Metadatenfilterung mit Milvus
Auch wenn ein Agent mit einem Tool, das für jede unterschiedliche Art von Dokument definiert ist, praktisch ist, skaliert dies nicht gut, wenn Sie viele Unternehmen verarbeiten müssen. Eine bessere Lösung ist die Verwendung von Metadatenfilterung, die Milvus mit unserem Agent anbietet. Auf diese Weise können wir Daten verschiedener Unternehmen in einer Sammlung speichern, aber nur die relevanten Teile abrufen, wodurch Zeit und Ressourcen gespart werden."
Der folgende Codeausschnitt zeigt, wie wir die Metafilterungsfunktionalität nutzen können.
from llama_index.core.vector_stores import ExactMatchFilter, MetadataFilters
# Example usage with metadata filtering
filters = MetadataFilters(
filters=[ExactMatchFilter(key="file_name", value="lyft_2021.pdf")]
)
filtered_query_engine = index.as_query_engine(filters=filters)
# Define query engine tools with the filtered query engine
query_engine_tools = [
QueryEngineTool(
query_engine=filtered_query_engine,
metadata=ToolMetadata(
name="company_docs",
description=(
"Provides information about various companies' financials for year 2021. "
"Use a detailed plain text question as input to the tool."
),
),
),
]
# Set up the agent with the updated query engine tools
agent = ReActAgent.from_tools(query_engine_tools, llm=llm, verbose=True)
Unser Retriever filtert nun nach Daten, die ausschließlich aus dem Dokument lyft_2021.pdf stammen, und wir sollten keine Informationen über Uber haben.
try:
response = agent.chat("What is the revenue of uber in 2021?")
print("Response with metadata filtering:")
print(response)
except ValueError as err:
print("we couldn't find the data, reached max iterations")
Machen wir nun einen Test. Als nach Ubers Umsatz im Jahr 2021 gefragt wurde, hat der Agent null Ergebnisse abgerufen.
Thought: The user wants to know Uber's revenue for 2021.
Action: company_docs
Action Input: {'input': 'Uber Revenue 2021'}
Observation: I'm sorry, but based on the provided context information, there is no mention of Uber's revenue for the year 2021. The information primarily focuses on Lyft's revenue per active rider and critical accounting policies and estimates related to their financial statements.
> Running step c0014d6a-e6e9-46b6-af61-5a77ca857712. Step input: None
Der Agent kann die Daten finden, wenn nach Lyfts Umsatz im Jahr 2021 gefragt wird.
try:
response = agent.chat("What is the revenue of Lyft in 2021?")
print("Response with metadata filtering:")
print(response)
except ValueError as err:
print("we couldn't find the data, reached max iterations")
Das zurückgegebene Ergebnis ist:
> Ausführung von Schritt 7f1eebe3-2ebd-47ff-b560-09d09cdd99bd. Schritteingabe: Wie hoch ist der Umsatz von Lyft im Jahr 2021?
Gedanke: Die aktuelle Sprache des Benutzers ist: Englisch. Ich muss ein Tool verwenden, um die Frage zu beantworten.
Aktion: company_docs
Aktionseingabe: {'input': 'Lyft revenue 2021'}
Beobachtung: Der Umsatz von Lyft im Jahr 2021 wurde hauptsächlich über seinen Ridesharing-Marktplatz generiert, der Fahrer und Fahrgäste verbindet. Der Umsatz wurde aus Gebühren erfasst, die von Fahrern für die Nutzung der Angebote der Lyft-Plattform gemäß ASC 606 gezahlt wurden. Darüber hinaus erreichte der Umsatz pro aktivem Fahrgast im vierten Quartal 2021 ein Allzeithoch, bedingt durch eine höhere Fahrhäufigkeit, eine Verlagerung hin zu Fahrten mit höherem Umsatz sowie Umsätze aus Lizenz- und Datenzugriffsvereinbarungen.
> Ausführung von Schritt 072a3253-7eee-44e3-a787-397c9cbe80d8. Schritteingabe: Keine
Gedanke: Die aktuelle Sprache des Benutzers ist Englisch. Ich muss ein Tool verwenden, um die Frage zu beantworten.
Aktion: company_docs
Aktionseingabe: {'input': 'Lyft revenue 2021'}
Beobachtung: Der Umsatz von Lyft im Jahr 2021 wurde durch eine höhere Fahrhäufigkeit, eine Verlagerung hin zu Fahrten mit höherem Umsatz wie Flughafenfahrten sowie Umsätze aus Lizenz- und Datenzugriffsvereinbarungen angetrieben. Dies führte dazu, dass der Umsatz pro aktivem Fahrgast im vierten Quartal 2021 im Vergleich zum vorherigen Quartal ein Allzeithoch erreichte.
> Ausführung von Schritt 6494fe6d-27ad-484f-9204-0c4683bfa1c2. Schritteingabe: Keine
Gedanke: Der Benutzer fragt nach dem Umsatz von Lyft im Jahr 2021.
Aktion: company_docs
Aktionseingabe: {'input': 'Lyft revenue 2021'}
Beobachtung: Der Umsatz von Lyft im Jahr 2021 wurde hauptsächlich über seinen Ridesharing-Marktplatz generiert, der Fahrer und Fahrgäste verbindet. Der Umsatz pro aktivem Fahrgast erreichte im vierten Quartal 2021 ein Rekordhoch, bedingt durch eine höhere Fahrhäufigkeit und eine Verlagerung hin zu Fahrten mit höherem Umsatz, wie etwa Flughafenfahrten. Darüber hinaus wurde der Umsatz ab dem zweiten Quartal 2021 durch Lizenz- und Datenzugriffsvereinbarungen gesteigert.
> Ausführung von Schritt 0076b6dd-e7d0-45ac-a39a-4afa5f1aaf47. Schritteingabe: Keine
Antwort: Beobachtung: Der Gesamtumsatz von Lyft im Jahr 2021 betrug 3,4 Milliarden US-Dollar.
Antwort mit Metadatenfilterung:
Beobachtung: Der Gesamtumsatz von Lyft im Jahr 2021 betrug 3,4 Milliarden US-Dollar.
Verwendung eines LLM zur automatischen Erstellung von Metadatenfiltern
Verwenden wir nun ein LLM, um Metadatenfilter automatisch auf Grundlage der Anfrage des Benutzers zu erstellen. Dieser Schritt ermöglicht uns einen dynamischeren Agenten.
from llama_index.core.prompts.base import PromptTemplate
# Function to create a filtered query engine
def create_query_engine(question):
# Extract metadata filters from question using a language model
prompt_template = PromptTemplate(
"Given the following question, extract relevant metadata filters.\n"
"Consider company names, years, and any other relevant attributes.\n"
"Don't write any other text, just the MetadataFilters object"
"Format it by creating a MetadataFilters like shown in the following\n"
"MetadataFilters(filters=[ExactMatchFilter(key='file_name', value='lyft_2021.pdf')])\n"
"If no specific filters are mentioned, returns an empty MetadataFilters()\n"
"Question: {question}\n"
"Metadata Filters:\n"
)
prompt = prompt_template.format(question=question)
llm = Ollama(model="mistral-nemo")
response = llm.complete(prompt)
metadata_filters_str = response.text.strip()
if metadata_filters_str:
metadata_filters = eval(metadata_filters_str)
return index.as_query_engine(filters=metadata_filters)
return index.as_query_engine()
Wir können diese Funktion dann mit unserem Agenten kombinieren.
# Example usage with metadata filtering
question = "What is Uber revenue? This should be in the file_name: uber_2021.pdf"
filtered_query_engine = create_query_engine(question)
Define query engine tools with the filtered query engine
query_engine_tools = [ QueryEngineTool( query_engine=filtered_query_engine, metadata=ToolMetadata( name="company_docs_filtering", description=( "Provides information about various companies' financials for year 2021. " "Use a detailed plain text question as input to the tool." ), ), ), ]
Set up the agent with the updated query engine tools
agent = ReActAgent.from_tools(query_engine_tools, llm=llm, verbose=True)
response = agent.chat(question) print("Response with metadata filtering:") print(response)
Nun hat der Agent `Metadatafilters` mit dem Schlüssel `file_name` und dem Wert `uber_2021.pdf` erstellt. Mit fortgeschrittenerem Prompting wäre es außerdem möglich, erweiterte Filter zu generieren.
MetadataFilters(filters=[ExactMatchFilter(key='file_name', value='uber_2021.pdf')]) <class 'str'> eval: filters=[MetadataFilter(key='file_name', value='uber_2021.pdf', operator=<FilterOperator.EQ: '=='>)] condition=<FilterCondition.AND: 'and'>
Running step a2cfc7a2-95b1-4141-bc52-36d9817ee86d. Step input: What is Uber revenue? This should be in the file_name: uber_2021.pdf Thought: The current language of the user is English. I need to use a tool to help me answer the question. Action: company_docs Action Input: {'input': 'Uber revenue 2021'} Observation: $17,455 million
## Alles mit Mistral Large orchestrieren
Mistral Large ist ein leistungsfähigeres Modell als Mistral Nemo, aber es ist auch deutlich größer und ressourcenintensiver. Indem wir es ausschließlich als Orchestrator verwenden, können wir Ressourcen sparen und dennoch von intelligenten Agenten profitieren.
### Warum Mistral Large als Orchestrator verwenden?
Mistral Large ist Mistrals Flaggschiffmodell mit sehr guten Fähigkeiten in den Bereichen Schlussfolgern, Wissen und Programmieren. Es ist ideal für komplexe Aufgaben, die umfangreiche Schlussfolgerungsfähigkeiten erfordern oder hochspezialisiert sind. Es verfügt über fortgeschrittene Function-Calling-Fähigkeiten, genau das, was wir benötigen, um unsere verschiedenen Agenten zu orchestrieren.
Die Orchestrierung mit Mistral Large ermöglicht es Ihnen, Verantwortlichkeiten innerhalb Ihres Agenten-Frameworks zu trennen. Anstatt das System für jede Aufgabe mit einem schweren Modell zu belasten, kann Mistral Large für Entscheidungen auf hoher Ebene reserviert werden und andere Agenten anleiten, die besser für spezifische, kleinere Aufgaben geeignet sind. Dieser Ansatz optimiert nicht nur die Leistung, sondern reduziert auch die Betriebskosten, wodurch das System skalierbarer und effizienter wird.
In diesem Setup fungiert Mistral Large als zentraler Orchestrator und koordiniert die Aktivitäten mehrerer Agenten, die von Llama-agents verwaltet werden. Hier ist ein Überblick:
- **Aufgabendelegation**: Wenn eine komplexe Anfrage eingeht, bestimmt Mistral Large die am besten geeigneten Agenten und Tools, um jeden Teil der Anfrage zu bearbeiten.
- **Agentenkoordination**: Llama-agents verwalten die Ausführung dieser Aufgaben und stellen sicher, dass jeder Agent die erforderlichen Eingaben erhält und dass seine Ausgaben korrekt verarbeitet und integriert werden.
- **Ergebnissynthese**: Mistral Large stellt anschließend die Ausgaben verschiedener Agenten zu einer kohärenten und umfassenden Antwort zusammen und stellt sicher, dass die endgültige Ausgabe mehr ist als die Summe ihrer Teile.
### Llama Agents
Lassen Sie uns nun Mistral Large verwenden, um alles zu orchestrieren, und den Agenten nutzen, um die Antwort für uns zu generieren.
from llama_agents import ( AgentService, ToolService, LocalLauncher, MetaServiceTool, ControlPlaneServer, SimpleMessageQueue, AgentOrchestrator, )
from llama_index.core.agent import FunctionCallingAgentWorker from llama_index.llms.mistralai import MistralAI
create our multi-agent framework components
message_queue = SimpleMessageQueue() control_plane = ControlPlaneServer( message_queue=message_queue, orchestrator=AgentOrchestrator(llm=MistralAI('mistral-large-latest')), )
define Tool Service
tool_service = ToolService( message_queue=message_queue, tools=query_engine_tools, running=True, step_interval=0.5, )
define meta-tools here
meta_tools = [ await MetaServiceTool.from_tool_service( t.metadata.name, message_queue=message_queue, tool_service=tool_service, ) for t in query_engine_tools ]
define Agent and agent service
worker1 = FunctionCallingAgentWorker.from_tools( meta_tools, llm=MistralAI('mistral-large-latest') )
agent1 = worker1.as_agent() agent_server_1 = AgentService( agent=agent1, message_queue=message_queue, description="Used to answer questions over differnet companies for their Financial results", service_name="Companies_analyst_agent", )
import logging
change logging level to enable or disable more verbose logging
logging.getLogger("llama_agents").setLevel(logging.INFO)
Define Launcher
launcher = LocalLauncher( [agent_server_1, tool_service], control_plane, message_queue, )
query_str = "What are the risk factors for Uber?" print(launcher.launch_single(query_str))
Some key risk factors for Uber include fluctuations in the number of drivers and merchants due to dissatisfaction with the brand, pricing models, and safety incidents. Investing in autonomous vehicles may also lead to driver dissatisfaction, as it could reduce the need for human drivers. Additionally, driver dissatisfaction has previously led to protests, causing business interruptions.
## Fazit
In diesem Blogbeitrag haben wir untersucht, wie man mit dem Llama-agents-Framework, das von zwei unterschiedlichen großen Sprachmodellen unterstützt wird – Mistral Nemo und Mistral Large –, Agenten erstellt und verwendet. Wir haben gezeigt, wie sich intelligente, ressourceneffiziente Systeme effektiv orchestrieren lassen, indem man die Stärken verschiedener LLMs nutzt.
Wenn Ihnen dieser Blogbeitrag gefällt, ziehen Sie bitte in Betracht, uns einen Stern auf [GitHub](https://github.com/milvus-io/milvus) zu geben. Sie sind außerdem herzlich eingeladen, Ihre Erfahrungen mit der Milvus-Community zu teilen, indem Sie unserem [Discord](https://discord.gg/FG6hMJStWu) beitreten.
Weiterlesen

Will Amazon S3 Vectors Kill Vector Databases—or Save Them?
AWS S3 Vectors aims for 90% cost savings for vector storage. But will it kill vectordbs like Milvus? A deep dive into costs, limits, and the future of tiered storage.

Democratizing AI: Making Vector Search Powerful and Affordable
Zilliz democratizes AI vector search with Milvus 2.6 and Zilliz Cloud for powerful, affordable scalability, cutting costs in infrastructure, operations, and development.

Balancing Precision and Performance: How Zilliz Cloud's New Parameters Help You Optimize Vector Search
Optimize vector search with Zilliz Cloud’s level and recall features to tune accuracy, balance performance, and power AI applications.



