このチュートリアルでは、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 管理者(
roles/alloydb.admin
) - Compute ネットワーク ユーザー(
roles/compute.networkUser
)
- AlloyDB インスタンス クライアント(
このチュートリアルの組み込み認証ではなく、IAM 認証を使用してデータベースを認証する場合は、AlloyDB for PostgreSQL を使用して AlloyDBVectorStore
クラスでベクトル エンベディングを保存する方法を示すノートブックを使用します。
AlloyDB クラスタとユーザーを作成する
- AlloyDB クラスタとインスタンスを作成する。
- パブリック IP を有効にして、どこからでもこのチュートリアルを実行できるようにします。プライベート IP を使用している場合は、VPC 内からこのチュートリアルを実行する必要があります。
- AlloyDB データベース ユーザーを作成または選択します。
- インスタンスを作成すると、パスワード付きの
postgres
ユーザーが作成されます。このユーザーにはスーパーユーザー権限があります。 - このチュートリアルでは、組み込みの認証を使用して、認証の煩わしさを軽減します。IAM 認証は AlloyDBEngine を使用して行うことができます。
- インスタンスを作成すると、パスワード付きの
コードサンプルを取得する
リポジトリのクローンを作成して、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 Namespace。PINECONE_INDEX_NAME
: Pinecone インデックスの名前。PROJECT_ID
: プロジェクト ID。REGION
: AlloyDB クラスタがデプロイされているリージョン。CLUSTER
: クラスタの名前。INSTANCE
: インスタンスの名前。DB_NAME
: データベースの名前。DB_USER
: データベース ユーザーの名前。DB_PWD
: データベースのシークレットのパスワード。
Weaviate
python migrate_weaviate_vectorstore_to_alloydb.py
サンプルを実行する前に、次のように置き換えます。
WEAVIATE_API_KEY
: Weaviate API キー。WEAVIATE_CLUSTER_URL
: Weaviate クラスタの URL。WEAVIATE_COLLECTION_NAME
: Weaviate コレクション名。PROJECT_ID
: プロジェクト ID。REGION
: AlloyDB クラスタがデプロイされているリージョン。CLUSTER
: クラスタの名前。INSTANCE
: インスタンスの名前。DB_NAME
: データベースの名前。DB_USER
: データベース ユーザーの名前。DB_PWD
: データベースのシークレットのパスワード。
クロマ
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
: データベースのシークレットのパスワード。
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
: データベースのシークレットのパスワード。
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
: データベースのシークレットのパスワード。
移行が成功すると、エラーなしで次のようなログが出力されます。
Migration completed, inserted all the batches of data to AlloyDB
AlloyDB Studio を開いて、移行されたデータを表示します。詳細については、AlloyDB Studio を使用してデータを管理するをご覧ください。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。