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 Vertex AI RAG Engine with Pinecone verwenden.

Sie können Ihre Pinecone-Datenbankinstanz mit der Vertex AI RAG Engine verwenden, um eine Indexierung und eine vektorbasierte Ähnlichkeitssuche durchzuführen. Bei einer Ähnlichkeitssuche wird nach Text gesucht, der dem gesuchten Text ähnelt. Dazu ist die Verwendung eines Einbettungsmodells erforderlich. Das Einbettungsmodell erzeugt Vektordaten für jeden zu vergleichenden Textabschnitt. Die Ähnlichkeitssuche wird verwendet, um semantische Kontexte für das Grounding abzurufen und so die genauesten Inhalte von Ihrem LLM zurückzugeben.

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

Überlegen, ob Sie Pinecone mit Vertex AI RAG Engine verwenden möchten

Prüfen Sie anhand der folgenden Punkte, ob die Verwendung der Pinecone-Datenbank die beste Wahl für Ihre RAG-Anwendung ist:

  • 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 durch andere Elemente geändert werden kann.

  • Sie müssen einen Pinecone-API-Schlüssel angeben, damit die Vertex AI RAG Engine mit der Pinecone-Datenbank interagieren kann. In der Vertex AI-RAG-Engine wird Ihr Pinecone-API-Schlüssel nicht gespeichert und verwaltet. Stattdessen müssen Sie so vorgehen:

    • Speichern Sie den Schlüssel im Google Cloud Secret Manager.
    • Gewähren Sie dem Dienstkonto Ihres Projekts die Berechtigung, auf Ihr Secret zuzugreifen.
    • 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 geheime Ressource zu.
  • Der RAG-Korpus und der Pinecone-Index haben eine 1:1-Zuordnung. 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-Schnellstartleitfaden finden Sie die Indexkonfigurationen, die für Ihren Index angegeben werden müssen, damit er mit dem RAG-Korpus kompatibel ist.

  2. Sie sollten darauf achten, dass der Speicherort des Pinecone-Index mit dem Speicherort, an dem Sie die Vertex AI-RAG-Engine verwenden, identisch oder in der Nähe ist. Das hat folgende Gründe:

    • Sie möchten die Latenz niedrig halten.
    • Sie möchten die Anforderungen an den Datenstandort erfüllen, die durch anwendbare Gesetze festgelegt sind.
  3. Geben Sie beim Erstellen des Pinecone-Index die Einbettungsdimension an, die mit der Vertex AI RAG Engine verwendet werden soll. Diese Tabelle enthält die Dimensionen oder den Speicherort der Dimensionen:

    Modell Dimensionsgröße
    Eigene Gecko-Daten 768
    Abgestimmtes eigenes Gecko 768
    E5 Weitere Informationen finden Sie unter Open Source-Einbettungsmodelle verwenden.
  4. Wählen Sie einen der folgenden unterstützten Distanzmesswerte aus:

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

Pinecone-API-Schlüssel erstellen

Die Vertex AI-RAG-Engine kann nur über Ihren API-Schlüssel eine Verbindung zu Ihrem Pinecone-Index herstellen, um sich zu authentifizieren und zu autorisieren. 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 in Secret Manager speichern

Ein API-Schlüssel enthält vertrauliche personenidentifizierbare Informationen, die rechtlichen Anforderungen unterliegen. Wenn die vertraulichen personenidentifizierbaren Informationen kompromittiert oder missbraucht werden, kann dies für die jeweilige Person ein erhebliches Risiko oder einen erheblichen Schaden bedeuten. Um Risiken für Einzelpersonen bei der Verwendung von 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 Ihrem Vertex AI RAG Engine-Dienstkonto die Berechtigungen für Ihre Secrets und verwalten Sie die Zugriffssteuerung auf der 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 Hauptkonten 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 Vertex AI RAG Engine und speichern Sie den Namen der Secret-Ressource.

Wenn API-Anfragen an Ihre Pinecone-Indexe gesendet werden, verwendet die Vertex AI-RAG-Engine jedes Dienstkonto, um den API-Schlüssel zu lesen, der den geheimen Ressourcen in Secret Manager aus Ihren Projekten entspricht.

Vertex AI RAG Engine-Dienstkonto bereitstellen

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

Das Dienstkonto hat das folgende 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 einem RAG-Korpus zuordnen. Nachdem die Verknüpfung hergestellt wurde, ist diese Bindung für die gesamte Lebensdauer des RAG-Corpus dauerhaft. Die Verknüpfung kann entweder über die CreateRagCorpus oder die UpdateRagCorpus API erfolgen.

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

  • rag_vector_db_config.pinecone: Mit diesem Feld können Sie die Vektordatenbank auswählen, die Sie Ihrem RAG-Korpus zuordnen möchten. Es muss während des CreateRagCorpus-API-Aufrufs festgelegt werden. Wenn sie nicht festgelegt ist, wird Ihrem RAG-Korpus die Standardvektordatenbank 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 CreateRagCorpus-Aufrufs festlegen oder ihn angeben, wenn Sie die UpdateRagCorpus API 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 CreateRagCorpus-Aufrufs festlegen oder ihn angeben, wenn Sie die UpdateRagCorpus API aufrufen. Solange Sie dieses Feld nicht angeben, können Sie keine Daten in den RAG-Korpus importieren.
    Dieses Feld sollte 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 geheimen Ressource mit Ihren festgelegten Berechtigungen haben, können Sie Ihren RAG-Korpus erstellen und ihn Ihrem Pinecone-Index zuordnen. Das wird in diesem Beispielcode gezeigt.

Wenn Sie zum ersten Mal ein RAG-Corpus erstellen, haben Sie die Dienstkonto-Informationen noch nicht. Die Felder sind jedoch optional und können dem RAG-Corpus über die UpdateRagCorpus API zugeordnet werden.

Ein Beispiel dafür, wie Sie den RAG-Korpus erstellen, ohne die Dienstkontoinformationen anzugeben, finden Sie unter RAG-Korpus ohne Indexname oder API-Schlüssel erstellen.

Python

Bevor Sie dieses Beispiel anwenden, folgen Sie den Python-Einrichtungsschritten 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 Indexname oder API-Schlüssel erstellen

Wenn dies Ihr erster RAG-Korpus ist und Sie keinen Zugriff auf die Details Ihres Dienstkontos haben oder die Bereitstellungsschritte für Ihren Pinecone-Index noch nicht abgeschlossen haben, können Sie Ihren RAG-Korpus trotzdem erstellen. Sie können das RAG-Corpus dann einer leeren Pinecone-Konfiguration zuordnen und die Details später hinzufügen.

Folgendes muss berücksichtigt werden:

  • Wenn Sie den Indexnamen und den Namen des API-Schlüssel-Secrets nicht angeben, können Dateien nicht in den RAG-Korpus importiert werden.
  • Wenn Sie Pinecone als Vektordatenbank für Ihren RAG-Korpus auswählen, kann diese 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 API-Secret-Namen anzugeben. Verwenden Sie die UpdateRagCorpus API, 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 UpdateRagCorpus API können Sie die Konfiguration der Vektordatenbank aktualisieren. Wenn der Name des Pinecone-Index 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 Daten in den RAG-Korpus importieren.

Feld Änderbarkeit Erforderlich oder optional
rag_vector_db_config.vector_db Nach der Auswahl nicht mehr änderbar. Erforderlich
rag_vector_db_config.pinecone.index_name Kann nicht mehr geändert werden, nachdem Sie das Feld für den RAG-Korpus festgelegt haben. 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