本教程介绍了如何使用 LangChain VectorStore 将数据从第三方向量数据库迁移到 AlloyDB for PostgreSQL。本教程假定第三方矢量数据库中的数据是使用 LangChain VectorStore 集成创建的。如果您在不使用 LangChain 的情况下将信息放入以下某个数据库中,则可能需要修改下面提供的脚本,以使其与数据的架构相匹配。支持以下矢量数据库:
本教程假定您熟悉 Google Cloud、AlloyDB 和异步 Python 编程。
目标
本教程介绍了如何执行以下操作:
- 从现有矢量数据库中提取数据。
- 连接到 AlloyDB。
- 初始化 AlloyDB 表。
- 初始化矢量存储对象。
- 运行迁移脚本以插入数据。
费用
在本文档中,您将使用 Google Cloud 的以下收费组件:
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
确保您拥有以下 LangChain 第三方数据库向量存储之一:
启用结算功能和所需的 API
在 Google Cloud 控制台的“项目选择器”页面上,选择或创建一个Google Cloud 项目。
启用创建和连接到 AlloyDB for PostgreSQL 所需的 Cloud API。
- 在确认项目步骤中,点击下一步以确认要更改的项目的名称。
在启用 API 步骤中,点击启用以启用以下各项:
- AlloyDB API
- Compute Engine API
- Service Networking API
所需的角色
如需获得完成本教程中任务所需的权限,请拥有以下允许创建表和插入数据的 Identity and Access Management (IAM) 角色:
- Owner (
roles/owner
) 或 Editor (roles/editor
) 如果用户不是所有者或编辑者,则需要具有以下 IAM 角色和 PostgreSQL 权限:
- AlloyDB 实例客户端 (
roles/alloydb.client
) - Cloud AlloyDB Admin (
roles/alloydb.admin
) - Compute Network User (
roles/compute.networkUser
)
- AlloyDB 实例客户端 (
如果您想使用 IAM 身份验证(而不是本教程中的内置身份验证)对数据库进行身份验证,请使用该笔记本,其中介绍了如何使用 AlloyDB for PostgreSQL 通过 AlloyDBVectorStore
类存储矢量嵌入。
创建 AlloyDB 集群和用户
- 创建 AlloyDB 集群和实例。
- 启用公共 IP,即可随时随地运行本教程。如果您使用的是专用 IP,则必须在 VPC 中运行本教程。
- 创建或选择 AlloyDB 数据库用户。
- 创建实例时,系统会创建一个具有密码的
postgres
用户。此用户拥有超级用户权限。 - 本教程使用内置身份验证来减少任何身份验证摩擦。您可以使用 AlloyDBEngine 进行 IAM 身份验证。
- 创建实例时,系统会创建一个具有密码的
检索代码示例
通过克隆代码库从 GitHub 复制代码示例:
git clone https://github.com/googleapis/langchain-google-alloydb-pg-python.git
导航到
migrations
目录:cd langchain-google-alloydb-pg-python/samples/migrations
从现有矢量数据库中提取数据
创建客户端。
从数据库中获取所有数据。
从 Pinecone 索引检索矢量 ID:
然后,从 Pinecone 索引中按 ID 提取记录:
初始化 AlloyDB 表
定义嵌入服务。
VectorStore 接口需要嵌入服务。此工作流不会生成新的嵌入,因此使用
FakeEmbeddings
类可避免任何开销。准备 AlloyDB 表。
使用公共 IP 连接到 AlloyDB。 如需了解详情,请参阅指定 IP 地址类型。
创建要将数据复制到的表(如果不存在)。
初始化矢量存储对象
此代码会以 JSON 格式将其他矢量嵌入元数据添加到 langchain_metadata
列。为了提高过滤效率,请将这些元数据整理到单独的列中。如需了解详情,请参阅创建自定义矢量存储空间。
如需初始化矢量存储区对象,请运行以下命令:
将数据插入 AlloyDB 表中:
运行迁移脚本
安装示例依赖项:
pip install -r requirements.txt
运行示例迁移。
python migrate_pinecone_vectorstore_to_alloydb.py
在运行示例之前,请先进行以下替换:
PINECONE_API_KEY
:Pinecone API 密钥。PINECONE_NAMESPACE
:Pinecone 命名空间。PINECONE_INDEX_NAME
:Pinecone 索引的名称。PROJECT_ID
:项目 ID。REGION
:AlloyDB 集群的部署区域。CLUSTER
:集群的名称。INSTANCE
:实例的名称。DB_NAME
:数据库的名称。DB_USER
:数据库用户的名称。DB_PWD
:数据库 Secret 密码。
python migrate_weaviate_vectorstore_to_alloydb.py
在运行示例之前,请先进行以下替换:
WEAVIATE_API_KEY
:Weaviate API 密钥。WEAVIATE_CLUSTER_URL
:Weaviate 集群网址。WEAVIATE_COLLECTION_NAME
:Weaviate 集合名称。PROJECT_ID
:项目 ID。REGION
:AlloyDB 集群的部署区域。CLUSTER
:集群的名称。INSTANCE
:实例的名称。DB_NAME
:数据库的名称。DB_USER
:数据库用户的名称。DB_PWD
:数据库 Secret 密码。
python migrate_chromadb_vectorstore_to_alloydb.py
在运行示例之前,请先进行以下替换:
CHROMADB_PATH
:Chroma 数据库路径。CHROMADB_COLLECTION_NAME
:Chroma 数据库集合的名称。PROJECT_ID
:项目 ID。REGION
:AlloyDB 集群的部署区域。CLUSTER
:集群的名称。INSTANCE
:实例的名称。DB_NAME
:数据库的名称。DB_USER
:数据库用户的名称。DB_PWD
:数据库 Secret 密码。
python migrate_qdrant_vectorstore_to_alloydb.py
在运行示例之前,请先进行以下替换:
QDRANT_PATH
:Qdrant 数据库路径。QDRANT_COLLECTION_NAME
:Qdrant 集合名称。PROJECT_ID
:项目 ID。REGION
:AlloyDB 集群的部署区域。CLUSTER
:集群的名称。INSTANCE
:实例的名称。DB_NAME
:数据库的名称。DB_USER
:数据库用户的名称。DB_PWD
:数据库 Secret 密码。
python migrate_milvus_vectorstore_to_alloydb.py
在运行示例之前,请先进行以下替换:
MILVUS_URI
:Milvus URI。MILVUS_COLLECTION_NAME
:Milvus 集合的名称。PROJECT_ID
:项目 ID。REGION
:AlloyDB 集群的部署区域。CLUSTER
:集群的名称。INSTANCE
:实例的名称。DB_NAME
:数据库的名称。DB_USER
:数据库用户的名称。DB_PWD
:数据库 Secret 密码。
迁移成功后,系统会输出类似于以下内容的日志,且不会出现任何错误:
Migration completed, inserted all the batches of data to AlloyDB
打开 AlloyDB Studio 查看迁移的数据。如需了解详情,请参阅使用 AlloyDB Studio 管理数据。
清理
为避免因本教程中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。