semantic-ranker-default-003.
Mit der Funktion ai.rank() können Sie Dokumente anhand ihrer Relevanz für eine Abfrage bewerten und die Ergebnisse der Vektorsuche verbessern, indem Sie sie neu ordnen, um eine bessere Abfragereihenfolge zu erzielen.
Die Vertex AI Ranking API verwendet eine Liste von Dokumenten und ordnet sie danach, wie relevant sie für eine bestimmte Abfrage (eine Suchanfrage) sind. Wenn Sie die Funktion ai.rank() verwenden, werden Ergebnisse dafür zurückgegeben, wie gut ein Dokument eine bestimmte Abfrage beantwortet.
Um die Anleitungen auf dieser Seite zu verwenden, müssen Sie AlloyDB Omni kennen und mit den Konzepten der generativen KI vertraut sein.
AlloyDB Omni reserviert und erstellt das Schema ai.
Hinweis
Bevor Sie Suchergebnisse ordnen, führen Sie die folgenden Schritte aus:
- Konfigurieren Sie den Nutzerzugriff auf Vertex AI-Modelle.
- Prüfen Sie, ob die neueste Version von
google_ml_integrationinstalliert ist.Führen Sie den folgenden Befehl aus, um die installierte Version zu prüfen:
SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration'; extversion ------------ 1.5.2 (1 row)
Wenn die Erweiterung nicht installiert ist oder die installierte Version älter als 1.5.2 ist, aktualisieren Sie die Erweiterung.
CREATE EXTENSION IF NOT EXISTS google_ml_integration; ALTER EXTENSION google_ml_integration UPDATE;
Wenn beim Ausführen der vorherigen Befehle Probleme auftreten oder die Erweiterung nach dem Ausführen der vorherigen Befehle nicht auf Version 1.5.2 aktualisiert wird, wenden Sie sich an den Google Cloud-Support.
Wenn Sie die AlloyDB AI-Abfrage-Engine verwenden möchten, setzen Sie das
google_ml_integration.enable_ai_query_engineFlag aufon.- Legen Sie mit einem Texteditor das folgende Flag in der Konfigurationsdatei
postgresql.conffür Ihre Installation von AlloyDB Omni fest:google_ml_integration.enable_ai_query_engine = on
- Nachdem Sie die Datei
postgresql.confgespeichert haben, starten Sie den AlloyDB Omni-Dienst neu, damit die Änderungen wirksam werden.sudo systemctl restart alloydbomni18
- Legen Sie mit einem Texteditor das folgende Flag in der Konfigurationsdatei
Rufen Sie die erforderlichen Rollen ab, um Rankingmodelle zu verwenden.
Discovery Engine API aktivieren
<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>
In Vertex AI einbinden und Erweiterung installieren
Weitere Informationen finden Sie unter AlloyDB Omni-Installation für das Abfragen cloudbasierter Modelle konfigurieren.
Erforderliche Rollen
Bitten Sie Ihren Administrator, dem AlloyDB Omni-Dienstkonto die Rolle „Discovery Engine Viewer“ (roles/discoveryengine.viewer) in Identity and Access Management (IAM) für your project zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Verwenden von Rankingmodellen aus der Discovery Engine benötigen. Weitere Informationen zum Zuweisen von Rollen finden Sie unter
Zugriff auf Projekte, Ordner und Organisationen verwalten.
Sie können die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.
Suchergebnisse ordnen
Die folgende SQL-Abfrage zeigt, wie Sie Ihre Suchergebnisse ordnen :
SELECT
ai.rank(
model_id => 'MODEL_ID',
search_string => 'SEARCH_STRING',
documents => ARRAY['DOCUMENT_1', 'DOCUMENT_2', 'DOCUMENT_3']);
Ersetzen Sie Folgendes:
| Parameter | Beschreibung |
|---|---|
MODEL_ID |
Eine eindeutige ID für den Modellendpunkt, den Sie definieren. |
SEARCH_STRING |
Eine Suchanfrage, anhand derer die Einträge geordnet werden. |
DOCUMENTS |
Ein Array eindeutiger Textstrings, die Sie ordnen möchten. |
Eine Liste der unterstützten Vertex AI-Rankingmodelle finden Sie unter Unterstützte Modelle.
Beispiele
Führen Sie die folgende Abfrage aus, um Suchergebnisse mit einem Vertex AI-Rankingmodell zu ordnen:
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.']);
Die Antwort ist eine Tabelle mit den einzelnen Dokumenten und der Bewertung basierend auf der Relevanz für die Suchanfrage. Hier ist die Beispielantwort:
index | score
-------+------------
2 | 0.33
1 | 0.28
3 | 0.16
(3 rows)
Stellen Sie sich eine AlloyDB Omni-Beispieldatenbank mit einer Liste von Rezensionsbeschreibungen vor, die in Einbettungen umgewandelt wurden. Das folgende Beispielcode-Snippet zeigt, wie Sie das Rankingmodell verwenden, um den Namen der am besten bewerteten Produkte basierend auf der semantischen Ähnlichkeit ihrer Rezensionsbeschreibungen mit einer Abfrage abzurufen.
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;