Effizientes Laden von Daten in Milvus mit VectorETL
In diesem Tutorial erfahren Sie, wie Sie mit VectorETL, einem leichtgewichtigen ETL-Framework für Vektordatenbanken, effizient Daten in Milvus laden können. VectorETL vereinfacht den Prozess der Extraktion von Daten aus verschiedenen Quellen, die Umwandlung in Vektoreinbettungen mit Hilfe von KI-Modellen und die Speicherung in Milvus für einen schnellen und skalierbaren Abruf. Am Ende dieses Tutorials werden Sie über eine funktionierende ETL-Pipeline verfügen, mit der Sie Vektorsuchsysteme problemlos integrieren und verwalten können. Los geht's!
Vorbereitung
Abhängigkeiten und Umgebung
$ pip install --upgrade vector-etl pymilvus
Wenn Sie Google Colab verwenden, müssen Sie möglicherweise die Runtime neu starten, um die soeben installierten Abhängigkeiten zu aktivieren (klicken Sie auf das Menü "Runtime" am oberen Bildschirmrand und wählen Sie "Restart session" aus dem Dropdown-Menü).
VectorETL unterstützt mehrere Datenquellen, einschließlich Amazon S3, Google Cloud Storage, Local File, etc. Sie können die vollständige Liste der unterstützten Quellen hier einsehen. In diesem Tutorial konzentrieren wir uns auf Amazon S3 als Beispiel für eine Datenquelle.
Wir werden Dokumente aus Amazon S3 laden. Daher müssen Sie AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY als Umgebungsvariablen vorbereiten, um sicher auf Ihr S3-Bucket zugreifen zu können. Außerdem werden wir das text-embedding-ada-002 Einbettungsmodell von OpenAI verwenden, um Einbettungen für die Daten zu generieren. Sie sollten auch den Api-Schlüssel OPENAI_API_KEY als Umgebungsvariable vorbereiten.
import os
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
os.environ["AWS_ACCESS_KEY_ID"] = "your-aws-access-key-id"
os.environ["AWS_SECRET_ACCESS_KEY"] = "your-aws-secret-access-key"
Arbeitsablauf
Definieren der Datenquelle (Amazon S3)
In diesem Fall extrahieren wir Dokumente aus einem Amazon S3-Bucket. VectorETL ermöglicht es uns, den Bucket-Namen, den Pfad zu den Dateien und die Art der Daten, mit denen wir arbeiten, anzugeben.
source = {
"source_data_type": "Amazon S3",
"bucket_name": "my-bucket",
"key": "path/to/files/",
"file_type": ".csv",
"aws_access_key_id": os.environ["AWS_ACCESS_KEY_ID"],
"aws_secret_access_key": os.environ["AWS_SECRET_ACCESS_KEY"],
}
Konfigurieren des Einbettungsmodells (OpenAI)
Sobald wir unsere Datenquelle eingerichtet haben, müssen wir das Einbettungsmodell definieren, das unsere Textdaten in Vektoreinbettungen umwandeln wird. In diesem Beispiel verwenden wir OpenAIs text-embedding-ada-002.
embedding = {
"embedding_model": "OpenAI",
"api_key": os.environ["OPENAI_API_KEY"],
"model_name": "text-embedding-ada-002",
}
Einrichten von Milvus als Zieldatenbank
Wir müssen die generierten Einbettungen in Milvus speichern. Hier definieren wir unsere Milvus-Verbindungsparameter mit Milvus Lite.
target = {
"target_database": "Milvus",
"host": "./milvus.db", # os.environ["ZILLIZ_CLOUD_PUBLIC_ENDPOINT"] if using Zilliz Cloud
"api_key": "", # os.environ["ZILLIZ_CLOUD_TOKEN"] if using Zilliz Cloud
"collection_name": "my_collection",
"vector_dim": 1536, # 1536 for text-embedding-ada-002
}
Für die host und api_key:
Die
hostals lokale Datei zu definieren, z.B../milvus.db, undapi_keyleer zu lassen, 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, alshostund lassenapi_keyleer.Wenn Sie Zilliz Cloud, den vollständig verwalteten Cloud-Service für Milvus, verwenden möchten, passen Sie
hostundapi_keyan, die dem öffentlichen Endpunkt und dem Api-Schlüssel in Zilliz Cloud entsprechen.
Spalten für die Einbettung festlegen
Nun müssen wir angeben, welche Spalten aus unseren CSV-Dateien in Einbettungen umgewandelt werden sollen. Dadurch wird sichergestellt, dass nur die relevanten Textfelder verarbeitet werden, wodurch sowohl die Effizienz als auch die Speicherung optimiert werden.
embed_columns = ["col_1", "col_2", "col_3"]
Erstellen und Ausführen der VectorETL-Pipeline
Nachdem alle Konfigurationen vorgenommen wurden, können wir nun die ETL-Pipeline initialisieren, den Datenfluss einrichten und ausführen.
from vector_etl import create_flow
flow = create_flow()
flow.set_source(source)
flow.set_embedding(embedding)
flow.set_target(target)
flow.set_embed_columns(embed_columns)
# Execute the flow
flow.execute()
Mit Hilfe dieses Tutorials haben wir erfolgreich eine End-to-End-ETL-Pipeline erstellt, um Dokumente von Amazon S3 zu Milvus zu verschieben, indem wir VectorETL verwenden. VectorETL ist flexibel in Bezug auf Datenquellen, so dass Sie jede beliebige Datenquelle wählen können, die Sie für Ihre spezifischen Anwendungsanforderungen benötigen. Mit dem modularen Design von VectorETL können Sie diese Pipeline leicht erweitern, um andere Datenquellen zu unterstützen und Modelle einzubetten, was sie zu einem leistungsstarken Werkzeug für KI- und Data-Engineering-Workflows macht!