Esta página descreve como usar a API Vertex AI text embedding para gerar, armazenar e atualizar incorporações de texto para dados armazenados em bases de dados com dialeto GoogleSQL e bases de dados com dialeto PostgreSQL.
Uma incorporação de texto é uma representação vetorial de dados de texto e é usada de várias formas para encontrar itens semelhantes. Interage com eles sempre que conclui uma pesquisa no Google ou vê recomendações quando faz compras online. Quando cria incorporações de texto, recebe representações vetoriais de texto natural como matrizes de números de vírgula flutuante. Isto significa que todo o texto de entrada tem uma representação numérica atribuída. Ao comparar a distância numérica entre as representações vetoriais de dois fragmentos de texto, uma aplicação pode determinar a semelhança entre o texto ou os objetos representados pelo texto.
Com a API Vertex AI text embeddings, pode criar uma incorporação de texto com a IA generativa. Neste tutorial, vai usar o modelo de incorporação de texto da Vertex AI para gerar incorporações de texto para os dados armazenados no Spanner.
Para saber mais sobre as incorporações de texto e os modelos suportados, consulte o artigo Obtenha incorporações de texto.
Objetivo
Neste tutorial, vai aprender a:
- Registe um modelo de incorporação de texto do Vertex AI num esquema do Spanner através de declarações DDL.
- Referencie o modelo registado através de consultas SQL para gerar incorporações a partir de dados armazenados no Spanner.
Preços
Este tutorial usa componentes faturáveis do Google Cloud, incluindo:
- Spanner
- Vertex AI
Para mais informações sobre os custos do Spanner, consulte a página de preços do Spanner.
Para mais informações sobre os custos do Vertex AI, consulte a página de preços do Vertex AI.
Gere e armazene incorporações de texto
A geração de incorporações pode demorar algum tempo, consoante o modelo que usar. Para cargas de trabalho mais sensíveis ao desempenho, a prática recomendada é evitar gerar incorporações em transações de leitura/escrita. Em alternativa, gere as incorporações numa transação de leitura apenas através dos seguintes exemplos de SQL.
GoogleSQL
Registe um modelo de incorporações de texto no Spanner
No GoogleSQL, tem de registar um modelo antes de o usar com a função ML.PREDICT
. Para registar o modelo de incorporação de texto da Vertex AI numa base de dados do Spanner, execute a seguinte declaração DDL:
CREATE MODEL MODEL_NAME
INPUT(content 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'
);
Substitua o seguinte:
MODEL_NAME
: o nome do modelo de incorporação de texto da Vertex AIPROJECT
: o projeto que aloja o ponto final do Vertex AILOCATION
: a localização do ponto final da Vertex AI
O Spanner concede as autorizações adequadas automaticamente. Se não for o caso, reveja o controlo de acesso ao ponto final do modelo.
A descoberta e a validação de esquemas não estão disponíveis para modelos de IA generativa. Tem de fornecer cláusulas INPUT
e OUTPUT
que correspondam ao esquema dos modelos. Para ver o esquema completo do modelo de incorporação de texto,
consulte o artigo Obtenha incorporações de texto.
Gere incorporações de texto
Para gerar incorporações, transmita um fragmento de texto diretamente para a função ML.PREDICT
através do seguinte SQL:
SELECT embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT "A product description" as content)
);
Para gerar incorporações para dados armazenados numa tabela, use o seguinte SQL:
SELECT id, embeddings.values
FROM ML.PREDICT(
MODEL MODEL_NAME,
(SELECT id, description as content FROM Products)
);
Armazene incorporações de texto
Depois de gerar as incorporações numa transação de leitura, armazene-as no Spanner para que possam ser geridas com os seus dados operacionais. Para armazenar as incorporações, use uma transação de leitura/escrita.
Para cargas de trabalho menos sensíveis ao desempenho, pode gerar e inserir incorporações com o seguinte SQL numa transação de leitura/escrita:
CREATE TABLE Products(
id INT64 NOT NULL,
description STRING(MAX),
embeddings ARRAY<FLOAT32>,
) 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
Gere incorporações de texto
Para gerar incorporações, transmita um fragmento de texto diretamente para a função spanner.ML_PREDICT_ROW
através do seguinte 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';
Substitua o seguinte:
PROJECT
: o projeto que aloja o ponto final do Vertex AILOCATION
: a localização do ponto final da Vertex AIMODEL_NAME
: o nome do modelo de incorporação de texto da Vertex AI
Para gerar incorporações para dados armazenados numa tabela, use o seguinte 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;
Substitua o seguinte:
PROJECT
: o projeto que aloja o ponto final do Vertex AILOCATION
: a localização do ponto final da Vertex AIMODEL_NAME
: o nome do modelo de incorporação de texto da Vertex AI
Armazene incorporações de texto
Depois de gerar as incorporações numa transação de leitura, armazene-as no Spanner para que possam ser geridas com os seus dados operacionais. Para armazenar as incorporações, use uma transação de leitura/escrita.
Para cargas de trabalho menos sensíveis ao desempenho, pode gerar e inserir incorporações com o seguinte SQL numa transação de leitura/escrita:
CREATE TABLE Products (
id INT8 NOT NULL,
description TEXT,
embeddings REAL[],
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'
));
Substitua o seguinte:
PROJECT
: o projeto que aloja o ponto final do Vertex AILOCATION
: a localização do ponto final da Vertex AIMODEL_NAME
: o nome do modelo de incorporação de texto da Vertex AI
Atualize as incorporações de texto
Para atualizar as suas incorporações ou carregar dados em tempo real, use a declaração UPDATE
(GoogleSQL
e PostgreSQL)
.
Para atualizar a tabela Products
no exemplo anterior, use o seguinte SQL:
GoogleSQL
UPDATE Products
SET
description = @description,
embeddings = (SELECT embeddings.values
FROM ML.PREDICT(MODEL MODEL_NAME, (SELECT @description as content))
)
WHERE id = @id;
Substitua o seguinte:
MODEL_NAME
: o nome do modelo de incorporação de texto da Vertex AI
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;
Substitua o seguinte:
PROJECT
: o projeto que aloja o ponto final do Vertex AILOCATION
: a localização do ponto final da Vertex AIMODEL_NAME
: o nome do modelo de incorporação de texto da Vertex AI
O que se segue?
- Saiba como usar a Vertex AI Vector Search para pesquisar itens semanticamente semelhantes.
- Saiba mais sobre a aprendizagem automática e as incorporações no nosso curso intensivo sobre incorporações.
- Saiba mais sobre os modelos de incorporação de texto do Vertex AI.