Gerar embeddings

Esta página mostra como usar o AlloyDB como uma ferramenta de modelo de linguagem grande (LLM) e gerar embeddings de vetor com base em um LLM.

Para mais informações sobre como usar modelos de ML com o AlloyDB Omni, consulte Criar aplicativos de IA generativa.

O AlloyDB permite usar um LLM hospedado pela Vertex AI para traduzir uma string de texto em uma embedding, que é a representação do modelo do significado semântico do texto fornecido como um vetor numérico. Para mais informações sobre o suporte da Vertex AI para embeddings de texto, consulte Embeddings de texto.

Antes de começar

Para permitir que o AlloyDB gere embeddings, verifique se você atende aos seguintes requisitos:

Restrições regionais

É possível gerar embeddings em regiões em que a IA generativa na Vertex AI está disponível. Para uma lista de regiões, consulte IA generativa em locais da Vertex AI .

Para o AlloyDB, verifique se o cluster do AlloyDB e o modelo da Vertex AI que você está consultando estão na mesma região.

Extensão de banco de dados necessária

  • Verifique se a extensão google_ml_integration está instalada no seu banco de dados do AlloyDB.

    CREATE EXTENSION google_ml_integration;
    

    Essa extensão está incluída no AlloyDB. É possível instalá-lo em qualquer banco de dados no cluster.

  • Defina a flag do banco de dados google_ml_integration.enable_model_support como off.

Configurar o acesso ao modelo

Antes de gerar embeddings de um banco de dados do AlloyDB, configure o AlloyDB para funcionar com um modelo de embedding de texto.

Para trabalhar com o modelo de textembeddings-gecko baseado na nuvem, você precisa integrar seu banco de dados à Vertex AI.

Conceder acesso aos usuários do banco de dados para gerar embeddings

Conceda permissão para que os usuários do banco de dados executem a função embedding para executar previsões:

  1. Conecte um cliente psql à instância principal do cluster, conforme descrito em Conectar um cliente psql a uma instância.

  2. No prompt de comando psql, conecte-se ao banco de dados e conceda permissões:

    \c DB_NAME
    
    GRANT EXECUTE ON FUNCTION embedding TO USER_NAME;
    

    Substitua:

    • DB_NAME: o nome do banco de dados em que as permissões precisam ser concedidas

    • USER_NAME: o nome do usuário para quem as permissões serão concedidas

Gerar um embedding

O AlloyDB fornece uma função que permite traduzir texto em um embedding de vetor. Em seguida, é possível armazenar esse embedding em seu banco de dados como dados vetoriais e, opcionalmente, usar funções pgvector para basear consultas nele.

Para gerar um embedding usando o AlloyDB, use a função embedding() fornecida pela extensão google_ml_integration:

SELECT embedding( 'MODEL_IDVERSION_TAG', 'TEXT');

Substitua:

  • MODEL_ID: o ID do modelo a ser consultado.

    Se você estiver usando o Model Garden da Vertex AI, especifique textembedding-gecko@003 como o ID do modelo. Esses são os modelos baseados na nuvem que o AlloyDB pode usar para embeddings de texto. Para mais informações, consulte Embeddings de texto.

  • Opcional: VERSION_TAG: a tag da versão do modelo a ser consultada. Adicione @ ao início da tag.

    Se você estiver usando um dos modelos textembedding-gecko em inglês com a Vertex AI, especifique uma das tags de versão, por exemplo, textembedding-gecko@003, listada em Versões de modelo.

    O Google recomenda que você sempre especifique a tag de versão. Se você não especificar a tag de versão, o AlloyDB sempre vai usar a versão mais recente do modelo, o que pode levar a resultados inesperados.

  • TEXT: o texto a ser traduzido em um embedding vetorial.

O exemplo a seguir usa a versão 003 dos modelos em inglês textembedding-gecko para gerar um embedding com base em uma string literal fornecida:

SELECT embedding('textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Armazenar embeddings

Os embeddings gerados usando a extensão google_ml_integration são implementados como matrizes de valores real. Esses embeddings gerados são transmitidos como entradas para funções de extensão pgvector.

Para armazenar esse valor em uma tabela, adicione uma coluna real[]:

ALTER TABLE TABLE ADD COLUMN EMBEDDING_COLUMN real[DIMENSIONS];

Depois de criar uma coluna para armazenar embeddings, é possível preenchê-la com base nos valores já armazenados em outra coluna na mesma tabela:

UPDATE TABLE SET EMBEDDING_COLUMN = embedding('MODEL_IDVERSION_TAG', SOURCE_TEXT_COLUMN);

Substitua:

  • TABLE: o nome da tabela

  • EMBEDDING_COLUMN: o nome da coluna de embedding

  • MODEL_ID: o ID do modelo a ser consultado.

    Se você estiver usando o Model Garden da Vertex AI, especifique textembedding-gecko@003 como o ID do modelo. Esses são os modelos baseados na nuvem que o AlloyDB pode usar para embeddings de texto. Para mais informações, consulte Embeddings de texto.

  • Opcional: VERSION_TAG: a tag da versão do modelo a ser consultada. Adicione @ ao início da tag.

    Se você estiver usando um dos modelos textembedding-gecko em inglês com a Vertex AI, especifique uma das tags de versão, por exemplo, textembedding-gecko@003, listada em Versões de modelo.

    O Google recomenda que você sempre especifique a tag de versão. Se você não especificar a tag de versão, o AlloyDB sempre vai usar a versão mais recente do modelo, o que pode levar a resultados inesperados.

  • SOURCE_TEXT_COLUMN: o nome da coluna que armazena o texto a ser convertido em embeddings

Você também pode usar a função embedding() para converter o texto em um vetor. Você aplica o vetor ao operador vizinho mais próximo pgvector, <->, para encontrar as linhas do banco de dados com os embeddings mais semanticamente semelhantes.

Como embedding() retorna uma matriz real, é necessário transmitir a chamada embedding() para vector para usar esses valores com operadores pgvector.

  CREATE EXTENSION google_ml_integration;
  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <-> embedding('MODEL_IDVERSION_TAG', 'TEXT')
    LIMIT ROW_COUNT

Usar tags de versão do modelo para evitar erros

O Google recomenda que você sempre use uma versão estável do modelo de embeddings escolhido. Na maioria dos modelos, isso significa definir explicitamente uma tag de versão.

Chamar a função embedding() sem especificar a tag de versão do modelo é sintaticamente válido, mas também é propenso a erros.

Se você omitir a tag de versão ao usar um modelo no Model Garden da Vertex AI, a Vertex AI usará a versão mais recente do modelo. Esta pode não ser a versão estável mais recente. Para mais informações sobre as versões de modelo da Vertex AI disponíveis, consulte Versões de modelo.

Uma determinada versão de modelo da Vertex AI sempre retorna a mesma resposta embedding() para uma determinada entrada de texto. Se você não especificar versões de modelo nas chamadas para embedding(), uma nova versão de modelo publicada poderá mudar abruptamente o vetor retornado para uma determinada entrada, causando erros ou outros comportamentos inesperados nos seus apps.

Para evitar esses problemas, sempre especifique a versão do modelo.

Resolver problemas

ERRO: modelo não encontrado para model_id

Mensagem de erro

Quando você tenta gerar uma incorporação usando a função embedding() ou google_ml.embedding(), ocorre o seguinte erro:

ERROR: 'Model not found for model_id:

  • Faça upgrade da extensão google_ml_integration e tente gerar as inclusões novamente.

    ALTER EXTENSION google_ml_integration UPDATE;
    

    Você também pode excluir a extensão e criar novamente.

    DROP extension google_ml_integration;
    CREATE EXTENSION google_ml_integration;
    
  • Se você gerar embeddings usando a função google_ml.embedding(), verifique se o modelo está registrado e se você está usando o model_id correto na consulta.

A seguir