Gerar embeddings

Selecione uma versão da documentação:

Nesta página, mostramos como usar o AlloyDB Omni 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.

Com o AlloyDB Omni, é possível 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 a embeddings de texto, consulte Embeddings de texto.

Antes de começar

Para permitir que o AlloyDB Omni gere incorporações, verifique se você atende aos seguintes requisitos:

Restrições regionais

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

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

Extensão de banco de dados obrigatória

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

    CREATE EXTENSION IF NOT EXISTS google_ml_integration;
    

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

  • Defina a flag de 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 Omni, configure o AlloyDB Omni para trabalhar com um modelo de embedding de texto.

Para trabalhar com o modelo de text-embedding-005 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 aos usuários do banco de dados para executar a função embedding para fazer 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 devem ser concedidas

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

Gerar um embedding

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

Para gerar um embedding com o AlloyDB Omni, 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 text-embedding-005 como o ID do modelo. Esses são os modelos baseados na nuvem que o AlloyDB Omni 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 em inglês text-embedding com a Vertex AI, especifique uma das tags de versão, por exemplo, text-embedding-005, listadas 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 usará a versão mais recente do modelo, o que pode gerar resultados inesperados.

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

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

SELECT embedding('text-embedding-005', 'AlloyDB is a managed, cloud-hosted SQL database service.');

Armazenamento dos embeddings

Os embeddings gerados usando a google_ml_integration extensão 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 text-embedding-005 como o ID do modelo. Esses são os modelos baseados na nuvem que o AlloyDB Omni 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 em inglês text-embedding com a Vertex AI, especifique uma das tags de versão, por exemplo, text-embedding-005, listadas 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 usará a versão mais recente do modelo, o que pode gerar resultados inesperados.

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

Você também pode usar a função embedding() para traduzir 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 explicitamente a chamada embedding() para vector para usar esses valores com operadores pgvector.

  CREATE EXTENSION IF NOT EXISTS google_ml_integration;
  CREATE EXTENSION IF NOT EXISTS vector;

  SELECT * FROM TABLE
    ORDER BY EMBEDDING_COLUMN::vector
    <-> embedding('MODEL_IDVERSION_TAG', 'TEXT')::vector
    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 aplicativos.

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

Resolver problemas

ERROR: Model not found for model_id

Mensagem de erro

Quando você tenta gerar um embedding 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 incorporações de novo.

    ALTER EXTENSION IF NOT EXISTS google_ml_integration UPDATE;
    

    Você também pode soltar a extensão e criá-la 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