Esta página mostra como usar o recurso de pesquisa de metadados com base em esquema no mecanismo RAG da Gemini Enterprise Agent Platform. É possível definir um esquema de metadados para um corpus, anexar metadados a arquivos nesse corpus e usar esses metadados para filtrar contextos durante a recuperação.
Antes de começar
Para usar a pesquisa de metadados, é necessário ter um corpus RAG e arquivos RAG. Para saber como criar um corpus e fazer upload de arquivos, consulte Gerenciar sua base de conhecimento RAG.
Ao criar um corpus ou fazer upload de um arquivo, a API retorna um RAG_CORPUS_ID e um RAG_FILE_ID numéricos (por exemplo, 123456789). É necessário ter esses IDs para gerenciar seus recursos de metadados.
Recursos de metadados
O recurso de pesquisa de metadados usa a seguinte hierarquia de recursos:
RagCorpus:o recurso de nível superior que contém seus arquivos RAG e as configurações deles.
- RagDataSchema:um recurso filho de
RagCorpus. Ele define a estrutura de um único campo de metadados usado no corpus. Cada esquema especifica uma chave (por exemplo,year) e um tipo de dados (INTEGER,FLOAT,STRING,DATETIME,BOOLEANouLIST). É necessário definir umRagDataSchemapara cada chave de metadados que você pretende usar para filtragem. RagFile:um recurso filho de
RagCorpusque representa um único documento ingerido.- RagMetadata:um recurso filho de
RagFile. Ele representa um único par de metadados de chave-valor anexado a esse arquivo específico (por exemplo,year=2024). A chave usada em um recursoRagMetadataprecisa corresponder a uma chave definida em umRagDataSchemapara o corpus pai. Vários recursosRagMetadatapodem ser anexados a um único arquivo.
- RagMetadata:um recurso filho de
- RagDataSchema:um recurso filho de
Gerenciar esquemas de metadados
Depois de criar um corpus RAG, defina a estrutura de metadados usando o recurso RagDataSchema no nível do corpus. Também é possível visualizar e excluir os esquemas definidos.
Definir esquemas de metadados
Ao definir um esquema, você especifica uma chave e um tipo de dados. Os tipos válidos que uma chave pode ser são:
INTEGER: transmitido em valores de metadados como umint_value.FLOAT: transmitido em valores de metadados como umfloat_value.STRING: transmitido em valores de metadados como umstr_value.DATETIME: transmitido em valores de metadados como umdatetime_value(string formatada RFC 3339, por exemplo, "2024-01-01T00:00:00Z").BOOLEAN: transmitido em valores de metadados como umbool_value.LIST: transmitido em valores de metadados como umlist_value. O exemplo de REST a seguir mostra como criar esquemas de metadados em lote que definem os camposyearemonthpara um corpus.
REST
Substitua as seguintes variáveis:
- PROJECT_ID: seu ID do projeto.
- LOCATION: a região para processar a solicitação.
- RAG_CORPUS_ID: o ID do corpus RAG.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
RAG_CORPUS_ID=RAG_CORPUS_ID
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/${RAG_CORPUS_ID}/ragDataSchemas:batchCreate \
-d '{
"parent": "projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'",
"requests": [
{
"parent": "projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'",
"rag_data_schema": {
"key": "year",
"schema_details": {"type": "INTEGER"}
}
},
{
"parent": "projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'",
"rag_data_schema": {
"key": "month",
"schema_details": {"type": "STRING"}
}
}
]
}'
Listar esquemas de metadados
O exemplo de REST a seguir mostra como listar os esquemas de metadados definidos para um corpus.
REST
Substitua as seguintes variáveis:
- PROJECT_ID: seu ID do projeto.
- LOCATION: a região para processar a solicitação.
- RAG_CORPUS_ID: o ID do corpus RAG.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
RAG_CORPUS_ID=RAG_CORPUS_ID
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora/${RAG_CORPUS_ID}/ragDataSchemas
Excluir esquemas de metadados
O exemplo de REST a seguir mostra como excluir esquemas de metadados em lote de um corpus.
REST
Substitua as seguintes variáveis:
- PROJECT_ID: seu ID do projeto.
- LOCATION: a região para processar a solicitação.
- RAG_CORPUS_ID: o ID do corpus RAG.
- RAG_DATA_SCHEMA_KEY_1: o nome da chave do primeiro esquema de metadados a ser excluído.
- RAG_DATA_SCHEMA_KEY_2: o nome da chave do segundo esquema de metadados a ser excluído.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
RAG_CORPUS_ID=RAG_CORPUS_ID
RAG_DATA_SCHEMA_KEY_1=RAG_DATA_SCHEMA_KEY_1
RAG_DATA_SCHEMA_KEY_2=RAG_DATA_SCHEMA_KEY_2
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/${RAG_CORPUS_ID}/ragDataSchemas:batchDelete \
-d '{
"names": [
"projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'/ragDataSchemas/'"${RAG_DATA_SCHEMA_KEY_1}"'",
"projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'/ragDataSchemas/'"${RAG_DATA_SCHEMA_KEY_2}"'"
]
}'
Gerenciar metadados de arquivos
Depois de fazer upload ou importar arquivos para o corpus, é possível anexar, atualizar, visualizar e excluir os metadados associados a esses arquivos.
Anexar metadados a um arquivo
Os metadados anexados precisam estar em conformidade com o esquema definido para o corpus. O exemplo de REST a seguir mostra como anexar vários valores de metadados a um arquivo.
REST
Substitua as seguintes variáveis:
- PROJECT_ID: seu ID do projeto.
- LOCATION: a região para processar a solicitação.
- RAG_CORPUS_ID: o ID do corpus RAG.
- RAG_FILE_ID: o ID do arquivo RAG.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
RAG_CORPUS_ID=RAG_CORPUS_ID
RAG_FILE_ID=RAG_FILE_ID
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/${RAG_CORPUS_ID}/ragFiles/${RAG_FILE_ID}/ragMetadata:batchCreate \
-d '{
"parent": "projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'/ragFiles/'"${RAG_FILE_ID}"'",
"requests": [
{
"parent": "projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'/ragFiles/'"${RAG_FILE_ID}"'",
"rag_metadata": {
"user_specified_metadata": { "key": "year", "value": { "int_value": 2024 } }
}
},
{
"parent": "projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'/ragFiles/'"${RAG_FILE_ID}"'",
"rag_metadata": {
"user_specified_metadata": { "key": "month", "value": { "str_value": "May" } }
}
}
]
}'
Listar metadados de um arquivo
O exemplo de REST a seguir mostra como listar os metadados anexados a um arquivo específico.
REST
Substitua as seguintes variáveis:
- PROJECT_ID: seu ID do projeto.
- LOCATION: a região para processar a solicitação.
- RAG_CORPUS_ID: o ID do corpus RAG.
- RAG_FILE_ID: o ID do arquivo RAG.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
RAG_CORPUS_ID=RAG_CORPUS_ID
RAG_FILE_ID=RAG_FILE_ID
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://${LOCATION}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION}/ragCorpora/${RAG_CORPUS_ID}/ragFiles/${RAG_FILE_ID}/ragMetadata
Atualizar metadados
É possível atualizar os valores de metadados anexados a um arquivo. O exemplo de REST a seguir mostra como atualizar o valor de metadados associado à chave year. O RAG_METADATA_KEY é a string usada quando você criou os metadados.
REST
Substitua as seguintes variáveis:
- PROJECT_ID: seu ID do projeto.
- LOCATION: a região para processar a solicitação.
- RAG_CORPUS_ID: o ID do corpus RAG.
- RAG_FILE_ID: o ID do arquivo RAG.
- RAG_METADATA_KEY: o nome da chave dos metadados a serem atualizados.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
RAG_CORPUS_ID=RAG_CORPUS_ID
RAG_FILE_ID=RAG_FILE_ID
RAG_METADATA_KEY=RAG_METADATA_KEY
curl -X PATCH \
-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/${RAG_CORPUS_ID}/ragFiles/${RAG_FILE_ID}/ragMetadata/${RAG_METADATA_KEY} \
-d '{
"user_specified_metadata": { "key": "'"${RAG_METADATA_KEY}"'", "value": { "int_value": 2025 } }
}'
Excluir metadados de um arquivo
O exemplo de REST a seguir mostra como excluir valores de metadados em lote de um arquivo.
REST
Substitua as seguintes variáveis:
- PROJECT_ID: seu ID do projeto.
- LOCATION: a região para processar a solicitação.
- RAG_CORPUS_ID: o ID do corpus RAG.
- RAG_FILE_ID: o ID do arquivo RAG.
- RAG_METADATA_KEY_1: o nome da chave do primeiro valor de metadados a ser excluído.
- RAG_METADATA_KEY_2: o nome da chave do segundo valor de metadados a ser excluído.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
RAG_CORPUS_ID=RAG_CORPUS_ID
RAG_FILE_ID=RAG_FILE_ID
RAG_METADATA_KEY_1=RAG_METADATA_KEY_1
RAG_METADATA_KEY_2=RAG_METADATA_KEY_2
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/${RAG_CORPUS_ID}/ragFiles/${RAG_FILE_ID}/ragMetadata:batchDelete \
-d '{
"names": [
"projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'/ragFiles/'"${RAG_FILE_ID}"'/ragMetadata/'"${RAG_METADATA_KEY_1}"'",
"projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'/ragFiles/'"${RAG_FILE_ID}"'/ragMetadata/'"${RAG_METADATA_KEY_2}"'"
]
}'
Filtrar contextos com metadados
Para melhorar a relevância dos resultados, use metadados de arquivos para restringir o espaço de pesquisa durante a recuperação de contexto. Adicione uma expressão metadata_filter à solicitação RetrieveContexts usando a CEL (Common Expression Language), por exemplo, year == 2024 && month == "May". Somente arquivos com metadados que correspondam à expressão de filtro são considerados para recuperação.
O exemplo de REST a seguir mostra como recuperar contextos usando um filtro de metadados.
REST
Substitua as seguintes variáveis:
- PROJECT_ID: seu ID do projeto.
- LOCATION: a região para processar a solicitação.
- RAG_CORPUS_ID: o ID do corpus RAG.
PROJECT_ID=PROJECT_ID
LOCATION=LOCATION
RAG_CORPUS_ID=RAG_CORPUS_ID
QUERY="except share amounts"
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}:retrieveContexts -d '{
"vertex_rag_store": {
"rag_resources": [
{
"rag_corpus": "projects/'"${PROJECT_ID}"'/locations/'"${LOCATION}"'/ragCorpora/'"${RAG_CORPUS_ID}"'"
}
]
},
"query": {
"text": "'"${QUERY}"'",
"rag_retrieval_config": {
"top_k": 10,
"filter": {
"vector_distance_threshold": 0.5,
"metadata_filter": "year == 2024 && month == \"May\""
}
}
}
}'
A seguir
- Para saber mais sobre como fazer upload e gerenciar arquivos, consulte Gerenciar sua base de conhecimento RAG.
- Para saber mais sobre a pesquisa de vetor padrão na RAG, consulte Usar a pesquisa de vetor com a RAG.