Questa pagina descrive come utilizzare l'API Gemini Enterprise Agent Platform text embedding per generare, archiviare e aggiornare i text embedding per i dati archiviati in Spanner per i database con dialetto GoogleSQL e PostgreSQL.
Un text embedding è una rappresentazione vettoriale di dati di testo e viene utilizzato in molti modi per trovare elementi simili. Interagisci con loro ogni volta che completi una Ricerca Google o vedi i contenuti consigliati quando fai acquisti online. Quando crei text embedding, ottieni rappresentazioni vettoriali del testo naturale sotto forma di array di numeri con rappresentazione in virgola mobile. Ciò significa che a tutto il testo di input viene assegnata una rappresentazione numerica. Confrontando la distanza numerica tra le rappresentazioni vettoriali di due porzioni di testo, un'applicazione può determinare la somiglianza tra il testo o gli oggetti rappresentati dal testo.
Con l'API di text embedding di Agent Platform, puoi creare un text embedding con l'AI generativa. In questo tutorial utilizzerai il modello di text embedding di Agent Platform per generare text embedding per i dati archiviati in Spanner.
Per scoprire di più sui text embedding e sui modelli supportati, consulta Genera text embedding.
Obiettivo
In questo tutorial imparerai a:
- Registra un modello di text embedding Agent Platform in uno schema Spanner utilizzando le istruzioni DDL.
- Fai riferimento al modello registrato utilizzando query SQL per generare embedding dai dati archiviati in Spanner.
Prezzi
Questo tutorial utilizza componenti fatturabili di Google Cloud, tra cui:
- Spanner
- Agent Platform
Per saperne di più sui costi di Spanner, consulta la pagina Prezzi di Spanner.
Per saperne di più sui costi di Agent Platform, consulta la pagina Prezzi di Agent Platform.
Genera e archivia i text embedding
A seconda del modello utilizzato, la generazione degli embedding potrebbe richiedere del tempo. Per i workload più sensibili alle prestazioni, la best practice consiste nell'evitare di generare embedding nelle transazioni di lettura/scrittura. Genera invece gli embedding in una transazione di sola lettura utilizzando i seguenti esempi SQL.
GoogleSQL
Registra un modello di text embedding in Spanner
In GoogleSQL, devi registrare un modello prima di utilizzarlo con la funzione ML.PREDICT. Per registrare il modello di text embedding di Agent Platform in un database Spanner, esegui la seguente istruzione DDL:
CREATE MODEL MODEL_NAME
INPUT(
content STRING(MAX),
-- Optional: For models that support specifying task type.
task_type STRING(MAX),
)
OUTPUT(
embeddings
STRUCT<
statistics STRUCT<truncated BOOL, token_count FLOAT64>,
values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME'
);
Sostituisci quanto segue:
MODEL_NAME: il nome del modello di text embedding Agent PlatformPROJECT: il progetto che ospita l'endpoint Agent PlatformLOCATION: la località dell'endpoint Agent Platform
Spanner concede automaticamente le autorizzazioni appropriate. In caso contrario, consulta il controllo degli accessi agli endpoint del modello.
Il rilevamento e la convalida dello schema non sono disponibili per i modelli di AI generativa. Devi fornire le clausole INPUT e OUTPUT che corrispondono allo schema dei modelli. Per lo schema completo del modello di text embedding, consulta Ottieni text embedding.
Genera text embedding
Per generare gli embedding, passa una parte di testo direttamente alla funzione ML.PREDICT utilizzando il seguente SQL:
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT "A product description" as content)
);
Per generare embedding per i dati archiviati in una tabella, utilizza il seguente codice SQL:
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
Per specificare il tipo di attività e le dimensioni di output:
UPDATE Products p
SET description_embedding = (
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT p.description as content, "RETRIEVAL_DOCUMENT" as task_type),
STRUCT(768 AS outputDimensionality)
));
SELECT p.product_id, p.name, p.description, COSINE_DISTANCE(
p.description_embedding,
(
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT @user_query as content, "RETRIEVAL_QUERY" as task_type),
STRUCT(768 AS outputDimensionality)
)
)
) AS distance
FROM Products p
ORDER BY distance
LIMIT 5;
Archivia i text embedding
Dopo aver generato gli embedding in una transazione di sola lettura, archiviali in Spanner in modo che possano essere gestiti con i tuoi dati operativi. Per archiviare gli embedding, utilizza una transazione di lettura/scrittura.
Per i workload meno sensibili alle prestazioni, puoi generare e inserire embedding con il seguente SQL in una transazione di lettura/scrittura.
La specifica di vector_length è facoltativa per l'archiviazione degli embedding,
consigliata per la ricerca KNN
e obbligatoria per gli indici vettoriali. Sostituisci VECTOR_LENGTH con la dimensione di output del modello, ad esempio 3072 o 768, oppure ometti vector_length se la colonna memorizza vettori di dimensioni variabili:
CREATE TABLE Products(
id INT64 NOT NULL,
description STRING(MAX),
embeddings ARRAY<FLOAT32>(vector_length=>VECTOR_LENGTH),
) PRIMARY KEY(id);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT @Description as content)
);
PostgreSQL
Genera text embedding
Per generare gli embedding, passa una parte di testo direttamente alla funzione spanner.ML_PREDICT_ROW utilizzando il seguente SQL:
SELECT
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
'{"instances": [{"content": "A product description"}]}'::jsonb
) ->'predictions'->0->'embeddings'->'values';
Sostituisci quanto segue:
PROJECT: il progetto che ospita l'endpoint Agent PlatformLOCATION: la località dell'endpoint Agent PlatformMODEL_NAME: il nome del modello di text embedding Agent Platform
Per generare embedding per i dati archiviati in una tabella, utilizza il seguente codice SQL:
SELECT id, spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', description))))
) -> 'predictions'->0->'embeddings'->'values'
FROM Products;
Sostituisci quanto segue:
PROJECT: il progetto che ospita l'endpoint Agent PlatformLOCATION: la località dell'endpoint Agent PlatformMODEL_NAME: il nome del modello di text embedding Agent Platform
Per specificare il tipo di attività e le dimensioni di output:
UPDATE Products p
SET description_embedding = spanner.float64_array(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT(
'instances', JSONB_BUILD_ARRAY(
JSONB_BUILD_OBJECT(
'content', p.description,
'task_type', 'RETRIEVAL_DOCUMENT'
)
),
'parameters', JSONB_BUILD_OBJECT('outputDimensionality', 768)
)
)->'predictions'->0->'embeddings'->'values'
);
SELECT p.product_id, p.name, p.description, spanner.COSINE_DISTANCE(
p.description_embedding,
spanner.float64_array(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT(
'instances', JSONB_BUILD_ARRAY(
JSONB_BUILD_OBJECT(
'content', $1,
'task_type', 'RETRIEVAL_QUERY'
)
),
'parameters', JSONB_BUILD_OBJECT('outputDimensionality', 768)
)
)->'predictions'->0->'embeddings'->'values'
)
) AS distance
FROM Products p
ORDER BY distance
LIMIT 5;
Sostituisci quanto segue:
PROJECT: il progetto che ospita l'endpoint Agent PlatformLOCATION: la località dell'endpoint Agent PlatformMODEL_NAME: il nome del modello di text embedding Agent Platform
Archivia i text embedding
Dopo aver generato gli embedding in una transazione di sola lettura, archiviali in Spanner in modo che possano essere gestiti con i tuoi dati operativi. Per archiviare gli embedding, utilizza una transazione di lettura/scrittura.
Per i workload meno sensibili alle prestazioni, puoi generare e inserire embedding con il seguente SQL in una transazione di lettura/scrittura.
La specifica di VECTOR LENGTH è facoltativa per l'archiviazione degli embedding,
consigliata per la ricerca KNN
e obbligatoria per gli indici vettoriali. Sostituisci VECTOR_LENGTH con la dimensione di output del modello, ad esempio 3072 o 768, oppure ometti VECTOR LENGTH se la colonna memorizza vettori di dimensioni variabili:
CREATE TABLE Products (
id INT8 NOT NULL,
description TEXT,
embeddings REAL[] VECTOR LENGTH VECTOR_LENGTH,
PRIMARY KEY(id)
);
INSERT INTO Products (id, description, embeddings)
SELECT @Id, @Description, spanner.FLOAT32_ARRAY(spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))
) -> 'predictions'->0->'embeddings'->'values'
));
Sostituisci quanto segue:
PROJECT: il progetto che ospita l'endpoint Agent PlatformLOCATION: la località dell'endpoint Agent PlatformMODEL_NAME: il nome del modello di text embedding Agent Platform
Aggiorna i text embedding
Per aggiornare gli embedding o importare i dati in tempo reale, utilizza l'istruzione UPDATE (GoogleSQL e PostgreSQL).
Per aggiornare la tabella Products nell'esempio precedente, utilizza il seguente codice SQL:
GoogleSQL
UPDATE Products
SET
description = @description,
embeddings = (SELECT embeddings.values
FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
)
WHERE id = @id;
Sostituisci quanto segue:
MODEL_NAME: il nome del modello di text embedding Agent Platform
PostgreSQL
UPDATE
Products
SET
description = $1,
embeddings = spanner.FLOAT32_ARRAY(
spanner.ML_PREDICT_ROW(
'projects/PROJECT/locations/LOCATION/publishers/google/models/$MODEL_NAME',
JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', $1)))
) -> 'predictions'->0->'embeddings'->'values')
WHERE
id = $2;
Sostituisci quanto segue:
PROJECT: il progetto che ospita l'endpoint Agent PlatformLOCATION: la località dell'endpoint Agent PlatformMODEL_NAME: il nome del modello di text embedding Agent Platform
Passaggi successivi
- Scopri come utilizzare Agent Platform Vector Search per cercare elementi semanticamente simili.
- Scopri di più sul machine learning e sugli embedding nel nostro corso intensivo sugli embedding.
- Scopri di più sui modelli di text embedding di Agent Platform.