Semantische Suche und Retrieval Augmented Generation durchführen

In dieser Anleitung verwenden Sie ein Remote-Modell mit der Funktion AI.GENERATE_EMBEDDING, um Texteinbettungen in einer BigQuery-Tabelle zu generieren. Anschließend erstellen Sie einen Vektorindex , um die Einbettungen zu indexieren und so die Suchleistung zu verbessern.

Sie verwenden die VECTOR_SEARCH Funktion mit den Einbettungen, um nach ähnlichem Text zu suchen. Die Vektorsuche ist eine Technik zum Vergleichen ähnlicher Objekte mithilfe von Einbettungen. Das sind hochdimensionale numerische Vektoren, die eine bestimmte Entität wie einen Textabschnitt darstellen.

Schließlich führen Sie Retrieval Augmented Generation (RAG) durch, indem Sie Text mit der Funktion AI.GENERATE_TEXT generieren. RAG ist ein KI-Framework, das die Stärken von Systemen für die Informationsbeschaffung (wie Suchmaschinen und Datenbanken) mit den Funktionen von generativen Large Language Models (LLMs) kombiniert. Durch die Kombination Ihrer Daten und Ihres Weltwissens mit den Sprachfähigkeiten von LLM ist Grounded Generation genauer, aktueller und relevanter für Ihre spezifischen Anforderungen.

In dieser Anleitung werden Daten aus dem öffentlichen Dataset Google Patentsuche Research verwendet.

Ziele

  • Ein BigQuery ML-Remote-Modell für ein Gemini Enterprise Agent Platform-Einbettungsmodell erstellen.
  • Das Remote-Modell mit der Funktion AI.GENERATE_EMBEDDING verwenden, um Einbettungen aus Text in einer BigQuery-Tabelle zu generieren.
  • Einen Vektorindex erstellen, um die Einbettungen zu indexieren und so die Suchleistung zu verbessern.
  • Die Funktion VECTOR_SEARCH mit den Einbettungen verwenden, um nach ähnlichem Text zu suchen.
  • RAG durchführen, indem Sie Text mit der Funktion AI.GENERATE_TEXT generieren und Vektorsuchergebnisse verwenden, um die Prompt-Eingabe zu erweitern und die Ergebnisse zu verbessern.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

  • BigQuery ML: You incur costs for the data that you process in BigQuery.
  • Gemini Enterprise Agent Platform: You incur costs for calls to the Agent Platform service that's represented by the remote model.

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Verwenden Sie den Preisrechner.

Neuen Google Cloud Nutzern vonsteht möglicherweise eine kostenlose Testversion zur Verfügung.

Weitere Informationen finden Sie auf den folgenden Preisseiten:

Hinweis

  1. Wählen Sie in der Google Cloud Console auf der Seite für die Projektauswahl ein Projekt vonaus oder erstellen Sie eines Google Cloud .

    Rollen, die zum Auswählen oder Erstellen eines Projekts erforderlich sind

    • Projekt auswählen: Für die Auswahl eines Projekts ist keine bestimmte IAM-Rolle erforderlich. Sie können ein beliebiges Projekt auswählen, für das Ihnen eine Rolle zugewiesen wurde.
    • Projekt erstellen: Zum Erstellen eines Projekts benötigen Sie die Rolle „Projektersteller“ (roles/resourcemanager.projectCreator), die die resourcemanager.projects.create Berechtigung enthält. Rollen zuweisen.

    Zur Projektauswahl

  2. Prüfen Sie, ob für Ihr Google Cloud Projekt die Abrechnung aktiviert ist.

  3. Aktivieren Sie die BigQuery, Cloud Storage und Gemini Enterprise Agent Platform APIs.

    Rollen, die zum Aktivieren von APIs erforderlich sind

    Zum Aktivieren von APIs benötigen Sie die Berechtigung serviceusage.services.enable. Wenn Sie das Projekt erstellt haben, haben Sie diese Berechtigung wahrscheinlich bereits über die Rolle „Inhaber“ (roles/owner). Andernfalls können Sie diese Berechtigung über die Rolle „Service Usage-Administrator“ (roles/serviceusage.serviceUsageAdmin) erhalten. Rollen zuweisen.

    APIs aktivieren

Erforderliche Rollen

Bitten Sie Ihren Administrator, Ihnen die folgenden IAM-Rollen zuzuweisen, um die Berechtigungen zu erhalten, die Sie zum Ausführen dieser Anleitung benötigen:

Weitere Informationen zum Zuweisen von Rollen finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.

Möglicherweise können Sie die erforderlichen Berechtigungen auch über benutzerdefinierte Rollen oder andere vordefinierte Rollen erhalten.

Dataset erstellen

Wählen Sie eine der folgenden Optionen aus, um ein BigQuery-Dataset zu erstellen:

Console

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. Klicken Sie im linken Bereich auf Explorer:

    Hervorgehobener Button für den Explorer-Bereich.

    Wenn der linke Bereich nicht angezeigt wird, klicken Sie auf Linken Bereich maximieren , um ihn zu öffnen.

  3. Maximieren Sie unter Explorer Ihr Projekt und klicken Sie dann auf Datasets.

  4. Klicken Sie auf der Seite Datasets auf Dataset erstellen.

  5. Führen Sie im Bereich Dataset erstellen folgende Schritte aus:

    • Geben Sie unter Dataset-ID bqml_tutorial ein.

    • Wählen Sie unter Datenstandort die Option USA aus.

    Die übrigen Standardeinstellungen bleiben unverändert.

  6. Klicken Sie auf Dataset erstellen.

bq

Verwenden Sie den bq mk --dataset Befehl, um ein neues Dataset zu erstellen.

  1. Erstellen Sie ein Dataset mit dem Namen bqml_tutorial und legen Sie den Datenstandort auf US fest:

    bq mk --dataset \
      --location=US \
      --description "BigQuery ML tutorial dataset." \
      bqml_tutorial
  2. Prüfen Sie, ob das Dataset erstellt wurde:

    bq ls

API

Rufen Sie die datasets.insert Methode mit einer definierten Dataset-Ressource auf:

{
  "datasetReference": {
     "datasetId": "bqml_tutorial"
  }
}

Remote-Modell für die Generierung von Texteinbettungen erstellen

In diesem Abschnitt erstellen Sie ein Remote-Modell, das ein gehostetes Agent Platform-Modell zur Generierung von Texteinbettungen darstellt. Wenn Sie das Modell erstellen, verwenden Sie die DEFAULT Verbindung um die Text Embeddings API aufzurufen und Texteinbettungen mit dem text-embedding-005 Modell zu erhalten. Wenn Sie keine Standardverbindung haben, wird mit der Anweisung CREATE MODEL eine für Sie erstellt.

So erstellen Sie das Texteinbettungsmodell:

  1. Rufen Sie in der Google Cloud Console die Seite BigQuery auf.

    BigQuery aufrufen

  2. Fügen Sie diesen Befehl in den Abfrageeditor ein und klicken Sie dann auf Ausführen, um das Modell zu erstellen:

    CREATE OR REPLACE MODEL `bqml_tutorial.embedding_model`
      REMOTE WITH CONNECTION DEFAULT
      OPTIONS (ENDPOINT = 'text-embedding-005');

    Die Ausführung der Abfrage dauert einige Sekunden. Danach kann über den Bereich Explorer auf das Modell embedding_model zugegriffen werden.

    Sie erhalten eine Bestätigungsnachricht wie die folgende: Successfully created model named embedding_model.

Texteinbettungen generieren

Generieren Sie mit der AI.GENERATE_EMBEDDING Funktion, Texteinbettungen aus Patentabstrakten und schreiben Sie sie dann in eine BigQuery-Tabelle, damit sie durchsucht werden können.

Die Einbettungsgenerierung mit der AI.GENERATE_EMBEDDING Funktion kann aufgrund von Agent Platform LLM Kontingenten oder der Nichtverfügbarkeit des Dienstes fehlschlagen. In diesem Fall werden die Fehlerdetails in der Spalte status in den Abfrageergebnissen zurückgegeben.

Alternative Methoden zur Generierung von Texteinbettungen in BigQuery, siehe die Anleitung Text mit vortrainierten TensorFlow-Modellen einbetten.

Fügen Sie diesen Befehl in den Abfrageeditor ein und klicken Sie dann auf Ausführen, um Texteinbettungen zu generieren:

  CREATE OR REPLACE TABLE bqml_tutorial.embeddings AS
  SELECT * FROM AI.GENERATE_EMBEDDING(
    MODEL bqml_tutorial.embedding_model,
    (
      SELECT *, abstract AS content
      FROM patents-public-data.google_patents_research.publications
      WHERE LENGTH(abstract) > 0 AND LENGTH(title) > 0 AND country = 'Singapore'
    )
  )
  WHERE LENGTH(status) = 0;
  

Die Ausführung dieser Abfrage dauert einige Minuten. Sie erhalten eine Bestätigung Nachricht wie die folgende:This statement created a new table named embeddings.

Vektorindex erstellen

Wenn Sie einen Vektorindex für eine Einbettungsspalte erstellen, wird bei einer Vektorsuche in dieser Spalte die Suchmethode Annäherung an den nächsten Nachbarn verwendet. Diese Methode verbessert die Leistung der Vektorsuche und liefert genauere Ergebnisse, aber die Trefferquote wird reduziert.

Verwenden Sie zum Erstellen eines Vektorindex die CREATE VECTOR INDEX DDL-Anweisung (Datendefinitionssprache). Um zu prüfen, ob der Index verfügbar ist, fragen Sie die Ansicht INFORMATION_SCHEMA.VECTOR_INDEXES ab. Der Wert in der Spalte coverage_percentage muss größer als 0 sein, und der Wert in der Spalte last_refresh_time darf nicht NULL sein.

So erstellen und prüfen Sie den Vektorindex:

  1. Fügen Sie diesen Befehl in den Abfrageeditor ein und klicken Sie dann auf Ausführen, um den Vektorindex zu erstellen:

    CREATE OR REPLACE VECTOR INDEX my_index
    ON `bqml_tutorial.embeddings`(embedding)
    OPTIONS(index_type = 'IVF',
      distance_type = 'COSINE',
      ivf_options = '{"num_lists":500}');

    Sie erhalten eine Bestätigungsnachricht wie die folgende: The vector index creation on table bqml_tutorial.embeddings was initiated. Please query bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES to check the progress of the index.

    Das Erstellen eines Vektorindex dauert in der Regel nur wenige Sekunden. Es dauert weitere zwei bis drei Minuten, bis der Vektorindex asynchron ausgefüllt wird.

  2. Fügen Sie diesen Befehl in den Abfrageeditor ein und klicken Sie dann auf Ausführen, um zu prüfen, ob der Index verwendet werden kann:

    SELECT table_name, index_name, index_status,
    coverage_percentage, last_refresh_time, disable_reason
    FROM `PROJECT_ID.bqml_tutorial.INFORMATION_SCHEMA.VECTOR_INDEXES`;

    Ersetzen Sie PROJECT_ID durch Ihre Projekt-ID.

    Nachdem Sie die Abfrage ausgeführt haben, ist der Index verfügbar, wenn in der Spalte index_status in den Ergebnissen angezeigt wird, dass der Index ACTIVE ist, und wenn der Wert für coverage_percentage 100 ist.

Mit dem Vektorindex eine Suche nach Textähnlichkeiten durchführen

Verwenden Sie die VECTOR_SEARCH Funktion , um nach relevanten Patenten zu suchen, die mit Einbettungen übereinstimmen, die aus einer Textabfrage generiert wurden.

Das Argument top_k bestimmt die Anzahl der zurückzugebenden Übereinstimmungen, in diesem Fall fünf. Die Option fraction_lists_to_search bestimmt den Prozentsatz der Vektorindexlisten, die durchsucht werden sollen. Der von Ihnen erstellte Vektorindex hat 500 Listen. Der Wert fraction_lists_to_search von .01 gibt an, dass bei dieser Vektorsuche fünf dieser Listen gescannt werden. Ein niedrigerer fraction_lists_to_search Wert wie hier führt zu einer geringeren Trefferquote und einer schnelleren Leistung.

Weitere Informationen zu Vektorindexlisten finden Sie in der num_lists Vektorindexoption.

Das Modell, mit dem Sie die Einbettungen in dieser Abfrage generieren, muss dasselbe sein wie das, mit dem Sie die Einbettungen in der Tabelle generieren, mit der Sie es vergleichen. Andernfalls sind die Suchergebnisse nicht genau.

Fügen Sie diesen Befehl in den Abfrageeditor ein, und klicken Sie dann auf Ausführen, um eine Suche nach Textähnlichkeiten durchzuführen:

  SELECT query.query, base.publication_number, base.title, base.abstract
  FROM VECTOR_SEARCH(
    TABLE bqml_tutorial.embeddings, 'embedding',
    (
    SELECT embedding, content AS query
    FROM AI.GENERATE_EMBEDDING(
    MODEL bqml_tutorial.embedding_model,
    (SELECT 'improving password security' AS content))
    ),
    top_k => 5, options => '{"fraction_lists_to_search": 0.01}');
  

Die Ausgabe sieht etwa so aus:

+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
|            query            | publication_number |                       title                     |                      abstract                   |
+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+
| improving password security | SG-120868-A1       | Data storage device security method and a...    | Methods for improving security in data stora... |
| improving password security | SG-10201610585W-A  | Passsword management system and process...      | PASSSWORD MANAGEMENT SYSTEM AND PROCESS ...     |
| improving password security | SG-148888-A1       | Improved system and method for...               | IMPROVED SYSTEM AND METHOD FOR RANDOM...        |
| improving password security | SG-194267-A1       | Method and system for protecting a password...  | A system for providing security for a...        |
| improving password security | SG-120868-A1       | Data storage device security...                 | Methods for improving security in data...       |
+-----------------------------+--------------------+-------------------------------------------------+-------------------------------------------------+

Remote-Modell für die Textgenerierung erstellen

Fügen Sie diesen Befehl in den Abfrageeditor ein und klicken Sie dann auf Ausführen, um ein Remote-Modell zu erstellen, das ein gehostetes Agent Platform-Modell zur Textgenerierung darstellt:

  CREATE OR REPLACE MODEL bqml_tutorial.text_model
    REMOTE WITH CONNECTION DEFAULT
    OPTIONS (ENDPOINT = 'gemini-2.5-flash');
  

Sie erhalten eine Bestätigungsnachricht wie die folgende: Successfully created model named text_model.

Durch Vektorsuchergebnisse erweiterten Text generieren

Verwenden Sie die Suchergebnisse als Prompts, um mit der AI.GENERATE_TEXT Funktion Text zu generieren.

Fügen Sie diesen Befehl in den Abfrageeditor ein, und klicken Sie dann auf Ausführen, um die Vektorsuchergebnisse zu erweitern:

  SELECT result AS generated, prompt
  FROM AI.GENERATE_TEXT(
    MODEL bqml_tutorial.text_model,
    (
      SELECT CONCAT(
        'Propose some project ideas to improve user password security using the context below: ',
        STRING_AGG(
          FORMAT("patent title: %s, patent abstract: %s", base.title, base.abstract),
          ',\n')
        ) AS prompt,
      FROM VECTOR_SEARCH(
        TABLE bqml_tutorial.embeddings, 'embedding',
        (
          SELECT embedding, content AS query
          FROM AI.GENERATE_EMBEDDING(
            MODEL bqml_tutorial.embedding_model,
            (SELECT 'improving password security' AS content)
          )
        ),
      top_k => 5, options => '{"fraction_lists_to_search": 0.01}')
    ),
    STRUCT(600 AS max_output_tokens));
  

Die Ausgabe sieht etwa so aus:

+------------------------------------------------+------------------------------------------------------------+
|            generated                           | prompt                                                     |
+------------------------------------------------+------------------------------------------------------------+
| These patents suggest several project ideas to | Propose some project ideas to improve user password        |
| improve user password security.  Here are      | security using the context below: patent title: Active     |
| some, categorized by the patent they build     | new password entry dialog with compact visual indication   |
| upon:                                          | of adherence to password policy, patent abstract:          |
|                                                | An active new password entry dialog provides a compact     |
| **I. Projects based on "Active new password    | visual indication of adherence to password policies. A     |
| entry dialog with compact visual indication of | visual indication of progress towards meeting all          |
| adherence to password policy":**               | applicable password policies is included in the display    |
|                                                | and updated as new password characters are being...        |
+------------------------------------------------+------------------------------------------------------------+

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Herunterfahren , um das Projekt zu löschen.

Wenn Sie das Projekt behalten und die in dieser Anleitung verwendeten Ressourcen löschen möchten, gehen Sie so vor:

  1. Rufen Sie die Seite BigQuery auf.

    BigQuery aufrufen

  2. Maximieren Sie im linken Bereich Ihr Projekt und klicken Sie dann auf Datasets.

  3. Klicken Sie für das Dataset bqml_tutorial auf Weitere Aktionen > Löschen.

  4. Klicken Sie im Dialogfeld Dataset löschen zur Bestätigung auf Löschen.

  5. Klicken Sie im linken Bereich auf Verbindungen.

  6. Klicken Sie für die __default_cloudresource_connection__ Verbindung auf Weitere Aktionen > Löschen.

  7. Geben Sie im Dialogfeld Verbindung löschen delete ein und klicken Sie zur Bestätigung auf Löschen.

Nächste Schritte