Classificar resultados da pesquisa

Saiba como classificar e reclassificar os resultados da pesquisa para aplicativos usando modelos de classificação da Vertex AI, como semantic-ranker-default-003. É possível usar a função ai.rank() para pontuar documentos com base na relevância de uma consulta e melhorar os resultados da pesquisa de vetor reclassificando-os para uma melhor ordenação de consultas.

A API Ranking da Vertex AI recebe uma lista de documentos e os classifica com base na relevância deles para uma determinada consulta (uma string de pesquisa). Quando você usa a função ai.rank(), ela retorna pontuações sobre o nível de adequação de um documento para responder a uma determinada consulta.

Para usar as instruções nesta página, você precisa entender o AlloyDB para PostgreSQL e conhecer os conceitos de IA generativa.

O AlloyDB reserva e cria o esquema ai.

Antes de começar

Antes de classificar os resultados da pesquisa, faça o seguinte:

Ativar a API Discovery Engine

Console

  1. Ativar a API
  2. Na etapa Confirmar projeto, clique em Próxima para confirmar o nome do projeto em que você vai fazer mudanças.
  3. Na etapa Ativar APIs, clique em Ativar para ativar a API Discovery Engine. Se você já tiver ativado essa API, ela não vai aparecer aqui.

gcloud

Para usar modelos de classificação, é necessário ativar a API Discovery Engine.
Substitua PROJECT_ID pelo ID do projeto Google Cloud e PROJECT_NUMBER pelo número correspondente.

    # Enable Discovery Engine API
    gcloud services enable discoveryengine.googleapis.com --project=PROJECT_ID
    gcloud projects add-iam-policy-binding PROJECT_ID \
    --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-alloydb.iam.gserviceaccount.com" \
    --role="roles/discoveryengine.viewer"

O registro de modelos para classificação não é necessário para modelos da Vertex AI. É possível usar o nome do modelo da Vertex AI como o model_id, conforme mostrado no exemplo a seguir.

    SELECT index, score
    FROM
      ai.rank(
        model_id => 'semantic-ranker-default-003',
        search_string => 'Affordable family-friendly vacation spots in Southeast Asia?',
        documents =>
    ARRAY[
      'Luxury resorts in South Korea',
      'Family vacation packages for Vietnam: Ha Long Bay and Hoi An',
      'Budget-friendly beaches in Thailand perfect for families',
      'A backpacker guide to solo travel in India'])

Um caso de uso comum para o classificador semântico é reclassificar os resultados retornados pela pesquisa de vetor para uma melhor ordenação de consultas. O exemplo a seguir mostra como usar o modelo de classificação semântica para esse caso de uso. O exemplo recupera um conjunto de resultados inicial para a consulta personal fitness equipment usando a pesquisa de vetores. Esses resultados são reclassificados para retornar os cinco principais.

    WITH initial_ranking AS (
      SELECT id, description, ROW_NUMBER() OVER () AS ref_number
      FROM product
      ORDER BY
        embedding <=> google_ml.embedding(
          'gemini-embedding-001', 'personal fitness equipment')::vector
      LIMIT 10
    ), reranked_results AS (
      SELECT index, score
      FROM ai.rank(
          model_id => 'semantic-ranker-default-003',
          search_string => 'personal fitness equipment',
          documents => (SELECT ARRAY_AGG(description ORDER BY ref_number) FROM initial_ranking),
          top_n => 5)
    )
    SELECT id, description
    FROM initial_ranking, reranked_results
    WHERE initial_ranking.ref_number = reranked_results.index
    ORDER BY reranked_results.score DESC;
  

Para conferir uma lista de modelos e casos de uso disponíveis, consulte Modelos compatíveis.

Integrar com a Vertex AI e instalar a extensão

  1. Configure o acesso do usuário aos modelos da Vertex AI.
  2. Verifique se a versão mais recente do google_ml_integration está instalada.
    1. Para verificar a versão instalada, execute o seguinte comando:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion 
              ------------
              1.5.2
              (1 row)
            
    2. Se a extensão não estiver instalada ou se a versão instalada for anterior à 1.5.2, atualize a extensão.

              CREATE EXTENSION IF NOT EXISTS google_ml_integration;
              ALTER EXTENSION google_ml_integration UPDATE;
            

      Se você tiver problemas ao executar os comandos anteriores ou se a extensão não for atualizada para a versão 1.5.2 depois de executar os comandos anteriores, entre em contato com o suporte doGoogle Cloud .

  3. Para usar a funcionalidade do mecanismo de consulta da IA do AlloyDB, defina a flag google_ml_integration.enable_ai_query_engine como true.

    SQL

    1. Ative o mecanismo de consulta de IA para a sessão atual.
                    SET google_ml_integration.enable_ai_query_engine = true;
                    
    2. Ativar recursos para um banco de dados específico em várias sessões.
                    ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
                    
    3. Ative o mecanismo de consulta de IA para um usuário específico em sessões e bancos de dados.
                    ALTER ROLE postgres SET google_ml_integration.enable_ai_query_engine = 'on';
                  

    Console

    Para modificar o valor da flag google_ml_integration.enable_ai_query_engine, siga as etapas em Configurar flags de bancos de dados de uma instância.

    gcloud

    Para usar a gcloud CLI, você pode instalar e inicializar a CLI do Google Cloud ou usar o Cloud Shell.

    É possível modificar o valor da flag google_ml_integration.enable_ai_query_engine. Para mais informações, consulte Configurar flags de banco de dados de uma instância.

                 gcloud alloydb instances update INSTANCE_ID \
                   --database-flags google_ml_integration.enable_ai_query_engine=on \
                   --region=REGION_ID \
                   --cluster=CLUSTER_ID \
                   --project=PROJECT_ID
                

Funções exigidas

Para receber as permissões necessárias para usar modelos de classificação do Discovery Engine, peça ao administrador para conceder a você o papel Leitor do Discovery Engine (roles/discoveryengine.viewer) do Identity and Access Management (IAM) em your project. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.

Classificar os resultados da pesquisa

A consulta SQL a seguir mostra como classificar seus resultados da pesquisa :

SELECT
  ai.rank(
    model_id => 'MODEL_ID',
    search_string => 'SEARCH_STRING',
    documents => ARRAY['DOCUMENT_1', 'DOCUMENT_2', 'DOCUMENT_3']);

Substitua:

Parâmetro Descrição
MODEL_ID Um ID exclusivo para o endpoint do modelo que você define.
SEARCH_STRING Uma string de pesquisa em relação à qual os registros são classificados.
DOCUMENTS Uma string exclusiva que identifica o registro.

Para conferir uma lista dos modelos de classificação da Vertex AI compatíveis, consulte Modelos compatíveis.

Exemplos

Para classificar os resultados da pesquisa usando um modelo de classificação da Vertex AI, execute a seguinte consulta:

SELECT index, score
FROM
  ai.rank(
    model_id => 'semantic-ranker-default-003',
    search_string => 'AlloyDB is a PostgreSQL compatible AI database that is ready for production.',
    documents =>
      ARRAY[
        'Alloys are made from combination of metals',
        'The best enterprise-ready PostgreSQL database.',
        'You can feel the heat in Alloy apartments.']);

A resposta é uma tabela que mostra cada documento e a pontuação com base na relevância para a consulta de pesquisa. Confira a seguir um exemplo de resposta:

 index | score
-------+------------
     2 |  0.33
     1 |  0.28
     3 |  0.16
(3 rows)

Considere um exemplo de banco de dados do AlloyDB com uma lista de descrições de avaliações convertidas em embeddings. O snippet de exemplo de código a seguir mostra como usar o modelo de classificação para recuperar o nome dos produtos mais bem classificados com base na semelhança semântica das descrições das avaliações com uma consulta.

WITH initial_ranking AS (
    SELECT product_id, name, review, review_id, ROW_NUMBER() OVER () AS ref_number
    FROM user_reviews
    ORDER BY
      review_desc_embedding <=> google_ml.embedding(
        'gemini-embedding-001', 'good desserts')::vector
    LIMIT 10
  ), reranked_results AS (
    SELECT index, score
    FROM
      ai.rank(
        model_id => 'semantic-ranker-512',
        search_string => 'good desserts',
        documents => (SELECT ARRAY_AGG(review ORDER BY ref_number) FROM initial_ranking),
        top_n => 5)
  )
SELECT product_id, name
FROM initial_ranking, reranked_results
WHERE initial_ranking.ref_number = reranked_results.index
ORDER BY reranked_results.score DESC;

A seguir