Obtenha incorporações de texto do Vertex AI

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 AI
  • PROJECT: o projeto que aloja o ponto final do Vertex AI
  • LOCATION: 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 AI
  • LOCATION: a localização do ponto final da Vertex AI
  • MODEL_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 AI
  • LOCATION: a localização do ponto final da Vertex AI
  • MODEL_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 AI
  • LOCATION: a localização do ponto final da Vertex AI
  • MODEL_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 AI
  • LOCATION: a localização do ponto final da Vertex AI
  • MODEL_NAME: o nome do modelo de incorporação de texto da Vertex AI

O que se segue?