使用 VectorETL 有效率地將資料載入 Milvus
在本教程中,我們將探討如何使用VectorETL(一個專為向量資料庫設計的輕量級 ETL 框架)將資料有效地載入 Milvus。VectorETL 簡化了從各種來源擷取資料的流程,使用 AI 模型將資料轉換成向量嵌入,並儲存在 Milvus 中,以進行快速且可擴充的擷取。本教學結束時,您將擁有一個可運作的 ETL 管道,讓您輕鬆整合和管理向量搜尋系統。讓我們深入瞭解!
準備工作
依賴與環境
$ pip install --upgrade vector-etl pymilvus
如果您使用的是 Google Colab,為了啟用剛安裝的依賴,您可能需要重新啟動運行時(點選畫面上方的「Runtime」功能表,從下拉式功能表中選擇「Restart session」)。
VectorETL 支援多種資料來源,包括 Amazon S3、Google Cloud Storage、Local File 等。您可以在這裡查看完整的支援來源清單。在本教程中,我們將以 Amazon S3 為資料來源範例。
我們將從 Amazon S3 載入文件。因此,您需要準備AWS_ACCESS_KEY_ID 和AWS_SECRET_ACCESS_KEY 作為環境變數,以安全存取您的 S3 資料桶。此外,我們會使用 OpenAI 的text-embedding-ada-002 embedding model 來產生資料的 embeddings。您也應該準備api key OPENAI_API_KEY 作為環境變數。
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"
工作流程
定義資料來源 (Amazon S3)
在這個案例中,我們要從 Amazon S3 的資料桶中抽取文件。VectorETL 允許我們指定儲存桶名稱、檔案路徑,以及我們正在處理的資料類型。
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"],
}
設定嵌入模型 (OpenAI)
設定好資料來源後,我們需要定義嵌入模型,將文字資料轉換成向量嵌入。在此範例中,我們使用 OpenAI 的text-embedding-ada-002 。
embedding = {
"embedding_model": "OpenAI",
"api_key": os.environ["OPENAI_API_KEY"],
"model_name": "text-embedding-ada-002",
}
設定 Milvus 為目標資料庫
我們需要在 Milvus 中儲存生成的嵌入模型。在此,我們使用 Milvus Lite 定義 Milvus 連線參數。
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
}
對於host 和api_key :
將
host設定為本機檔案,例如./milvus.db,並將api_key留空是最方便的方法,因為它會自動利用Milvus Lite將所有資料存入這個檔案。如果您有大規模的資料,您可以在docker 或 kubernetes 上架設效能更高的 Milvus 伺服器。在此設定中,請使用伺服器的 uri,例如
http://localhost:19530,作為您的host,並將api_key留空。如果您要使用Zilliz Cloud(Milvus 的完全管理雲端服務),請調整
host和api_key,它們對應於 Zilliz Cloud 的Public Endpoint 和 Api key。
指定要嵌入的欄位
現在,我們需要指定 CSV 檔案中哪些欄位應該轉換為嵌入內容。這可確保只處理相關的文字欄位,優化效率與儲存。
embed_columns = ["col_1", "col_2", "col_3"]
建立並執行 VectorETL Pipeline
所有配置都就緒後,我們現在初始化 ETL 管道、設定資料流並執行它。
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()
按照這個教學,我們成功地建立了一個端對端的 ETL 管道,使用 VectorETL 將文件從 Amazon S3 移到 Milvus。VectorETL 在資料來源方面非常靈活,您可以根據您特定的應用程式需求,選擇任何您喜歡的資料來源。透過 VectorETL 的模組化設計,您可以輕鬆擴充此管道,以支援其他資料來源、嵌入模型,使其成為 AI 和資料工程工作流程的強大工具!