目標
- AlloyDB Omni に AlloyDB AI をインストールする。
- データベースに接続し、必要な拡張機能をインストールする。
productテーブルとproduct inventoryテーブルを作成します。productテーブルとproduct inventoryテーブルにデータを挿入し、基本的なベクトル検索を実行します。- products テーブルに ScaNN インデックスを作成する。
- ベクトル検索を実行する。
- フィルタと結合を使用して複雑なベクトル検索を実行する。
費用
このドキュメントでは、課金対象である次の Google Cloudコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを算出できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
前提条件
ベクトル検索を実行する前に、次の前提条件を満たす必要があります。
コンピューティング環境に基づいて AlloyDB Omni に AlloyDB AI をインストールする
使用しているコンピューティング環境に基づいて、AlloyDB Omni に AlloyDB AI をインストールするの手順に沿って AlloyDB Omni をインストールします。
psql を使用してデータベースに接続する
psql を使用してデータベースに接続します。
export DBPOD=`kubectl get pod --selector=alloydbomni.internal.dbadmin.goog/dbcluster=my-db-cluster,alloydbomni.internal.dbadmin.goog/task-type=database -o jsonpath='{.items[0].metadata.name}'`kubectl exec -ti $DBPOD -c database -- psql -h localhost -U postgres
必要な拡張機能をインストールする
次のクエリを実行して、vector、alloydb_scann、google_ml_integration の拡張機能をインストールします。
CREATE EXTENSION IF NOT EXISTS vector;
CREATE EXTENSION IF NOT EXISTS alloydb_scann;
CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
商品と商品在庫データを挿入して基本的なベクトル検索を実行する
このチュートリアルでは、product_inventory テーブルと product テーブルを使用して、複雑なベクトル検索クエリを実行します。
次のステートメントを実行して、次の処理を行う
productテーブルを作成します。- 基本的な商品情報を保存します。
- 各商品の商品説明のエンベディング ベクトルを計算して保存する
embeddingベクトル列が含まれています。
CREATE TABLE product ( id INT PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT, category VARCHAR(255), color VARCHAR(255), embedding vector(768) GENERATED ALWAYS AS (embedding('text-embedding-004', description)) STORED );次のクエリを実行して、利用可能な在庫と対応する価格に関する情報を保存する
product_inventoryテーブルを作成します。CREATE TABLE product_inventory ( id INT PRIMARY KEY, product_id INT REFERENCES product(id), inventory INT, price DECIMAL(10,2) );次のクエリを実行して、商品データを
productテーブルに挿入します。INSERT INTO product (id, name, description,category, color) VALUES (1, 'Stuffed Elephant', 'Soft plush elephant with floppy ears.', 'Plush Toys', 'Gray'), (2, 'Remote Control Airplane', 'Easy-to-fly remote control airplane.', 'Vehicles', 'Red'), (3, 'Wooden Train Set', 'Classic wooden train set with tracks and trains.', 'Vehicles', 'Multicolor'), (4, 'Kids Tool Set', 'Toy tool set with realistic tools.', 'Pretend Play', 'Multicolor'), (5, 'Play Food Set', 'Set of realistic play food items.', 'Pretend Play', 'Multicolor'), (6, 'Magnetic Tiles', 'Set of colorful magnetic tiles for building.', 'Construction Toys', 'Multicolor'), (7, 'Kids Microscope', 'Microscope for kids with different magnification levels.', 'Educational Toys', 'White'), (8, 'Telescope for Kids', 'Telescope designed for kids to explore the night sky.', 'Educational Toys', 'Blue'), (9, 'Coding Robot', 'Robot that teaches kids basic coding concepts.', 'Educational Toys', 'White'), (10, 'Kids Camera', 'Durable camera for kids to take pictures and videos.', 'Electronics', 'Pink'), (11, 'Walkie Talkies', 'Set of walkie talkies for kids to communicate.', 'Electronics', 'Blue'), (12, 'Karaoke Machine', 'Karaoke machine with built-in microphone and speaker.', 'Electronics', 'Black'), (13, 'Kids Drum Set', 'Drum set designed for kids with adjustable height.', 'Musical Instruments', 'Blue'), (14, 'Kids Guitar', 'Acoustic guitar for kids with nylon strings.', 'Musical Instruments', 'Brown'), (15, 'Kids Keyboard', 'Electronic keyboard with different instrument sounds.', 'Musical Instruments', 'Black'), (16, 'Art Easel', 'Double-sided art easel with chalkboard and whiteboard.', 'Arts & Crafts', 'White'), (17, 'Finger Paints', 'Set of non-toxic finger paints for kids.', 'Arts & Crafts', 'Multicolor'), (18, 'Modeling Clay', 'Set of colorful modeling clay.', 'Arts & Crafts', 'Multicolor'), (19, 'Watercolor Paint Set', 'Watercolor paint set with brushes and palette.', 'Arts & Crafts', 'Multicolor'), (20, 'Beading Kit', 'Kit for making bracelets and necklaces with beads.', 'Arts & Crafts', 'Multicolor'), (21, '3D Puzzle', '3D puzzle of a famous landmark.', 'Puzzles', 'Multicolor'), (22, 'Race Car Track Set', 'Race car track set with cars and accessories.', 'Vehicles', 'Multicolor'), (23, 'RC Monster Truck', 'Remote control monster truck with oversized tires.', 'Vehicles', 'Green'), (24, 'Train Track Expansion Set', 'Expansion set for wooden train tracks.', 'Vehicles', 'Multicolor');省略可: データが
productテーブルに挿入されていることを確認するには、次のクエリを実行します。SELECT * FROM product;次のクエリを実行して、在庫データを
product_inventoryテーブルに挿入します。INSERT INTO product_inventory (id, product_id, inventory, price) VALUES (1, 1, 9, 13.09), (2, 2, 40, 79.82), (3, 3, 34, 52.49), (4, 4, 9, 12.03), (5, 5, 36, 71.29), (6, 6, 10, 51.49), (7, 7, 7, 37.35), (8, 8, 6, 10.87), (9, 9, 7, 42.47), (10, 10, 3, 24.35), (11, 11, 4, 10.20), (12, 12, 47, 74.57), (13, 13, 5, 28.54), (14, 14, 11, 25.58), (15, 15, 21, 69.84), (16, 16, 6, 47.73), (17, 17, 26, 81.00), (18, 18, 11, 91.60), (19, 19, 8, 78.53), (20, 20, 43, 84.33), (21, 21, 46, 90.01), (22, 22, 6, 49.82), (23, 23, 37, 50.20), (24, 24, 27, 99.27);次のベクトル検索クエリを実行して、
musicという単語に類似する商品を検索します。商品の説明にmusicという単語が明示的に書かれていなくても、検索結果にはそのクエリに関連する商品が表示されます。SELECT * FROM product ORDER BY embedding <=> embedding('text-embedding-005', 'music')::vector LIMIT 3;インデックスを作成せずに基本的なベクトル検索を実行すると、AlloyDB AI は KNN を使用します。KNN により効率的な再現率が得られますが、規模が大きくなるとパフォーマンスに影響する可能性があります。より良いクエリ パフォーマンスを得るためには、ANN 検索用の ScaNN インデックスを使用することをおすすめします。ScaNN により、高い再現率を維持しながら低レイテンシで検索できます。
インデックスを作成しない場合、AlloyDB Omni はデフォルトで KNN を使用します。
products テーブルに ScaNN インデックスを作成する
次のクエリを実行して、product テーブルに product_index ScaNN インデックスを作成します。
CREATE INDEX product_index ON product
USING scann (embedding cosine)
WITH (num_leaves=5);
num_leaves パラメータは、ツリーベースのインデックスがインデックスの構築に使用するリーフノードの数を示します。このパラメータのチューニング方法について詳しくは、ベクトルクエリのパフォーマンスをチューニングするをご覧ください。
ベクトル検索を実行する
次のベクトル検索クエリを実行して、自然言語クエリ music に類似した商品を検索します。商品の説明に music という単語が含まれていなくても、クエリに関連する商品が結果に表示されます。
SET LOCAL scann.num_leaves_to_search = 2;
SELECT * FROM product
ORDER BY embedding <=> embedding('text-embedding-005', 'music')::vector
LIMIT 3;
scann.num_leaves_to_search クエリ パラメータは、類似性検索中に検索されるリーフノードの数を制御します。num_leaves と scann.num_leaves_to_search のパラメータ値を調整することで、クエリのパフォーマンスと再現率のバランスをとることができます。
フィルタと結合を使用するベクトル検索を実行する
次の複雑なベクトル検索クエリを実行します。フィルタが適用されていても、クエリ条件を満たす関連する結果が返されます。
SET LOCAL scann.num_leaves_to_search = 2;
SELECT * FROM product p
JOIN product_inventory pi ON p.id = pi.product_id
WHERE pi.price < 80.00
ORDER BY embedding <=> embedding('text-embedding-005', 'music')::vector
LIMIT 3;
クリーンアップ
データベース クラスタを削除する
kubectl patch dbclusters.alloydbomni.dbadmin.goog my-db-cluster -p '{"spec":{"isDeleted":true}}' --type=mergeAlloyDB Omni Operator をアンインストールする
Kubernetes クラスタから AlloyDB Omni Kubernetes オペレーターをアンインストールする手順は次のとおりです。
すべてのデータベース クラスタを削除します。
for ns in $(kubectl get dbclusters.alloydbomni.dbadmin.goog --all-namespaces -o=jsonpath='{range .items[*]}{.metadata.namespace}{"\n"}{end}'); do for cr in $(kubectl get dbclusters.alloydbomni.dbadmin.goog -n $ns -o=jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}'); do kubectl patch dbclusters.alloydbomni.dbadmin.goog $cr -n $ns --type=merge -p '{"spec":{"isDeleted":true}}' done done ```次のコマンドを実行して、AlloyDB Omni Kubernetes オペレーターがすべてのデータベース クラスタを削除したことを確認します。
kubectl get dbclusters.alloydbomni.dbadmin.goog --all-namespacesAlloyDB Omni Kubernetes オペレーターによって作成された他のリソースを削除します。
kubectl delete failovers.alloydbomni.dbadmin.goog --all --all-namespaceskubectl delete restores.alloydbomni.dbadmin.goog --all --all-namespaceskubectl delete switchovers.alloydbomni.dbadmin.goog --all --all-namespacesAlloyDB Omni Kubernetes オペレーターをアンインストールします。
helm uninstall alloydbomni-operator --namespace alloydb-omni-systemAlloyDB Omni Kubernetes オペレーターに関連する Secret、カスタム リソースの説明、Namespace をクリーンアップします。
kubectl delete certificate -n alloydb-omni-system --allkubectl get secrets --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,ANNOTATION:.metadata.annotations.cert-manager\.io/issuer-name | grep -E 'alloydbomni|dbs-al' | awk '{print $1 " " $2}' | xargs -n 2 kubectl delete secret -nkubectl delete crd -l alloydb-omni=truekubectl delete ns alloydb-omni-system
次のステップ
- AlloyDB AI を使用して生成 AI アプリケーションを構築する方法について確認する。
- ScaNN インデックスを作成する。