跳到主要内容
Open In ColabOpen on GitHub

Google Vertex AI Feature Store

Google Cloud Vertex 特征存储 通过让您在 Google Cloud BigQuery 中以低延迟提供数据,简化了您的 ML 特征管理和在线服务流程,包括执行嵌入向量的近似最近邻检索的能力

本教程向您展示如何直接从 BigQuery 数据中轻松执行低延迟向量搜索和近似最近邻检索,从而以最少的设置实现强大的 ML 应用程序。我们将使用 VertexFSVectorStore 类来实现这一点。

此类是能够在 Google Cloud 中提供统一数据存储和灵活向量搜索的 2 个类集合的一部分

  • BigQuery 向量搜索:使用 BigQueryVectorStore 类,它非常适合快速原型设计,无需基础设施设置和批量检索。
  • 特征存储在线商店:使用 VertexFSVectorStore 类,可通过手动或计划的数据同步实现低延迟检索。非常适合生产就绪的面向用户的 GenAI 应用程序。

Diagram BQ-VertexFS

开始使用

安装库

%pip install --upgrade --quiet  langchain langchain-google-vertexai "langchain-google-community[featurestore]"

要在当前的 Jupyter 运行时中使用新安装的软件包,您必须重启运行时。您可以通过运行下面的单元格来完成此操作,这将重启当前内核。

import IPython

app = IPython.Application.instance()
app.kernel.do_shutdown(True)

开始之前

设置您的项目 ID

如果您不知道您的项目 ID,请尝试以下操作

  • 运行 gcloud config list
  • 运行 gcloud projects list
  • 请参阅支持页面:查找项目 ID
PROJECT_ID = ""  # @param {type:"string"}

# Set the project id
! gcloud config set project {PROJECT_ID}

设置区域

您还可以更改 BigQuery 使用的 REGION 变量。了解更多关于 BigQuery 区域的信息。

REGION = "us-central1"  # @param {type: "string"}

设置数据集和表名称

它们将是您的 BigQuery 向量存储。

DATASET = "my_langchain_dataset"  # @param {type: "string"}
TABLE = "doc_and_vectors" # @param {type: "string"}

验证您的笔记本环境

  • 如果您使用 Colab 运行此笔记本,请取消注释下面的单元格并继续。
  • 如果您使用 Vertex AI Workbench,请查看此处的设置说明 here
# from google.colab import auth as google_auth

# google_auth.authenticate_user()

演示:VertexFSVectorStore

创建嵌入类实例

您可能需要在您的项目中启用 Vertex AI API,方法是运行 gcloud services enable aiplatform.googleapis.com --project {PROJECT_ID} (将 {PROJECT_ID} 替换为您的项目名称)。

您可以使用任何 LangChain 嵌入模型

from langchain_google_vertexai import VertexAIEmbeddings

embedding = VertexAIEmbeddings(
model_name="textembedding-gecko@latest", project=PROJECT_ID
)
API 参考:VertexAIEmbeddings

初始化 VertexFSVectorStore

如果 BigQuery 数据集和表不存在,将自动创建它们。请参阅此处的类定义 here 以了解所有可选参数。

from langchain_google_community import VertexFSVectorStore

store = VertexFSVectorStore(
project_id=PROJECT_ID,
dataset_name=DATASET,
table_name=TABLE,
location=REGION,
embedding=embedding,
)
API 参考:VertexFSVectorStore

添加文本

注意:由于特征在线商店的创建,首次同步过程将耗时约 20 分钟。

all_texts = ["Apples and oranges", "Cars and airplanes", "Pineapple", "Train", "Banana"]
metadatas = [{"len": len(t)} for t in all_texts]

store.add_texts(all_texts, metadatas=metadatas)

您还可以通过执行 sync_data 方法按需启动同步。

store.sync_data()

在生产环境中,您还可以使用 cron_schedule 类参数来设置自动计划同步。例如

store = VertexFSVectorStore(cron_schedule="TZ=America/Los_Angeles 00 13 11 8 *", ...)

搜索文档

query = "I'd like a fruit."
docs = store.similarity_search(query)
print(docs)

按向量搜索文档

query_vector = embedding.embed_query(query)
docs = store.similarity_search_by_vector(query_vector, k=2)
print(docs)

使用元数据过滤器搜索文档

# This should only return "Banana" document.
docs = store.similarity_search_by_vector(query_vector, filter={"len": 6})
print(docs)

添加带有嵌入向量的文本

您还可以使用 add_texts_with_embeddings 方法带入您自己的嵌入向量。这对于多模态数据尤其有用,多模态数据可能需要在嵌入向量生成之前进行自定义预处理。

items = ["some text"]
embs = embedding.embed(items)

ids = store.add_texts_with_embeddings(
texts=["some text"], embs=embs, metadatas=[{"len": 1}]
)

使用 BigQuery 批量服务

您可以简单地使用 .to_bq_vector_store() 方法来获取 BigQueryVectorStore 对象,该对象为批量用例提供优化的性能。所有必需的参数将自动从现有类传输。请参阅 class definition 以了解您可以使用的所有参数。

使用 .to_vertex_fs_vector_store() 方法,同样可以轻松地返回到 BigQueryVectorStore。

store.to_bq_vector_store()  # pass optional VertexFSVectorStore parameters as arguments

此页对您有帮助吗?