Suchergebnisse ranken

Auf dieser Seite wird beschrieben, wie Sie Ihre Suchergebnisse für Anwendungen mit dem Vertex AI-Rankingmodellendpunkt einstufen.

Die Vertex AI Ranking API nimmt eine Liste von Dokumenten entgegen und ordnet sie danach ein, wie relevant sie für eine bestimmte Anfrage (einen Suchstring) sind. Wenn Sie die Funktion ai.rank() verwenden, werden Werte dafür zurückgegeben, wie gut ein Dokument eine bestimmte Anfrage beantwortet.

Um die Anleitungen auf dieser Seite zu verwenden, müssen Sie sich mit AlloyDB for PostgreSQL auskennen und mit generativen KI-Konzepten vertraut sein.

AlloyDB reserviert und erstellt das ai-Schema.

Hinweise

Bevor Sie Suchergebnisse einstufen, führen Sie die folgenden Schritte aus:

Discovery Engine API aktivieren

Console

  1. API aktivieren
  2. Klicken Sie im Schritt Projekt bestätigen auf Weiter, um den Namen des Projekts zu bestätigen, an dem Sie Änderungen vornehmen möchten.
  3. Klicken Sie im Schritt APIs aktivieren auf Aktivieren, um die Discovery Engine API zu aktivieren. Wenn Sie diese API bereits aktiviert haben, wird sie hier nicht aufgeführt.

gcloud

Damit Sie Ranking-Modelle verwenden können, müssen Sie die Discovery Engine API aktivieren.
Ersetzen Sie PROJECT_ID durch Ihre Google Cloud Projekt-ID und PROJECT_NUMBER durch die entsprechende Projektnummer.

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

Die Modellregistrierung für das Ranking ist für Vertex AI-Modelle nicht erforderlich. Sie können den Vertex AI-Modellnamen als model_id verwenden, wie im folgenden Beispiel gezeigt.

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

Ein häufiger Anwendungsfall für den semantischen Ranker ist das erneute Ranking der von der Vektorsuche zurückgegebenen Ergebnisse, um die Reihenfolge der Suchanfragen zu verbessern. Im folgenden Beispiel wird gezeigt, wie das semantische Ranking-Modell für diesen Anwendungsfall verwendet wird. Im Beispiel wird ein erstes Ergebnis-Set für die Abfrage personal fitness equipment mithilfe der Vektorsuche abgerufen. Diese Ergebnisse werden dann neu sortiert, um die fünf besten Ergebnisse zurückzugeben.

    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;
  

Eine Liste der verfügbaren Modelle und Anwendungsfälle finden Sie unter Unterstützte Modelle.

In Vertex AI einbinden und Erweiterung installieren

  1. In Vertex AI einbinden
  2. Prüfen Sie, ob die aktuelle Version von google_ml_integration installiert ist.
    1. 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.4.3
              (1 row)
            
    2. Wenn die Erweiterung nicht installiert ist oder die installierte Version älter als 1.4.3 ist, aktualisieren Sie die Erweiterung mit den folgenden Befehlen:

              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.4.3 aktualisiert wird, wenden Sie sich an den AlloyDB-Support.

    3. Nachdem Sie sichergestellt haben, dass die Version aktuell ist, installieren Sie die Vorschaufunktion, indem Sie die Prozedur upgrade_to_preview_version ausführen:

              CALL google_ml.upgrade_to_preview_version();
              SELECT extversion FROM pg_extension WHERE extname = 'google_ml_integration';
              extversion
              ------------
              1.4.4
              (1 row)
            

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die IAM-Rolle „Discovery Engine Viewer“ (roles/discoveryengine.viewer) für your project zuzuweisen, damit Sie die Berechtigungen erhalten, die Sie zum Verwenden von Rankingmodellen aus 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 einstufen

Die folgende SQL-Abfrage zeigt, wie Sie Ihre Suchergebnisse einstufen :

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, die Sie definieren.
SEARCH_STRING Ein Suchstring, anhand dessen die Datensätze sortiert werden.
DOCUMENTS Ein eindeutiger String, der den Datensatz identifiziert.

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 sortieren:

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, in der jedes Dokument und die Punktzahl basierend auf der Relevanz für die Suchanfrage aufgeführt sind. Hier ist die Beispielantwort:

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

Betrachten Sie eine AlloyDB-Beispieldatenbank mit einer Liste von Rezensionsbeschreibungen, die in Einbettungen konvertiert werden. Im folgenden Codebeispiel wird gezeigt, wie Sie das Ranking-Modell verwenden, um die Namen der am besten bewerteten Produkte basierend auf der semantischen Ähnlichkeit ihrer Rezensionsbeschreibungen mit einer Anfrage 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;

Nächste Schritte