このページでは、Gemini Enterprise Agent Platform の RAG Engine でスキーマベースのメタデータ検索機能を使用する方法について説明します。コーパスのメタデータ スキーマを定義し、そのコーパス内のファイルにメタデータを添付して、このメタデータを使用して検索時にコンテキストをフィルタできます。
始める前に
メタデータ検索を使用するには、既存の RAG コーパスと RAG ファイルが必要です。コーパスを作成してファイルをアップロードする方法については、RAG ナレッジベースを管理するをご覧ください。
コーパスを作成するかファイルをアップロードすると、API は数値の RAG_CORPUS_ID と RAG_FILE_ID(123456789
など)を返します。メタデータ リソースを管理するには、これらの ID が必要です。
メタデータ リソース
メタデータ検索機能は、次のリソース階層を使用します。
RagCorpus: RAG ファイルとその構成を含む最上位のリソース。
- RagDataSchema:
RagCorpusの子リソース。コーパス内で使用される単一のメタデータ フィールドの構造を定義します。各スキーマは、キー(yearなど)とデータ型(INTEGER、FLOAT、STRING、DATETIME、BOOLEAN、LIST)を指定します。フィルタリングに使用するメタデータキーごとにRagDataSchemaを定義する必要があります。 RagFile: 取り込まれた単一のドキュメントを表す
RagCorpusの子リソース。- RagMetadata:
RagFileの子リソース。特定のファイルに添付された単一の Key-Value メタデータ ペア(year=2024など)を表します。RagMetadataリソースで使用されるキーは、親コーパスのRagDataSchemaで定義されたキーに対応している必要があります。複数のRagMetadataリソースを 1 つのファイルに添付できます。
- RagMetadata:
- RagDataSchema:
メタデータ スキーマを管理
RAG コーパスを作成したら、コーパスレベルで RagDataSchema リソースを使用してメタデータ構造を定義します。定義したスキーマを表示して削除することもできます。
メタデータ スキーマを定義する
スキーマを定義するときに、キーとデータ型を指定します。キーに使用できる有効な型は次のとおりです。
INTEGER: メタデータ値としてint_valueで渡されます。FLOAT: メタデータ値としてfloat_valueで渡されます。STRING: メタデータ値としてstr_valueで渡されます。DATETIME: メタデータ値としてdatetime_valueで渡されます(RFC 3339 形式の文字列(例: "2024-01-01T00:00:00Z"))。BOOLEAN: メタデータ値としてbool_valueで渡されます。LIST: メタデータ値としてlist_valueで渡されます。 次の REST サンプルは、コーパスのyearフィールドとmonthフィールドを定義するメタデータ スキーマを一括で作成する方法を示しています。
REST
次の変数を置き換えます。
- PROJECT_ID: プロジェクト ID。
- LOCATION: リクエストを処理するリージョン。
- RAG_CORPUS_ID: RAG コーパスの ID。
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"}
}
}
]
}'
メタデータ スキーマを一覧表示する
次の REST サンプルは、コーパスに定義されているメタデータ スキーマを一覧表示する方法を示しています。
REST
次の変数を置き換えます。
- PROJECT_ID: プロジェクト ID。
- LOCATION: リクエストを処理するリージョン。
- RAG_CORPUS_ID: RAG コーパスの ID。
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
メタデータ スキーマを削除する
次の REST サンプルは、コーパスからメタデータ スキーマを一括で削除する方法を示しています。
REST
次の変数を置き換えます。
- PROJECT_ID: プロジェクト ID。
- LOCATION: リクエストを処理するリージョン。
- RAG_CORPUS_ID: RAG コーパスの ID。
- RAG_DATA_SCHEMA_KEY_1: 削除する最初のメタデータ スキーマのキー名。
- RAG_DATA_SCHEMA_KEY_2: 削除する 2 番目のメタデータ スキーマのキー名。
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}"'"
]
}'
ファイル メタデータを管理する
ファイルをコーパスにアップロードまたはインポートしたら、それらのファイルに関連付けられたメタデータを添付、更新、表示、削除できます。
ファイルにメタデータを添付する
添付するメタデータは、コーパスに定義されたスキーマに準拠している必要があります。次の REST サンプルは、複数のメタデータ値をファイルに添付する方法を示しています。
REST
次の変数を置き換えます。
- PROJECT_ID: プロジェクト ID。
- LOCATION: リクエストを処理するリージョン。
- RAG_CORPUS_ID: RAG コーパスの ID。
- RAG_FILE_ID: RAG ファイルの ID。
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" } }
}
}
]
}'
ファイルのメタデータを一覧表示する
次の REST サンプルは、特定のファイルに添付されたメタデータを一覧表示する方法を示しています。
REST
次の変数を置き換えます。
- PROJECT_ID: プロジェクト ID。
- LOCATION: リクエストを処理するリージョン。
- RAG_CORPUS_ID: RAG コーパスの ID。
- RAG_FILE_ID: RAG ファイルの ID。
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
メタデータを更新する
ファイルに添付されたメタデータ値を更新できます。次の REST サンプルは、year キーに関連付けられたメタデータ値を更新する方法を示しています。RAG_METADATA_KEY は、メタデータの作成時に使用した文字列です。
REST
次の変数を置き換えます。
- PROJECT_ID: プロジェクト ID。
- LOCATION: リクエストを処理するリージョン。
- RAG_CORPUS_ID: RAG コーパスの ID。
- RAG_FILE_ID: RAG ファイルの ID。
- RAG_METADATA_KEY: 更新するメタデータのキー名。
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 } }
}'
ファイルからメタデータを削除する
次の REST サンプルは、ファイルからメタデータ値を一括で削除する方法を示しています。
REST
次の変数を置き換えます。
- PROJECT_ID: プロジェクト ID。
- LOCATION: リクエストを処理するリージョン。
- RAG_CORPUS_ID: RAG コーパスの ID。
- RAG_FILE_ID: RAG ファイルの ID。
- RAG_METADATA_KEY_1: 削除する最初のメタデータ値のキー名。
- RAG_METADATA_KEY_2: 削除する 2 番目のメタデータ値のキー名。
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}"'"
]
}'
メタデータでコンテキストをフィルタする
結果の関連性を高めるには、ファイル メタデータを使用して、コンテキストの取得時に検索スペースを絞り込みます。CEL(Common Expression Language)を使用して、metadata_filter 式を RetrieveContexts リクエストに追加します(例: year == 2024 && month == "May")。フィルタ式に一致するメタデータを含むファイルのみが検索対象となります。
次の REST サンプルは、メタデータ フィルタを使用してコンテキストを取得する方法を示しています。
REST
次の変数を置き換えます。
- PROJECT_ID: プロジェクト ID。
- LOCATION: リクエストを処理するリージョン。
- RAG_CORPUS_ID: RAG コーパスの ID。
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\""
}
}
}
}'
次のステップ
- ファイルのアップロードと管理の詳細については、RAG ナレッジベースを管理するをご覧ください。
- RAG の標準ベクトル検索の詳細については、RAG でベクトル検索を使用するをご覧ください。