Classificar resultados da pesquisa

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

A API de classificação da Agent Platform 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 quão bem um documento responde a uma determinada consulta.

Para usar as instruções nesta página, você precisa entender o AlloyDB para PostgreSQL e estar familiarizado com 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óximo 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á ativou 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 por seu Google Cloud ID do projeto e PROJECT_NUMBER pelo número do projeto 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 do modelo para classificação não é necessário para modelos da Agent Platform. É possível usar o nome do modelo da Agent Platform como o model_id, que é 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 vetor. Esses resultados são reclassificados para retornar os cinco principais resultados.

    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 uma lista de modelos e casos de uso disponíveis, consulte Modelos compatíveis.

Fazer a integração com a Agent Platform e instalar a extensão

  1. Configure o acesso do usuário aos modelos da Agent Platform.
  2. Verifique se a versão mais recente de 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 Google Cloud suporte.

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

    SQL

    1. Ative o mecanismo de consulta de IA para a sessão atual.
      SET google_ml_integration.enable_ai_query_engine = on;
    2. Ative recursos para um banco de dados específico em todas as 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 google_ml_integration.enable_ai_query_engine flag, siga as etapas em Configurar flags de bancos de dados de uma instância.

    gcloud

    Para usar a CLI gcloud, você pode instalar e inicializar a Google Cloud CLI ou você pode 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 bancos 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 de visualizador do Discovery Engine (roles/discoveryengine.viewer) do Identity and Access Management (IAM) no 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 uma lista dos modelos de classificação da Agent Platform com suporte, 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 a resposta de exemplo:

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

Considere um banco de dados de exemplo 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 similaridade semântica das descrições de avaliação 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