本教程介绍了如何使用 LangChain 矢量存储将数据从第三方矢量数据库迁移到 AlloyDB for PostgreSQL。支持以下矢量数据库:
本教程假定您熟悉 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) 角色:
- 所有者 (
roles/owner
) 或编辑者 (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
Weaviate
色度
Qdrant
Milvus
从数据库中获取所有数据。
Pinecone
从 Pinecone 索引检索矢量 ID:
然后,从 Pinecone 索引中按 ID 提取记录:
Weaviate
色度
Qdrant
Milvus
初始化 AlloyDB 表
定义嵌入服务。
VectorStore 接口需要嵌入服务。此工作流不会生成新的嵌入,因此使用
FakeEmbeddings
类可避免任何开销。Pinecone
Weaviate
色度
Qdrant
Milvus
准备 AlloyDB 表。
使用公共 IP 连接到 AlloyDB。 如需了解详情,请参阅指定 IP 地址类型。
Pinecone
Weaviate
色度
Qdrant
Milvus
创建要将数据复制到的表(如果不存在)。
Pinecone
Weaviate
色度
Qdrant
Milvus
初始化矢量存储对象
此代码会以 JSON 格式将其他矢量嵌入元数据添加到 langchain_metadata
列。为了提高过滤效率,请将这些元数据整理到单独的列中。如需了解详情,请参阅创建自定义矢量存储空间。
如需初始化矢量存储区对象,请运行以下命令:
Pinecone
Weaviate
色度
Qdrant
Milvus
将数据插入 AlloyDB 表中:
Pinecone
Weaviate
色度
Qdrant
Milvus
运行迁移脚本
安装示例依赖项:
pip install -r requirements.txt
运行示例迁移。
Pinecone
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 密码。
Weaviate
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 密码。
Qdrant
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 密码。
Milvus
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 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。