Nesta página, mostramos como o mecanismo de RAG da Vertex AI usa o RagManagedDb
, que
é um banco de dados de vetores pronto para empresas usado para armazenar e gerenciar representações
vetoriais dos seus documentos. O banco de dados de vetores é usado para recuperar
documentos relevantes com base na semelhança semântica do documento a uma determinada consulta.
Além disso, esta página mostra como implementar a CMEK.
Gerenciar sua estratégia de recuperação
O RagManagedDb
oferece as seguintes estratégias de recuperação para oferecer suporte aos seus casos de uso de RAG:
Estratégia de recuperação | Descrição | |
---|---|---|
k-vizinhos mais próximos (KNN) (padrão) | Encontra os vizinhos mais próximos exatos comparando todos os pontos de dados no seu corpus RAG. Se você não especificar uma estratégia durante a criação do corpus de RAG, a KNN será a estratégia de recuperação padrão usada. |
|
Vizinhos mais próximos aproximados (ANN) | Usa técnicas de aproximação para encontrar vizinhos semelhantes mais rápido do que a técnica de KNN. |
|
Criar um corpus RAG com KNN RagManagedDb
Este exemplo de código demonstra como criar um corpus RAG usando 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
Substitua as seguintes variáveis:
- PROJECT_ID: o ID do projeto.
- LOCATION: a região para processar a solicitação.
- CORPUS_DISPLAY_NAME: o nome de exibição do corpus 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": {}
}
}
}'
Criar um corpus RAG com ANN RagManagedDb
Para oferecer o recurso de ANN, o RagManagedDb
usa uma estrutura baseada em árvore para particionar dados e facilitar pesquisas mais rápidas. Para ativar o melhor recall e a menor latência, a estrutura dessa árvore precisa ser configurada por testes para se adequar ao tamanho e à distribuição dos seus dados. O RagManagedDb
permite configurar o
tree_depth
e o leaf_count
da árvore.
O tree_depth
determina o número de camadas ou níveis na árvore.
Siga estas diretrizes:
- Se você tiver aproximadamente 10.000 arquivos RAG no corpus RAG, defina o valor como 2.
- Se você tiver mais arquivos RAG, defina como 3.
- Se
tree_depth
não for especificado, o mecanismo de RAG da Vertex AI vai atribuir um valor padrão de 2 a esse parâmetro.
O leaf_count
determina o número de nós folha na estrutura baseada em árvore. Cada nó folha contém grupos de vetores estreitamente relacionados e o centroide correspondente. Siga estas diretrizes:
- O valor recomendado é
10 * sqrt(num of RAG files in your RAG corpus)
. Se não for especificado, o mecanismo de RAG da Vertex AI vai atribuir um valor padrão de 500 a esse 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
Substitua as seguintes variáveis:
- PROJECT_ID: o ID do projeto.
- LOCATION: a região para processar a solicitação.
- CORPUS_DISPLAY_NAME: o nome de exibição do corpus RAG.
- TREE_DEPTH: a profundidade da árvore.
- LEAF_COUNT: sua contagem de folhas.
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 seus dados para a ANN RagManagedDb
É possível usar a API ImportRagFiles
ou UploadRagFile
para importar
seus dados para a ANN RagManagedDb
. No entanto, ao contrário da estratégia de recuperação do KNN, a abordagem da ANN exige que o índice baseado em árvore seja reconstruído pelo menos uma vez e, opcionalmente, após a importação de quantidades significativas de dados para um recall ideal. Para que o mecanismo de RAG da Vertex AI recrie seu índice ANN, defina rebuild_ann_index
como "true" na solicitação da API ImportRagFiles
.
O seguinte é importante:
- Antes de consultar o corpus de RAG, é preciso recriar o índice ANN pelo menos uma vez.
- Apenas uma recriação de índice simultânea é aceita em um projeto em cada local.
Para fazer upload do seu arquivo local no corpus de RAG, consulte Fazer upload de um arquivo RAG. Para importar dados para seu corpus de RAG e acionar uma recriação do índice ANN, consulte o exemplo de código a seguir, que demonstra como importar do Cloud Storage. Para saber mais sobre as fontes de dados compatíveis, consulte Fontes de dados compatíveis com 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}'
}
}'
Gerenciar sua criptografia
O mecanismo de RAG da Vertex AI oferece opções robustas para gerenciar a criptografia dos seus dados em repouso. Por padrão, todos os dados do usuário no RagManagedDb
são criptografados usando um Google-owned and Google-managed encryption key, que é a configuração
padrão. Essa configuração padrão ajuda a verificar se os dados estão seguros sem exigir nenhuma configuração específica.
Se você precisar de mais controle sobre as chaves usadas para criptografia, o mecanismo RAG da Vertex AI oferece suporte à chave de criptografia gerenciada pelo cliente (CMEK). Com a CMEK, você pode usar suas chaves criptográficas, gerenciadas no Cloud Key Management Service (KMS), para proteger os dados do seu corpus de RAG.
Para informações sobre limitações da CMEK para corpora de RAG, consulte Limitações da CMEK para o mecanismo de RAG da Vertex AI.
Configurar a chave do KMS e conceder permissões
Antes de criar um corpus de RAG criptografado com CMEK, é necessário configurar uma chave criptográfica no Google Cloud KMS e conceder à conta de serviço do mecanismo de RAG da Vertex AI as permissões necessárias para usar essa chave.
Pré-requisitos
Para realizar as etapas de configuração a seguir, verifique se sua conta de usuário tem as permissões adequadas do Identity and Access Management (IAM) no projeto Google Cloud em que você pretende criar a chave do KMS e o corpus de RAG. Normalmente, é necessário um papel como o de administrador do Cloud KMS (roles/cloudkms.admin
).
Ativar a API
Para ativar a API Cloud KMS, faça o seguinte:
- Acesse o console do Google Cloud .
- Selecione o projeto em que você quer gerenciar suas chaves e crie o corpus de RAG.
- Na barra de pesquisa, digite "Gerenciamento de chaves" e selecione o serviço "Gerenciamento de chaves".
- Se a API não estiver ativada, clique em Ativar. Talvez seja necessário aguardar alguns minutos para que a API seja totalmente provisionada.
Criar um keyring e uma chave do KMS
Para criar um keyring, faça o seguinte:
Na seção Gerenciamento de chaves, clique em Criar keyring.
Digite o seguinte:
- Nome do keyring: insira um nome exclusivo para o keyring, como rag-engine-cmek-keys.
- Tipo de local: selecione "Região".
- Local: escolha a região selecionada, como
us-central1
. Essa região precisa corresponder à região em que os recursos do RAG Engine vão residir.
Clique em Criar.
Para criar uma chave no keyring, faça o seguinte:
Depois que o keyring for criado, você vai receber uma solicitação ou poderá navegar até Criar chave.
Digite o seguinte:
- Nome da chave: insira um nome exclusivo para a chave, como
my-rag-corpus-key
. - Nível de proteção: escolha um nível de proteção (Software ou HSM). Se você precisar de chaves protegidas por hardware, selecione HSM.
- Finalidade: selecione Criptografia/descriptografia simétrica. Isso é necessário para a CMEK.
- Origem do material da chave: selecione Chave gerada.
- Período de rotação: opcional. Recomendado. Configure uma programação de rotação de chaves de acordo com as políticas de segurança da sua organização, como a cada 90 dias.
- Nome da chave: insira um nome exclusivo para a chave, como
Clique em Criar.
Para copiar o nome do recurso da chave, faça o seguinte:
Depois que a chave for criada, acesse a página de detalhes dela.
Localize o nome do recurso. O formato é
projects/YOUR_PROJECT_ID/locations/YOUR_REGION/keyRings/YOUR_KEY_RING_NAME/cryptoKeys/YOUR_KEY_NAME/cryptoKeyVersions/1
.Copie o nome do recurso e remova a parte
/cryptoKeyVersions/VERSION_NUMBER
. O nome do recurso formatado corretamente éprojects/YOUR_PROJECT_ID/locations/YOUR_REGION/keyRings/YOUR_KEY_RING_NAME/cryptoKeys/YOUR_KEY_NAME
.
Conceder permissões ao agente de serviço do mecanismo de RAG da Vertex AI
Para que o mecanismo RAG da Vertex AI criptografe e descriptografe dados usando sua chave do KMS, o agente de serviço precisa ter as permissões adequadas nessa chave específica.
Para identificar seu agente de serviço do mecanismo de RAG da Vertex AI, faça o seguinte:
Acesse a página IAM e administrador > IAM no Google Cloud console do seu projeto.
Na página "Identity and Access Management", marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.
Na barra de filtro ou pesquisa da lista de principais, pesquise o agente de serviço do mecanismo RAG da Vertex AI. Ele segue o padrão
service-YOUR_PROJECT_NUMBER@gcp-sa-vertex-rag.iam.gserviceaccount.com
.
Para conceder permissões na chave do KMS, faça o seguinte:
Volte ao serviço de gerenciamento de chaves no console Google Cloud .
Selecione o keyring que contém a chave criada.
Selecione a chave específica que você criou.
Na página de detalhes da chave, acesse a guia Permissões.
Clique em Adicionar principal.
No campo Novos principais, digite o endereço de e-mail do agente de serviço do mecanismo RAG da Vertex AI.
No menu suspenso Selecionar um papel, escolha o papel de criptografador/descriptografador de CryptoKey do Cloud KMS (
roles/cloudkms.cryptoKeyEncrypterDecrypter
). Esse papel concede ao agente de serviço as permissões necessárias para usar a chave em operações de criptografia e descriptografia.Clique em Salvar.
Criar um corpus RAG com criptografia gerenciada pelo cliente
Este exemplo de código demonstra como criar um corpus RAG criptografado com uma chave de criptografia gerenciada pelo cliente (CMEK).
Substitua as variáveis nos exemplos de código a seguir:
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}"\"'
}
}'
A seguir
- Para saber mais sobre o RagManagedDb, consulte Entender o RagManagedDb.
- Para importar arquivos e pastas do Google Drive ou do Cloud Storage, consulte o exemplo de importação de arquivos RAG.
- Para listar arquivos RAG, consulte o exemplo de listagem de arquivos RAG.