本教程介绍了如何使用 LangChain VectorStore 将数据从第三方向量数据库迁移到 AlloyDB for PostgreSQL。本教程假设第三方向量数据库中的数据是使用 LangChain VectorStore 集成创建的。如果您在不使用 LangChain 的情况下将信息放入以下某个数据库中,可能需要修改下面提供的脚本,以匹配您数据的架构。 支持以下向量数据库:
本教程假定您熟悉 Google Cloud、AlloyDB 和异步 Python 编程。
目标
本教程介绍了如何执行以下操作:
- 从现有向量数据库中提取数据。
- 连接到 AlloyDB。
- 初始化 AlloyDB 表。
- 初始化向量存储区对象。
- 运行迁移脚本以插入数据。
费用
在本文档中,您将使用 Google Cloud的以下收费组件:
You might be eligible for a free trial cluster. For more information, see AlloyDB free trial clusters overview.
您可使用价格计算器根据您的预计使用情况来估算费用。
完成本文档中描述的任务后,您可以通过删除所创建的资源来避免继续计费。如需了解详情,请参阅清理。
准备工作
确保您拥有以下任一 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 Instance Client (
roles/alloydb.client
) - Cloud AlloyDB Admin (
roles/alloydb.admin
) - Compute Network User (
roles/compute.networkUser
)
- AlloyDB Instance Client (
如果您想使用 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
Chroma
Qdrant
Milvus
从数据库中获取所有数据。
Pinecone
从 Pinecone 索引中检索向量 ID:
然后,按 ID 从 Pinecone 索引中提取记录:
Weaviate
Chroma
Qdrant
Milvus
初始化 AlloyDB 表
定义嵌入服务。
VectorStore 接口需要使用嵌入服务。此工作流不会生成新的嵌入,因此使用
FakeEmbeddings
类可避免产生任何费用。Pinecone
Weaviate
Chroma
Qdrant
Milvus
准备 AlloyDB 表。
使用公共 IP 连接到 AlloyDB。 如需了解详情,请参阅指定 IP 地址类型。
Pinecone
Weaviate
Chroma
Qdrant
Milvus
创建一个要向其中复制数据的表(如果尚不存在)。
Pinecone
Weaviate
Chroma
Qdrant
Milvus
初始化向量存储区对象
此代码以 JSON 格式向 langchain_metadata
列添加了额外的向量嵌入元数据。为了提高过滤效率,请将这些元数据整理到单独的列中。
如需了解详情,请参阅创建自定义向量存储区。
如需初始化向量存储区对象,请运行以下命令:
Pinecone
Weaviate
Chroma
Qdrant
Milvus
将数据插入到 AlloyDB 表中:
Pinecone
Weaviate
Chroma
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 密码。
Chroma
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 账号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。