Auf dieser Seite erfahren Sie, wie Sie Ihren RAG-Korpus mit Ihrer Pinecone-Datenbank verbinden.
Sie können auch dieses Notebook RAG Engine with Pinecone verwenden.
Sie können Ihre Pinecone-Datenbankinstanz mit RAG Engine verwenden, um eine Vektorsuche zu indexieren und durchzuführen. Bei einer Ähnlichkeitssuche werden Textabschnitte gesucht, die dem gesuchten Text ähneln. Dazu ist ein Einbettungsmodell erforderlich. Das Einbettungsmodell generiert Vektordaten für jeden verglichenen Textabschnitt. Die Ähnlichkeitssuche wird verwendet, um semantische Kontexte für die Fundierung abzurufen und so die genauesten Inhalte von Ihrem LLM zurückzugeben.
Mit RAG Engine können Sie Ihre vollständig verwaltete Vektordatenbankinstanz weiterhin verwenden. Sie sind für die Bereitstellung verantwortlich. RAG Engine verwendet Ihre Vektordatenbank für Speicherung, Indexverwaltung und Suche.
Überlegen, ob Sie Pinecone mit 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.
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 RAG Engine mit der Pinecone-Datenbank interagieren kann. RAG Engine speichert und verwaltet Ihren Pinecone-API-Schlüssel nicht. Stattdessen müssen Sie so vorgehen:
- Speichern Sie den Schlüssel im Google Cloud Secret Manager.
- Erteilen Sie dem Dienstkonto Ihres Projekts die Berechtigung für den Zugriff auf Ihr Secret.
- Geben Sie RAG Engine Zugriff auf den Ressourcennamen Ihres Secrets.
Wenn Sie mit Ihrem RAG-Corpus interagieren, greift 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 Methode
ragCorpora.createoderragCorpora.patch.
Pinecone-Index erstellen
So erstellen Sie Ihren Pinecone-Index:
Im Pinecone-Schnellstartleitfaden finden Sie die Indexkonfigurationen, die für Ihren Index angegeben werden müssen, damit der Index mit dem RAG-Korpus kompatibel ist.
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 RAG Engine verwenden:
- Sie möchten die Latenz weiterhin niedrig halten.
- Sie möchten die Anforderungen an den Datenstandort erfüllen, die durch anwendbare Gesetze festgelegt sind.
Geben Sie beim Erstellen des Pinecone-Index die Einbettungsdimension an, die mit der RAG Engine verwendet werden soll. Diese Tabelle enthält die Dimensionen oder den Speicherort der Dimensionen:
Modell Dimensionsgröße Eigene Gecko-Daten 768 Abgestimmte eigene Gecko-Modelle 768 E5 Weitere Informationen finden Sie unter Open Source-Einbettungsmodelle verwenden. Wählen Sie einen der folgenden unterstützten Distanzmesswerte aus:
cosinedotproducteuclidean
Optional: Wenn Sie einen podbasierten Index erstellen, müssen Sie
file_idim Feldpod.metadata_config.indexedangeben. Weitere Informationen finden Sie unter Selektive Metadatenindexierung.
Pinecone-API-Schlüssel erstellen
Die RAG Engine kann nur über Ihren API-Schlüssel zur Authentifizierung und Autorisierung eine Verbindung zu Ihrem Pinecone-Index herstellen. Sie müssen der offiziellen Pinecone-Anleitung zur Authentifizierung folgen, um die API-Schlüsselauthentifizierung 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 vertrauliche personenidentifizierbare 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 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 von SPII 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 der Ebene der Secret-Ressource.
Rufen Sie die Berechtigungen Ihres Projekts auf.
Aktivieren Sie die Option Von Google bereitgestellte Rollenzuweisungen einschließen.
Suchen Sie nach dem Dienstkonto im folgenden Format:
service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.comBearbeiten Sie die Hauptkonten des Dienstkontos.
Fügen Sie dem Dienstkonto die Rolle
Secret Manager Secret Accessorhinzu.
Übergeben Sie bei der Erstellung oder Aktualisierung des RAG-Korpus den Namen der Secret-Ressource an die RAG Engine und speichern Sie den Namen der Secret-Ressource.
Wenn API-Anfragen an Ihre Pinecone-Indexe gesendet werden, verwendet RAG Engine jedes Dienstkonto, um den API-Schlüssel zu lesen, der Ihren Secret-Ressourcen in Secret Manager aus Ihren Projekten entspricht.
RAG Engine-Dienstkonto bereitstellen
Wenn Sie das erste RAG-Corpus in Ihrem Projekt erstellen, erstellt 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 RAG Engine verwenden möchten, müssen Sie den Index während der Erstellung mit einem RAG-Corpus verknüpfen. Nach der Verknüpfung ist diese Bindung für die gesamte Lebensdauer des RAG-Corpus dauerhaft. Die Verknüpfung kann entweder mit CreateRagCorpus oder der UpdateRagCorpus API erfolgen.
Damit die Verknüpfung als abgeschlossen gilt, müssen Sie drei Schlüsselfelder für den 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 desCreateRagCorpus-API-Aufrufs festgelegt werden. Wenn sie nicht festgelegt ist, wird Ihrem RAG-Korpus die StandardvektordatenbankRagManagedDbzugewiesen.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 desCreateRagCorpus-Aufrufs festlegen oder ihn beim Aufrufen derUpdateRagCorpus-API angeben.rag_vector_db_config.api_auth.api_key_config.api_key_secret_version: 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 beim Aufruf vonCreateRagCorpusfestlegen oder beim Aufruf derUpdateRagCorpusAPI angeben. Bis Sie dieses Feld 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. Dies wird in diesem Beispielcode veranschaulicht.
Wenn Sie zum ersten Mal einen RAG-Korpus erstellen, haben Sie die Dienstkonto-Informationen noch nicht. Die Felder sind jedoch optional und können dem RAG-Korpus ü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
Folgen Sie der Einrichtungsanleitung für Python in der Kurzanleitung zur Agent Platform mit Clientbibliotheken, bevor Sie dieses Beispiel anwenden.
Richten Sie zur Authentifizierung bei der Agent Platform Standardanmeldedaten für Anwendungen ein. 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 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-Korpus 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.
In diesem Codebeispiel wird gezeigt, 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 | 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 |
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}