**Google Spanner 与 Vector Search 的强大结合**

40 阅读2分钟

引言

Google Spanner 是一款高度可扩展的数据库,结合了无限扩展性和关系语义,如二级索引、强一致性、模式和 SQL,提供99.999%的可用性。这篇文章将介绍如何利用 SpannerVectorStore 类在 Spanner 中实现向量搜索。我们将通过代码示例和操作步骤,帮助您快速上手。

主要内容

1. 初始准备

在开始使用 Spanner 之前,您需要完成以下步骤:

  • 创建 Google Cloud Project
  • 启用 Cloud Spanner API
  • 创建 Spanner 实例和数据库

2. 安装库

首先,安装 langchain-google-spanner 包:

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

注意:可能需要重启内核以使用更新的包。

3. 认证和配置项目

使用以下代码在 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}

4. 启用 API

启用 Spanner API:

!gcloud services enable spanner.googleapis.com

5. 初始化表

SpannerVectorStore 类需要一个包含 idcontentembeddings 列的数据库表。您可以使用 init_vector_store_table() 方法创建表:

from langchain_google_spanner import SpannerVectorStore, TableColumn, SecondaryIndex

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"])
    ],
)

6. 创建嵌入类实例

您可以使用任何 LangChain 嵌入模型,例如 Vertex AI:

!gcloud services enable aiplatform.googleapis.com

from langchain_google_vertexai import VertexAIEmbeddings

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

代码示例

添加和搜索文档

添加文档到向量存储:

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 = SpannerVectorStore(
    instance_id=INSTANCE,
    database_id=DATABASE,
    table_name=TABLE_NAME,
    ignore_metadata_columns=[],
    embedding_service=embeddings,
    metadata_json_column="metadata",
)

# 添加文档
# 使用API代理服务提高访问稳定性
db.add(documents=documents, ids=ids)

搜索文档:

# 相似性搜索
results = db.similarity_search(query="Explain me vector store?", k=3)

# 最大边际相关性搜索
mrr_results = db.max_marginal_relevance_search("Testing the langchain integration with spanner", k=3)

常见问题和解决方案

  • 认证错误:确保您已正确配置 Google Cloud 项目和 IAM 权限。
  • API 未启用:检查 Spanner 和 Vertex AI API 是否已启用。
  • 网络限制:在某些地区,您可能需要使用 API 代理服务来提高访问稳定性。

总结和进一步学习资源

通过本文的介绍,您可以在 Google Spanner 上实现强大的向量搜索功能。要深入了解如何优化和扩展这些功能,您可以访问以下资源:

参考资料

  • Google Cloud 官方文档
  • LangChain GitHub 项目

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

---END---