Nesta página, mostramos como conectar seu corpus RAG ao banco de dados Pinecone.
Você também pode acompanhar usando este notebook Mecanismo de RAG da Vertex AI com Pinecone.
É possível usar sua instância de banco de dados do Pinecone com o mecanismo RAG da Vertex AI para indexar e realizar uma pesquisa de similaridade baseada em vetores. Uma pesquisa de similaridade é uma maneira de encontrar trechos de texto semelhantes ao que você está procurando, o que requer o uso de um modelo de embedding. O modelo de embedding produz dados de vetor para cada trecho de texto comparado. A pesquisa de similaridade é usada para recuperar contextos semânticos para embasamento e retornar o conteúdo mais preciso do seu LLM.
Com o mecanismo de RAG da Vertex AI, você pode continuar usando sua instância de banco de dados de vetores totalmente gerenciada, que é de sua responsabilidade provisionar. O mecanismo RAG da Vertex AI usa seu banco de dados de vetores para armazenamento, gerenciamento de índices e pesquisa.
Considere usar o Pinecone com o mecanismo RAG da Vertex AI
Considere se usar o banco de dados do Pinecone é a melhor opção para seu aplicativo de RAG analisando o seguinte:
É necessário criar, configurar e gerenciar o escalonamento da instância do banco de dados do Pinecone.
O mecanismo de RAG da Vertex AI usa o namespace padrão no seu índice. Verifique se esse namespace não pode ser modificado por mais nada.
É necessário fornecer uma chave de API do Pinecone, que permite que o mecanismo de RAG da Vertex AI interaja com o banco de dados do Pinecone. O mecanismo de RAG da Vertex AI não armazena nem gerencia sua chave de API do Pinecone. Em vez disso, faça o seguinte:
- Armazene sua chave no Google Cloud Secret Manager.
- Conceda permissões à conta de serviço do projeto para acessar o secret.
- Forneça ao mecanismo de RAG da Vertex AI acesso ao nome do recurso do seu secret.
- Quando você interage com seu corpus de RAG, o mecanismo RAG da Vertex AI acessa seu recurso secreto usando sua conta de serviço.
O corpus RAG e o índice do Pinecone têm um mapeamento de um para um. Essa associação é feita como parte da chamada de API
CreateRagCorpus
ou da chamada de APIUpdateRagCorpus
.
Criar seu índice do Pinecone
Para criar seu índice do Pinecone, siga estas etapas:
Consulte o guia de início rápido do Pinecone para conferir as configurações de índice que precisam ser especificadas para que ele seja compatível com o corpus RAG.
Você quer garantir que o local do índice do Pinecone seja o mesmo ou próximo de onde você usa o mecanismo de RAG da Vertex AI pelos seguintes motivos:
- Você quer manter as latências reduzidas.
- Você quer atender aos requisitos de residência de dados definidos pelas leis aplicáveis.
Durante a criação do índice do Pinecone, especifique a dimensão do embedding a ser usada com o mecanismo RAG da Vertex AI. Esta tabela fornece os tamanhos ou a localização das dimensões:
Modelo Tamanho da dimensão Gecko próprio 768 Gecko primário refinado 768 E5 Consulte Usar modelos de embedding do OSS. Escolha uma das seguintes métricas de distância aceitas:
cosine
dotproduct
euclidean
Opcional: ao criar um índice baseado em pods, especifique o
file_id
no campopod.metadata_config.indexed
. Para mais informações, consulte Indexação seletiva de metadados.
Criar sua chave de API do Pinecone
O mecanismo de RAG da Vertex AI só pode se conectar ao seu índice do Pinecone usando sua chave de API para autenticação e autorização. Siga o guia oficial do Pinecone (link em inglês) para configurar a autenticação com base em chave de API no seu projeto do Pinecone.
Armazenar sua chave de API no Secret Manager
Uma chave de API contém informações sensíveis de identificação pessoal (SPII), que estão sujeitas a requisitos legais. Se os dados de SPII forem comprometidos ou usados indevidamente, uma pessoa poderá sofrer um risco ou dano significativo. Para minimizar os riscos a um indivíduo ao usar o mecanismo RAG da Vertex AI, não armazene nem gerencie sua chave de API e evite compartilhar a chave não criptografada.
Para proteger as SPII, faça o seguinte:
Armazene sua chave de API no Secret Manager.
Conceda à conta de serviço do mecanismo de RAG da Vertex AI as permissões para seus secrets e gerencie o controle de acesso no nível do recurso de secret.
Navegue até as permissões do projeto.
Ative a opção Incluir concessões de papel fornecidas pelo Google.
Encontre a conta de serviço, que tem o formato:
service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.com
Edite os principais da conta de serviço.
Adicione o papel
Secret Manager Secret Accessor
à conta de serviço.
Durante a criação ou atualização do corpus RAG, transmita o nome do recurso secreto para o mecanismo RAG da Vertex AI e armazene o nome do recurso secreto.
Ao fazer solicitações de API para seus índices do Pinecone, o mecanismo de RAG da Vertex AI usa cada conta de serviço para ler a chave de API que corresponde aos seus recursos secretos no Secret Manager dos seus projetos.
Provisionar sua conta de serviço do mecanismo de RAG da Vertex AI
Quando você cria o primeiro corpus RAG no seu projeto, o mecanismo RAG da Vertex AI cria uma conta de serviço dedicada. É possível encontrar a conta de serviço na página Identity and Access Management do projeto.
A conta de serviço segue este formato fixo:
service-{project number}@gcp-sa-vertex-rag.iam.gserviceaccount.com
Por exemplo,
service-123456789@gcp-sa-vertex-rag.iam.gserviceaccount.com
Preparar o corpus RAG
Para usar seu índice do Pinecone com o mecanismo RAG da Vertex AI, associe o índice
a um corpus RAG durante a criação. Depois que a associação é feita, essa vinculação é permanente durante todo o ciclo de vida do corpus RAG. A associação pode ser feita usando a API CreateRagCorpus
ou UpdateRagCorpus
.
Para que a associação seja considerada concluída, você precisa definir três campos principais no corpus RAG:
rag_vector_db_config.pinecone
: esse campo ajuda a definir a escolha de um banco de dados de vetores que você quer associar ao seu corpus de RAG e precisa ser definido durante a chamada da APICreateRagCorpus
. Se não estiver definido, o banco de dados de vetores padrãoRagManagedDb
será atribuído ao seu corpus de RAG.rag_vector_db_config.pinecone.index_name
: é o nome usado para criar o índice do Pinecone usado com o corpus RAG. É possível definir o nome durante a chamadaCreateRagCorpus
ou especificar o nome ao chamar a APIUpdateRagCorpus
.rag_vector_db_config.api_auth.api_key_config.api_key_secret_version
: é o nome completo do recurso do secret armazenado no Secret Manager, que contém sua chave de API do Pinecone. É possível definir o nome durante a chamadaCreateRagCorpus
ou especificar o nome ao chamar a APIUpdateRagCorpus
. Até que você especifique esse campo, não será possível importar dados para o corpus RAG.
Esse campo precisa ter o formato:
projects/{PROJECT_NUMBER}/secrets/{SECRET_ID}/versions/{VERSION_ID}
Criar seu corpus RAG
Se você tiver acesso ao nome do índice do Pinecone e ao nome do recurso secreto com suas permissões definidas, será possível criar seu corpus RAG e associá-lo ao índice do Pinecone, como demonstrado neste exemplo de código.
Quando você cria um corpus de RAG pela primeira vez, não tem as informações da conta de serviço prontas. No entanto, os campos são opcionais e podem ser associados ao corpus de RAG usando a API UpdateRagCorpus
.
Para um exemplo de como criar o corpus RAG sem fornecer as informações da conta de serviço, consulte Criar corpus RAG sem um nome de índice ou uma chave de API.
Python
Antes de testar esse exemplo, siga as instruções de configuração para Python no Guia de início rápido da Vertex AI sobre como usar bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Vertex AI para Python.
Para autenticar na Vertex AI, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.
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}
Criar um corpus RAG sem um nome de índice ou uma chave de API
Se este for seu primeiro corpus RAG e você não tiver acesso aos detalhes da conta de serviço ou não tiver concluído as etapas de provisionamento do índice do Pinecone, ainda será possível criar o corpus RAG. Em seguida, associe o corpus de RAG a uma configuração vazia do Pinecone e adicione os detalhes mais tarde.
Considere o seguinte:
- Quando você não informa o nome do índice e o nome secreto da chave de API, não é possível importar arquivos para o corpus de RAG.
- Se você escolher o Pinecone como banco de dados de vetores para seu corpus de RAG, não será possível mudar para outro banco de dados depois.
Este exemplo de código demonstra como criar um corpus RAG com o Pinecone sem
fornecer um nome de índice ou um nome secreto da API do Pinecone. Use a API UpdateRagCorpus
para especificar as informações ausentes mais tarde.
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}
Atualizar o corpus RAG
A API UpdateRagCorpus
permite atualizar a configuração do banco de dados de vetores.
Se o nome do índice do Pinecone e a versão secreta da chave de API não tiverem sido definidos antes, use a API do Pinecone para atualizar os campos. Não é possível atualizar a escolha de um banco de dados de vetores. É opcional fornecer o secret da chave de API. No entanto, se você não especificar o secret da chave de API, poderá importar dados para o corpus de RAG.
Campo | Mutabilidade | Obrigatório ou opcional |
---|---|---|
rag_vector_db_config.vector_db |
Imutável depois que você faz uma escolha. | Obrigatório |
rag_vector_db_config.pinecone.index_name |
Imutável depois que você define o campo no corpus de RAG. | Obrigatório |
rag_vector_db_config.api_auth.api_key_config.api_key_secret_version |
Mutável. Depois de definir a chave de API, não é possível descartá-la. | Opcional |
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}