Genera e gestisci gli embedding vettoriali

Questa pagina descrive come generare e archiviare gli embedding vettoriali. Per una panoramica, consulta Archiviazione di vector embedding.

Prima di iniziare

Se utilizzi Cloud SQL per MySQL 8.4 o versioni precedenti, devi avere un'istanza Cloud SQL con il flag di database cloudsql_vector abilitato per generare e archiviare gli embedding vettoriali.

Se utilizzi Cloud SQL per MySQL 9.7 o versioni successive, puoi generare e archiviare gli embedding vettoriali senza impostare il flag di database cloudsql_vector sull'istanza Cloud SQL. Tuttavia, non puoi creare indici vettoriali o eseguire ricerche ANN sui dati vettoriali.

Generare embedding vettoriali in base ai dati delle righe

Puoi generare un embedding vettoriale per i dati di una determinata riga utilizzando un'API di embedding di testo come Vertex AI o OpenAI. Puoi utilizzare qualsiasi API di text embedding con gli embedding vettoriali di Cloud SQL. Tuttavia, devi utilizzare la stessa API di text embedding per la generazione di vettori di stringhe di query. Non puoi combinare API diverse per la vettorializzazione dei dati di origine e delle query.

Ad esempio, puoi generare un embedding vettoriale da 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()

Archiviare gli embedding vettoriali

Questa sezione fornisce esempi di istruzioni per l'archiviazione di embedding vettoriali in Cloud SQL.

Creare una nuova tabella con una colonna di vector embedding

Utilizza l'istruzione CREATE TABLE con una colonna che utilizza il tipo di dati VECTOR.

Utilizza la seguente sintassi per creare la tabella.

Per Cloud SQL per MySQL 8.4 e versioni precedenti, utilizza la seguente sintassi:

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

Sostituisci i seguenti parametri:

  • TABLE_NAME: il nome della tabella in cui vuoi archiviare gli embedding.
  • EMBEDDING_COLUMN_NAME: il nome della colonna che memorizza l'embedding.
  • VECTOR_DIMENSIONS: il numero di dimensioni da utilizzare per l'embedding.

Nell'esempio seguente, la colonna di embedding ha un vettore con tre dimensioni. I dati archiviati in questa colonna hanno il tipo di dati VARBINARY.

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

Per Cloud SQL per MySQL 9.7 e versioni successive, la dichiarazione della parola chiave VARBINARY è facoltativa e supportata per la compatibilità con le versioni precedenti. Inoltre, non devi specificare le dimensioni del vettore, che per impostazione predefinita è 2048.

Per Cloud SQL per MySQL 9.7 e versioni successive, puoi utilizzare la seguente sintassi:

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

Per saperne di più, consulta la sezione Il tipo VECTOR nella documentazione di MySQL.

Aggiungere una colonna di vector embedding a una tabella esistente

Utilizza l'istruzione ALTER TABLE per aggiungere una colonna di vector embedding a una tabella esistente. La colonna deve utilizzare il tipo di dati VECTOR per contenere l'embedding.

Nell'esempio seguente, nella tabella viene inserita una colonna di embedding con un vettore con tre dimensioni.

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

Per MySQL 9.7:

ALTER TABLE books
ADD COLUMN embedding
  VECTOR(3);

Inserire un embedding vettoriale

Utilizza INSERT con la string_to_vector funzione per inserire i valori di embedding vettoriali in una tabella.

Nell'esempio seguente, nella colonna di embedding viene inserito un vettore con tre dimensioni.

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

Inserire più embedding vettoriali

Utilizza INSERT con la string_to_vector funzione per inserire un elenco separato da virgole di embedding vettoriali.

Nell'istruzione seguente, nella colonna di embedding vengono inseriti due embedding, ognuno contenente un vettore con tre dimensioni.

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

Eseguire l'upsert di un embedding vettoriale

Utilizza un'operazione INSERT o UPDATE su una tabella con la funzione string_to_vector per aggiungere una colonna di vector embedding, utilizzando la seguente sintassi.

Nell'istruzione seguente, viene utilizzato un upsert per inserire o aggiornare la colonna di embedding con un embedding che contiene un vettore con tre dimensioni.

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

Aggiornare un embedding vettoriale

Utilizza UPDATE con la string_to_vector funzione per aggiornare un embedding vettoriale.

Nell'istruzione seguente, UPDATE viene utilizzato per aggiornare la colonna di embedding con un vettore con tre dimensioni.

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

Recuperare gli embedding vettoriali

Per recuperare gli embedding vettoriali, utilizza la funzione Cloud SQL vector_to_stringinsieme al nome dell'embedding.

Nell'istruzione seguente, la colonna di embedding viene recuperata per la visualizzazione.

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

Eliminare un embedding vettoriale

Utilizza DELETE con la string_to_vector funzione per rimuovere un embedding vettoriale da una tabella. Se è presente un indice vettoriale, devi prima eliminarlo. Per saperne di più, consulta Eliminare un indice vettoriale.

Nell'istruzione seguente, DELETE viene utilizzato per eliminare il valore nella colonna di embedding.

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

Passaggi successivi