Pinecone mit der Vertex AI RAG Engine verwenden

Auf dieser Seite erfahren Sie, wie Sie Ihren RAG-Korpus mit Ihrer Pinecone Datenbank verbinden.

Sie können auch dieses Notebook verwenden: Vertex AI RAG Engine with Pinecone.

Sie können Ihre Pinecone-Datenbankinstanz mit der Vertex AI RAG Engine verwenden, um eine vektorbasierte Ähnlichkeitssuche durchzuführen und zu indexieren. Bei einer Ähnlichkeitssuche werden Textteile gesucht, die dem gesuchten Text ähneln. Dazu ist ein Einbettungsmodell erforderlich. Das Einbettungsmodell erzeugt Vektordaten für jeden zu vergleichenden Textteil. Die Ähnlichkeitssuche wird verwendet, um semantische Kontexte für Fundierung abzurufen, damit das LLM die genauesten Inhalte zurückgeben kann.

Mit der Vertex AI RAG Engine können Sie Ihre vollständig verwaltete Vektordatenbankinstanz weiterhin verwenden, für deren Bereitstellung Sie verantwortlich sind. Die Vertex AI RAG Engine verwendet Ihre Vektordatenbank für die Speicherung, Indexverwaltung und Suche.

Überlegungen zur Verwendung von Pinecone mit der Vertex AI RAG Engine

Überlegen Sie, ob die Verwendung der Pinecone-Datenbank die beste Wahl für Ihre RAG-Anwendung ist. Berücksichtigen Sie dabei Folgendes:

  • Sie müssen die Skalierung Ihrer Pinecone-Datenbankinstanz erstellen, konfigurieren und verwalten.

  • Die Vertex AI RAG Engine verwendet den Standard-Namespace in Ihrem Index. Achten Sie darauf, dass dieser Namespace nicht von anderen Elementen geändert werden kann.

  • Sie müssen einen Pinecone-API-Schlüssel angeben, mit dem die Vertex AI RAG Engine mit der Pinecone-Datenbank interagieren kann. Die Vertex AI RAG Engine speichert und verwaltet Ihren Pinecone-API-Schlüssel nicht. Stattdessen müssen Sie Folgendes tun:

    • Speichern Sie Ihren Schlüssel im Google Cloud Secret Manager.
    • Gewähren Sie dem Dienstkonto Ihres Projekts Berechtigungen für den Zugriff auf Ihr Secret.
    • Gewähren Sie der Vertex AI RAG Engine Zugriff auf den Ressourcennamen Ihres Secrets.
    • Wenn Sie mit Ihrem RAG-Korpus interagieren, greift die Vertex AI RAG Engine mit Ihrem Dienstkonto auf Ihre Secret-Ressource zu.
  • Es gibt eine 1:1-Zuordnung zwischen dem RAG-Korpus und dem Pinecone-Index. Diese Zuordnung erfolgt im Rahmen des CreateRagCorpus API Aufrufs oder des UpdateRagCorpus API-Aufrufs.

Pinecone-Index erstellen

So erstellen Sie Ihren Pinecone-Index:

  1. Im Pinecone-Schnellstart leitfaden finden Sie die Indexkonfigurationen, die für Ihren Index angegeben werden müssen, damit er mit dem Index RAG-Korpus kompatibel ist.

  2. Der Speicherort des Pinecone Index sollte aus folgenden Gründen mit dem Speicherort übereinstimmen oder in der Nähe des Speicherorts liegen, an dem Sie die Vertex AI RAG Engine verwenden:

    • Sie möchten die Latenzzeiten reduzieren.
    • Sie möchten die Anforderungen an den Datenstandort erfüllen, die durch geltende Gesetze festgelegt sind.
  3. Geben Sie beim Erstellen des Pinecone-Index die Einbettungsdimension an, die mit der Vertex AI RAG Engine verwendet werden soll. In dieser Tabelle finden Sie die Dimensionsgrößen oder den Speicherort der Dimensionsgrößen:

    Modell Dimensionsgröße
    Selbst erhobene Daten – Gecko 768
    Optimiertes Gecko-Modell mit selbst erhobenen Daten 768
    E5 Weitere Informationen finden Sie unter Open Source-Einbettungsmodelle verwenden.
  4. Wählen Sie eine der folgenden unterstützten Distanzmetriken aus:

    • cosine
    • dotproduct
    • euclidean
  5. Optional: Wenn Sie einen podbasierten Index erstellen, müssen Sie die file_id im Feld pod.metadata_config.indexed angeben. Weitere Informationen finden Sie unter Selektive Metadaten indexierung.

Pinecone-API-Schlüssel erstellen

Die Vertex AI RAG Engine kann nur mit Ihrem API-Schlüssel für die Authentifizierung und Autorisierung eine Verbindung zu Ihrem Pinecone-Index herstellen. Sie müssen der offiziellen Pinecone-Anleitung zur Authentifizierung folgen, um die API-Schlüssel-basierte Authentifizierung in Ihrem Pinecone Projekt zu konfigurieren.

API-Schlüssel im Secret Manager speichern

Ein API-Schlüssel enthält vertrauliche personenidentifizierbare Informationen (Sensitive Personally Identifiable Information, SPII), die gesetzlichen Anforderungen unterliegen. Wenn die SPII-Daten kompromittiert oder missbraucht werden, kann dies für eine Person ein erhebliches Risiko oder Schaden bedeuten. Um die Risiken für eine Person bei der Verwendung der Vertex AI RAG Engine zu minimieren, sollten Sie Ihren API-Schlüssel nicht speichern und verwalten und den unverschlüsselten API-Schlüssel nicht weitergeben.

Zum Schutz von SPII müssen Sie Folgendes tun:

  1. Speichern Sie Ihren API-Schlüssel in Secret Manager.

  2. Gewähren Sie dem Dienstkonto der Vertex AI RAG Engine die Berechtigungen für Ihre Secrets und verwalten Sie die Zugriffssteuerung auf Ebene der Secret-Ressource.

    1. Rufen Sie die Berechtigungen Ihres Projekts auf.

    2. Aktivieren Sie die Option Von Google bereitgestellte Rollenzuweisungen einschließen.

    3. Suchen Sie nach dem Dienstkonto im folgenden Format:

      service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.com

    4. Bearbeiten Sie die Prinzipale des Dienstkontos.

    5. Fügen Sie dem Dienstkonto die Rolle Secret Manager Secret Accessor hinzu.

  3. Übergeben Sie beim Erstellen oder Aktualisieren des RAG-Korpus den Namen der Secret-Ressource an die Vertex AI RAG Engine und speichern Sie ihn.

Bei API-Anfragen an Ihre Pinecone-Indizes verwendet die Vertex AI RAG Engine jedes Dienstkonto, um den API-Schlüssel zu lesen, der Ihren Secret-Ressourcen im Secret Manager in Ihren Projekten entspricht.

Dienstkonto der Vertex AI RAG Engine bereitstellen

Wenn Sie den ersten RAG-Korpus in Ihrem Projekt erstellen, erstellt die Vertex AI RAG Engine ein dediziertes Dienstkonto. Sie finden Ihr Dienstkonto auf der Seite „ Identitäts- und Zugriffsverwaltung“ Ihres Projekts.

Das Dienstkonto hat dieses feste Format:

service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.com

Beispiel:

service-123456789@gcp-sa-vertex-rag.iam.gserviceaccount.com

RAG-Korpus vorbereiten

Wenn Sie Ihren Pinecone-Index mit der Vertex AI RAG Engine verwenden möchten, müssen Sie den Index während der Erstellung mit einem RAG-Korpus verknüpfen. Nach der Verknüpfung ist diese Bindung für die gesamte Lebensdauer des RAG-Korpus dauerhaft. Die Verknüpfung kann entweder mit der API CreateRagCorpus oder UpdateRagCorpus erfolgen.

Damit die Verknüpfung als abgeschlossen gilt, müssen Sie drei Schlüsselfelder im RAG-Korpus festlegen:

  • rag_vector_db_config.pinecone: Mit diesem Feld können Sie eine Vektordatenbank auswählen, die Sie mit Ihrem RAG-Korpus verknüpfen möchten. Es muss während des API-Aufrufs CreateRagCorpus festgelegt werden. Wenn es nicht festgelegt ist, wird Ihrem RAG-Korpus die Standardauswahl für die Vektordatenbank RagManagedDb zugewiesen.

  • rag_vector_db_config.pinecone.index_name: Dies ist der Name, der zum Erstellen des Pinecone-Index verwendet wird, der mit dem RAG-Korpus verwendet wird. Sie können den Namen während des Aufrufs CreateRagCorpus festlegen oder ihn angeben, wenn Sie die API UpdateRagCorpus aufrufen.

  • rag_vector_db_config.api_auth.api_key_config.api_key_secret_version: Dies ist der vollständige Ressourcenname des Secrets, das im Secret Manager gespeichert ist und Ihren Pinecone-API-Schlüssel enthält. Sie können den Namen während des Aufrufs CreateRagCorpus festlegen oder ihn angeben, wenn Sie die API UpdateRagCorpus aufrufen. Solange Sie dieses Feld nicht angeben, können Sie keine Daten in den RAG-Korpus importieren.
    Dieses Feld muss das folgende Format haben:
    projects/{PROJECT_NUMBER}/secrets/{SECRET_ID}/versions/{VERSION_ID}

RAG-Korpus erstellen

Wenn Sie Zugriff auf den Namen Ihres Pinecone-Index und den Namen der Secret-Ressource haben und Ihre Berechtigungen festgelegt sind, können Sie Ihren RAG-Korpus erstellen und ihn mit Ihrem Pinecone-Index verknüpfen. Dies wird in diesem Beispielcode gezeigt.

Wenn Sie zum ersten Mal einen RAG-Korpus erstellen, sind die Dienstkontoinformationen noch nicht verfügbar. Die Felder sind jedoch optional und können mit der API UpdateRagCorpus mit dem RAG-Korpus verknüpft werden.

Ein Beispiel für das Erstellen des RAG-Korpus ohne Angabe der Dienst kontoinformationen finden Sie unter RAG-Korpus ohne Indexnamen oder API Schlüssel erstellen.

Python

Bevor Sie dieses Beispiel anwenden, folgen Sie der Python Einrichtungsanleitung in der Vertex AI-Kurzanleitung zur Verwendung von Clientbibliotheken. Weitere Informationen finden Sie in der Referenzdokumentation zur Vertex AI Python API.

Richten Sie zur Authentifizierung bei Vertex AI Standardanmeldedaten für Anwendungen ein. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.


from vertexai import rag
import vertexai

# TODO(developer): Update and un-comment below lines
# PROJECT_ID = "your-project-id"
# pinecone_index_name = "pinecone-index-name"
# pinecone_api_key_secret_manager_version = "projects/{PROJECT_ID}/secrets/{SECRET_NAME}/versions/latest"
# display_name = "test_corpus"
# description = "Corpus Description"

# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location="us-central1")

# Configure embedding model (Optional)
embedding_model_config = rag.RagEmbeddingModelConfig(
    vertex_prediction_endpoint=rag.VertexPredictionEndpoint(
        publisher_model="publishers/google/models/text-embedding-005"
    )
)

# Configure Vector DB
vector_db = rag.Pinecone(
    index_name=pinecone_index_name,
    api_key=pinecone_api_key_secret_manager_version,
)

corpus = rag.create_corpus(
    display_name=display_name,
    description=description,
    backend_config=rag.RagVectorDbConfig(
        rag_embedding_model_config=embedding_model_config,
        vector_db=vector_db,
    ),
)
print(corpus)
# Example response:
# RagCorpus(name='projects/1234567890/locations/us-central1/ragCorpora/1234567890',
# display_name='test_corpus', description='Corpus Description', embedding_model_config=...
# ...

REST

   # Set your project ID under which you want to create the corpus
   PROJECT_ID = "YOUR_PROJECT_ID"

   # Choose a display name for your corpus
   CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

   # Set your Pinecone index name
   PINECONE_INDEX_NAME=YOUR_INDEX_NAME

   # Set the full resource name of your secret. Follows the format
   # projects/{PROJECT_NUMER}/secrets/{SECRET_ID}/versions/{VERSION_ID}
   SECRET_RESOURCE_NAME=YOUR_SECRET_RESOURCE_NAME

   # Call CreateRagCorpus API with all the Vector DB information.
   # You can also add the embedding model choice or set other RAG corpus parameters on
   # this call per your choice.
   curl -X POST \
   -H "Authorization: Bearer $(gcloud auth print-access-token)" \
   -H "Content-Type: application/json" \
   https://us-central1-aiplatform.googleapis.com}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora -d '{
         "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
         "rag_vector_db_config" : {
            "pinecone": {"index_name": '\""${PINECONE_INDEX_NAME}"\"'},
            "api_auth": {"api_key_config":
                  {"api_key_secret_version": '\""${SECRET_RESOURCE_NAME}"\"'}
            }
         }
      }'

   # To poll the status of your RAG corpus creation, get the operation_id returned in
   # response of your CreateRagCorpus call.
   OPERATION_ID="YOUR_OPERATION_ID"

   # Poll Operation status until done = true in the response.
   # The response to this call will contain the ID for your created RAG corpus
   curl -X GET \
   -H "Authorization: Bearer $(gcloud auth print-access-token)" \
   -H "Content-Type: application/json" \
   https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/${OPERATION_ID}

RAG-Korpus ohne Indexnamen oder API-Schlüssel erstellen

Wenn dies Ihr erster RAG-Korpus ist und Sie keinen Zugriff auf Ihre Dienst kontodetails haben oder die Bereitstellungsschritte für Ihren Pinecone-Index noch nicht abgeschlossen haben, können Sie trotzdem einen RAG-Korpus erstellen. Anschließend können Sie den RAG-Korpus mit einer leeren Pinecone-Konfiguration verknüpfen und die Details später hinzufügen.

Folgendes ist zu beachten:

  • Wenn Sie den Indexnamen und den Namen des API-Schlüssel-Secrets nicht angeben, können keine Dateien in den RAG-Korpus importiert werden.
  • Wenn Sie Pinecone als Vektordatenbank für Ihren RAG-Korpus auswählen, kann sie später nicht mehr in eine andere Datenbank geändert werden.

Dieses Codebeispiel zeigt, wie Sie einen RAG-Korpus mit Pinecone erstellen, ohne einen Pinecone-Indexnamen oder einen Namen für das API-Secret anzugeben. Verwenden Sie die API UpdateRagCorpus, um die fehlenden Informationen später anzugeben.

Python

import vertexai
from vertexai.preview import rag

# Set Project
PROJECT_ID = "YOUR_PROJECT_ID"
vertexai.init(project=PROJECT_ID, location="us-central1")

# Configure the Pinecone vector DB information
vector_db = rag.Pinecone()

# Name your corpus
DISPLAY_NAME = "YOUR_CORPUS_NAME"

rag_corpus = rag.create_corpus(display_name=DISPLAY_NAME, vector_db=vector_db)

REST

# Set your project ID under which you want to create the corpus
PROJECT_ID = "YOUR_PROJECT_ID"

# Choose a display name for your corpus
CORPUS_DISPLAY_NAME=YOUR_CORPUS_DISPLAY_NAME

# Call CreateRagCorpus API with all the Vector DB information.
# You can also add the embedding model choice or set other RAG corpus parameters on
# this call per your choice.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora -d '{
      "display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
      "rag_vector_db_config" : {
         "pinecone": {}
      }
   }'

# To poll the status of your RAG corpus creation, get the operation_id returned in
# response of your CreateRagCorpus call.
OPERATION_ID="YOUR_OPERATION_ID"

# Poll Operation status until done = true in the response.
# The response to this call will contain the ID for your created RAG corpus
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/${OPERATION_ID}

RAG-Korpus aktualisieren

Mit der API UpdateRagCorpus können Sie die Konfiguration der Vektordatenbank aktualisieren. Wenn der Pinecone-Indexname und die Secret-Version des API-Schlüssels noch nicht festgelegt sind, können Sie die Felder mit der Pinecone API aktualisieren. Die Auswahl einer Vektordatenbank kann nicht aktualisiert werden. Die Angabe des API-Schlüssel-Secrets ist optional. Wenn Sie das API-Schlüssel-Secret jedoch nicht angeben, können Sie keine Daten in den RAG-Korpus importieren.

Feld Veränderlichkeit Erforderlich oder optional
rag_vector_db_config.vector_db Nach der Auswahl nicht mehr veränderbar. Erforderlich
rag_vector_db_config.pinecone.index_name Nachdem Sie das Feld im RAG-Korpus festgelegt haben, nicht mehr veränderbar. Erforderlich
rag_vector_db_config.api_auth.api_key_config.api_key_secret_version Veränderlich. Nachdem Sie den API-Schlüssel festgelegt haben, können Sie ihn nicht mehr entfernen. Optional

Python

import vertexai
from vertexai.preview import rag

# Set Project
PROJECT_ID = "YOUR_PROJECT_ID"
vertexai.init(project=PROJECT_ID, location="us-central1")

# Configure the Pinecone vector DB information
vector_db = rag.Pinecone(index_name=)

# Name your corpus
DISPLAY_NAME = "YOUR_CORPUS_NAME"

rag_corpus = rag.create_corpus(display_name=DISPLAY_NAME, vector_db=vector_db)

REST

# Set your project ID for the corpus that you want to create.
PROJECT_ID = "YOUR_PROJECT_ID"

# Set your Pinecone index name
PINECONE_INDEX_NAME=YOUR_INDEX_NAME

# Set the full resource name of your secret. Follows the format
# projects/{PROJECT_NUMER}/secrets/{SECRET_ID}/versions/{VERSION_ID}
SECRET_RESOURCE_NAME=YOUR_SECRET_RESOURCE_NAME

# Call UpdateRagCorpus API with the Vector DB information.
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com}/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora -d '{
      "rag_vector_db_config" : {
         "pinecone": {"index_name": '\""${PINECONE_INDEX_NAME}"\"'},
         "api_auth": {"api_key_config":
               {"api_key_secret_version": '\""${SECRET_RESOURCE_NAME}"\"'}
         }
      }
   }'

# To poll the status of your RAG corpus creation, get the operation_id returned in
# response of your CreateRagCorpus call.
OPERATION_ID="YOUR_OPERATION_ID"

# Poll Operation status until done = true in the response.
# The response to this call will contain the ID for your created RAG corpus
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/operations/${OPERATION_ID}

Nächste Schritte