Gerar embeddings de texto

A extensão google_ml_integration no AlloyDB para PostgreSQL permite gerar embeddings de texto diretamente em SQL usando funções nos esquemas public e google_ml. É possível chamar a função embedding() no esquema public com qualquer modelo de embedding da Gemini Enterprise Agent Platform sem registrar um endpoint. Para transmitir parâmetros personalizados, como tipos de tarefas ou usar modelos de terceiros, registre o endpoint do modelo e chame a google_ml.embedding() função no esquema google_ml.

Como os embeddings funcionam

Imagine um banco de dados em execução no AlloyDB com as seguintes características:

  • O banco de dados contém uma tabela, items. Cada linha nesta tabela descreve um item que sua empresa vende.

  • A tabela items contém uma coluna, complaints. Essa coluna TEXT armazena reclamações de compradores registradas sobre cada item.

  • O banco de dados se integra ao Model Garden, concedendo acesso aos modelos em inglês gemini-embedding-001.

Embora esse banco de dados armazene reclamações sobre itens, elas são armazenadas como texto simples, dificultando a consulta. Por exemplo, para saber quais itens têm mais reclamações de clientes que receberam a cor errada do produto, realize consultas SQL comuns na tabela, procurando várias correspondências de palavras-chave. No entanto, essa abordagem só corresponde a linhas que contêm essas palavras-chave exatas.

Por exemplo, uma consulta SQL básica, como SELECT * FROM item WHERE complaints LIKE "%wrong color%", não retorna uma linha em que o campo complaints contém apenas The picture shows a blue one, but the one I received was red.

Consultas SQL que usam embeddings com tecnologia LLM podem ajudar a retornar respostas semanticamente semelhantes para essas consultas. Ao aplicar embeddings, é possível consultar a tabela neste exemplo para itens em que as reclamações têm semelhança semântica com um determinado comando de texto, como It was the wrong color.

Para a geração básica de embeddings, selecione um dos esquemas a seguir.

Antes de começar

Para permitir que o AlloyDB gere embeddings, faça o seguinte:

  • Conecte-se ao banco de dados usando psql ou o AlloyDB para PostgreSQL Studio como o usuário postgres.
  • Verifique se a extensão google_ml_integration está instalada.

    Para verificar a versão da extensão com o seguinte comando:

    SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
    

    Se você precisar atualizar a extensão, use o comando ALTER EXTENSION google_ml_integration UPDATE;.

  • Antes de gerar embeddings de um banco de dados do AlloyDB, configure o AlloyDB para trabalhar com a Agent Platform. Para mais informações, consulte Integrar seu banco de dados à Agent Platform.

  • Conceda permissões aos usuários do banco de dados para gerar embeddings.

    Se você usar psql, conecte-se ao banco de dados a que quer conceder permissões:

    \c DB_NAME
    GRANT EXECUTE ON FUNCTION embedding TO "USER_NAME";
    

    Substitua:

    • DB_NAME: o nome do banco de dados a que você quer conceder permissões.
    • USER_NAME: o nome do usuário a que você quer conceder permissões.

    Se você usar o AlloyDB para PostgreSQL Studio, selecione o nome do banco de dados a que quer conceder permissões na lista Banco de dados. Conceda a permissão EXECUTE na função google_ml.embedding ao usuário:

    GRANT EXECUTE ON FUNCTION google_ml.embedding TO "USER_NAME";
    

    Substitua USER_NAME pelo nome do usuário a quem você quer conceder permissões.

Gerar embeddings

Use a função SQL google_ml.embedding() para chamar modelos de embedding de texto.

Para chamar o modelo e gerar embeddings, execute a seguinte consulta:

SELECT
 google_ml.embedding(
   model_id => 'MODEL_ID',
   content => 'CONTENT');

Substitua:

  • MODEL_ID: o ID do modelo qualificado. Por exemplo, gemini-embedding-001.
  • CONTENT: o texto a ser traduzido em um embedding de vetor.

Exemplos de geração de embeddings

Alguns exemplos de como gerar embeddings usando o endpoint de modelo registrado são listados nesta seção.

Modelos de embedding do Gemini

Para gerar embeddings para um endpoint de modelo gemini-embedding-001 registrado, execute a seguinte instrução:

   SELECT
     google_ml.embedding(
       model_id => 'gemini-embedding-001',
       content => 'AlloyDB is a managed, cloud-hosted SQL database service');

Se o cluster do AlloyDB e o endpoint da Gemini Enterprise Agent Platform estiverem em projetos diferentes, siga estas etapas:

  1. Execute a seguinte instrução CALL.

       CALL
         google_ml.create_model(
           model_id => 'gemini-embedding-001',
           model_request_url => 'https://REGION_ID-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/REGION_ID/publishers/google/models/gemini-embedding-001:predict',
           model_provider => 'google',
           model_type => 'text_embedding',
           model_auth_type => 'alloydb_service_agent_iam',
           model_in_transform_fn => 'google_ml.vertexai_text_embedding_input_transform',
           model_out_transform_fn => 'google_ml.vertexai_text_embedding_output_transform'
         );
    
  2. Para gerar embeddings para um endpoint de modelo gemini-embedding-001 registrado, execute a seguinte instrução:

      SELECT
        google_ml.embedding(
          model_id => 'gemini-embedding-001',
          content => 'AlloyDB is a managed, cloud-hosted SQL database service');
    

Modelo de embedding do OpenAI

Para gerar embeddings para um endpoint de modelo registrado text-embedding-ada-002pelo OpenAI, execute a seguinte instrução:

   SELECT
     google_ml.embedding(
       model_id => 'text-embedding-ada-002',
       content => 'e-mail spam');

Para gerar embeddings para endpoints de modelo text-embedding-3-small ou text-embedding-3-large registrados pelo OpenAI, execute a seguinte instrução:

 SELECT
   google_ml.embedding(
     model_id => 'text-embedding-3-small',
     content => 'Vector embeddings in AI');

A seguir