Acessar embeddings de texto da Vertex AI

Nesta página, descrevemos como usar a API text-embeddings da Vertex AI para gerar, armazenar e atualizar embeddings de texto para dados armazenados em bancos de dados do Spanner para GoogleSQL e PostgreSQL.

Um embedding de texto é uma representação vetorial de dados de texto e é usado de várias maneiras para encontrar itens semelhantes. Você interage com eles sempre que faz uma pesquisa no Google ou recebe recomendações ao fazer compras on-line. Ao criar embeddings de texto, você recebe representações vetoriais de texto natural como matrizes de números de ponto flutuante. Isso significa que é atribuída uma representação numérica a todo o texto de entrada. Ao comparar a distância numérica entre as representações vetoriais de duas partes de texto, um aplicativo pode determinar a semelhança entre o texto ou os objetos representados por ele.

Com a API Text-embeddings da Vertex AI, é possível criar um embedding de texto com a IA generativa. Neste tutorial, você vai usar o modelo text-embedding da Vertex AI para gerar embeddings de texto para os dados armazenados no Spanner.

Para saber mais sobre embeddings, consulte Receber embeddings de texto.

Objetivo

Neste tutorial, você aprenderá a realizar as seguintes tarefas:

  • Registre o modelo text-embedding da Vertex AI em um esquema do Spanner usando instruções DDL.
  • Faça referência ao modelo registrado usando consultas SQL para gerar embeddings de dados armazenados no Spanner.

Preços

Neste tutorial, usamos componentes faturáveis do Google Cloud, incluindo:

  • Spanner
  • Vertex AI

Para mais informações sobre os custos do Spanner, consulte a página Preços do Spanner.

Para mais informações sobre os custos da Vertex AI, consulte a página de preços da Vertex AI.

Gerar e armazenar embeddings de texto

Dependendo do modelo usado, a geração de embeddings pode levar algum tempo. Para cargas de trabalho mais sensíveis ao desempenho, a prática recomendada é evitar gerar incorporações em transações de leitura/gravação. Em vez disso, gere os embeddings em uma transação somente leitura usando os exemplos de SQL a seguir.

GoogleSQL

Registrar um modelo de embeddings de texto no Spanner

No GoogleSQL, é necessário registrar um modelo antes de usá-lo com a função ML.PREDICT. Para registrar o modelo text-embedding em um banco de dados do Spanner, execute a seguinte instrução de 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/text-embedding$MODEL_VERSION'
);

Substitua:

  • MODEL_NAME: o nome do modelo de embedding
  • PROJECT: o projeto que hospeda o endpoint da Vertex AI
  • LOCATION: o local do endpoint da Vertex AI
  • MODEL_VERSION: a versão do modelo de embedding text-embedding.

O Spanner concede as permissões adequadas automaticamente. Caso contrário, revise o controle de acesso ao endpoint do modelo.

A descoberta e validação de esquemas não estão disponíveis para modelos de IA generativa. É necessário fornecer cláusulas INPUT e OUTPUT que correspondam ao esquema dos modelos. Para conferir o esquema completo do modelo de embedding de texto, consulte Receber embeddings de texto.

Gerar embeddings de texto

Para gerar embeddings, transmita um trecho de texto diretamente para a função ML.PREDICT usando o seguinte SQL:

SELECT embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT "A product description" as content)
);

Para gerar embeddings de dados armazenados em uma tabela, use o seguinte SQL:

SELECT id, embeddings.values
FROM ML.PREDICT(
  MODEL MODEL_NAME,
  (SELECT id, description as content FROM Products)
);

Armazenar embeddings de texto

Depois de gerar os embeddings em uma transação somente leitura, armazene-os no Spanner para que possam ser gerenciados com seus dados operacionais. Para armazenar os embeddings, use uma transação de leitura/gravação.

Para cargas de trabalho menos sensíveis ao desempenho, é possível gerar e inserir incorporações com o seguinte SQL em uma transação de leitura e gravação:

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

Gerar embeddings de texto

Para gerar embeddings, transmita um trecho de texto diretamente para a função spanner.ML_PREDICT_ROW usando o seguinte SQL:

SELECT
  spanner.ML_PREDICT_ROW(
    'projects/PROJECT/locations/LOCATION/publishers/google/models/text-embedding$MODEL_VERSION',
    '{"instances": [{"content": "A product description"}]}'::jsonb
  ) ->'predictions'->0->'embeddings'->'values';

Substitua:

  • PROJECT: o projeto que hospeda o endpoint da Vertex AI
  • LOCATION: o local do endpoint da Vertex AI
  • MODEL_VERSION: a versão do modelo de embedding text-embedding.

Para gerar embeddings de dados armazenados em uma tabela, use o seguinte SQL:

SELECT id, spanner.ML_PREDICT_ROW(
    'projects/PROJECT/locations/LOCATION/publishers/google/models/text-embedding$MODEL_VERSION',
    JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', description))))
  ) -> `predictions`->0->`embeddings`->`values``
FROM Products;

Substitua:

  • PROJECT: o projeto que hospeda o endpoint da Vertex AI
  • LOCATION: o local do endpoint da Vertex AI
  • MODEL_VERSION: a versão do modelo de embedding text-embedding.

Armazenar embeddings de texto

Depois de gerar os embeddings em uma transação somente leitura, armazene-os no Spanner para que possam ser gerenciados com seus dados operacionais. Para armazenar os embeddings, use uma transação de leitura/gravação.

Para cargas de trabalho menos sensíveis ao desempenho, é possível gerar e inserir incorporações com o seguinte SQL em uma transação de leitura e gravação:

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/text-embedding$MODEL_VERSION',
    JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', @Description)))
  ) -> 'predictions'->0->'embeddings'->'values'
));

Substitua:

  • PROJECT: o projeto que hospeda o endpoint da Vertex AI
  • LOCATION: o local do endpoint da Vertex AI
  • MODEL_VERSION: a versão do modelo de embedding text-embedding.

Atualizar embeddings de texto

Para atualizar os embeddings ou ingerir dados em tempo real, use a instruçã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:

  • MODEL_NAME: o nome do modelo de embedding

PostgreSQL

UPDATE
  Products
SET
  description = $1,
  embeddings = spanner.FLOAT32_ARRAY(
    spanner.ML_PREDICT_ROW(
      'projects/PROJECT/locations/LOCATION/publishers/google/models/text-embedding$MODEL_VERSION',
      JSONB_BUILD_OBJECT('instances', JSONB_BUILD_ARRAY(JSONB_BUILD_OBJECT('content', $1)))
    ) -> 'predictions'->0->'embeddings'->'values')
WHERE
  id = $2;

Substitua:

  • PROJECT: o projeto que hospeda o endpoint da Vertex AI
  • LOCATION: o local do endpoint da Vertex AI
  • MODEL_VERSION: a versão do modelo de embedding text-embedding.

A seguir