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:
- Verifica che l'estensione
google_ml_integration
sia installata. - Verifica che il flag
google_ml_integration.enable_model_support
sia impostato suon
. - Esegui l'integrazione con Vertex AI.
- Abilita l'API Discovery Engine.
- Ottenere i ruoli richiesti per utilizzare i modelli di ranking.
Abilita l'API Discovery Engine
Console
- Abilitare l'API
- Nel passaggio Conferma progetto, fai clic su Avanti per confermare il nome del progetto a cui apporterai le modifiche.
- 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 è obbligatoria 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
- Esegui l'integrazione con Vertex AI.
- Assicurati che sia installata l'ultima versione di
google_ml_integration
.Per controllare la versione installata, esegui questo comando:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.4.3 (1 row)
Se l'estensione non è installata o se la versione installata è precedente alla 1.4.3, aggiornala eseguendo i seguenti comandi:
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.4.3 dopo l'esecuzione dei comandi precedenti, contatta l'assistenza AlloyDB.
Dopo aver verificato che la versione sia aggiornata, installa la funzionalità di anteprima eseguendo la procedura
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)
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;