Classificare i risultati di ricerca

Scopri come classificare e riclassificare i risultati di ricerca per le applicazioni utilizzando i modelli di ranking di Vertex AI come semantic-ranker-default-003. Puoi utilizzare la funzione ai.rank() per assegnare un punteggio ai documenti in base alla pertinenza rispetto a una query e migliorare i risultati della ricerca vettoriale riordinandoli per una migliore sequenza di query.

L'API Vertex AI Ranking prende un elenco di documenti e li classifica in base alla loro pertinenza per una determinata query (una stringa di ricerca). Quando utilizzi la funzione ai.rank(), vengono restituiti i punteggi che indicano in che misura un documento risponde a una determinata query.

Per utilizzare le istruzioni riportate in questa pagina, devi avere una conoscenza di AlloyDB per PostgreSQL e familiarità con i concetti di AI generativa.

AlloyDB riserva e crea lo schema ai.

Prima di iniziare

Prima di classificare i risultati di ricerca:

Abilita l'API Discovery Engine

Console

  1. Abilitare l'API
  2. Nel passaggio Conferma progetto, fai clic su Avanti per confermare il nome del progetto a cui apporterai le modifiche.
  3. Nel passaggio Abilita API, fai clic su Abilita per abilitare l'API Discovery Engine. Se hai già abilitato questa API, non la vedrai elencata qui.

gcloud

Per utilizzare i modelli di ranking, devi abilitare l'API Discovery Engine.
Sostituisci PROJECT_ID con il tuo Google Cloud ID progetto e PROJECT_NUMBER con il numero di progetto corrispondente.

    # 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"

La registrazione del modello per il ranking non è richiesta per i modelli Vertex AI. Puoi utilizzare il nome del modello Vertex AI come model_id, come mostrato nell'esempio seguente.

    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'])

Un caso d'uso comune per il ranker semantico è il ricalcolo del ranking dei risultati restituiti dalla ricerca vettoriale per un migliore ordinamento delle query. L'esempio seguente mostra come utilizzare il modello di ranking semantico per questo caso d'uso. L'esempio recupera un insieme di risultati iniziale per la query personal fitness equipment utilizzando la ricerca vettoriale. Questi risultati vengono poi riordinati per restituire i primi cinque risultati.

    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;
  

Per un elenco dei modelli e dei casi d'uso disponibili, consulta Modelli supportati.

Integrare Vertex AI e installare l'estensione

  1. Configura l'accesso degli utenti ai modelli Vertex AI.
  2. Verifica che sia installata l'ultima versione di google_ml_integration.
    1. Per controllare la versione installata, esegui questo comando:

              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion 
              ------------
              1.5.2
              (1 row)
            
    2. Se l'estensione non è installata o se la versione installata è precedente alla 1.5.2, aggiornala.

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

      Se riscontri problemi durante l'esecuzione dei comandi precedenti o se l'estensione non viene aggiornata alla versione 1.5.2 dopo l'esecuzione dei comandi precedenti, contatta l'Google Cloud assistenza.

  3. Per utilizzare la funzionalità del motore di query AlloyDB AI, imposta il flag google_ml_integration.enable_ai_query_engine su true.

    SQL

    1. Attiva il motore di query AI per la sessione corrente.
                    SET google_ml_integration.enable_ai_query_engine = true;
                    
    2. Attiva le funzionalità per un database specifico tra le sessioni.
                    ALTER DATABASE DATABASE_NAME SET google_ml_integration.enable_ai_query_engine = 'on';
                    
    3. Attiva il motore di query AI per un utente specifico in sessioni e database.
                    ALTER ROLE postgres SET google_ml_integration.enable_ai_query_engine = 'on';
                  

    Console

    Per modificare il valore del flag google_ml_integration.enable_ai_query_engine, segui i passaggi descritti in Configurare i flag di database di un'istanza.

    gcloud

    Per utilizzare gcloud CLI, puoi installare e inizializzare Google Cloud CLI oppure puoi utilizzare Cloud Shell.

    Puoi modificare il valore del flag google_ml_integration.enable_ai_query_engine. Per saperne di più, consulta Configurare i flag di database di un'istanza.

                 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
                

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per utilizzare i modelli di ranking di Discovery Engine, chiedi all'amministratore di concederti il ruolo Identity and Access Management (IAM) Visualizzatore Discovery Engine (roles/discoveryengine.viewer) su your project. Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Classificare i risultati di ricerca

La seguente query SQL mostra come classificare i risultati di ricerca :

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

Sostituisci quanto segue:

Parametro Descrizione
MODEL_ID Un ID univoco per l'endpoint del modello che definisci.
SEARCH_STRING Una stringa di ricerca in base alla quale vengono classificati i record.
DOCUMENTS Una stringa univoca che identifica il record.

Per un elenco dei modelli di ranking di Vertex AI supportati, consulta Modelli supportati.

Esempi

Per classificare i risultati di ricerca utilizzando un modello di ranking Vertex AI, esegui la seguente query:

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.']);

La risposta è una tabella che mostra ogni documento e il punteggio in base alla pertinenza rispetto alla query di ricerca. Di seguito è riportato un esempio di risposta:

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

Prendi in considerazione un database AlloyDB di esempio con un elenco di descrizioni di recensioni convertite in incorporamenti. Il seguente snippet di codice campione mostra come utilizzare il modello di ranking per recuperare il nome dei prodotti con il ranking più alto in base alla somiglianza semantica delle descrizioni delle recensioni con una query.

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;

Passaggi successivi