Suchergebnisse einstufen

Wählen Sie eine Dokumentationsversion aus:

Informationen zum Ranking und erneuten Ranking von Suchergebnissen für Anwendungen mit Vertex AI-Rankingmodellen wie 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:

  1. Konfigurieren Sie den Nutzerzugriff auf Vertex AI-Modelle.
  2. Prüfen Sie, ob die neueste 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.5.2
      (1 row)
    2. 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.

  3. Wenn Sie die AlloyDB AI-Abfrage-Engine verwenden möchten, setzen Sie das google_ml_integration.enable_ai_query_engine Flag auf on.

    1. Legen Sie mit einem Texteditor das folgende Flag in der Konfigurationsdatei postgresql.conf für Ihre Installation von AlloyDB Omni fest:
      google_ml_integration.enable_ai_query_engine = on
    2. Nachdem Sie die Datei postgresql.conf gespeichert haben, starten Sie den AlloyDB Omni-Dienst neu, damit die Änderungen wirksam werden.
      sudo systemctl restart alloydbomni18
  4. Aktivieren Sie die Discovery Engine API.

  5. 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;

Nächste Schritte