In questa pagina viene illustrato come configurare Vertex AI Feature Store come database vettoriale da utilizzare con Vertex AI Knowledge Engine.
Vertex AI Knowledge Engine utilizza un database vettoriale integrato basato su Spanner per archiviare e gestire le rappresentazioni vettoriali dei documenti di testo. Il database vettoriale recupera i documenti pertinenti in base alla loro semantica come una determinata query.
Integrando Vertex AI Feature Store come database vettoriale aggiuntivo, Vertex AI Knowledge Engine può utilizzare Vertex AI Feature Store per gestire dati di grandi dimensioni volumi con bassa latenza, che aiuta a migliorare le prestazioni e la scalabilità delle tue applicazioni RAG.
Configurare un Vertex AI Feature Store
Vertex AI Feature Store, un servizio gestito cloud-native, è un componente essenziale di Vertex AI. Semplifica il machine learning la gestione delle caratteristiche (ML) e la pubblicazione online tramite la possibilità di gestire i dati delle caratteristiche. in una tabella o vista BigQuery. In questo modo, è possibile pubblicare funzionalità online a bassa latenza.
Per le istanze FeatureOnlineStore
create con la pubblicazione online ottimizzata, puoi usufruire di una ricerca di similarità vettoriale per recuperare un elenco di entità semanticamente simili o correlate, note come vicino più prossimo approssimato.
Le sezioni seguenti mostrano come configurare un'istanza di Vertex AI Feature Store per la tua applicazione RAG.
Creare uno schema della tabella BigQuery
Utilizza la console Google Cloud per creare uno schema di tabella BigQuery. Deve contenere i seguenti campi per poter essere utilizzata come origine dati.
Nome campo | Tipo di dati | Stato |
---|---|---|
corpus_id |
String |
Obbligatorio |
file_id |
String |
Obbligatorio |
chunk_id |
String |
Obbligatorio |
chunk_data_type |
String |
Ammette valori Null |
chunk_data |
String |
Ammette valori Null |
file_original_uri |
String |
Ammette valori Null |
embeddings |
Float |
Ripetuto |
Questo esempio di codice mostra come definire lo schema della tabella BigQuery.
# Use this sql query as reference for creating the table
CREATE TABLE `your-project-id.input_us_central1.rag_source_new` (
`corpus_id` STRING ,
`file_id` STRING,
`chunk_id` STRING,
`chunk_data_type` STRING,
`chunk_data` STRING,
`embeddings` ARRAY<FLOAT64>,
`file_original_uri` STRING,
);
Esegui il provisioning di un'istanza FeatureOnlineStore
Per abilitare l'erogazione online delle funzionalità, utilizza l'API CreateFeatureOnlineStore
Vertex AI Feature Store per configurare un'istanza FeatureOnlineStore
. Se
stanno eseguendo il provisioning di un FeatureOnlineStore
per la prima volta, l'operazione potrebbe
richiede circa cinque minuti.
# TODO(developer): Update and uncomment the following lines:
# PROJECT_ID = "your-project-id"
#
# Set feature_online_store_id.
# Example: "rag_fos_test"
# FEATURE_ONLINE_STORE_ID="your-feature-online-store-id"
# Call CreateFeatureOnlineStore to create a FeatureOnlineStore instance
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/featureOnlineStores?feature_online_store_id=${FEATURE_ONLINE_STORE_ID} -d '{
"optimized": {},
}'
# TODO(developer): Update and uncomment the following lines:
# Get operation_id returned in CreateFeatureOnlineStore
# OPERATION_ID="your-operation-id"
# Poll Operation status until done = true in the response
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}
Crea una risorsa FeatureView
Per collegare la tabella BigQuery, che archivia l'origine dati delle caratteristiche, a
l'istanza FeatureOnlineStore
, chiama l'API CreateFeatureView
per creare
FeatureView
risorsa. Quando crei una risorsa FeatureView
, scegli la
metrica della distanza predefinita DOT_PRODUCT_DISTANCE
, che è definita come
il valore negativo del prodotto scalare (un valore DOT_PRODUCT_DISTANCE
più piccolo indica una maggiore
somiglianza).
Questo esempio di codice mostra come creare una risorsa FeatureView
.
# TODO(developer): Update and uncomment the following lines:
# Set feature_view_id
# Example: "feature_view_test"
# FEATURE_VIEW_ID = "your-feature-view-id"
#
# The big_query_uri generated in the above BigQuery table schema creation step
# The format should be "bq://" + BigQuery table ID
# Example: "bq://tester.ragtest1.rag_testdata"
# BIG_QUERY_URI=YOUR_BIG_QUERY_URI
# Call CreateFeatureView API to create a FeatureView
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" \
https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/featureOnlineStores/${FEATURE_ONLINE_STORE_ID}/featureViews?feature_view_id=${FEATURE_VIEW_ID} \
-d '{
"vertex_rag_source": {
"uri": '\""${BIG_QUERY_URI}"\"'
}
}'
# Call ListFeatureViews API to verify the FeatureView is created successfully
curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" -H "Content-Type: application/json" https://us-central1-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/us-central1/featureOnlineStores/${FEATURE_ONLINE_STORE_ID}/featureViews
Caricamento dei dati ed erogazione online
L'API RAG gestisce il caricamento e la pubblicazione online.
Utilizzare Vertex AI Feature Store in Vertex AI Knowledge Engine
Dopo aver configurato l'istanza di Vertex AI Feature Store, procedi come segue viene illustrato come impostarlo come database vettoriale da utilizzare con la finestra RAG un'applicazione.
Utilizza l'istanza di Vertex AI Feature Store come database vettoriale per creare un corpus RAG
Per creare il corpus RAG, devi utilizzare FEATURE_VIEW_RESOURCE_NAME
. La
Il corpus RAG viene creato e associato automaticamente
Vertex AI Feature Store. Le API RAG utilizzano il rag_corpus_id
generato per gestire il caricamento dei dati nell'istanza Vertex AI Feature Store e per recuperare i contesti pertinenti dal rag_corpus_id
.
Questo esempio di codice mostra come utilizzare Vertex AI Feature Store come database vettoriale per creare un corpus RAG.
REST
# TODO(developer): Update and uncomment the following lines:
# CORPUS_DISPLAY_NAME = "your-corpus-display-name"
#
# Full feature view resource name
# Format: projects/${PROJECT_ID}/locations/us-central1/featureOnlineStores/${FEATURE_ONLINE_STORE_ID}/featureViews/${FEATURE_VIEW_ID}
# FEATURE_VIEW_RESOURCE_NAME = "your-feature-view-resource-name"
# Call CreateRagCorpus API to create a new RAG corpus
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" : {
"vertex_feature_store": {
"feature_view_resource_name":'\""${FEATURE_VIEW_RESOURCE_NAME}"\"'
}
}
}'
# Call ListRagCorpora API to verify the RAG corpus is created successfully
curl -sS -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora"
Python
import vertexai
from vertexai.preview import rag
from vertexai.preview.generative_models import GenerativeModel, Tool
# Set Project
PROJECT_ID = "YOUR_PROJECT_ID" # @param {type:"string"}
vertexai.init(project=PROJECT_ID, location="us-central1")
# Configure a Google first-party embedding model
embedding_model_config = rag.EmbeddingModelConfig(
publisher_model="text-embedding-004"
)
# Configure a Vertex AI Feature Store instance for the corpus
FEATURE_VIEW_RESOURCE_NAME = "YOUR_FEATURE_VIEW_RESOURCE_NAME" # @param {type:"string"}
vector_db = rag.VertexFeatureStore(
resource_name=FEATURE_VIEW_RESOURCE_NAME,
)
# Name your corpus
DISPLAY_NAME = "YOUR_DISPLAY_NAME" # @param {type:"string"}
rag_corpus = rag.create_corpus(
display_name=DISPLAY_NAME, embedding_model_config=embedding_model_config, vector_db=vector_db
)
# Check the corpus just created
rag.list_corpora()
Importa file nella tabella BigQuery utilizzando l'API RAG
Utilizza l'API ImportRagFiles
per importare file da Google Cloud Storage o Google Drive nella tabella BigQuery dell'istanza Vertex AI Feature Store. I file sono incorporati e archiviati nella tabella BigQuery.
Questo esempio di codice mostra come importare file in BigQuery utilizzando l'API RAG.
REST
# TODO(developer): Update and uncomment the following lines:
# RAG_CORPUS_ID = "your-rag-corpus-id"
#
# Google Cloud Storage bucket/file location.
# For example, "gs://rag-fos-test/"
# GCS_URIS= "your-gcs-uris"
# Call ImportRagFiles API to embed files and store in the BigQuery table
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/${RAG_CORPUS_ID}/ragFiles:import \
-d '{
"import_rag_files_config": {
"gcs_source": {
"uris": '\""${GCS_URIS}"\"'
},
"rag_file_chunking_config": {
"chunk_size": 512
}
}
}'
# Call ListRagFiles API to verify the files are imported successfully
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora/${RAG_CORPUS_ID}/ragFiles
Python
RAG_CORPUS_RESOURCE = "projects/{PROJECT_ID}/locations/us-central1/ragCorpora/YOUR_RAG_CORPUS_ID"
GS_BUCKET = "YOUR_GS_BUCKET"
response = rag.import_files(
corpus_name=RAG_CORPUS_RESOURCE,
paths=[GS_BUCKET],
chunk_size=512, # Optional
chunk_overlap=100, # Optional
)
Esegui un processo di sincronizzazione per creare un indice FeatureOnlineStore
Dopo aver caricato i dati nella tabella BigQuery, esegui un processo di sincronizzazione per renderli disponibili per la pubblicazione online. Devi
generare un indice FeatureOnlineStore
utilizzando FeatureView
e
il processo di sincronizzazione potrebbe richiedere 20 minuti.
Questo esempio di codice mostra come eseguire un processo di sincronizzazione per creare
un indice FeatureOnlineStore
.
# Call Feature Store SyncFeatureView API to run the synchronization process
curl "https://us-central1-aiplatform.googleapis.com/v1/${FEATURE_VIEW_RESOURCE_NAME}:sync" \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8"
# TODO(developer): Update and uncomment the following lines:
# Call Vertex AI Feature Store GetFeatureViewSync API to check the running synchronization // status
# FEATURE_VIEW_SYNC_ID = "your-feature-view-sync-id" returned in SyncFeatureView
curl "https://us-central1-aiplatform.googleapis.com/v1/${FEATURE_VIEW_RESOURCE_NAME}/featureViewSyncs/${FEATURE_VIEW_SYNC_ID}" \
-X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8"
Recupera i contesti pertinenti utilizzando l'API RAG
Al termine del processo di sincronizzazione, puoi recuperare i contesti pertinenti dall'indice FeatureOnlineStore
tramite l'API RetrieveContexts
.
REST
# TODO(developer): Update and uncomment the following lines:
# RETRIEVAL_QUERY="your-retrieval-query"
#
# Full RAG corpus resource name
# Format:
# "projects/${PROJECT_ID}/locations/us-central1/ragCorpora/${RAG_CORPUS_ID}"
# RAG_CORPUS_RESOURCE="your-rag-corpus-resource"
# Call RetrieveContexts API to retrieve relevant contexts
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1:retrieveContexts \
-d '{
"vertex_rag_store": {
"rag_resources": {
"rag_corpus": '\""${RAG_CORPUS_RESOURCE}"\"',
},
},
"query": {
"text": '\""${RETRIEVAL_QUERY}"\"',
"similarity_top_k": 10
}
}'
```
Python
RAG_CORPUS_RESOURCE = "projects/{PROJECT_ID}/locations/us-central1/ragCorpora/YOUR_RAG_CORPUS_ID"
RETRIEVAL_QUERY = "YOUR_RETRIEVAL_QUERY"
response = rag.retrieval_query(
rag_resources=[
rag.RagResource(
rag_corpus=RAG_CORPUS_RESOURCE,
# Optional: supply IDs from `rag.list_files()`.
# rag_file_ids=["rag-file-1", "rag-file-2", ...],
)
],
text=RETRIEVAL_QUERY,
similarity_top_k=10, # Optional
)
print(response)
Generare contenuti utilizzando l'API Gemini di Vertex AI
Chiama l'API Vertex AI GenerateContent
per utilizzare i modelli Gemini
generare contenuti e specificare RAG_CORPUS_RESOURCE
nella richiesta di recupero
dati dall'indice FeatureOnlineStore
.
REST
# TODO(developer): Update and uncomment the following lines:
# MODEL_ID=gemini-1.5-flash-001
# GENERATE_CONTENT_PROMPT="your-generate-content-prompt"
# GenerateContent with contexts retrieved from the FeatureStoreOnline index
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/publishers/google/models/${MODEL_ID}:generateContent \
-d '{
"contents": {
"role": "user",
"parts": {
"text": '\""${GENERATE_CONTENT_PROMPT}"\"'
}
},
"tools": {
"retrieval": {
"vertex_rag_store": {
"rag_resources": {
"rag_corpus": '\""${RAG_CORPUS_RESOURCE}"\"',
},
"similarity_top_k": 8,
}
}
}
}'
Python
RAG_CORPUS_RESOURCE = "projects/{PROJECT_ID}/locations/us-central1/ragCorpora/YOUR_RAG_CORPUS_ID"
rag_resource = rag.RagResource(
rag_corpus=RAG_CORPUS_RESOURCE,
# Optional: supply IDs from `rag.list_files()`.
# rag_file_ids=["rag-file-1", "rag-file-2", ...],
)
rag_retrieval_tool = Tool.from_retrieval(
retrieval=rag.Retrieval(
source=rag.VertexRagStore(
rag_resources=[
rag.RagResource(
rag_corpus=RAG_CORPUS_RESOURCE,
# Optional: supply IDs from `rag.list_files()`.
# rag_file_ids=["rag-file-1", "rag-file-2", ...],
)
],
similarity_top_k=10, # Optional
),
)
)
rag_model = GenerativeModel(
model_name="gemini-1.5-flash-001", tools=[rag_retrieval_tool]
)
GENERATE_CONTENT_PROMPT="YOUR_GENERATE_CONTENT_PROMPT"
response = rag_model.generate_content(GENERATE_CONTENT_PROMPT)
print(response.text)
Passaggi successivi
- Per scoprire di più sul grounding, consulta la panoramica del grounding.
- Per scoprire di più su Vertex AI Knowledge Engine, consulta Utilizzare Vertex AI Knowledge Engine.
- Per scoprire di più su grounding e RAG, consulta Risposte al suolo utilizzando RAG.