Générer et gérer des embeddings vectoriels

Cette page explique comment générer et stocker des représentations vectorielles continues. Pour en savoir plus, consultez la section Stockage de représentations vectorielles continues.

Avant de commencer

Vous devez disposer d'une instance Cloud SQL avec les options de base de données vectorielle activées.

Générer des embeddings basés sur des données de ligne

Vous pouvez générer un embedding vectoriel pour les données d'une ligne spécifique, à l'aide d'une API d'embedding de texte telle que Vertex AI ou OpenAI. Vous pouvez utiliser n'importe quelle API d'embedding de texte avec des embeddings vectoriels Cloud SQL. Toutefois, vous devez utiliser la même API d'embedding de texte pour la génération de vecteurs de chaîne de requête. Vous ne pouvez pas combiner différentes API pour les données sources et la vectorisation des requêtes.

Par exemple, vous pouvez générer un embedding vectoriel à partir de 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()

Stocker les embeddings vectoriels

Cette section fournit des exemples d'instructions permettant de stocker des embeddings vectoriels dans Cloud SQL.

Créer une table avec une colonne d'embeddings vectoriels

Utilisez l'instruction CREATE TABLE avec une colonne qui utilise le type de données VECTOR.

Utilisez la syntaxe suivante pour créer la table:

CREATE TABLE TABLE_NAME(
  id INTEGER
  PRIMARY KEY
    AUTO_INCREMENT,
    title VARCHAR(60),
    EMBEDDING_COLUMN_NAME
      VECTOR(VECTOR_DIMENSIONS)
  USING VARBINARY);

Remplacez les paramètres suivants :

  • TABLE_NAME: nom de la table dans laquelle vous souhaitez stocker les représentations vectorielles continues.
  • EMBEDDING_COLUMN_NAME: nom de la colonne qui stocke l'embedding.
  • VECTOR_DIMENSIONS: nombre de dimensions à utiliser pour l'embedding.

Dans l'exemple suivant, la colonne d'encapsulation contient un vecteur à trois dimensions. Les données stockées dans cette colonne ont le type de données VARBINARY.

CREATE TABLE books(
  id INTEGER PRIMARY KEY AUTO_INCREMENT, title VARCHAR(60), embedding VECTOR(3) USING VARBINARY);

Ajouter une colonne d'embeddings vectoriels à une table existante

Utilisez l'instruction ALTER TABLE pour ajouter une colonne d'embeddings vectoriels à une table existante. La colonne doit utiliser le type de données VECTOR pour contenir l'embedding.

Dans l'exemple suivant, une colonne d'embedding contenant un vecteur à trois dimensions est insérée dans la table. Les données stockées dans cette colonne ont le type de données VARBINARY.

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

Insérer un embedding vectoriel

Utilisez INSERT avec la fonction string_to_vector pour insérer des valeurs d'encapsulation vectorielle dans un tableau.

Dans l'exemple suivant, un vecteur à trois dimensions est inséré dans la colonne d'embedding.

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

Insérer plusieurs embeddings vectoriels

Utilisez INSERT avec la fonction string_to_vector pour insérer une liste d'embeddings vectoriels séparés par des virgules.

Dans l'instruction suivante, deux embeddings, chacun contenant un vecteur à trois dimensions, sont insérés dans la colonne d'embedding.

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

Effectuer une opération upsert sur un embedding vectoriel

Utilisez une opération INSERT ou UPDATE sur une table avec la fonction string_to_vector pour ajouter une colonne d'embedding vectoriel, en utilisant la syntaxe suivante.

Dans l'instruction suivante, une opération upsert est utilisée pour insérer ou mettre à jour la colonne d'embedding avec un embedding contenant un vecteur à trois dimensions.

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

Mettre à jour un embedding vectoriel

Utilisez UPDATE avec la fonction string_to_vector pour mettre à jour un embedding vectoriel.

Dans l'instruction suivante, UPDATE est utilisé pour mettre à jour la colonne d'embedding avec un vecteur à trois dimensions.

UPDATE books
SET embedding = string_to_vector('[7,8,9]')
WHERE id = 1;

Récupérer des embeddings vectoriels

Pour récupérer des embeddings vectoriels, utilisez la fonction vector_to_string Cloud SQL avec le nom de l'embedding.

Dans l'instruction suivante, la colonne d'embedding est récupérée pour être affichée.

SELECT vector_to_string(embedding) FROM books WHERE id = 1;

Supprimer un embedding vectoriel

Utilisez DELETE avec la fonction string_to_vector pour supprimer un embedding vectoriel d'une table. Si un index vectoriel existe, vous devez d'abord le supprimer. Pour en savoir plus, consultez la section Supprimer un indice vectoriel.

Dans l'instruction suivante, DELETE permet de supprimer la valeur de la colonne d'encapsulation.

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

Étape suivante