Nesta página, mostramos como o Mecanismo RAG na Gemini Enterprise Agent Platform 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 com uma determinada consulta.
Além disso, esta página mostra como implementar CMEKs.
Gerenciar sua estratégia de recuperação
O RagManagedDb oferece as seguintes estratégias de recuperação para dar 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á usada como estratégia de recuperação padrão. |
|
| Vizinho mais próximo aproximado (ANN, na sigla em inglês) | Usa técnicas de aproximação para encontrar vizinhos semelhantes mais rapidamente do que a técnica KNN. |
|
Criar um corpus de RAG com KNN RagManagedDb
Este exemplo de código demonstra como criar um corpus RAG usando o KNN
RagManagedDb.
Python
from vertexai.preview import rag
import vertexai
PROJECT_ID = YOUR_PROJECT_ID
LOCATION = YOUR_RAG_ENGINE_LOCATION
DISPLAY_NAME = YOUR_RAG_CORPUS_DISPLAY_NAME
# Initialize Agent Platform 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 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": {}
}
}
}'
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 permitir o melhor recall e
latência, a estrutura dessa árvore precisa ser configurada por experimentação para
se adequar ao tamanho e à distribuição dos 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, defina o valor como 2.
- Se você tiver mais arquivos RAG do que isso, defina como 3.
- Se o
tree_depthnão for especificado, o RAG Engine vai atribuir um valor padrão de 2 para esse parâmetro.
O leaf_count determina o número de nós de folha na estrutura baseada em árvore. Cada nó folha contém grupos de vetores intimamente relacionados,
além do centroide correspondente. Siga estas diretrizes:
- O valor recomendado é
10 * sqrt(num of RAG files in your RAG corpus). Se não for especificado, o RAG Engine vai atribuir um valor padrão de 500 para esse parâmetro.
Python
from vertexai.preview 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 Agent Platform 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 de RAG.
- TREE_DEPTH: a profundidade da árvore.
- LEAF_COUNT: a 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}"'
}
}
}
}'
Como importar seus dados para a ANN RagManagedDb
É possível usar a API ImportRagFiles ou UploadRagFile para importar
seus dados para a RagManagedDb de ANN. No entanto, ao contrário da estratégia de recuperação
KNN, a abordagem ANN exige que o índice baseado em árvore seja
recriado pelo menos uma vez e, opcionalmente, após a importação de quantidades significativas de dados
para uma recuperação ideal. Para que o mecanismo RAG recrie seu índice de ANN, defina rebuild_ann_index como verdadeiro na solicitação de API ImportRagFiles.
Os seguintes pontos são importantes:
- Antes de consultar o corpus de RAG, é necessário recriar o índice de ANN pelo menos uma vez.
- Só é possível recriar um índice simultâneo em um projeto em cada local.
Para fazer upload do arquivo local para o corpus de RAG, consulte Fazer upload de um arquivo RAG. Para importar dados para seu corpus de RAG e acionar uma recriação de índice de 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.preview 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 Agent Platform 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 RAG Engine oferece opções robustas para gerenciar como
seus dados em repouso são criptografados. Por padrão, todos os dados do usuário no RagManagedDb
são criptografados usando uma 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 é compatível com chaves de criptografia gerenciadas pelo cliente (CMEK). Com as CMEKs, é possível usar suas chaves criptográficas, gerenciadas no Cloud Key Management Service (Cloud KMS), para proteger os dados do corpus de RAG.
Para informações sobre as limitações de CMEK para corpora de RAG, consulte Limitações de CMEK para o Mecanismo RAG na Gemini Enterprise Agent Platform.
Configurar a chave do Cloud 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 RAG Engine 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 apropriadas do Identity and Access Management (IAM) no projeto do Google Cloud em que você
pretende criar a chave do Cloud 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 Key Management Service, faça o seguinte:
- Acesse o console do Google Cloud .
- Selecione o projeto em que você quer gerenciar suas chaves e crie seu 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 o keyring e a chave do Cloud 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". O keyring do Cloud KMS precisa estar na mesma região do endpoint da ferramenta RAG que você está usando ao criptografar um corpus de RAG com CMEK.
- Local: escolha a região selecionada, como
us-central1. O ideal é que essa região corresponda à região em que os recursos do mecanismo RAG 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 é obrigatório para 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 de 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 RAG Engine
Para que o mecanismo de RAG criptografe e descriptografe dados usando sua chave do Cloud KMS, o agente de serviço precisa das permissões adequadas nessa chave específica.
Para identificar o agente de serviço do mecanismo de RAG, faça o seguinte:
Acesse a página IAM e administrador > IAM no console do Google Cloud do seu projeto.
Na página do Identity and Access Management, marque a caixa de seleção Incluir concessões de papéis fornecidos pelo Google.
Na barra de filtro ou pesquisa da lista de principais, procure o agente de serviço do RAG Engine. Ele segue o padrão
service-YOUR_PROJECT_NUMBER@gcp-sa-vertex-rag.iam.gserviceaccount.com.Substitua YOUR_PROJECT_NUMBER pelo número do projeto do Google Cloud .
Se o agente de serviço do RAG Engine ainda não estiver presente, faça o seguinte para acionar a criação do agente de serviço:
Execute este comando no Cloud Shell ou na linha de comando:
gcloud beta services identity create --service=aiplatform.googleapis.com \ --projects=PROJECT_IDComo alternativa, envie a chamada de 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"Verifique se o agente de serviço do RAG Engine foi criado.
Para conceder permissões na chave do Cloud KMS, faça o seguinte:
Volte para o serviço do Cloud KMS no console do Google Cloud .
Selecione o keyring que contém a chave que você criou.
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 RAG Engine.
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 de RAG com criptografia gerenciada pelo cliente
Este exemplo de código demonstra como criar um corpus RAG criptografado com chaves de criptografia gerenciadas pelo cliente (CMEK).
Substitua as variáveis nos seguintes exemplos de código:
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}"\"'
}
}'
Cotas
Quando você usa CMEK com os serviços da Gemini Enterprise Agent Platform, como o
mecanismo RAG na Gemini Enterprise Agent Platform, há uma cota para o número de chaves exclusivas
do Cloud KMS que podem ser usadas por projeto e por região. Essa cota é
rastreada pela métrica
aiplatform.googleapis.com/in_use_customer_managed_encryption_keys.
Sempre que você usa uma chave nova e exclusiva do Cloud KMS para criar um recurso, como um corpus de RAG, em um projeto e uma região, a chave do Cloud KMS consome uma unidade dessa cota. Essa unidade de cota não é liberada mesmo que os recursos que usam essa chave específica sejam excluídos.
Se você precisar de mais chaves exclusivas do que o limite atual, solicite um aumento de cota para
aiplatform.googleapis.com/in_use_customer_managed_encryption_keys na
região selecionada.
Para mais informações sobre como solicitar um aumento de cota, consulte Ver e editar as cotas no console do Google Cloud .
A seguir
- Para saber mais sobre o RagManagedDb, consulte Modos de implantação.
- 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.