このページでは、ベクトル エンベディングを生成して保存する方法について説明します。概要については、ベクトル エンベディングの保存をご覧ください。
始める前に
ベクトル データベース フラグが有効になっている Cloud SQL インスタンスが必要です。
行データに基づいてベクトル エンベディングを生成する
Vertex AI や OpenAI などのテキスト エンベディング API を使用して、特定の行のデータのベクトル エンベディングを生成できます。Cloud SQL のベクトル エンベディングでは、任意のテキスト エンベディング API を使用できます。ただし、クエリ文字列ベクトルの生成に、同じテキスト エンベディング API を使用する必要があります。ソースデータとクエリのベクトル化で異なる API を組み合わせることはできません。
たとえば、Vertex AI からベクトル エンベディングを生成できます。
from vertexai.language_models import TextEmbeddingModel
def text_embedding() -> list:
"""Text embedding with a Large Language Model."""
model = TextEmbeddingModel.from_pretrained("text-embedding-004")
embeddings = model.get_embeddings(["What is life?"])
for embedding in embeddings:
vector = embedding.values
print(f"Length of Embedding Vector: {len(vector)}")
return vector
if __name__ == "__main__":
text_embedding()
ベクトル エンベディングを保存する
このセクションでは、Cloud SQL でベクトル エンベディングを保存するステートメントの例を示します。
ベクトル エンベディング列を含む新しいテーブルを作成する
VECTOR
データ型を使用する列で CREATE TABLE
ステートメントを使用します。
次の構文を使用してテーブルを作成します。
CREATE TABLE TABLE_NAME(
id INTEGER
PRIMARY KEY
AUTO_INCREMENT,
title VARCHAR(60),
EMBEDDING_COLUMN_NAME
VECTOR(VECTOR_DIMENSIONS)
USING VARBINARY);
次のパラメータを置き換えます。
TABLE_NAME
: エンベディングを保存するテーブルの名前。EMBEDDING_COLUMN_NAME
: エンベディングを格納する列の名前。VECTOR_DIMENSIONS
: エンベディングに使用する次元数。
次の例では、エンベディング列に 3 つのディメンションを持つベクターがあります。この列に保存されるデータのデータ型は VARBINARY
です。
CREATE TABLE books(
id INTEGER PRIMARY KEY AUTO_INCREMENT, title VARCHAR(60), embedding VECTOR(3) USING VARBINARY);
既存のテーブルにベクトル エンベディング列を追加する
ALTER TABLE
ステートメントを使用して、既存のテーブルにベクトル エンベディング列を追加します。列は、エンベディングを保持するために VECTOR
データ型を使用する必要があります。
次の例では、3 つのディメンションを持つベクターを含むエンベディング列がテーブルに挿入されます。この列に保存されるデータのデータ型は VARBINARY
です。
ALTER TABLE books
ADD COLUMN embedding
VECTOR(3)
USING VARBINARY;
ベクトル エンベディングを挿入する
string_to_vector
関数で INSERT
を使用して、ベクトル エンベディング値をテーブルに挿入します。
次の例では、3 つのディメンションを持つベクトルがエンベディング列に挿入されます。
INSERT INTO books
(
title,
embedding)
VALUES (('book title', string_to_vector('[1,2,3]')));
複数のベクトル エンベディングを挿入する
string_to_vector
関数で INSERT
を使用して、カンマ区切りのベクトル エンベディングのリストを挿入します。
次のステートメントでは、それぞれ 3 つのディメンションを持つベクトルを含む 2 つのエンベディングがエンベディング列に挿入されます。
INSERT INTO books
(
title,
embedding)
VALUES
(
(
'book title',
string_to_vector('[1,2,3]')),
('book title', string_to_vector('[4,5,6]')));
ベクトル エンベディングを Upsert する
string_to_vector
関数を使用してテーブルに対して INSERT
または UPDATE
オペレーションを行い、次の構文でベクトル エンベディング列を追加します。
次のステートメントでは、アップサートを使用して、3 つのディメンションを持つベクトルを含むエンベディングをエンベディング列に挿入または更新します。
INSERT INTO books
(
id,
title,
embedding)
VALUES
(
(
1,
'book title',
string_to_vector('[1,2,3]')))
ON DUPLICATE KEY UPDATE embedding = string_to_vector('[1,2,3]');
ベクトル エンベディングを更新する
string_to_vector
関数で UPDATE
を使用して、ベクトル エンベディングを更新します。
次のステートメントでは、UPDATE
を使用して、エンベディング列を 3 次元のベクトルで更新します。
UPDATE books
SET embedding = string_to_vector('[7,8,9]')
WHERE id = 1;
ベクトル エンベディングを取得する
ベクトル エンベディングを取得するには、エンベディングの名前とともに Cloud SQL の vector_to_string
関数を使用します。
次のステートメントでは、エンベディング列を取得して表示します。
SELECT vector_to_string(embedding) FROM books WHERE id = 1;
ベクトル エンベディングを削除する
string_to_vector
関数で DELETE
を使用して、テーブルからベクトル エンベディングを削除します。ベクトル インデックスがある場合は、まず削除する必要があります。詳細については、ベクトル インデックスを削除するをご覧ください。
次のステートメントでは、DELETE
を使用してエンベディング列の値を削除します。
DELETE FROM books
WHERE embedding = string_to_vector('[1,2,3]');
次のステップ
- Cloud SQL でのベクトル検索の概要を確認する。
- インスタンスでベクトル エンベディングを有効または無効にする方法を学習する。
- ベクトル インデックスを作成する方法を確認する。
- ベクトル エンベディングで検索を行う方法を学習する。