Auf dieser Seite erfahren Sie, wie Sie Ihren RAG-Korpus mit Ihrer Pinecone Datenbank verbinden.
Sie können auch diesem Notebook folgen: RAG Engine with Pinecone.
Sie können Ihre Pinecone-Datenbankinstanz mit der RAG Engine verwenden, um eine vektorbasierte Ähnlichkeitssuche durchzuführen. Bei einer Ähnlichkeitssuche werden Textteile gesucht, die dem gesuchten Text ähneln. Dazu ist ein Einbettungsmodellerforderlich. Das Einbettungsmodell erzeugt Vektordaten für jeden zu vergleichenden Textteil. Die Ähnlichkeitssuche wird verwendet, um semantische Kontexte für die Fundierung abzurufen, damit das LLM möglichst genaue Inhalte zurückgeben kann.
Mit der RAG Engine können Sie Ihre vollständig verwaltete Vektordatenbankinstanz weiterhin verwenden, für deren Bereitstellung Sie verantwortlich sind. Die RAG Engine verwendet Ihre Vektordatenbank für die Speicherung, Indexverwaltung und Suche.
Überlegen, ob Sie Pinecone mit der RAG Engine verwenden möchten
Ü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 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 RAG Engine mit der Pinecone-Datenbank interagieren kann. Die 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 RAG Engine Zugriff auf den Ressourcennamen Ihres Secrets.
Wenn Sie mit Ihrem RAG-Korpus interagieren, greift die RAG Engine über Ihr 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 der
ragCorpora.createMethode oder derragCorpora.patchMethode.
Pinecone-Index erstellen
So erstellen Sie Ihren Pinecone-Index:
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.
Der Standort des Pinecone Index sollte aus folgenden Gründen mit dem Standort übereinstimmen oder in der Nähe sein, an dem Sie die RAG Engine verwenden:
- Sie möchten die Latenz reduzieren.
- Sie möchten die Anforderungen an den Datenstandort erfüllen, die durch geltende Gesetze festgelegt sind.
Geben Sie beim Erstellen des Pinecone-Index die Einbettungsdimension an, die mit der 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 für selbst erhobene Daten 768 E5 Weitere Informationen finden Sie unter Open Source-Einbettungsmodelle verwenden. Wählen Sie eine der folgenden unterstützten Distanzmesswerte aus:
cosinedotproducteuclidean
Optional: Wenn Sie einen podbasierten Index erstellen, müssen Sie die
file_idim Feldpod.metadata_config.indexedangeben. Weitere Informationen finden Sie unter Selektive Metadaten indexierung.
Pinecone-API-Schlüssel erstellen
Die RAG Engine kann nur über Ihren API-Schlüssel für die Authentifizierung und Autorisierung eine Verbindung zu Ihrem Pinecone-Index herstellen. Folgen Sie der offiziellen Pinecone-Anleitung zur Authentifizierung, 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 (SPII), die gesetzlichen Anforderungen unterliegen. Wenn die vertraulichen personenidentifizierbaren Informationen 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 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 vertraulicher personenidentifizierbarer Informationen müssen Sie Folgendes tun:
Speichern Sie Ihren API-Schlüssel in Secret Manager.
Gewähren Sie Ihrem RAG Engine-Dienstkonto die Berechtigungen für Ihre Secrets und verwalten Sie die Zugriffssteuerung auf Ebene der Secret-Ressource.
Rufen Sie die Berechtigungen Ihres Projekts auf.
Aktivieren Sie die Option Von Google bereitgestellte Rollenzuweisungen einbeziehen.
Suchen Sie nach dem Dienstkonto im folgenden Format:
service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.comBearbeiten Sie die Prinzipale des Dienstkontos.
Fügen Sie dem Dienstkonto die Rolle
Secret Manager Secret Accessorhinzu.
Übergeben Sie beim Erstellen oder Aktualisieren des RAG-Korpus den Namen der Secret-Ressource an die RAG Engine und speichern Sie ihn.
Bei API-Anfragen an Ihre Pinecone-Indizes verwendet die RAG Engine jedes Dienstkonto, um den API-Schlüssel zu lesen, der Ihren Secret-Ressourcen im Secret Manager in Ihren Projekten entspricht.
RAG Engine-Dienstkonto bereitstellen
Wenn Sie den ersten RAG-Korpus in Ihrem Projekt erstellen, erstellt die 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 RAG Engine verwenden möchten, müssen Sie den Index während der Erstellung einem RAG-Korpus zuordnen. Nach der Zuordnung ist diese Verknüpfung für die gesamte Lebensdauer des RAG-Korpus dauerhaft. Die Zuordnung kann entweder mit der API CreateRagCorpus oder UpdateRagCorpus erfolgen.
Damit die Zuordnung 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 Ihrem RAG-Korpus zuordnen möchten. Es muss während des API-AufrufsCreateRagCorpusfestgelegt werden. Wenn es nicht festgelegt ist, wird Ihrem RAG-Korpus die Standardauswahl für die VektordatenbankRagManagedDbzugewiesen.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 AufrufsCreateRagCorpusfestlegen oder ihn angeben, wenn Sie die APIUpdateRagCorpusaufrufen.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 AufrufsCreateRagCorpusfestlegen oder ihn angeben, wenn Sie die APIUpdateRagCorpusaufrufen. 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 Secret-Ressource haben und Ihre Berechtigungen festgelegt sind, dann können Sie Ihren RAG-Korpus erstellen und ihn Ihrem Pinecone-Index zuordnen. 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 dem RAG-Korpus mit der API UpdateRagCorpus zugeordnet 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
Folgen Sie der Anleitung für die Einrichtung von Python im Agent Platform-Schnellstartleitfaden zur Verwendung von Clientbibliotheken, bevor Sie dieses Beispiel anwenden.
Richten Sie die Standardanmeldedaten für Anwendungen ein, um sich bei der Agent Platform zu authentifizieren. Weitere Informationen finden Sie unter Authentifizierung für eine lokale Entwicklungsumgebung einrichten.
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 Bereitstellung schritte für Ihren Pinecone-Index noch nicht abgeschlossen haben, können Sie trotzdem Ihren RAG-Korpus erstellen. Anschließend können Sie den RAG-Korpus einer leeren Pinecone-Konfiguration zuordnen 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 API-Schlüssel-Secret-Namen 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}