Classificar resultados da pesquisa

Selecione uma versão da documentação:

Saiba como classificar e reclassificar os resultados da pesquisa de aplicativos usando modelos de classificação da Vertex AI, como semantic-ranker-default-003. É possível usar a função ai.rank() para classificar 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 Ranking 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 quão bem um documento responde a uma determinada consulta.

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

O AlloyDB Omni reserva e cria o esquema ai.

Antes de começar

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

  1. Configure o acesso do usuário aos modelos da Vertex AI.
  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 suporte do Google Cloud.

  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.

    1. Use um editor de texto para definir a flag a seguir no arquivo de configuração postgresql.conf da instalação do AlloyDB Omni:
      google_ml_integration.enable_ai_query_engine = on
    2. Depois de salvar o arquivo postgresql.conf, reinicie o serviço do AlloyDB Omni para que as mudanças entrem em vigor.
      sudo systemctl restart alloydbomni18
  4. Ative a API Discover Engine.

  5. Receba os papéis necessários para usar modelos de classificação.

Ativar a API Discovery Engine

<p>To use ranking models, you must enable the Discovery Engine API.<br>
    Replace <code><var>PROJECT_ID</var></code> with your
    Google Cloud project ID and <code><var>PROJECT_NUMBER</var></code>
    with your corresponding project number.</p>

<pre class="prettyprint lang-terminal">
    # Enable Discovery Engine API
    gcloud services enable discoveryengine.googleapis.com --project=<var>PROJECT_ID</var>
    gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
    --member="serviceAccount:service-<var>PROJECT_NUMBER</var>@iam.gserviceaccount.com" \
    --role="roles/discoveryengine.viewer"
</pre>

<p>Model registration for ranking isn't required for Vertex AI models.
    You can use the Vertex AI model name as the
    <code>model_id</code>, which is shown in the following example.
</p>

<pre class="prettyprint lang-sh">
    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'])
</pre>

<p>A common use case for the semantic ranker is to rerank the results returned
    by vector search for better query ordering. The following example shows how to
    use the semantic ranking model for this use case. The example retrieves an
    initial result set for the query <code>personal fitness
    equipment</code> using vector search. These results are then re-ranked to
    return the top five results.
</p>

<pre class="prettyprint lang-sh">
    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;
  </pre>

  <p>For a list of available models and use cases, see <a href="/generative-ai-app-builder/docs/ranking#models">Supported models</a>.</p>

Integrar com a Vertex AI e instalar a extensão

Para mais informações, consulte Configurar a instalação do AlloyDB Omni para consultar modelos baseados na nuvem.

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 à conta de serviço do AlloyDB Omni o papel de Leitor 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 matriz de strings de texto exclusivas que você quer classificar.

Para uma lista dos modelos de classificação da Vertex AI com suporte, consulte Modelos com suporte.

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 Omni 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