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 riclassificandoli per un ordinamento migliore delle query.
L'API di ranking di Vertex AI accetta un elenco di documenti e li classifica in base alla loro pertinenza rispetto a una determinata query (una stringa di ricerca). Quando utilizzi la funzione ai.rank(), questa restituisce i punteggi relativi alla qualità della risposta di un documento a una determinata query.
Per utilizzare le istruzioni riportate in questa pagina, devi comprendere AlloyDB Omni e conoscere i concetti di AI generativa.
AlloyDB Omni riserva e crea lo schema ai.
Prima di iniziare
Prima di classificare i risultati di ricerca, procedi nel seguente modo:
- Configura l'accesso degli utenti ai modelli di Vertex AI.
- Verifica che sia installata l'ultima versione di
google_ml_integration.Per controllare la versione installata, esegui il seguente comando:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.2 (1 row)
Se l'estensione non è installata o se la versione installata è precedente alla 1.5.2, aggiorna l'estensione.
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
Per utilizzare la funzionalità del motore di query AI di AlloyDB, imposta il
google_ml_integration.enable_ai_query_engineflag suon.- Utilizza un editor di testo per impostare il seguente flag nel file di configurazione
postgresql.confper l'installazione di AlloyDB Omni:google_ml_integration.enable_ai_query_engine = on
- Dopo aver salvato il file
postgresql.conf, riavvia il servizio AlloyDB Omni affinché le modifiche vengano applicate.sudo systemctl restart alloydbomni18
- Utilizza un editor di testo per impostare il seguente flag nel file di configurazione
Ottieni i ruoli richiesti per utilizzare i modelli di ranking.
Abilitare l'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>
Eseguire l'integrazione con Vertex AI e installare l'estensione
Per ulteriori informazioni, consulta Configurare l'installazione di AlloyDB Omni per eseguire query sui modelli basati sul cloud.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per utilizzare i modelli di ranking di Discovery Engine, chiedi all'amministratore di concedere all'account di servizio AlloyDB Omni il ruolo IAM Visualizzatore di 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 |
Un array di stringhe di testo univoche che vuoi classificare. |
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 di 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)
Considera un database AlloyDB Omni di esempio con un elenco di descrizioni delle recensioni convertite in incorporamenti. Il seguente codice campione mostra come utilizzare il modello di ranking per recuperare il nome dei prodotti con il ranking più alto in base alla similarità semantica delle descrizioni delle recensioni rispetto a 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;