このページでは、RAG Engine を Vertex AI ベクトル検索に接続する方法について説明します。
このノートブック Vertex AI ベクトル検索を使用した RAG エンジンを使用して、手順に沿って操作することもできます。
RAG Engine は、Spanner を搭載した組み込みベクトル データベースを使用して、テキスト ドキュメントのベクトル表現の保存と管理を行う強力なツールです。ベクトル データベースを使用すると、指定されたクエリに対するドキュメントの意味的な類似性に基づいて、関連するドキュメントを効率的に取得できます。Vertex AI Vector Search を追加のベクトル データベースとして RAG Engine と統合することで、Vector Search の機能を使用して低レイテンシでデータ量を処理し、RAG アプリケーションのパフォーマンスとスケーラビリティを向上させることができます。
Vertex AI ベクトル検索の設定
Vertex AI ベクトル検索は、Google Research が開発したベクトル検索技術をベースにしています。ベクトル検索では、Google 検索、YouTube、Google Play などの Google プロダクトの基盤と同じインフラストラクチャを使用できます。
RAG Engine と統合するには、空のベクトル検索インデックスが必要です。
Vertex AI SDK を設定する
Vertex AI SDK を設定するには、設定をご覧ください。
ベクトル検索インデックスを作成する
RAG コーパスと互換性のあるベクトル検索インデックスを作成するには、インデックスが次の条件を満たしている必要があります。
IndexUpdateMethod
はSTREAM_UPDATE
にする必要があります。ストリーム インデックスを作成するをご覧ください。距離の測定タイプは、次のいずれかに明示的に設定する必要があります。
DOT_PRODUCT_DISTANCE
COSINE_DISTANCE
ベクトルの次元は、RAG コーパスで使用するエンベディング モデルと一致している必要があります。その他のパラメータは、選択内容に基づいてチューニングできます。選択内容によって、追加のパラメータをチューニングできるかどうかが決まります。
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
ベクトル検索インデックス エンドポイントを作成する
パブリック エンドポイントは RAG Engine でサポートされています。
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
インデックスをインデックス エンドポイントにデプロイする
最近傍検索を行う前に、インデックスをインデックス エンドポイントにデプロイする必要があります。
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
インデックスをインデックス エンドポイントに初めてデプロイする場合は、バックエンドを自動的にビルドして起動するまでに 30 分ほどかかります。その後、インデックスを保存できます。最初のデプロイ後、数秒でインデックスの準備が整います。インデックスのデプロイのステータスを確認するには、ベクトル検索コンソールを開き、[インデックス エンドポイント] タブを選択して、インデックス エンドポイントを選択します。
インデックスとインデックス エンドポイントのリソース名を特定します。形式は次のとおりです。
projects/${PROJECT_ID}/locations/${LOCATION_ID}/indexes/${INDEX_ID}
projects/${PROJECT_ID}/locations/${LOCATION_ID}/indexEndpoints/${INDEX_ENDPOINT_ID}
。
RAG Engine で Vertex AI ベクトル検索を使用する
Vector Search インスタンスが設定されたら、このセクションの手順に沿って、Vector Search インスタンスを RAG アプリケーションのベクトル データベースとして設定します。
ベクトル データベースを設定して RAG コーパスを作成する
RAG コーパスを作成する場合は、完全な INDEX_ENDPOINT_NAME
と INDEX_NAME
のみを指定します。RAG コーパスが作成され、ベクトル検索インデックスに自動的に関連付けられます。検証は条件に対して実行されます。いずれかの要件が満たされていない場合、リクエストは拒否されます。
Python
このサンプルを試す前に、Vertex AI クイックスタート: クライアント ライブラリの使用にある Python の設定手順を完了してください。詳細については、Vertex AI Python API のリファレンス ドキュメントをご覧ください。
Vertex AI に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
REST
# TODO(developer): Update and un-comment the following lines:
# CORPUS_DISPLAY_NAME = "YOUR_CORPUS_DISPLAY_NAME"
# Full index/indexEndpoint resource name
# Index: projects/${PROJECT_ID}/locations/${LOCATION_ID}/indexes/${INDEX_ID}
# IndexEndpoint: projects/${PROJECT_ID}/locations/${LOCATION_ID}/indexEndpoints/${INDEX_ENDPOINT_ID}
# INDEX_RESOURCE_NAME = "YOUR_INDEX_ENDPOINT_RESOURCE_NAME"
# INDEX_NAME = "YOUR_INDEX_RESOURCE_NAME"
# Call CreateRagCorpus API to create a new RagCorpus
curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://${LOCATION_ID}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION_ID}/ragCorpora -d '{
"display_name" : '\""${CORPUS_DISPLAY_NAME}"\"',
"rag_vector_db_config" : {
"vertex_vector_search": {
"index":'\""${INDEX_NAME}"\"'
"index_endpoint":'\""${INDEX_ENDPOINT_NAME}"\"'
}
}
}'
# Call ListRagCorpora API to verify the RagCorpus is created successfully
curl -sS -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://${LOCATION_ID}-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/${LOCATION_ID}/ragCorpora"
RAG API を使用してファイルをインポートする
ImportRagFiles
API を使用して、Cloud Storage または Google ドライブからベクトル検索インデックスにファイルをインポートします。ファイルは埋め込まれ、ベクトル検索インデックスに保存されます。
REST
# TODO(developer): Update and uncomment the following lines:
# RAG_CORPUS_ID = "your-rag-corpus-id"
#
# Google Cloud Storage bucket/file location.
# For example, "gs://rag-fos-test/"
# GCS_URIS= "your-gcs-uris"
# Call ImportRagFiles API to embed files and store in the BigQuery table
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/${RAG_CORPUS_ID}/ragFiles:import \
-d '{
"import_rag_files_config": {
"gcs_source": {
"uris": '\""${GCS_URIS}"\"'
},
"rag_file_chunking_config": {
"chunk_size": 512
}
}
}'
# Call ListRagFiles API to verify the files are imported successfully
curl -X GET \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1/ragCorpora/${RAG_CORPUS_ID}/ragFiles
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
RAG API を使用して関連するコンテキストを取得する
ファイルのインポートが完了したら、RetrieveContexts
API を使用してベクトル検索インデックスから関連するコンテキストを取得できます。
REST
# TODO(developer): Update and uncomment the following lines:
# RETRIEVAL_QUERY="your-retrieval-query"
#
# Full RAG corpus resource name
# Format:
# "projects/${PROJECT_ID}/locations/us-central1/ragCorpora/${RAG_CORPUS_ID}"
# RAG_CORPUS_RESOURCE="your-rag-corpus-resource"
# Call RetrieveContexts API to retrieve relevant contexts
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
https://us-central1-aiplatform.googleapis.com/v1beta1/projects/${PROJECT_ID}/locations/us-central1:retrieveContexts \
-d '{
"vertex_rag_store": {
"rag_resources": {
"rag_corpus": '\""${RAG_CORPUS_RESOURCE}"\"',
},
},
"query": {
"text": '\""${RETRIEVAL_QUERY}"\"',
"similarity_top_k": 10
}
}'
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
Vertex AI Gemini API を使用してコンテンツを生成する
Gemini モデルを使用してコンテンツを生成する場合は、Vertex AI GenerateContent
API を呼び出します。リクエストで RAG_CORPUS_RESOURCE
を指定すると、API はベクトル検索インデックスからデータを自動的に取得します。
REST
# TODO(developer): Update and uncomment the following lines:
# MODEL_ID=gemini-1.5-flash-001
# GENERATE_CONTENT_PROMPT="your-generate-content-prompt"
# GenerateContent with contexts retrieved from the FeatureStoreOnline index
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/publishers/google/models/${MODEL_ID}:generateContent \
-d '{
"contents": {
"role": "user",
"parts": {
"text": '\""${GENERATE_CONTENT_PROMPT}"\"'
}
},
"tools": {
"retrieval": {
"vertex_rag_store": {
"rag_resources": {
"rag_corpus": '\""${RAG_CORPUS_RESOURCE}"\"',
},
"similarity_top_k": 8,
"vector_distance_threshold": 0.32
}
}
}
}'
Python
Vertex AI SDK for Python のインストールまたは更新の方法については、Vertex AI SDK for Python をインストールするをご覧ください。 詳細については、Python API リファレンス ドキュメントをご覧ください。
次のステップ
- エンベディング モデルの選択の詳細については、RAG Engine でエンベディング モデルを使用するをご覧ください。
- ファイルのインポートの詳細については、RAG ファイルをインポートするをご覧ください。