生成和管理向量嵌入

本页介绍了如何生成和存储向量嵌入。如需大致了解,请参阅向量嵌入存储

准备工作

您需要有一个启用了矢量数据库标志的 Cloud SQL 实例。

根据行数据生成向量嵌入

您可以使用文本嵌入 API(例如 Vertex AIOpenAI)针对给定行的数据生成向量嵌入。您可以将任何文本嵌入 API 与 Cloud SQL 向量嵌入搭配使用。但是,您必须使用相同的文本嵌入 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 数据类型的列搭配使用。

使用以下语法创建表:

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);

将向量嵌入列添加到现有表中

使用 ALTER TABLE 语句将向量嵌入列添加到现有表中。该列必须使用 VECTOR 数据类型来存储嵌入。

在以下示例中,系统会将包含三维向量的嵌入列插入表中。此列中存储的数据具有 VARBINARY 数据类型。

ALTER TABLE books
ADD COLUMN embedding
  VECTOR(3)
USING VARBINARY;

插入向量嵌入

INSERTstring_to_vector 函数结合使用,将矢量嵌入值插入表中。

在以下示例中,系统会将一个三维向量插入到嵌入列中。

INSERT INTO books
  (
    title,
    embedding)
VALUES (('book title', string_to_vector('[1,2,3]')));

插入多个向量嵌入

INSERTstring_to_vector 函数结合使用,以插入以英文逗号分隔的向量嵌入列表。

在以下语句中,两个嵌入(每个嵌入包含一个三维向量)会被插入到嵌入列中。

INSERT INTO books
  (
    title,
    embedding)
VALUES
  (
    (
      'book title',
      string_to_vector('[1,2,3]')),
    ('book title', string_to_vector('[4,5,6]')));

更新/插入向量嵌入

使用 string_to_vector 函数对表使用 INSERTUPDATE 运算,以使用以下语法添加矢量嵌入列。

在以下语句中,更新/插入操作用于使用包含三维向量的嵌入插入或更新嵌入列。

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]');

更新向量嵌入

UPDATEstring_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;

删除向量嵌入

DELETEstring_to_vector 函数搭配使用,可从表中移除向量嵌入。如果存在向量索引,您必须先将其删除。如需了解详情,请参阅删除矢量索引

在以下语句中,DELETE 用于删除嵌入列中的值。

DELETE FROM books
WHERE embedding = string_to_vector('[1,2,3]');

后续步骤