RagManagedDb mit der Vertex AI RAG Engine verwenden

Auf dieser Seite wird beschrieben, wie die Vertex AI RAG Engine RagManagedDb verwendet. RagManagedDb ist eine unternehmenstaugliche Vektordatenbank, in der Vektordarstellungen Ihrer Dokumente gespeichert und verwaltet werden. Die Vektordatenbank wird dann verwendet, um relevante Dokumente basierend auf der semantischen Ähnlichkeit des Dokuments mit einer bestimmten Anfrage abzurufen.

Außerdem wird auf dieser Seite beschrieben, wie Sie CMEK implementieren.

Abrufstrategie verwalten

RagManagedDb bietet die folgenden Abrufstrategien zur Unterstützung Ihrer RAG-Anwendungsfälle:

Abrufstrategie Beschreibung
k-Nearest Neighbors (KNN) (Standard) Findet die genauen nächsten Nachbarn, indem alle Datenpunkte in Ihrem RAG-Korpus verglichen werden. Wenn Sie beim Erstellen Ihres RAG-Korpus keine Strategie angeben, wird KNN als Standardstrategie für den Abruf verwendet.
  • Überprüft den perfekten Recall (1,0) beim Abrufen.
  • Ideal für Anwendungen, bei denen es auf den Recall ankommt.
  • Ideal für kleine bis mittelgroße RAG-Korpora mit weniger als 10.000 RAG-Dateien.
  • Erfordert die Suche in jedem einzelnen Datenpunkt. Die Latenz nimmt daher mit der Anzahl der RAG-Dateien im Korpus zu.
Annäherung an den nächsten Nachbarn (ANN) Verwendet Näherungstechniken, um ähnliche Nachbarn schneller zu finden als die KNN-Technik.
  • Die Abfragelatenz bei großen RAG-Korpora wird dadurch erheblich reduziert.
  • Der Recall ist aufgrund der verwendeten Näherungstechniken leicht gesunken.
  • Wird sehr effektiv, wenn Sie große RAG-Korpora haben,d. h. etwa mehr als 10.000 RAG-Dateien.
  • Wie viel Trefferquotenverlust für Sie akzeptabel ist, hängt vom Anwendungsfall ab. In den meisten Fällen ist es jedoch ein akzeptabler Kompromiss, etwas Trefferquote im Gegenzug für eine verbesserte Abfrageleistung zu verlieren.

RAG-Korpus mit KNN RagManagedDb erstellen

Dieses Codebeispiel zeigt, wie Sie einen RAG-Korpus mit KNN RagManagedDb erstellen.

Python

from vertexai import rag
import vertexai

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

vector_db = rag.RagManagedDb(retrieval_strategy=rag.KNN())
rag_corpus = rag.create_corpus(
    display_name=DISPLAY_NAME, backend_config=rag.RagVectorDbConfig(vector_db=vector_db))

REST

Ersetzen Sie die folgenden Variablen:

  • PROJECT_ID: Ihre Projekt-ID.
  • LOCATION: Die Region, in der die Anfrage verarbeitet werden soll.
  • CORPUS_DISPLAY_NAME: Der Anzeigename des RAG-Korpus.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
CORPUS_DISPLAY_NAME=CORPUS_DISPLAY_NAME

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
      "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
      "vector_db_config": {
        "ragManagedDb": {
          "knn": {}
        }
      }
    }'

RAG-Korpus mit ANN RagManagedDb erstellen

Für die ANN-Funktion verwendet RagManagedDb eine baumartige Struktur, um Daten zu partitionieren und schnellere Suchvorgänge zu ermöglichen. Um die bestmögliche Erinnerung und Latenz zu erzielen, sollte die Struktur dieses Baums durch Tests an Ihre Datengröße und -verteilung angepasst werden. Mit RagManagedDb können Sie die tree_depth und die leaf_count des Baums konfigurieren.

Mit tree_depth wird die Anzahl der Ebenen im Baum festgelegt. Befolgen Sie diese Richtlinien:

  • Wenn Sie etwa 10.000 RAG-Dateien im RAG-Corpus haben, legen Sie den Wert auf 2 fest.
  • Wenn Sie mehr RAG-Dateien haben, legen Sie diesen Wert auf 3 fest.
  • Wenn tree_depth nicht angegeben ist, weist die Vertex AI RAG Engine diesem Parameter den Standardwert 2 zu.

Der leaf_count bestimmt die Anzahl der Blattknoten in der baumbasierten Struktur. Jeder Blattknoten enthält Gruppen von eng verwandten Vektoren zusammen mit dem entsprechenden Schwerpunkt. Befolgen Sie diese Richtlinien:

  • Der empfohlene Wert ist 10 * sqrt(num of RAG files in your RAG corpus).
  • Wenn nicht angegeben, weist die Vertex AI RAG-Engine diesem Parameter den Standardwert 500 zu.

Python

from vertexai import rag
import vertexai

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
TREE_DEPTH = YOUR_TREE_DEPTH # Optional: Acceptable values are 2 or 3. Default is 2.
LEAF_COUNT = YOUR_LEAF_COUNT # Optional: Default is 500.

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

ann_config = rag.ANN(tree_depth=TREE_DEPTH, leaf_count=LEAF_COUNT)
vector_db = rag.RagManagedDb(retrieval_strategy=ann_config)
rag_corpus = rag.create_corpus(
    display_name=DISPLAY_NAME, backend_config=rag.RagVectorDbConfig(vector_db=vector_db))

REST

Ersetzen Sie die folgenden Variablen:

  • PROJECT_ID: Ihre Projekt-ID.
  • LOCATION: Die Region, in der die Anfrage verarbeitet werden soll.
  • CORPUS_DISPLAY_NAME: Der Anzeigename des RAG-Korpus.
  • TREE_DEPTH: Ihre Baumtiefe.
  • LEAF_COUNT: Die Anzahl der Blätter.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
CORPUS_DISPLAY_NAME=CORPUS_DISPLAY_NAME
TREE_DEPTH=TREE_DEPTH
LEAF_COUNT=LEAF_COUNT

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
      "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
      "vector_db_config": {
        "ragManagedDb": {
          "ann": {
            "tree_depth": '"${TREE_DEPTH}"',
            "leaf_count": '"${LEAF_COUNT}"'
          }
        }
      }
    }'

Daten in ANN RagManagedDb importieren

Sie können entweder die ImportRagFiles API oder die UploadRagFile API verwenden, um Ihre Daten in die ANN RagManagedDb zu importieren. Im Gegensatz zur KNN-Abrufstrategie muss der zugrunde liegende baumbasierte Index beim ANN-Ansatz jedoch mindestens einmal und optional nach dem Importieren großer Datenmengen neu erstellt werden, um einen optimalen Recall zu erzielen. Wenn Sie möchten, dass die Vertex AI-RAG-Engine Ihren ANN-Index neu erstellt, setzen Sie rebuild_ann_index in Ihrer ImportRagFiles API-Anfrage auf „true“.

Folgendes ist wichtig:

  1. Bevor Sie den RAG-Korpus abfragen können, müssen Sie den ANN-Index mindestens einmal neu erstellen.
  2. Pro Projekt und Standort wird nur ein gleichzeitiger Neuaufbau des Index unterstützt.

Informationen zum Hochladen einer lokalen Datei in Ihren RAG-Korpus finden Sie unter RAG-Datei hochladen. Informationen zum Importieren von Daten in Ihr RAG-Korpus und zum Auslösen eines ANN-Index-Neubuilds finden Sie im folgenden Codebeispiel, in dem gezeigt wird, wie Daten aus Cloud Storage importiert werden. Informationen zu den unterstützten Datenquellen finden Sie unter Für RAG unterstützte Datenquellen.

Python

from vertexai import rag
import vertexai

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
CORPUS_ID = YOUR_CORPUS_ID
PATHS = ["gs://my_bucket/my_files_dir"]
REBUILD_ANN_INDEX = REBUILD_ANN_INDEX # Choose true or false.

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)

corpus_name = f"projects/{PROJECT_ID}/locations/{LOCATION}/ragCorpora/{CORPUS_ID}"
# This is a non blocking call.
response = await rag.import_files_async(
    corpus_name=corpus_name,
    paths=PATHS,
    rebuild_ann_index=REBUILD_ANN_INDEX
)

# Wait for the import to complete.
await response.result()

REST

GCS_URI=GCS_URI
REBUILD_ANN_INDEX=<true/false>

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora/${CORPUS_ID}/ragFiles:import \
-d '{
  "import_rag_files_config": {
    "gcs_source": {
      "uris": '\""${GCS_URI}"\"',
      },
    "rebuild_ann_index": '${REBUILD_ANN_INDEX}'
  }
}'

Verschlüsselung verwalten

Die Vertex AI RAG Engine bietet robuste Optionen zum Verwalten der Verschlüsselung Ihrer inaktiven Daten. Standardmäßig werden alle Nutzerdaten in RagManagedDb mit einem Google-owned and Google-managed encryption keyverschlüsselt. Das ist die Standardeinstellung. Mit dieser Standardeinstellung können Sie ohne spezielle Konfiguration überprüfen, ob Ihre Daten sicher sind.

Wenn Sie mehr Kontrolle über die für die Verschlüsselung verwendeten Schlüssel benötigen, unterstützt die Vertex AI RAG Engine vom Kunden verwaltete Verschlüsselungsschlüssel (Customer-Managed Encryption Keys, CMEK). Mit CMEK können Sie Ihre kryptografischen Schlüssel, die in Cloud Key Management Service (KMS) verwaltet werden, zum Schutz Ihrer RAG-Korpusdaten verwenden.

Informationen zu CMEK-Einschränkungen für RAG-Korpora finden Sie unter CMEK-Einschränkungen für die Vertex AI RAG Engine.

KMS-Schlüssel einrichten und Berechtigungen erteilen

Bevor Sie einen mit CMEK verschlüsselten RAG-Korpus erstellen können, müssen Sie einen kryptografischen Schlüssel in Google Cloud KMS einrichten und dem Dienstkonto der Vertex AI RAG Engine die erforderlichen Berechtigungen zum Verwenden dieses Schlüssels erteilen.

Vorbereitung

Prüfen Sie, ob Ihr Nutzerkonto die entsprechenden IAM-Berechtigungen (Identity and Access Management) für das Google Cloud -Projekt hat, in dem Sie den KMS-Schlüssel und den RAG-Korpus erstellen möchten, um die folgenden Einrichtungsschritte auszuführen. Normalerweise ist eine Rolle wie die Cloud KMS-Administratorrolle (roles/cloudkms.admin) erforderlich.

API aktivieren

So aktivieren Sie die Cloud KMS API:

  1. Rufen Sie die Google Cloud -Konsole auf.
  2. Wählen Sie das Projekt aus, in dem Sie Ihre Schlüssel verwalten und Ihren RAG-Korpus erstellen möchten.
  3. Geben Sie in der Suchleiste „Key Management“ ein und wählen Sie den Dienst „Key Management“ aus.
  4. Wenn die API nicht aktiviert ist, klicken Sie auf Aktivieren. Es kann einige Minuten dauern, bis die API vollständig bereitgestellt ist.

KMS-Schlüsselbund und -Schlüssel erstellen

So erstellen Sie ein Schlüsselbund:

  1. Klicken Sie im Abschnitt Schlüsselverwaltung auf Schlüsselbund erstellen.

    Geben Sie Folgendes ein:

    • Schlüsselbundname: Geben Sie einen eindeutigen Namen für den Schlüsselbund ein, z. B. rag-engine-cmek-keys.
    • Standorttyp: Wählen Sie „Region“ aus.
    • Standort: Wählen Sie die ausgewählte Region aus, z. B. us-central1. Diese Region sollte idealerweise mit der Region übereinstimmen, in der sich Ihre RAG Engine-Ressourcen befinden.
  2. Klicken Sie auf Erstellen.

So erstellen Sie einen Schlüssel im Schlüsselbund:

  1. Nachdem Sie den Schlüsselbund erstellt haben, werden Sie aufgefordert, einen Schlüssel zu erstellen. Alternativ können Sie auch zu Schlüssel erstellen navigieren.

    Geben Sie Folgendes ein:

    • Schlüsselname: Geben Sie einen eindeutigen Namen für den Schlüssel ein, z. B. my-rag-corpus-key.
    • Schutzniveau: Wählen Sie ein Schutzniveau aus (Software oder HSM). Wenn Sie hardwaregestützte Schlüssel benötigen, wählen Sie HSM aus.
    • Zweck: Wählen Sie Symmetrisches Ver-/Entschlüsseln aus. Dies ist für CMEK erforderlich.
    • Quelle für Schlüsselmaterial: Wählen Sie Generierter Schlüssel aus.
    • Rotationszeitraum: Optional. Recommended. Konfigurieren Sie einen Schlüsselrotationsplan gemäß den Sicherheitsrichtlinien Ihrer Organisation, z. B. alle 90 Tage.
  2. Klicken Sie auf Erstellen.

So kopieren Sie den Namen der Schlüsselressource:

  1. Rufen Sie nach dem Erstellen des Schlüssels die zugehörige Detailseite auf.

  2. Suchen Sie den Ressourcennamen. Das Format dafür ist projects/YOUR_PROJECT_ID/locations/YOUR_REGION/keyRings/YOUR_KEY_RING_NAME/cryptoKeys/YOUR_KEY_NAME/cryptoKeyVersions/1.

  3. Kopieren Sie den Ressourcennamen und entfernen Sie den Teil /cryptoKeyVersions/VERSION_NUMBER. Der richtig formatierte Ressourcenname lautet projects/YOUR_PROJECT_ID/locations/YOUR_REGION/keyRings/YOUR_KEY_RING_NAME/cryptoKeys/YOUR_KEY_NAME.

Berechtigungen für den Vertex AI RAG Engine-Dienst-Agent erteilen

Damit die Vertex AI RAG-Engine Daten mit Ihrem KMS-Schlüssel verschlüsseln und entschlüsseln kann, benötigt der zugehörige Dienst-Agent die entsprechenden Berechtigungen für diesen bestimmten Schlüssel.

So ermitteln Sie Ihren Vertex AI RAG Engine-Dienst-Agent:

  1. Rufen Sie in der Google Cloud Console für Ihr Projekt die Seite IAM & Verwaltung > IAM auf.

  2. Aktivieren Sie auf der Seite „Identity and Access Management“ das Kästchen Von Google bereitgestellte Rollenzuweisungen einschließen.

  3. Suchen Sie in der Filter- oder Suchleiste für die Liste der Hauptkonten nach dem Dienst-Agent für die Vertex AI RAG Engine. Sie folgt dem Muster service-YOUR_PROJECT_NUMBER@gcp-sa-vertex-rag.iam.gserviceaccount.com.

So erteilen Sie Berechtigungen für den KMS-Schlüssel:

  1. Kehren Sie in der Google Cloud Console zum Key Management Service zurück.

  2. Wählen Sie den Schlüsselbund mit dem von Ihnen erstellten Schlüssel aus.

  3. Wählen Sie den von Ihnen erstellten Schlüssel aus.

  4. Rufen Sie auf der Seite mit den Schlüsseldetails den Tab Berechtigungen auf.

  5. Klicken Sie auf Hauptkonto hinzufügen.

  6. Geben Sie im Feld Neue Hauptkonten die E-Mail-Adresse des Dienst-Agents der Vertex AI RAG Engine ein.

  7. Wählen Sie im Drop-down-Menü Rolle auswählen die Rolle „Cloud KMS CryptoKey-Verschlüsseler/Entschlüsseler“ (roles/cloudkms.cryptoKeyEncrypterDecrypter) aus. Diese Rolle gewährt dem Dienst-Agent die erforderlichen Berechtigungen, um den Schlüssel für Verschlüsselungs- und Entschlüsselungsvorgänge zu verwenden.

  8. Klicken Sie auf Speichern.

RAG-Korpus mit vom Kunden verwalteter Verschlüsselung erstellen

In diesem Codebeispiel wird gezeigt, wie Sie einen RAG-Korpus erstellen, der mit einem vom Kunden verwalteten Verschlüsselungsschlüssel (Customer-Managed Encryption Key, CMEK) verschlüsselt ist.

Ersetzen Sie die Variablen in den folgenden Codebeispielen:

Python

import vertexai
from google.cloud import aiplatform
from vertexai import rag
from google.cloud.aiplatform_v1.types.encryption_spec import EncryptionSpec

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
KMS_KEY_NAME = YOUR_KMS_KEY_NAME

vertexai.init(project=PROJECT_ID)

rag_corpus = rag.create_corpus(display_name=DISPLAY_NAME, encryption_spec=EncryptionSpec(kms_key_name=KMS_KEY_NAME))

REST

PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
KMS_KEY_NAME = YOUR_KMS_KEY_NAME

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
      "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
      "encryption_spec" : {
        "kms_key_name" : '\""${KMS_KEY_NAME}"\"'
      }
    }'

Nächste Schritte