本頁說明如何產生及儲存向量嵌入項目。如需總覽,請參閱「向量嵌入儲存空間」。
事前準備
如果您使用 MySQL 8.4 版或更早版本的 Cloud SQL,則需要啟用 cloudsql_vector 資料庫旗標的 Cloud SQL 執行個體,才能產生及儲存向量嵌入。
如果您使用 MySQL 適用的 Cloud SQL 9.7 以上版本,則無須在 Cloud SQL 執行個體上設定 cloudsql_vector 資料庫旗標,即可產生及儲存向量嵌入。不過,您無法建立向量索引,也無法對向量資料執行 ANN 搜尋。
根據列資料生成向量嵌入
您可以使用文字嵌入 API (例如 Vertex AI 或 OpenAI),為指定資料列的資料生成向量嵌入。您可以搭配 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 中儲存向量嵌入。
建立含有向量嵌入資料欄的新資料表
搭配使用 CREATE TABLE 陳述式和使用 VECTOR 資料類型的資料欄。
請使用下列語法建立資料表。
如果是 MySQL 8.4 之前的 Cloud SQL,請使用下列語法:
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:用於嵌入的維度數量。
在下列範例中,嵌入資料欄含有三維向量。這個資料欄儲存的資料屬於 VARBINARY 資料類型。
CREATE TABLE books(
id INTEGER PRIMARY KEY AUTO_INCREMENT, title VARCHAR(60), embedding VECTOR(3) USING VARBINARY);
如果是 MySQL 適用的 Cloud SQL 9.7 以上版本,宣告 VARBINARY 關鍵字是選用做法,且支援回溯相容性。您也不需要指定向量的維度,預設值為 2048。
如果是 MySQL 9.7 以上版本的 Cloud SQL,可以使用下列語法:
CREATE TABLE TABLE_NAME(
id INTEGER
PRIMARY KEY
AUTO_INCREMENT,
title VARCHAR(60),
EMBEDDING_COLUMN_NAME
VECTOR([VECTOR_DIMENSIONS])
[USING VARBINARY]);
詳情請參閱 MySQL 說明文件中的「VECTOR 型別」。
在現有資料表中新增向量嵌入資料欄
如要將向量嵌入資料欄新增至現有資料表,請使用 ALTER TABLE 陳述式。資料欄必須使用 VECTOR 資料類型來保存嵌入內容。
在下列範例中,系統會將含有三維向量的嵌入資料欄插入資料表。
ALTER TABLE books
ADD COLUMN embedding
VECTOR(3)
USING VARBINARY;
MySQL 9.7:
ALTER TABLE books
ADD COLUMN embedding
VECTOR(3);
插入向量嵌入
搭配 string_to_vector 函式使用 INSERT,即可將向量嵌入值插入表格。
在下列範例中,系統會將具有三個維度的向量插入嵌入資料欄。
INSERT INTO books
(
title,
embedding)
VALUES (('book title', string_to_vector('[1,2,3]')));
插入多個向量嵌入
使用 INSERT 和 string_to_vector 函式,插入以半形逗號分隔的向量嵌入清單。
在下列陳述式中,兩個嵌入內容各包含一個具有三個維度的向量,並插入嵌入內容資料欄。
INSERT INTO books
(
title,
embedding)
VALUES
(
(
'book title',
string_to_vector('[1,2,3]')),
('book title', string_to_vector('[4,5,6]')));
插入或更新向量嵌入
在資料表上使用 INSERT 或 UPDATE 運算,並搭配 string_to_vector 函式,按照下列語法新增向量嵌入資料欄。
在下列陳述式中,upsert 用於插入或更新嵌入欄,其中包含具有三個維度的向量。
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]');
更新向量嵌入
使用 UPDATE 搭配 string_to_vector 函式更新向量嵌入。
在下列陳述式中,UPDATE 用於以三維向量更新嵌入資料欄。
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;
刪除向量嵌入
使用 DELETE 和 string_to_vector 函式,從資料表移除向量嵌入。如有向量索引,請先刪除。詳情請參閱「捨棄向量索引」。
在下列陳述式中,DELETE 用於刪除嵌入資料欄中的值。
DELETE FROM books
WHERE embedding = string_to_vector('[1,2,3]');
後續步驟
- 請參閱 Cloud SQL 向量搜尋總覽。
- 瞭解如何在執行個體上啟用及停用向量嵌入。
- 瞭解如何建立向量索引。
- 瞭解如何對向量嵌入執行搜尋。