Classificar os resultados da pesquisa

Nesta página, descrevemos como classificar os resultados da pesquisa para aplicativos usando o endpoint do modelo de classificação da Vertex AI.

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 de acordo com a qualidade da resposta de um documento 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 que você vai mudar.
  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 melhorar a ordenação das 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. Integrar com a 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.4.3
              (1 row)
            
    2. Se a extensão não estiver instalada ou se a versão instalada for anterior à 1.4.3, atualize a extensão executando os seguintes comandos:

              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.4.3 depois de executar os comandos anteriores, entre em contato com o suporte do AlloyDB.

    3. Depois de verificar se a versão está atualizada, instale a funcionalidade de prévia executando o procedimento upgrade_to_preview_version:

              CALL google_ml.upgrade_to_preview_version();
              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.4
              (1 row)
            

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 os 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 código de exemplo 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