Integration von Milvus mit Jina AI
Dieser Leitfaden zeigt, wie man Jina AI Einbettungen und Milvus verwendet, um Ähnlichkeitssuche und Retrievalaufgaben durchzuführen.
Wer ist Jina AI?
Jina AI wurde 2020 in Berlin gegründet und ist ein bahnbrechendes KI-Unternehmen, das sich darauf konzentriert, die Zukunft der künstlichen Intelligenz durch seine Suchgrundlage zu revolutionieren. Jina AI ist auf multimodale KI spezialisiert und hat sich zum Ziel gesetzt, Unternehmen und Entwickler in die Lage zu versetzen, die Leistungsfähigkeit multimodaler Daten zur Wertschöpfung und Kosteneinsparung zu nutzen, und zwar durch eine integrierte Suite von Komponenten, einschließlich Embeddings, Rerankers, Prompt Ops und Kerninfrastruktur. Die hochmodernen Embeddings von Jina AI zeichnen sich durch eine erstklassige Leistung aus und verfügen über ein Modell mit einer Länge von 8192 Token, das ideal für eine umfassende Datendarstellung ist. Durch die Unterstützung mehrerer Sprachen und die nahtlose Integration mit führenden Plattformen wie OpenAI erleichtern diese Einbettungen sprachübergreifende Anwendungen.
Die Einbettung von Milvus und Jina AI
Um diese Einbettungen effizient zu speichern und zu durchsuchen, ist eine spezielle, für diesen Zweck entwickelte Infrastruktur erforderlich. Milvus ist eine weithin bekannte, fortschrittliche Open-Source-Vektordatenbank, die in der Lage ist, große Vektordatenmengen zu verarbeiten. Milvus ermöglicht eine schnelle und genaue Vektorsuche (Einbettungen) nach zahlreichen Metriken. Seine Skalierbarkeit ermöglicht den nahtlosen Umgang mit riesigen Mengen an Bilddaten und gewährleistet hochleistungsfähige Suchvorgänge auch bei wachsenden Datensätzen.
Beispiele
Jina-Einbettungen wurden in die PyMilvus-Modellbibliothek integriert. Nun werden wir anhand von Codebeispielen zeigen, wie Jina-Einbettungen in der Praxis eingesetzt werden.
Bevor wir beginnen, müssen wir die Modellbibliothek für PyMilvus installieren.
$ pip install -U pymilvus
$ pip install "pymilvus[model]"
Wenn Sie Google Colab verwenden, müssen Sie möglicherweise die Runtime neu starten, um die gerade installierten Abhängigkeiten zu aktivieren. (Klicken Sie auf das Menü "Runtime" am oberen Rand des Bildschirms und wählen Sie "Restart session" aus dem Dropdown-Menü).
Allzweck-Einbettung
Das zentrale Einbettungsmodell von Jina AI zeichnet sich durch ein detailliertes Textverständnis aus und ist daher ideal für die semantische Suche, die Klassifizierung von Inhalten, die erweiterte Stimmungsanalyse, die Textzusammenfassung und personalisierte Empfehlungssysteme.
from pymilvus.model.dense import JinaEmbeddingFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
ef = JinaEmbeddingFunction(
"jina-embeddings-v3",
jina_api_key,
task="retrieval.passage",
dimensions=1024
)
query = "what is information retrieval?"
doc = "Information retrieval is the process of finding relevant information from a large collection of data or documents."
qvecs = ef.encode_queries([query]) # This method uses `retrieval.query` as the task
dvecs = ef.encode_documents([doc]) # This method uses `retrieval.passage` as the task
Zweisprachige Einbettungen
Die zweisprachigen Modelle von Jina AI verbessern mehrsprachige Plattformen, globalen Support und sprachübergreifende Inhaltssuche. Sie wurden für deutsch-englische und chinesisch-englische Übersetzungen entwickelt und fördern das Verständnis zwischen verschiedenen Sprachgruppen und vereinfachen die Interaktion zwischen den Sprachen.
from pymilvus.model.dense import JinaEmbeddingFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
ef = JinaEmbeddingFunction("jina-embeddings-v2-base-de", jina_api_key)
query = "what is information retrieval?"
doc = "Information Retrieval ist der Prozess, relevante Informationen aus einer großen Sammlung von Daten oder Dokumenten zu finden."
qvecs = ef.encode_queries([query])
dvecs = ef.encode_documents([doc])
Code-Einbettungen
Das Code-Embedding-Modell von Jina AI ermöglicht die Suche in Code und Dokumentation. Es unterstützt Englisch und 30 gängige Programmiersprachen, die zur Verbesserung der Code-Navigation, zur Optimierung der Code-Überprüfung und zur automatischen Dokumentationsunterstützung genutzt werden können.
from pymilvus.model.dense import JinaEmbeddingFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
ef = JinaEmbeddingFunction("jina-embeddings-v2-base-code", jina_api_key)
# Case1: Enhanced Code Navigation
# query: text description of the functionality
# document: relevant code snippet
query = "function to calculate average in Python."
doc = """
def calculate_average(numbers):
total = sum(numbers)
count = len(numbers)
return total / count
"""
# Case2: Streamlined Code Review
# query: text description of the programming concept
# document: relevante code snippet or PR
query = "pull quest related to Collection"
doc = "fix:[restful v2] parameters of create collection ..."
# Case3: Automatic Documentation Assistance
# query: code snippet you need explanation
# document: relevante document or DocsString
query = "What is Collection in Milvus"
doc = """
In Milvus, you store your vector embeddings in collections. All vector embeddings within a collection share the same dimensionality and distance metric for measuring similarity.
Milvus collections support dynamic fields (i.e., fields not pre-defined in the schema) and automatic incrementation of primary keys.
"""
qvecs = ef.encode_queries([query])
dvecs = ef.encode_documents([doc])
Semantische Suche mit Jina & Milvus
Mit der leistungsstarken Vektoreinbettungsfunktion können wir die durch die Verwendung von Jina AI-Modellen gewonnenen Einbettungen mit der Vektordatenbank Milvus Lite kombinieren, um eine semantische Suche durchzuführen.
from pymilvus.model.dense import JinaEmbeddingFunction
from pymilvus import MilvusClient
jina_api_key = "<YOUR_JINA_API_KEY>"
DIMENSION = 1024 # `jina-embeddings-v3` supports flexible embedding sizes (32, 64, 128, 256, 512, 768, 1024), allowing for truncating embeddings to fit your application.
ef = JinaEmbeddingFunction(
"jina-embeddings-v3",
jina_api_key,
task="retrieval.passage",
dimensions=DIMENSION,
)
doc = [
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.",
]
dvecs = ef.encode_documents(doc) # This method uses `retrieval.passage` as the task
data = [
{"id": i, "vector": dvecs[i], "text": doc[i], "subject": "history"}
for i in range(len(dvecs))
]
milvus_client = MilvusClient("./milvus_jina_demo.db")
COLLECTION_NAME = "demo_collection" # Milvus collection name
if milvus_client.has_collection(collection_name=COLLECTION_NAME):
milvus_client.drop_collection(collection_name=COLLECTION_NAME)
milvus_client.create_collection(collection_name=COLLECTION_NAME, dimension=DIMENSION)
res = milvus_client.insert(collection_name=COLLECTION_NAME, data=data)
print(res["insert_count"])
Was das Argument von MilvusClient
betrifft:
- Die Einstellung von
uri
als lokale Datei, z. B../milvus.db
, ist die bequemste Methode, da sie automatisch Milvus Lite nutzt, um alle Daten in dieser Datei zu speichern. - Wenn Sie große Datenmengen haben, können Sie einen leistungsfähigeren Milvus-Server auf Docker oder Kubernetes einrichten. Bei dieser Einrichtung verwenden Sie bitte die Server-Uri, z. B.
http://localhost:19530
, alsuri
. - Wenn Sie Zilliz Cloud, den vollständig verwalteten Cloud-Service für Milvus, nutzen möchten, passen Sie
uri
undtoken
an, die dem Public Endpoint und dem Api-Schlüssel in Zilliz Cloud entsprechen.
Mit allen Daten in der Milvus-Vektordatenbank können wir nun eine semantische Suche durchführen, indem wir eine Vektoreinbettung für die Anfrage erzeugen und eine Vektorsuche durchführen.
queries = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"
qvecs = ef.encode_queries([queries]) # This method uses `retrieval.query` as the task
res = milvus_client.search(
collection_name=COLLECTION_NAME, # target collection
data=[qvecs[0]], # query vectors
limit=3, # number of returned entities
output_fields=["text", "subject"], # specifies fields to be returned
)[0]
for result in res:
print(result)
{'id': 1, 'distance': 0.8802614808082581, 'entity': {'text': "The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.", 'subject': 'history'}}
Jina Reranker
Jina Ai bietet auch Reranker, um die Suchqualität nach der Suche mit Einbettungen weiter zu verbessern.
from pymilvus.model.reranker import JinaRerankFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
rf = JinaRerankFunction("jina-reranker-v1-base-en", jina_api_key)
query = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"
documents = [
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.",
]
rf(query, documents)
[RerankResult(text="The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.", score=0.9370958209037781, index=1),
RerankResult(text='The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.', score=0.35420963168144226, index=3),
RerankResult(text="In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.", score=0.3498658835887909, index=0),
RerankResult(text='In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.', score=0.2728956639766693, index=2)]