semantic-ranker-default-003.
Vous pouvez utiliser la fonction ai.rank() pour attribuer un score aux documents en fonction de leur pertinence par rapport à une requête et améliorer les résultats de la recherche vectorielle en les reclassant pour un meilleur ordre de requête.
L'API Vertex AI Ranking prend une liste de documents et les classe en fonction de leur pertinence par rapport à une requête donnée (une chaîne de recherche). Lorsque vous utilisez la fonction ai.rank(), elle renvoie des scores indiquant dans quelle mesure un document répond à une requête donnée.
Pour utiliser les instructions de cette page, vous devez comprendre AlloyDB Omni et connaître les concepts de l'IA générative.
AlloyDB Omni réserve et crée le schéma ai.
Avant de commencer
Avant de classer les résultats de recherche, procédez comme suit :
- Configurez l'accès des utilisateurs aux modèles Vertex AI.
- Vérifiez que la dernière version de
google_ml_integrationest installée.Pour vérifier la version installée, exécutez la commande suivante :
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.2 (1 row)
Si l'extension n'est pas installée ou si la version installée est antérieure à la version 1.5.2, mettez-la à jour.
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
Si vous rencontrez des problèmes lors de l'exécution des commandes précédentes ou si l' extension n'est pas mise à jour vers la version 1.5.2 après l'exécution des commandes précédentes, contactez l'assistance Google Cloud.
Pour utiliser la fonctionnalité du moteur de requêtes AlloyDB AI, définissez le
google_ml_integration.enable_ai_query_engineflag suron.- Utilisez un éditeur de texte pour définir le flag suivant dans le fichier de configuration
postgresql.confpour votre installation d'AlloyDB Omni :google_ml_integration.enable_ai_query_engine = on
- Après avoir enregistré le fichier
postgresql.conf, redémarrez le service AlloyDB Omni pour que les modifications prennent effet.sudo systemctl restart alloydbomni18
- Utilisez un éditeur de texte pour définir le flag suivant dans le fichier de configuration
Obtenez les rôles requis pour utiliser les modèles de classement.
Activer 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>
Intégrer Vertex AI et installer l'extension
Pour en savoir plus, consultez Configurer votre installation AlloyDB Omni pour interroger des modèles basés sur le cloud.
Rôles requis
Pour obtenir les autorisations nécessaires pour utiliser les modèles de classement de Discovery Engine, demandez à votre administrateur d'accorder au compte de service AlloyDB Omni le rôle de Identity and Access Management (IAM) Lecteur Discovery Engine (roles/discoveryengine.viewer) sur your project. Pour en savoir plus sur l'attribution de rôles, consultez
Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Classer vos résultats de recherche
La requête SQL suivante montre comment classer vos résultats de recherche :
SELECT
ai.rank(
model_id => 'MODEL_ID',
search_string => 'SEARCH_STRING',
documents => ARRAY['DOCUMENT_1', 'DOCUMENT_2', 'DOCUMENT_3']);
Remplacez les éléments suivants :
| Paramètre | Description |
|---|---|
MODEL_ID |
ID unique du point de terminaison de modèle que vous définissez. |
SEARCH_STRING |
Chaîne de recherche par rapport à laquelle les enregistrements sont classés. |
DOCUMENTS |
Tableau de chaînes de texte uniques que vous souhaitez classer. |
Pour obtenir la liste des modèles de classement Vertex AI compatibles, consultez Modèles compatibles.
Exemples
Pour classer les résultats de recherche à l'aide d'un modèle de classement Vertex AI, exécutez la requête suivante :
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 réponse est un tableau qui affiche chaque document et le score en fonction de sa pertinence par rapport à la requête de recherche. Voici un exemple de réponse :
index | score
-------+------------
2 | 0.33
1 | 0.28
3 | 0.16
(3 rows)
Prenons l'exemple d'une base de données AlloyDB Omni contenant une liste de descriptions d'avis converties en embeddings. L'exemple de code suivant montre comment utiliser le modèle de classement pour récupérer le nom des produits les mieux classés en fonction de la similarité sémantique de leurs descriptions d'avis avec une requête.
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;