En esta página se muestra cómo usa Vertex AI RAG Engine RagManagedDb
, que es una base de datos de vectores preparada para empresas que se usa para almacenar y gestionar representaciones vectoriales de tus documentos. A continuación, la base de datos vectorial se usa para recuperar documentos relevantes en función de la similitud semántica del documento con una consulta determinada.
Además, en esta página se explica cómo implementar CMEK.
Gestionar tu estrategia de recuperación
RagManagedDb
ofrece las siguientes estrategias de recuperación para admitir tus casos de uso de RAG:
Estrategia de recuperación | Descripción | |
---|---|---|
Vecinos más cercanos (KNN) (predeterminado) | Busca los vecinos más cercanos exactos comparando todos los puntos de datos de tu corpus de RAG. Si no especificas una estrategia durante la creación de tu corpus de RAG, se usará KNN como estrategia de recuperación predeterminada. |
|
Vecinos más cercanos aproximados (ANN) | Usa técnicas de aproximación para encontrar vecinos similares más rápido que la técnica KNN. |
|
Crear un corpus de RAG con KNN RagManagedDb
En este ejemplo de código se muestra cómo crear un corpus de RAG mediante KNN RagManagedDb
.
Python
from vertexai import rag
import vertexai
PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)
vector_db = rag.RagManagedDb(retrieval_strategy=rag.KNN())
rag_corpus = rag.create_corpus(
display_name=DISPLAY_NAME, backend_config=rag.RagVectorDbConfig(vector_db=vector_db))
REST
Sustituye las siguientes variables:
- PROJECT_ID: tu ID de proyecto.
- LOCATION: la región en la que se procesará la solicitud.
- CORPUS_DISPLAY_NAME: el nombre visible del corpus de RAG.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
CORPUS_DISPLAY_NAME=CORPUS_DISPLAY_NAME
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"vector_db_config": {
"ragManagedDb": {
"knn": {}
}
}
}'
Crear un corpus de RAG con ANN RagManagedDb
Para ofrecer la función de ANN, RagManagedDb
usa una estructura basada en árbol para particionar los datos y facilitar las búsquedas. Para conseguir la mejor latencia y la mayor capacidad de recuperación, la estructura de este árbol debe configurarse mediante experimentación para adaptarse al tamaño y la distribución de tus datos. RagManagedDb
te permite configurar el tree_depth
y el leaf_count
del árbol.
El tree_depth
determina el número de capas o niveles del árbol.
Sigue estas directrices:
- Si tienes aproximadamente 10.000 archivos RAG en el corpus RAG, asigna el valor 2.
- Si tienes más archivos RAG, asigna el valor 3.
- Si no se especifica
tree_depth
, Vertex AI RAG Engine asigna el valor predeterminado 2 a este parámetro.
El leaf_count
determina el número de nodos hoja de la estructura basada en árbol. Cada nodo hoja contiene grupos de vectores estrechamente relacionados junto con su centroide correspondiente. Sigue estas directrices:
- El valor recomendado es
10 * sqrt(num of RAG files in your RAG corpus)
. Si no se especifica ningún valor, el motor de RAG de Vertex AI asigna el valor predeterminado de 500 a este parámetro.
Python
from vertexai import rag
import vertexai
PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
TREE_DEPTH = YOUR_TREE_DEPTH # Optional: Acceptable values are 2 or 3. Default is 2.
LEAF_COUNT = YOUR_LEAF_COUNT # Optional: Default is 500.
# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)
ann_config = rag.ANN(tree_depth=TREE_DEPTH, leaf_count=LEAF_COUNT)
vector_db = rag.RagManagedDb(retrieval_strategy=ann_config)
rag_corpus = rag.create_corpus(
display_name=DISPLAY_NAME, backend_config=rag.RagVectorDbConfig(vector_db=vector_db))
REST
Sustituye las siguientes variables:
- PROJECT_ID: tu ID de proyecto.
- LOCATION: la región en la que se procesará la solicitud.
- CORPUS_DISPLAY_NAME: el nombre visible del corpus de RAG.
- TREE_DEPTH: la profundidad de tu árbol.
- LEAF_COUNT: número de hojas.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
CORPUS_DISPLAY_NAME=CORPUS_DISPLAY_NAME
TREE_DEPTH=TREE_DEPTH
LEAF_COUNT=LEAF_COUNT
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"vector_db_config": {
"ragManagedDb": {
"ann": {
"tree_depth": '"${TREE_DEPTH}"',
"leaf_count": '"${LEAF_COUNT}"'
}
}
}
}'
Importar tus datos a la ANN RagManagedDb
Puedes usar la API ImportRagFiles
o la API UploadRagFile
para importar tus datos a la ANN RagManagedDb
. Sin embargo, a diferencia de la estrategia de recuperación de KNN, el enfoque de ANN requiere que el índice subyacente basado en árbol se vuelva a compilar al menos una vez y, opcionalmente, después de importar cantidades significativas de datos para obtener una recuperación óptima. Para que Vertex AI RAG Engine vuelva a compilar tu índice ANN, define rebuild_ann_index
como true en tu solicitud de API ImportRagFiles
.
Es importante tener en cuenta lo siguiente:
- Antes de consultar el corpus de RAG, debe volver a compilar el índice ANN al menos una vez.
- Solo se admite una recompilación de índice simultánea en un proyecto de cada ubicación.
Para subir un archivo local a tu corpus de RAG, consulta Subir un archivo de RAG. Para importar datos en tu corpus de RAG y activar una recompilación del índice ANN, consulta el siguiente ejemplo de código, que muestra cómo importar datos de Cloud Storage. Para obtener información sobre las fuentes de datos admitidas, consulta Fuentes de datos admitidas para RAG.
Python
from vertexai import rag
import vertexai
PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
CORPUS_ID = YOUR_CORPUS_ID
PATHS = ["gs://my_bucket/my_files_dir"]
REBUILD_ANN_INDEX = REBUILD_ANN_INDEX # Choose true or false.
# Initialize Vertex AI API once per session
vertexai.init(project=PROJECT_ID, location=LOCATION)
corpus_name = f"projects/{PROJECT_ID}/locations/{LOCATION}/ragCorpora/{CORPUS_ID}"
# This is a non blocking call.
response = await rag.import_files_async(
corpus_name=corpus_name,
paths=PATHS,
rebuild_ann_index=REBUILD_ANN_INDEX
)
# Wait for the import to complete.
await response.result()
REST
GCS_URI=GCS_URI
REBUILD_ANN_INDEX=<true/false>
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora/${CORPUS_ID}/ragFiles:import \
-d '{
"import_rag_files_config": {
"gcs_source": {
"uris": '\""${GCS_URI}"\"',
},
"rebuild_ann_index": '${REBUILD_ANN_INDEX}'
}
}'
Gestionar el cifrado
Vertex AI RAG Engine ofrece opciones sólidas para gestionar cómo se cifran tus datos en reposo. De forma predeterminada, todos los datos de usuario de RagManagedDb
se cifran con Google-owned and Google-managed encryption key, que es el ajuste predeterminado. Este ajuste predeterminado le ayuda a verificar que sus datos están protegidos sin necesidad de realizar ninguna configuración específica.
Si necesitas más control sobre las claves que usas para el cifrado, el motor RAG de Vertex AI admite claves de cifrado gestionadas por el cliente (CMEK). Con las CMEK, puedes usar tus claves criptográficas, gestionadas en Cloud Key Management Service (KMS), para proteger tus datos del corpus de RAG.
Para obtener información sobre las limitaciones de CMEK en los corpora de RAG, consulta Limitaciones de CMEK en el motor de RAG de Vertex AI.
Configurar la clave de KMS y conceder permisos
Antes de crear un corpus de RAG cifrado con CMEK, debes configurar una clave criptográfica en Google Cloud KMS y conceder a la cuenta de servicio del motor de RAG de Vertex AI los permisos necesarios para usar esta clave.
Requisitos previos
Para llevar a cabo los siguientes pasos de configuración, comprueba que tu cuenta de usuario tenga los permisos de gestión de identidades y accesos (IAM) adecuados en el Google Cloud proyecto en el que quieras crear la clave de KMS y el corpus de RAG. Normalmente, se requiere un rol como el de administrador de Cloud KMS (roles/cloudkms.admin
).
Activar la API
Para habilitar la API de Cloud KMS, haz lo siguiente:
- Ve a la Google Cloud consola.
- Selecciona el proyecto en el que quieras gestionar tus claves y crea tu corpus de RAG.
- En la barra de búsqueda, escribe "Gestión de claves" y selecciona el servicio "Gestión de claves".
- Si la API no está habilitada, haz clic en Habilitar. Es posible que tengas que esperar unos minutos para que la API se aprovisione por completo.
Crea tu conjunto de claves y tu clave de KMS
Para crear un conjunto de claves, sigue estos pasos:
En la sección Gestión de claves, haz clic en Crear conjunto de claves.
Introduce lo siguiente:
- Nombre del conjunto de claves: introduce un nombre único para el conjunto de claves, como rag-engine-cmek-keys.
- Tipo de ubicación: selecciona Región. El conjunto de claves de Cloud Key Management Service debe estar en la misma región que el endpoint de Vertex AI RAG Engine que utilices al cifrar un corpus de RAG con CMEK.
- Ubicación: elige la región seleccionada, como
us-central1
. Lo ideal es que esta región coincida con la región en la que se ubicarán los recursos de tu RAG Engine.
Haz clic en Crear.
Para crear una clave en el conjunto de claves, sigue estos pasos:
Una vez creado el conjunto de claves, se te pedirá que crees una clave o puedes ir a Crear clave.
Introduce lo siguiente:
- Nombre de la clave: introduce un nombre único para la clave, como
my-rag-corpus-key
. - Nivel de protección: elige un nivel de protección (Software o HSM). Si necesitas claves respaldadas por hardware, selecciona HSM.
- Finalidad: selecciona Encriptado y desencriptado simétrico. Este campo es obligatorio para usar CMEK.
- Fuente del material de la clave: seleccione Clave generada.
- Periodo de rotación: opcional. Recommended. Configura una programación de rotación de claves de acuerdo con las políticas de seguridad de tu organización, por ejemplo, cada 90 días.
- Nombre de la clave: introduce un nombre único para la clave, como
Haz clic en Crear.
Para copiar el nombre del recurso de clave, sigue estos pasos:
Una vez creada la clave, vaya a su página de detalles.
Busca el nombre del recurso. El formato es
projects/YOUR_PROJECT_ID/locations/YOUR_REGION/keyRings/YOUR_KEY_RING_NAME/cryptoKeys/YOUR_KEY_NAME/cryptoKeyVersions/1
.Copia el nombre del recurso y elimina la parte
/cryptoKeyVersions/VERSION_NUMBER
. El nombre de recurso con el formato correcto esprojects/YOUR_PROJECT_ID/locations/YOUR_REGION/keyRings/YOUR_KEY_RING_NAME/cryptoKeys/YOUR_KEY_NAME
.
Conceder permisos al agente de servicio del motor de RAG de Vertex AI
Para que el motor RAG de Vertex AI pueda cifrar y descifrar datos con tu clave de KMS, su agente de servicio necesita los permisos adecuados en esa clave específica.
Para identificar tu agente de servicio de Vertex AI RAG Engine, haz lo siguiente:
En la Google Cloud consola de tu proyecto, ve a la página IAM y administración > IAM.
En la página Gestión de Identidades y Accesos, marca la casilla Incluir concesiones de roles proporcionadas por Google.
En la barra de filtro o de búsqueda de la lista de principales, busca el agente de servicio de Vertex AI RAG Engine. Sigue el patrón
service-YOUR_PROJECT_NUMBER@gcp-sa-vertex-rag.iam.gserviceaccount.com
.Sustituye YOUR_PROJECT_NUMBER por el Google Cloud número de tu proyecto.
Si tu agente de servicio de Vertex AI RAG Engine aún no está presente, haz lo siguiente para activar la creación del agente de servicio:
Ejecuta este comando en Cloud Shell o en la línea de comandos:
gcloud beta services identity create --service=aiplatform.googleapis.com \ --projects=PROJECT_ID
También puedes enviar la llamada a la API REST:
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json; charset=utf-8" -d "" "https://serviceusage.googleapis.com/v1beta1/projects/PROJECT_ID/services/aiplatform.googleapis.com:generateServiceIdentity"
Verifica que se haya creado el agente de servicio de Vertex AI RAG Engine.
Para conceder permisos en la clave KMS, sigue estos pasos:
Vuelve al servicio de gestión de claves en la Google Cloud consola.
Selecciona el conjunto de claves que contiene la clave que has creado.
Selecciona la clave específica que has creado.
En la página de detalles de la clave, ve a la pestaña Permisos.
Haz clic en Añadir principal.
En el campo Nuevos principales, escribe la dirección de correo del agente de servicio de Vertex AI RAG Engine.
En el menú desplegable Seleccionar un rol, selecciona el rol Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS (
roles/cloudkms.cryptoKeyEncrypterDecrypter
). Este rol concede al agente de servicio los permisos necesarios para usar la clave en operaciones de encriptado y desencriptado.Haz clic en Guardar.
Crear un corpus de RAG con cifrado gestionado por el cliente
Este código de ejemplo muestra cómo crear un corpus de RAG cifrado con una clave de cifrado gestionada por el cliente (CMEK).
Sustituye las variables de los siguientes códigos de ejemplo:
Python
import vertexai
from google.cloud import aiplatform
from vertexai import rag
from google.cloud.aiplatform_v1.types.encryption_spec import EncryptionSpec
PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
KMS_KEY_NAME = YOUR_KMS_KEY_NAME
vertexai.init(project=PROJECT_ID)
rag_corpus = rag.create_corpus(display_name=DISPLAY_NAME, encryption_spec=EncryptionSpec(kms_key_name=KMS_KEY_NAME))
REST
PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
KMS_KEY_NAME = YOUR_KMS_KEY_NAME
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://${LOCATION}-aiplatform.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora \
-d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"encryption_spec" : {
"kms_key_name" : '\""${KMS_KEY_NAME}"\"'
}
}'
Cuotas
Cuando usas CMEK con servicios de Vertex AI, como Vertex AI RAG Engine, hay una cuota sobre el número de claves de Cloud KMS únicas que se pueden usar por proyecto y región. Esta cuota se monitoriza con la métrica aiplatform.googleapis.com/in_use_customer_managed_encryption_keys
.
Cada vez que uses una clave de KMS nueva y única para crear un recurso, como un corpus de RAG, en un proyecto y una región, la clave de KMS consumirá una unidad de esta cuota. Esta unidad de cuota no se libera aunque se eliminen los recursos que usan esa clave específica.
Si necesitas más claves únicas que el límite actual, debes solicitar un aumento de cuota para aiplatform.googleapis.com/in_use_customer_managed_encryption_keys
en la región seleccionada.
Para obtener más información sobre cómo solicitar un aumento de la cuota, consulta Ver y editar las cuotas en la consola Google Cloud .
Siguientes pasos
- Para obtener más información sobre RagManagedDb, consulta Información sobre RagManagedDb.
- Para importar archivos y carpetas de Google Drive o Cloud Storage, consulta el ejemplo de importación de archivos RAG.
- Para enumerar los archivos RAG, consulta el ejemplo de enumeración de archivos RAG.