Gerar embeddings

Selecione uma versão da documentação:

A extensão google_ml_integration inclui funções de embedding em dois namespaces diferentes: public e google_ml. Esta página descreve como gerar embeddings de texto usando funções desses namespaces.

A função embedding() no esquema public pode ser usada com qualquer modelo de embedding da Vertex AI sem registrar o endpoint. Se você quiser transmitir informações personalizadas, como o tipo de tarefa, registre o endpoint e use a google_ml.embedding() função no esquema google_ml. Para mais informações sobre como registrar um endpoint, consulte Registrar um modelo.

Como os embeddings funcionam

Imagine um banco de dados em execução no AlloyDB Omni 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 do comprador registradas sobre cada item.

  • O banco de dados se integra ao Model Garden da Vertex AI, 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 corresponde apenas às 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 prompt 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 Omni gere embeddings, faça o seguinte:

  • Execute e conecte-se ao AlloyDB Omni como o usuário postgres.
  • Verifique se a extensão google_ml_integration está instalada.

    CREATE EXTENSION IF NOT EXISTS google_ml_integration CASCADE;

    Se você não tiver as permissões necessárias, entre em contato com o administrador do banco de dados para realizar a atualização. Como alternativa, aguarde a nova versão ser lançada automaticamente no cluster.

  • Verifique se a flag google_ml_integration.enable_model_support está definida como on.
  • Antes de gerar embeddings de um banco de dados do AlloyDB Omni, é necessário configurar o AlloyDB Omni para trabalhar com a Vertex AI.
  • Conceda permissões aos usuários do banco de dados para executar a função de embedding e gerar embeddings:

    \c 'DB_NAME';
    GRANT EXECUTE ON FUNCTION google_ml.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 precisam ser concedidas

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 vetorial.

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 Omni e o endpoint da Vertex AI estiverem em projetos diferentes, faça o seguinte:

  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 da OpenAI

Para gerar embeddings para um endpoint de modelo registrado text-embedding-ada-002 pela 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 pela OpenAI, execute a seguinte instrução:

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

A seguir