Gerar embeddings de texto

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 Plataforma de Agentes do Gemini Enterprise 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 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 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 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 funcionar com a Agent Platform. Para mais informações, consulte Integrar seu banco de dados à Plataforma de Agentes.

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

    Para gerar embeddings, conceda a permissão EXECUTE na função google_ml.embedding ao usuário:

    \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 são concedidas.

    • USER_NAME: o nome do usuário para quem as permissões são 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 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 Plataforma de Agentes do Gemini Enterprise 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