検索データストアを作成

データストアを作成して検索用にデータを取り込むには、使用するソースのセクションに移動します。

サードパーティのデータソースからデータを同期するには、サードパーティのデータソースを接続するをご覧ください。

制限事項

CMEK 組織のポリシーがある場合は、Google Cloud コンソールではなく API を使用して新しいデータストアを作成する必要があります。CMEK 組織のポリシーが有効になっている場合、Google Cloud コンソールを使用して新しいデータストアを作成することはできません。Vertex AI Search での CMEK のサポートの詳細については、顧客管理の暗号鍵をご覧ください。

ウェブサイトのコンテンツを使用してデータストアを作成する

次の手順でデータストアを作成し、ウェブサイトをインデックスに登録します。

ウェブサイト データストアを作成した後に使用するには、Enterprise 機能が有効になっているアプリに接続する必要があります。アプリを作成するときに、アプリの Enterprise エディションを有効にできます。これにより追加費用が発生します。検索アプリを作成する高度な機能についてをご覧ください。

Console

Google Cloud コンソールを使用してデータストアを作成し、ウェブサイトをインデックスに登録する手順は次のとおりです。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. ナビゲーション メニューで [データストア] をクリックします。

  3. [データストアを作成] をクリックします。

  4. [ソース] ページで、[ウェブサイトのコンテンツ] を選択します。

  5. このデータストアでウェブサイトの高度なインデックス登録を有効にするかどうかを選択します。このオプションは後でオンまたはオフにすることはできません。

    ウェブサイトの高度なインデックス登録では、検索の要約、フォローアップ付き検索、抽出回答などの追加機能が提供されます。 高度なウェブサイト インデックス登録を使用すると、追加料金がかかります。また、インデックスに登録するウェブサイトのドメインの所有権を確認する必要があります。詳細については、ウェブサイトの高度なインデックス登録料金をご覧ください。

  6. [追加するサイト] フィールドに、データストアに含めるウェブサイトに一致する URL パターンを入力します。カンマ区切りを使用せずに、1 行に 1 つの URL パターンを含めます。例: www.example.com/docs/*

  7. 省略可: [除外するサイト] フィールドに、データストアから除外する URL パターンを入力します。

    含めるまたは除外できる URL パターンの数については、ウェブサイトのデータをご覧ください。

  8. [続行] をクリックします。

  9. データストアのロケーションを選択します。ロケーションを選択するには、ウェブサイトの高度なインデックス登録をオンにする必要があります。

  10. データストアの名前を入力します。

  11. [作成] をクリックします。Vertex AI Search によってデータストアが作成され、[データストア] ページにデータストアが表示されます。

  12. データストアに関する情報を表示するには、[名前] 列でデータストアの名前をクリックします。データストアのページが表示されます。

    • [ウェブサイトの高度なインデックス登録] をオンにすると、データストア内のドメインの確認を求める警告が表示されます。
    • 割り当て不足(指定したウェブサイトのページ数が、プロジェクトの「プロジェクトあたりのドキュメント数」の割り当てを超えている場合)は、割り当てのアップグレードを促す警告がさらに表示されます。
  13. データストア内の URL パターンのドメインを確認するには、ウェブサイトのドメインを確認するページの手順に沿って操作します。

  14. 割り当てをアップグレードする手順は次のとおりです。

    1. [割り当てをアップグレード] をクリックします。Google Cloud コンソールの [IAM と管理] ページが表示されます。
    2. Google Cloud ドキュメントの割り当て上限の引き上げをリクエストするの手順に沿って操作します。増やす割り当ては、Discovery Engine API サービスの ドキュメント数です。
    3. 割り当て上限の引き上げリクエストを送信したら、[Agent Builder] ページに戻り、ナビゲーション メニューの [データストア] をクリックします。
    4. [名前] 列でデータストアの名前をクリックします。[ステータス] 列には、割り当てを超えたウェブサイトのインデックス作成が進行中であることが示されます。URL の [ステータス] 列に [インデックス登録済み] と表示されている場合、その URL または URL パターンに対してウェブサイトのインデックス登録の高度な機能を使用できます。

    詳細については、[割り当てと上限] ページのウェブページのインデックス登録の割り当てをご覧ください。

Python

詳細については、Vertex AI Agent Builder Python API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"


def create_data_store_sample(
    project_id: str,
    location: str,
    data_store_id: str,
) -> str:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.DataStoreServiceClient(client_options=client_options)

    # The full resource name of the collection
    # e.g. projects/{project}/locations/{location}/collections/default_collection
    parent = client.collection_path(
        project=project_id,
        location=location,
        collection="default_collection",
    )

    data_store = discoveryengine.DataStore(
        display_name="My Data Store",
        # Options: GENERIC, MEDIA, HEALTHCARE_FHIR
        industry_vertical=discoveryengine.IndustryVertical.GENERIC,
        # Options: SOLUTION_TYPE_RECOMMENDATION, SOLUTION_TYPE_SEARCH, SOLUTION_TYPE_CHAT, SOLUTION_TYPE_GENERATIVE_CHAT
        solution_types=[discoveryengine.SolutionType.SOLUTION_TYPE_SEARCH],
        # TODO(developer): Update content_config based on data store type.
        # Options: NO_CONTENT, CONTENT_REQUIRED, PUBLIC_WEBSITE
        content_config=discoveryengine.DataStore.ContentConfig.CONTENT_REQUIRED,
    )

    request = discoveryengine.CreateDataStoreRequest(
        parent=parent,
        data_store_id=data_store_id,
        data_store=data_store,
        # Optional: For Advanced Site Search Only
        # create_advanced_site_search=True,
    )

    # Make the request
    operation = client.create_data_store(request=request)

    print(f"Waiting for operation to complete: {operation.operation.name}")
    response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    metadata = discoveryengine.CreateDataStoreMetadata(operation.metadata)

    # Handle the response
    print(response)
    print(metadata)

    return operation.operation.name

ウェブサイトをインポートする

from google.api_core.client_options import ClientOptions

from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# NOTE: Do not include http or https protocol in the URI pattern
# uri_pattern = "cloud.google.com/generative-ai-app-builder/docs/*"

#  For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
    ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
    if location != "global"
    else None
)

# Create a client
client = discoveryengine.SiteSearchEngineServiceClient(
    client_options=client_options
)

# The full resource name of the data store
# e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}
site_search_engine = client.site_search_engine_path(
    project=project_id, location=location, data_store=data_store_id
)

# Target Site to index
target_site = discoveryengine.TargetSite(
    provided_uri_pattern=uri_pattern,
    # Options: INCLUDE, EXCLUDE
    type_=discoveryengine.TargetSite.Type.INCLUDE,
    exact_match=False,
)

# Make the request
operation = client.create_target_site(
    parent=site_search_engine,
    target_site=target_site,
)

print(f"Waiting for operation to complete: {operation.operation.name}")
response = operation.result()

# After the operation is complete,
# get information from operation metadata
metadata = discoveryengine.CreateTargetSiteMetadata(operation.metadata)

# Handle the response
print(response)
print(metadata)

次のステップ

  • ウェブサイト データストアをアプリにアタッチするには、エンタープライズ機能を有効にしてアプリを作成し、検索アプリを作成するの手順に沿ってデータストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

BigQuery からインポート

BigQuery テーブルからデータストアを作成するには、次の 2 つの方法があります。

  • 1 回限りの取り込み: BigQuery テーブルからデータストアにデータをインポートします。データストア内のデータは、手動でデータを更新しない限り変更されません。

  • 定期的な取り込み: 1 つ以上の BigQuery テーブルからデータをインポートし、BigQuery データセットの最新データでデータストアが更新される頻度を決定する同期頻度を設定します。

次の表は、BigQuery データを Vertex AI Search データストアにインポートする 2 つの方法を比較したものです。

1 回限りの取り込み 定期的な取り込み
一般提供(GA)。 公開プレビュー版。
データは手動で更新する必要があります。 データは 1 日、3 日、5 日ごとに自動的に更新されます。データを手動で更新することはできません。
Vertex AI Search は、BigQuery の 1 つのテーブルから単一のデータストアを作成します。 Vertex AI Search は、BigQuery データセットデータ コネクタと、指定された各テーブルのデータストア(エンティティ データストア)を作成します。データ コネクタごとに、テーブルのデータ型(構造化など)が同じで、同じ BigQuery データセットに存在している必要があります。
複数のテーブルのデータを 1 つのデータストアに統合するには、まず 1 つのテーブルからデータを取り込み、次に別のソースまたは BigQuery テーブルからデータを取り込みます。 手動データ インポートはサポートされていないため、エンティティ データストアのデータは 1 つの BigQuery テーブルからのみ取得できます。
データソースのアクセス制御がサポートされています。 データソースのアクセス制御はサポートされていません。インポートされたデータにアクセス制御を含めることはできますが、これらの制御は考慮されません。
データストアは、Google Cloud コンソールまたは API を使用して作成できます。 データ コネクタとそのエンティティ データストアは、コンソールを使用して作成する必要があります。
CMEK-対応。 CMEK に準拠していません。

BigQuery から 1 回インポートする

BigQuery テーブルからデータを取り込むには、次の手順でデータストアを作成し、Google Cloud コンソールまたは API を使用してデータを取り込みます。

データをインポートする前に、取り込むデータを準備します

Console

Google Cloud コンソールを使用して BigQuery からデータを取り込む手順は次のとおりです。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで、[BigQuery] を選択します。

  5. インポートするデータの種類を選択します。

  6. [1 回] をクリックします。

  7. [BigQuery のパス] フィールドで [参照] をクリックし、取り込み用に準備したテーブルを選択して、[選択] をクリックします。 または、[BigQuery パス] フィールドにテーブルの場所を直接入力します。

  8. [続行] をクリックします。

  9. 構造化データを 1 回限りインポートする場合:

    1. フィールドをキー プロパティにマッピングします。

    2. スキーマに重要なフィールドが欠落している場合は、[新しいフィールドを追加] を使用して追加します。

      詳細については、自動検出と編集についてをご覧ください。

    3. [続行] をクリックします。

  10. データストアのリージョンを選択します。

  11. データストアの名前を入力します。

  12. [作成] をクリックします。

  13. 取り込みのステータスを確認するには、[データストア] ページに移動し、データストア名をクリックして、[データ] ページで詳細を表示します。[アクティビティ] タブのステータス列が [進行中] から [インポート完了] に変わると、取り込みが完了します。

    取り込みには、データのサイズに応じて、数分から数時間かかることがあります。

REST

コマンドラインを使用してデータストアを作成し、BigQuery からデータをインポートする手順は次のとおりです。

  1. データストアの作成

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
    -d '{
      "displayName": "DATA_STORE_DISPLAY_NAME",
      "industryVertical": "GENERIC",
      "solutionTypes": ["SOLUTION_TYPE_SEARCH"]
    }'
    

    以下を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • DATA_STORE_ID: 作成する Vertex AI Search データストアの ID。この ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • DATA_STORE_DISPLAY_NAME: 作成する Vertex AI Search データストアの表示名。

    省略可: 非構造化データをアップロードし、ドキュメント解析を構成する場合や、RAG のドキュメント チャンキングを有効にする場合は、documentProcessingConfig オブジェクトを指定して、データストアの作成リクエストに含めます。スキャンされた PDF を取り込む場合は、PDF 用の OCR パーサーを構成することをおすすめします。解析オプションまたはチャンク処理オプションの構成方法については、ドキュメントの解析とチャンク処理をご覧ください。

  2. BigQuery からデータをインポートします。

    スキーマを定義した場合は、データがそのスキーマに準拠していることを確認します。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents:import" \
    -d '{
      "bigquerySource": {
        "projectId": "PROJECT_ID",
        "datasetId":"DATASET_ID",
        "tableId": "TABLE_ID",
        "dataSchema": "DATA_SCHEMA",
        "aclEnabled": "BOOLEAN"
      },
      "reconciliationMode": "RECONCILIATION_MODE",
      "autoGenerateIds": "AUTO_GENERATE_IDS",
      "idField": "ID_FIELD",
      "errorConfig": {
        "gcsPrefix": "ERROR_DIRECTORY"
      }
    }'
    

    以下を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • DATA_STORE_ID: Vertex AI Search データストアの ID。
    • DATASET_ID: BigQuery データセットの ID。
    • TABLE_ID: BigQuery テーブルの ID。
      • BigQuery テーブルが PROJECT_ID にない場合は、サービス アカウント service-<project number>@gcp-sa-discoveryengine.iam.gserviceaccount.com に BigQuery テーブルに対する「BigQuery データ閲覧者」権限を付与する必要があります。たとえば、ソース プロジェクト「123」から宛先プロジェクト「456」に BigQuery テーブルをインポートする場合は、プロジェクト「123」の BigQuery テーブルに service-456@gcp-sa-discoveryengine.iam.gserviceaccount.com 権限を付与します。
    • DATA_SCHEMA: 省略可。値は document および custom です。デフォルトは document です。
      • document: 使用する BigQuery テーブルは、取り込み用にデータを準備するで説明されているデフォルトの BigQuery スキーマに準拠している必要があります。各ドキュメントの ID を自分で定義し、すべてのデータを jsonData 文字列にラップできます。
      • custom: 任意の BigQuery テーブル スキーマが受け入れられ、インポートされた各ドキュメントの ID が Vertex AI Search によって自動的に生成されます。
    • ERROR_DIRECTORY: 省略可。インポートに関するエラー情報用の Cloud Storage ディレクトリ(例: gs://<your-gcs-bucket>/directory/import_errors)。Vertex AI Search に一時ディレクトリを自動的に作成させるには、このフィールドを空のままにすることをおすすめします。
    • RECONCILIATION_MODE: 省略可。値は FULL および INCREMENTAL です。デフォルトは INCREMENTAL です。INCREMENTAL を指定すると、BigQuery からデータストアへのデータの増分更新が行われます。これにより、アップサート オペレーションが実行され、新しいドキュメントを追加し、既存のドキュメントを更新された同じ ID のドキュメントで置き換えます。FULL を指定すると、データストア内のドキュメントが完全に再ベース化されます。つまり、新規および更新されたドキュメントがデータストアに追加され、BigQuery にないドキュメントがデータストアから削除されます。FULL モードは、不要になったドキュメントを自動的に削除する場合に便利です。
    • AUTO_GENERATE_IDS: 省略可。ドキュメント ID を自動生成するかどうかを指定します。true に設定すると、ドキュメント ID はペイロードのハッシュに基づいて生成されます。生成されたドキュメント ID は、複数のインポートで整合性が維持されない場合があります。複数のインポートで ID を自動生成する場合は、ドキュメント ID の整合性を維持するために、reconciliationModeFULL に設定することを強くおすすめします。

      autoGenerateIds は、bigquerySource.dataSchemacustom に設定されている場合にのみ指定します。それ以外の場合は、INVALID_ARGUMENT エラーが返されます。autoGenerateIds を指定しない場合、または false に設定しない場合は、idField を指定する必要があります。そうしないと、ドキュメントのインポートに失敗します。

    • ID_FIELD: 省略可。ドキュメント ID であるフィールドを指定します。BigQuery ソースファイルの場合、idField は、ドキュメント ID を含む BigQuery テーブルの列の名前を示します。

      idField は、(1)bigquerySource.dataSchemacustom に設定されていること、(2)auto_generate_idsfalse に設定されているか、指定されていないこと、の場合にのみ指定します。それ以外の場合は、INVALID_ARGUMENT エラーが返されます。

      BigQuery 列名の値は文字列型で、1 から 63 文字の範囲で、RFC-1034 に準拠している必要があります。そうしないと、ドキュメントのインポートに失敗します。

C#

詳細については、Vertex AI Agent Builder C# API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成

using Google.Cloud.DiscoveryEngine.V1;
using Google.LongRunning;

public sealed partial class GeneratedDataStoreServiceClientSnippets
{
    /// <summary>Snippet for CreateDataStore</summary>
    /// <remarks>
    /// This snippet has been automatically generated and should be regarded as a code template only.
    /// It will require modifications to work:
    /// - It may require correct/in-range values for request initialization.
    /// - It may require specifying regional endpoints when creating the service client as shown in
    ///   https://cloud.google.com/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public void CreateDataStoreRequestObject()
    {
        // Create client
        DataStoreServiceClient dataStoreServiceClient = DataStoreServiceClient.Create();
        // Initialize request argument(s)
        CreateDataStoreRequest request = new CreateDataStoreRequest
        {
            ParentAsCollectionName = CollectionName.FromProjectLocationCollection("[PROJECT]", "[LOCATION]", "[COLLECTION]"),
            DataStore = new DataStore(),
            DataStoreId = "",
            CreateAdvancedSiteSearch = false,
            SkipDefaultSchemaCreation = false,
        };
        // Make the request
        Operation<DataStore, CreateDataStoreMetadata> response = dataStoreServiceClient.CreateDataStore(request);

        // Poll until the returned long-running operation is complete
        Operation<DataStore, CreateDataStoreMetadata> completedResponse = response.PollUntilCompleted();
        // Retrieve the operation result
        DataStore result = completedResponse.Result;

        // Or get the name of the operation
        string operationName = response.Name;
        // This name can be stored, then the long-running operation retrieved later by name
        Operation<DataStore, CreateDataStoreMetadata> retrievedResponse = dataStoreServiceClient.PollOnceCreateDataStore(operationName);
        // Check if the retrieved long-running operation has completed
        if (retrievedResponse.IsCompleted)
        {
            // If it has completed, then access the result
            DataStore retrievedResult = retrievedResponse.Result;
        }
    }
}

ドキュメントのインポート

using Google.Cloud.DiscoveryEngine.V1;
using Google.LongRunning;
using Google.Protobuf.WellKnownTypes;

public sealed partial class GeneratedDocumentServiceClientSnippets
{
    /// <summary>Snippet for ImportDocuments</summary>
    /// <remarks>
    /// This snippet has been automatically generated and should be regarded as a code template only.
    /// It will require modifications to work:
    /// - It may require correct/in-range values for request initialization.
    /// - It may require specifying regional endpoints when creating the service client as shown in
    ///   https://cloud.google.com/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public void ImportDocumentsRequestObject()
    {
        // Create client
        DocumentServiceClient documentServiceClient = DocumentServiceClient.Create();
        // Initialize request argument(s)
        ImportDocumentsRequest request = new ImportDocumentsRequest
        {
            ParentAsBranchName = BranchName.FromProjectLocationDataStoreBranch("[PROJECT]", "[LOCATION]", "[DATA_STORE]", "[BRANCH]"),
            InlineSource = new ImportDocumentsRequest.Types.InlineSource(),
            ErrorConfig = new ImportErrorConfig(),
            ReconciliationMode = ImportDocumentsRequest.Types.ReconciliationMode.Unspecified,
            UpdateMask = new FieldMask(),
            AutoGenerateIds = false,
            IdField = "",
        };
        // Make the request
        Operation<ImportDocumentsResponse, ImportDocumentsMetadata> response = documentServiceClient.ImportDocuments(request);

        // Poll until the returned long-running operation is complete
        Operation<ImportDocumentsResponse, ImportDocumentsMetadata> completedResponse = response.PollUntilCompleted();
        // Retrieve the operation result
        ImportDocumentsResponse result = completedResponse.Result;

        // Or get the name of the operation
        string operationName = response.Name;
        // This name can be stored, then the long-running operation retrieved later by name
        Operation<ImportDocumentsResponse, ImportDocumentsMetadata> retrievedResponse = documentServiceClient.PollOnceImportDocuments(operationName);
        // Check if the retrieved long-running operation has completed
        if (retrievedResponse.IsCompleted)
        {
            // If it has completed, then access the result
            ImportDocumentsResponse retrievedResult = retrievedResponse.Result;
        }
    }
}

Go

詳細については、Vertex AI Agent Builder Go API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成


package main

import (
	"context"

	discoveryengine "cloud.google.com/go/discoveryengine/apiv1"
	discoveryenginepb "cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb"
)

func main() {
	ctx := context.Background()
	// This snippet has been automatically generated and should be regarded as a code template only.
	// It will require modifications to work:
	// - It may require correct/in-range values for request initialization.
	// - It may require specifying regional endpoints when creating the service client as shown in:
	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
	c, err := discoveryengine.NewDataStoreClient(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	defer c.Close()

	req := &discoveryenginepb.CreateDataStoreRequest{
		// TODO: Fill request struct fields.
		// See https://pkg.go.dev/cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb#CreateDataStoreRequest.
	}
	op, err := c.CreateDataStore(ctx, req)
	if err != nil {
		// TODO: Handle error.
	}

	resp, err := op.Wait(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	// TODO: Use resp.
	_ = resp
}

ドキュメントのインポート


package main

import (
	"context"

	discoveryengine "cloud.google.com/go/discoveryengine/apiv1"
	discoveryenginepb "cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb"
)

func main() {
	ctx := context.Background()
	// This snippet has been automatically generated and should be regarded as a code template only.
	// It will require modifications to work:
	// - It may require correct/in-range values for request initialization.
	// - It may require specifying regional endpoints when creating the service client as shown in:
	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
	c, err := discoveryengine.NewDocumentClient(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	defer c.Close()

	req := &discoveryenginepb.ImportDocumentsRequest{
		// TODO: Fill request struct fields.
		// See https://pkg.go.dev/cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb#ImportDocumentsRequest.
	}
	op, err := c.ImportDocuments(ctx, req)
	if err != nil {
		// TODO: Handle error.
	}

	resp, err := op.Wait(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	// TODO: Use resp.
	_ = resp
}

Java

詳細については、Vertex AI Agent Builder Java API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成

import com.google.cloud.discoveryengine.v1.CollectionName;
import com.google.cloud.discoveryengine.v1.CreateDataStoreRequest;
import com.google.cloud.discoveryengine.v1.DataStore;
import com.google.cloud.discoveryengine.v1.DataStoreServiceClient;

public class SyncCreateDataStore {

  public static void main(String[] args) throws Exception {
    syncCreateDataStore();
  }

  public static void syncCreateDataStore() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (DataStoreServiceClient dataStoreServiceClient = DataStoreServiceClient.create()) {
      CreateDataStoreRequest request =
          CreateDataStoreRequest.newBuilder()
              .setParent(CollectionName.of("[PROJECT]", "[LOCATION]", "[COLLECTION]").toString())
              .setDataStore(DataStore.newBuilder().build())
              .setDataStoreId("dataStoreId929489618")
              .setCreateAdvancedSiteSearch(true)
              .setSkipDefaultSchemaCreation(true)
              .build();
      DataStore response = dataStoreServiceClient.createDataStoreAsync(request).get();
    }
  }
}

ドキュメントのインポート

import com.google.cloud.discoveryengine.v1.BranchName;
import com.google.cloud.discoveryengine.v1.DocumentServiceClient;
import com.google.cloud.discoveryengine.v1.ImportDocumentsRequest;
import com.google.cloud.discoveryengine.v1.ImportDocumentsResponse;
import com.google.cloud.discoveryengine.v1.ImportErrorConfig;
import com.google.protobuf.FieldMask;

public class SyncImportDocuments {

  public static void main(String[] args) throws Exception {
    syncImportDocuments();
  }

  public static void syncImportDocuments() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (DocumentServiceClient documentServiceClient = DocumentServiceClient.create()) {
      ImportDocumentsRequest request =
          ImportDocumentsRequest.newBuilder()
              .setParent(
                  BranchName.ofProjectLocationDataStoreBranchName(
                          "[PROJECT]", "[LOCATION]", "[DATA_STORE]", "[BRANCH]")
                      .toString())
              .setErrorConfig(ImportErrorConfig.newBuilder().build())
              .setUpdateMask(FieldMask.newBuilder().build())
              .setAutoGenerateIds(true)
              .setIdField("idField1629396127")
              .build();
      ImportDocumentsResponse response = documentServiceClient.importDocumentsAsync(request).get();
    }
  }
}

Node.js

詳細については、Vertex AI Agent Builder Node.js API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成

/**
 * This snippet has been automatically generated and should be regarded as a code template only.
 * It will require modifications to work.
 * It may require correct/in-range values for request initialization.
 * TODO(developer): Uncomment these variables before running the sample.
 */
/**
 *  Required. The parent resource name, such as
 *  `projects/{project}/locations/{location}/collections/{collection}`.
 */
// const parent = 'abc123'
/**
 *  Required. The DataStore google.cloud.discoveryengine.v1.DataStore  to
 *  create.
 */
// const dataStore = {}
/**
 *  Required. The ID to use for the
 *  DataStore google.cloud.discoveryengine.v1.DataStore, which will become
 *  the final component of the
 *  DataStore google.cloud.discoveryengine.v1.DataStore's resource name.
 *  This field must conform to RFC-1034 (https://tools.ietf.org/html/rfc1034)
 *  standard with a length limit of 63 characters. Otherwise, an
 *  INVALID_ARGUMENT error is returned.
 */
// const dataStoreId = 'abc123'
/**
 *  A boolean flag indicating whether user want to directly create an advanced
 *  data store for site search.
 *  If the data store is not configured as site
 *  search (GENERIC vertical and PUBLIC_WEBSITE content_config), this flag will
 *  be ignored.
 */
// const createAdvancedSiteSearch = true
/**
 *  A boolean flag indicating whether to skip the default schema creation for
 *  the data store. Only enable this flag if you are certain that the default
 *  schema is incompatible with your use case.
 *  If set to true, you must manually create a schema for the data store before
 *  any documents can be ingested.
 *  This flag cannot be specified if `data_store.starting_schema` is specified.
 */
// const skipDefaultSchemaCreation = true

// Imports the Discoveryengine library
const {DataStoreServiceClient} = require('@google-cloud/discoveryengine').v1;

// Instantiates a client
const discoveryengineClient = new DataStoreServiceClient();

async function callCreateDataStore() {
  // Construct request
  const request = {
    parent,
    dataStore,
    dataStoreId,
  };

  // Run request
  const [operation] = await discoveryengineClient.createDataStore(request);
  const [response] = await operation.promise();
  console.log(response);
}

callCreateDataStore();

ドキュメントのインポート

/**
 * This snippet has been automatically generated and should be regarded as a code template only.
 * It will require modifications to work.
 * It may require correct/in-range values for request initialization.
 * TODO(developer): Uncomment these variables before running the sample.
 */
/**
 *  The Inline source for the input content for documents.
 */
// const inlineSource = {}
/**
 *  Cloud Storage location for the input content.
 */
// const gcsSource = {}
/**
 *  BigQuery input source.
 */
// const bigquerySource = {}
/**
 *  FhirStore input source.
 */
// const fhirStoreSource = {}
/**
 *  Spanner input source.
 */
// const spannerSource = {}
/**
 *  Cloud SQL input source.
 */
// const cloudSqlSource = {}
/**
 *  Firestore input source.
 */
// const firestoreSource = {}
/**
 *  AlloyDB input source.
 */
// const alloyDbSource = {}
/**
 *  Cloud Bigtable input source.
 */
// const bigtableSource = {}
/**
 *  Required. The parent branch resource name, such as
 *  `projects/{project}/locations/{location}/collections/{collection}/dataStores/{data_store}/branches/{branch}`.
 *  Requires create/update permission.
 */
// const parent = 'abc123'
/**
 *  The desired location of errors incurred during the Import.
 */
// const errorConfig = {}
/**
 *  The mode of reconciliation between existing documents and the documents to
 *  be imported. Defaults to
 *  ReconciliationMode.INCREMENTAL google.cloud.discoveryengine.v1.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL.
 */
// const reconciliationMode = {}
/**
 *  Indicates which fields in the provided imported documents to update. If
 *  not set, the default is to update all fields.
 */
// const updateMask = {}
/**
 *  Whether to automatically generate IDs for the documents if absent.
 *  If set to `true`,
 *  Document.id google.cloud.discoveryengine.v1.Document.id s are
 *  automatically generated based on the hash of the payload, where IDs may not
 *  be consistent during multiple imports. In which case
 *  ReconciliationMode.FULL google.cloud.discoveryengine.v1.ImportDocumentsRequest.ReconciliationMode.FULL 
 *  is highly recommended to avoid duplicate contents. If unset or set to
 *  `false`, Document.id google.cloud.discoveryengine.v1.Document.id s have
 *  to be specified using
 *  id_field google.cloud.discoveryengine.v1.ImportDocumentsRequest.id_field,
 *  otherwise, documents without IDs fail to be imported.
 *  Supported data sources:
 *  * GcsSource google.cloud.discoveryengine.v1.GcsSource.
 *  GcsSource.data_schema google.cloud.discoveryengine.v1.GcsSource.data_schema 
 *  must be `custom` or `csv`. Otherwise, an INVALID_ARGUMENT error is thrown.
 *  * BigQuerySource google.cloud.discoveryengine.v1.BigQuerySource.
 *  BigQuerySource.data_schema google.cloud.discoveryengine.v1.BigQuerySource.data_schema 
 *  must be `custom` or `csv`. Otherwise, an INVALID_ARGUMENT error is thrown.
 *  * SpannerSource google.cloud.discoveryengine.v1.SpannerSource.
 *  * CloudSqlSource google.cloud.discoveryengine.v1.CloudSqlSource.
 *  * FirestoreSource google.cloud.discoveryengine.v1.FirestoreSource.
 *  * BigtableSource google.cloud.discoveryengine.v1.BigtableSource.
 */
// const autoGenerateIds = true
/**
 *  The field indicates the ID field or column to be used as unique IDs of
 *  the documents.
 *  For GcsSource google.cloud.discoveryengine.v1.GcsSource  it is the key of
 *  the JSON field. For instance, `my_id` for JSON `{"my_id": "some_uuid"}`.
 *  For others, it may be the column name of the table where the unique ids are
 *  stored.
 *  The values of the JSON field or the table column are used as the
 *  Document.id google.cloud.discoveryengine.v1.Document.id s. The JSON field
 *  or the table column must be of string type, and the values must be set as
 *  valid strings conform to RFC-1034 (https://tools.ietf.org/html/rfc1034)
 *  with 1-63 characters. Otherwise, documents without valid IDs fail to be
 *  imported.
 *  Only set this field when
 *  auto_generate_ids google.cloud.discoveryengine.v1.ImportDocumentsRequest.auto_generate_ids 
 *  is unset or set as `false`. Otherwise, an INVALID_ARGUMENT error is thrown.
 *  If it is unset, a default value `_id` is used when importing from the
 *  allowed data sources.
 *  Supported data sources:
 *  * GcsSource google.cloud.discoveryengine.v1.GcsSource.
 *  GcsSource.data_schema google.cloud.discoveryengine.v1.GcsSource.data_schema 
 *  must be `custom` or `csv`. Otherwise, an INVALID_ARGUMENT error is thrown.
 *  * BigQuerySource google.cloud.discoveryengine.v1.BigQuerySource.
 *  BigQuerySource.data_schema google.cloud.discoveryengine.v1.BigQuerySource.data_schema 
 *  must be `custom` or `csv`. Otherwise, an INVALID_ARGUMENT error is thrown.
 *  * SpannerSource google.cloud.discoveryengine.v1.SpannerSource.
 *  * CloudSqlSource google.cloud.discoveryengine.v1.CloudSqlSource.
 *  * FirestoreSource google.cloud.discoveryengine.v1.FirestoreSource.
 *  * BigtableSource google.cloud.discoveryengine.v1.BigtableSource.
 */
// const idField = 'abc123'

// Imports the Discoveryengine library
const {DocumentServiceClient} = require('@google-cloud/discoveryengine').v1;

// Instantiates a client
const discoveryengineClient = new DocumentServiceClient();

async function callImportDocuments() {
  // Construct request
  const request = {
    parent,
  };

  // Run request
  const [operation] = await discoveryengineClient.importDocuments(request);
  const [response] = await operation.promise();
  console.log(response);
}

callImportDocuments();

Python

詳細については、Vertex AI Agent Builder Python API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"


def create_data_store_sample(
    project_id: str,
    location: str,
    data_store_id: str,
) -> str:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.DataStoreServiceClient(client_options=client_options)

    # The full resource name of the collection
    # e.g. projects/{project}/locations/{location}/collections/default_collection
    parent = client.collection_path(
        project=project_id,
        location=location,
        collection="default_collection",
    )

    data_store = discoveryengine.DataStore(
        display_name="My Data Store",
        # Options: GENERIC, MEDIA, HEALTHCARE_FHIR
        industry_vertical=discoveryengine.IndustryVertical.GENERIC,
        # Options: SOLUTION_TYPE_RECOMMENDATION, SOLUTION_TYPE_SEARCH, SOLUTION_TYPE_CHAT, SOLUTION_TYPE_GENERATIVE_CHAT
        solution_types=[discoveryengine.SolutionType.SOLUTION_TYPE_SEARCH],
        # TODO(developer): Update content_config based on data store type.
        # Options: NO_CONTENT, CONTENT_REQUIRED, PUBLIC_WEBSITE
        content_config=discoveryengine.DataStore.ContentConfig.CONTENT_REQUIRED,
    )

    request = discoveryengine.CreateDataStoreRequest(
        parent=parent,
        data_store_id=data_store_id,
        data_store=data_store,
        # Optional: For Advanced Site Search Only
        # create_advanced_site_search=True,
    )

    # Make the request
    operation = client.create_data_store(request=request)

    print(f"Waiting for operation to complete: {operation.operation.name}")
    response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    metadata = discoveryengine.CreateDataStoreMetadata(operation.metadata)

    # Handle the response
    print(response)
    print(metadata)

    return operation.operation.name

ドキュメントのインポート


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# bigquery_dataset = "YOUR_BIGQUERY_DATASET"
# bigquery_table = "YOUR_BIGQUERY_TABLE"

#  For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
    ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
    if location != "global"
    else None
)

# Create a client
client = discoveryengine.DocumentServiceClient(client_options=client_options)

# The full resource name of the search engine branch.
# e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}/branches/{branch}
parent = client.branch_path(
    project=project_id,
    location=location,
    data_store=data_store_id,
    branch="default_branch",
)

request = discoveryengine.ImportDocumentsRequest(
    parent=parent,
    bigquery_source=discoveryengine.BigQuerySource(
        project_id=project_id,
        dataset_id=bigquery_dataset,
        table_id=bigquery_table,
        data_schema="custom",
    ),
    # Options: `FULL`, `INCREMENTAL`
    reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
)

# Make the request
operation = client.import_documents(request=request)

print(f"Waiting for operation to complete: {operation.operation.name}")
response = operation.result()

# After the operation is complete,
# get information from operation metadata
metadata = discoveryengine.ImportDocumentsMetadata(operation.metadata)

# Handle the response
print(response)
print(metadata)

Ruby

詳細については、Vertex AI Agent Builder Ruby API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成

require "google/cloud/discovery_engine/v1"

##
# Snippet for the create_data_store call in the DataStoreService service
#
# This snippet has been automatically generated and should be regarded as a code
# template only. It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
# client as shown in https://cloud.google.com/ruby/docs/reference.
#
# This is an auto-generated example demonstrating basic usage of
# Google::Cloud::DiscoveryEngine::V1::DataStoreService::Client#create_data_store.
#
def create_data_store
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Cloud::DiscoveryEngine::V1::DataStoreService::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Cloud::DiscoveryEngine::V1::CreateDataStoreRequest.new

  # Call the create_data_store method.
  result = client.create_data_store request

  # The returned object is of type Gapic::Operation. You can use it to
  # check the status of an operation, cancel it, or wait for results.
  # Here is how to wait for a response.
  result.wait_until_done! timeout: 60
  if result.response?
    p result.response
  else
    puts "No response received."
  end
end

ドキュメントのインポート

require "google/cloud/discovery_engine/v1"

##
# Snippet for the import_documents call in the DocumentService service
#
# This snippet has been automatically generated and should be regarded as a code
# template only. It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
# client as shown in https://cloud.google.com/ruby/docs/reference.
#
# This is an auto-generated example demonstrating basic usage of
# Google::Cloud::DiscoveryEngine::V1::DocumentService::Client#import_documents.
#
def import_documents
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Cloud::DiscoveryEngine::V1::DocumentService::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Cloud::DiscoveryEngine::V1::ImportDocumentsRequest.new

  # Call the import_documents method.
  result = client.import_documents request

  # The returned object is of type Gapic::Operation. You can use it to
  # check the status of an operation, cancel it, or wait for results.
  # Here is how to wait for a response.
  result.wait_until_done! timeout: 60
  if result.response?
    p result.response
  else
    puts "No response received."
  end
end

定期的な同期で BigQuery に接続する

データをインポートする前に、取り込むデータを準備します

次の手順では、BigQuery データセットを Vertex AI Search データ コネクタに関連付けるデータ コネクタを作成する方法と、作成するデータストアごとにデータセットにテーブルを指定する方法について説明します。データ コネクタの子データストアは、エンティティ データストアと呼ばれます。

データセットのデータは、エンティティ データストアと定期的に同期されます。同期は、毎日、3 日ごと、5 日ごとに指定できます。

Console

Google Cloud コンソールを使用して、BigQuery データセットから Vertex AI Search にデータを定期的に同期するコネクタを作成するには、次の操作を行います。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. ナビゲーション メニューで [データストア] をクリックします。

  3. [データストアを作成] をクリックします。

  4. [ソース] ページで、[BigQuery] を選択します。

  5. インポートするデータの種類を選択します。

  6. [定期] をクリックします。

  7. [同期頻度] で、Vertex AI Search コネクタが BigQuery データセットと同期する頻度を選択します。フリークエンシーは後で変更できます。

  8. [BigQuery データセットのパス] フィールドで [参照] をクリックし、取り込み用に準備したテーブルを含むデータセットを選択します。または、[BigQuery パス] フィールドにテーブルの場所を直接入力します。パスの形式は projectname.datasetname です。

  9. [同期するテーブル] フィールドで [参照] をクリックし、データストアに必要なデータを含むテーブルを選択します。

  10. データストアに使用するテーブルがデータセットに他にもある場合は、[テーブルを追加] をクリックして、それらのテーブルも指定します。

  11. [続行] をクリックします。

  12. データストアのリージョンを選択し、データ コネクタの名前を入力して、[作成] をクリックします。

    これで、BigQuery データセットとデータを定期的に同期するデータコネクタが作成されました。また、1 つ以上のエンティティ データストアを作成しています。データストアの名前は BigQuery テーブルと同じです。

  13. 取り込みのステータスを確認するには、[データストア] ページに移動し、データ コネクタ名をクリックして、[データ] ページ > [データ取り込みアクティビティ] タブで詳細を確認します。[アクティビティ] タブのステータス列が [進行中] から [成功] に変わると、最初の取り込みが完了します。

    取り込みには、データのサイズに応じて、数分から数時間かかることがあります。

データソースを設定してデータを初めてインポートすると、データストアは設定時に選択した頻度でそのソースからデータを同期します。データコネクタの作成から約 1 時間後に、最初の同期が行われます。次回の同期は、24 時間、72 時間、または 120 時間後に行われます。

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Cloud Storage からインポートする

Cloud Storage テーブルからデータストアを作成するには、次の 2 つの方法があります。

  • 1 回限りのデータ取り込み: Cloud Storage のフォルダまたはファイルからデータストアにデータをインポートします。データストア内のデータは、手動でデータを更新しない限り変更されません。

  • 定期的な取り込み: Cloud Storage フォルダまたはファイルからデータをインポートし、その Cloud Storage ロケーションの最新データでデータストアが更新される頻度を決定する同期頻度を設定します。

次の表は、Cloud Storage データを Vertex AI Search データストアにインポートする 2 つの方法を比較したものです。

1 回限りの取り込み 定期的な取り込み
一般提供(GA)。 公開プレビュー版。
データは手動で更新する必要があります。 データは 1 日、3 日、5 日ごとに自動的に更新されます。データを手動で更新することはできません。
Vertex AI Search は、Cloud Storage 内の 1 つのフォルダまたはファイルから単一のデータストアを作成します。 Vertex AI Search はデータコネクタを作成し、指定されたファイルまたはフォルダにデータストア(エンティティ データストア)を関連付けます。各 Cloud Storage データコネクタには、単一のエンティティ データストアを設定できます。
複数のファイル、フォルダ、バケットのデータを 1 つのデータストアに結合するには、まず 1 つの Cloud Storage ロケーションからデータを取り込み、次に別のロケーションからデータを取り込みます。 手動データ インポートはサポートされていないため、エンティティ データストアのデータは 1 つの Cloud Storage ファイルまたはフォルダからのみ取得できます。
データソースのアクセス制御がサポートされています。詳細については、データソースのアクセス制御をご覧ください。 データソースのアクセス制御はサポートされていません。インポートされたデータにアクセス制御を含めることはできますが、これらの制御は考慮されません。
データストアは、Google Cloud コンソールまたは API を使用して作成できます。 データ コネクタとそのエンティティ データストアは、コンソールを使用して作成する必要があります。
CMEK-対応. CMEK に準拠していません。

Cloud Storage から 1 回インポートする

Cloud Storage からデータを取り込むには、次の手順でデータストアを作成し、Google Cloud コンソールまたは API を使用してデータを取り込みます。

データをインポートする前に、取り込むデータを準備します

Console

コンソールを使用して Cloud Storage バケットからデータを取り込む手順は次のとおりです。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで、[Cloud Storage] を選択します。

  5. [インポートするフォルダまたはファイルを選択] セクションで、[フォルダ] または [ファイル] を選択します。

  6. [参照] をクリックして、取り込み用に準備したデータを選択し、[選択] をクリックします。 または、[gs://] フィールドにロケーションを直接入力します。

  7. インポートするデータの種類を選択します。

  8. [続行] をクリックします。

  9. 構造化データを 1 回限りインポートする場合:

    1. フィールドをキー プロパティにマッピングします。

    2. スキーマに重要なフィールドが欠落している場合は、[新しいフィールドを追加] を使用して追加します。

      詳細については、自動検出と編集についてをご覧ください。

    3. [続行] をクリックします。

  10. データストアのリージョンを選択します。

  11. データストアのリージョンを選択します。

  12. データストアの名前を入力します。

  13. 省略可: 非構造化ドキュメントを選択した場合は、ドキュメントの解析オプションとチャンク処理オプションを選択できます。パーサーを比較するには、ドキュメントを解析するをご覧ください。チャンク処理の詳細については、RAG 用にドキュメントをチャンクするをご覧ください。

    OCR パーサーとレイアウト パーサーを使用すると、追加費用が発生する場合があります。Document AI 機能の料金をご覧ください。

    パーサーを選択するには、[ドキュメント処理オプション] を開き、使用するパーサー オプションを指定します。

  14. [作成] をクリックします。

  15. 取り込みのステータスを確認するには、[データストア] ページに移動し、データストア名をクリックして、[データ] ページで詳細を表示します。[アクティビティ] タブのステータス列が [進行中] から [インポート完了] に変わると、取り込みが完了します。

    取り込みには、データのサイズに応じて、数分から数時間かかることがあります。

REST

コマンドラインを使用してデータストアを作成し、Cloud Storage からデータを取り込む手順は次のとおりです。

  1. データストアの作成

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
    -d '{
      "displayName": "DATA_STORE_DISPLAY_NAME",
      "industryVertical": "GENERIC",
      "solutionTypes": ["SOLUTION_TYPE_SEARCH"],
      "contentConfig": "CONTENT_REQUIRED",
    }'
    

    以下を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • DATA_STORE_ID: 作成する Vertex AI Search データストアの ID。この ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • DATA_STORE_DISPLAY_NAME: 作成する Vertex AI Search データストアの表示名。

    省略可: ドキュメント解析を構成する場合や、RAG のドキュメント チャンキングを有効にする場合は、documentProcessingConfig オブジェクトを指定して、データストアの作成リクエストに含めます。スキャンされた PDF を取り込む場合は、PDF 用の OCR パーサーを構成することをおすすめします。解析オプションまたはチャンク処理オプションの構成方法については、ドキュメントの解析とチャンク処理をご覧ください。

  2. Cloud Storage からデータをインポートします。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents:import" \
      -d '{
        "gcsSource": {
          "inputUris": ["INPUT_FILE_PATTERN_1", "INPUT_FILE_PATTERN_2"],
          "dataSchema": "DATA_SCHEMA",
        },
        "reconciliationMode": "RECONCILIATION_MODE",
        "autoGenerateIds": "AUTO_GENERATE_IDS",
        "idField": "ID_FIELD",
        "errorConfig": {
          "gcsPrefix": "ERROR_DIRECTORY"
        }
      }'
    

    以下を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • DATA_STORE_ID: Vertex AI Search データストアの ID。
    • INPUT_FILE_PATTERN: ドキュメントを含む Cloud Storage 内のファイル パターン。

      構造化データまたはメタデータを含む非構造化データの場合、入力ファイル パターンの例は gs://<your-gcs-bucket>/directory/object.json で、1 つ以上のファイルにパターン マッチングする例は gs://<your-gcs-bucket>/directory/*.json です。

      非構造化ドキュメントの例は gs://<your-gcs-bucket>/directory/*.pdf です。パターンに一致する各ファイルがドキュメントになります。

      <your-gcs-bucket>PROJECT_ID にない場合は、サービス アカウント service-<project number>@gcp-sa-discoveryengine.iam.gserviceaccount.com に Cloud Storage バケットに対する「ストレージ オブジェクト閲覧者」権限を付与する必要があります。たとえば、転送元プロジェクト「123」から転送先プロジェクト「456」に Cloud Storage バケットをインポートする場合は、プロジェクト「123」の Cloud Storage バケットに対する service-456@gcp-sa-discoveryengine.iam.gserviceaccount.com 権限を付与します。

    • DATA_SCHEMA: 省略可。値は documentcustomcsv および content です。デフォルトは document です。

      • document: 非構造化ドキュメントのメタデータを含む非構造化データをアップロードします。ファイルの各行は、次のいずれかの形式にする必要があります。各ドキュメントの ID を定義できます。

        • { "id": "<your-id>", "jsonData": "<JSON string>", "content": { "mimeType": "<application/pdf or text/html>", "uri": "gs://<your-gcs-bucket>/directory/filename.pdf" } }
        • { "id": "<your-id>", "structData": <JSON object>, "content": { "mimeType": "<application/pdf or text/html>", "uri": "gs://<your-gcs-bucket>/directory/filename.pdf" } }
      • custom: 構造化ドキュメントの JSON をアップロードします。データはスキーマに従って編成されます。スキーマを指定することもできます。指定しない場合、スキーマは自動的に検出されます。ドキュメントの JSON 文字列を一貫した形式で各行に直接配置できます。Vertex AI Search は、インポートされた各ドキュメントの ID を自動的に生成します。

      • content: 非構造化ドキュメント(PDF、HTML、DOC、TXT、PPTX)をアップロードします。各ドキュメントの ID は、SHA256(GCS_URI) の最初の 128 ビットが 16 進数文字列としてエンコードされたものとして自動的に生成されます。一致するファイルが 10 万ファイルの制限を超えない限り、複数の入力ファイル パターンを指定できます。

      • csv: CSV ファイルにヘッダー行を含め、各ヘッダーをドキュメント フィールドにマッピングします。inputUris フィールドを使用して、CSV ファイルのパスを指定します。

    • ERROR_DIRECTORY: 省略可。インポートに関するエラー情報用の Cloud Storage ディレクトリ(例: gs://<your-gcs-bucket>/directory/import_errors)。Vertex AI Search が一時ディレクトリを自動的に作成できるように、このフィールドを空のままにすることをおすすめします。

    • RECONCILIATION_MODE: 省略可。値は FULL および INCREMENTAL です。デフォルトは INCREMENTAL です。INCREMENTAL を指定すると、Cloud Storage からデータストアへのデータの増分更新が行われます。これにより、アップサート オペレーションが実行され、新しいドキュメントを追加し、既存のドキュメントを更新された同じ ID のドキュメントで置き換えます。FULL を指定すると、データストア内のドキュメントが完全に再ベース化されます。つまり、新しいドキュメントと更新されたドキュメントがデータストアに追加され、Cloud Storage にないドキュメントがデータストアから削除されます。FULL モードは、不要になったドキュメントを自動的に削除する場合に便利です。

    • AUTO_GENERATE_IDS: 省略可。ドキュメント ID を自動生成するかどうかを指定します。true に設定すると、ドキュメント ID はペイロードのハッシュに基づいて生成されます。生成されたドキュメント ID は、複数のインポートで整合性が維持されない場合があります。複数のインポートで ID を自動生成する場合は、ドキュメント ID の整合性を維持するために、reconciliationModeFULL に設定することを強くおすすめします。

      autoGenerateIds は、gcsSource.dataSchemacustom または csv に設定されている場合にのみ指定します。それ以外の場合は、INVALID_ARGUMENT エラーが返されます。autoGenerateIds を指定しない場合、または false に設定しない場合は、idField を指定する必要があります。そうしないと、ドキュメントのインポートに失敗します。

    • ID_FIELD: 省略可。ドキュメント ID のフィールドを指定します。Cloud Storage ソースドキュメントの場合、idField は、ドキュメント ID である JSON フィールドの名前を指定します。たとえば、{"my_id":"some_uuid"} がドキュメントの 1 つのドキュメント ID フィールドの場合は、"idField":"my_id" を指定します。これにより、"my_id" という名前のすべての JSON フィールドがドキュメント ID として識別されます。

      このフィールドは、(1)gcsSource.dataSchemacustom または csv に設定されていること、(2)auto_generate_idsfalse に設定されているか未指定であることの両方の場合にのみ指定します。それ以外の場合は、INVALID_ARGUMENT エラーが返されます。

      Cloud Storage JSON フィールドの値は、文字列型で、1 から 63 文字の範囲で、RFC-1034 に準拠している必要があります。そうしないと、ドキュメントのインポートに失敗します。

      id_field で指定された JSON フィールド名は、文字列型で、1 から 63 文字の範囲で、RFC-1034 に準拠している必要があります。そうしないと、ドキュメントのインポートに失敗します。

C#

詳細については、Vertex AI Agent Builder C# API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成

using Google.Cloud.DiscoveryEngine.V1;
using Google.LongRunning;

public sealed partial class GeneratedDataStoreServiceClientSnippets
{
    /// <summary>Snippet for CreateDataStore</summary>
    /// <remarks>
    /// This snippet has been automatically generated and should be regarded as a code template only.
    /// It will require modifications to work:
    /// - It may require correct/in-range values for request initialization.
    /// - It may require specifying regional endpoints when creating the service client as shown in
    ///   https://cloud.google.com/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public void CreateDataStoreRequestObject()
    {
        // Create client
        DataStoreServiceClient dataStoreServiceClient = DataStoreServiceClient.Create();
        // Initialize request argument(s)
        CreateDataStoreRequest request = new CreateDataStoreRequest
        {
            ParentAsCollectionName = CollectionName.FromProjectLocationCollection("[PROJECT]", "[LOCATION]", "[COLLECTION]"),
            DataStore = new DataStore(),
            DataStoreId = "",
            CreateAdvancedSiteSearch = false,
            SkipDefaultSchemaCreation = false,
        };
        // Make the request
        Operation<DataStore, CreateDataStoreMetadata> response = dataStoreServiceClient.CreateDataStore(request);

        // Poll until the returned long-running operation is complete
        Operation<DataStore, CreateDataStoreMetadata> completedResponse = response.PollUntilCompleted();
        // Retrieve the operation result
        DataStore result = completedResponse.Result;

        // Or get the name of the operation
        string operationName = response.Name;
        // This name can be stored, then the long-running operation retrieved later by name
        Operation<DataStore, CreateDataStoreMetadata> retrievedResponse = dataStoreServiceClient.PollOnceCreateDataStore(operationName);
        // Check if the retrieved long-running operation has completed
        if (retrievedResponse.IsCompleted)
        {
            // If it has completed, then access the result
            DataStore retrievedResult = retrievedResponse.Result;
        }
    }
}

ドキュメントのインポート

using Google.Cloud.DiscoveryEngine.V1;
using Google.LongRunning;
using Google.Protobuf.WellKnownTypes;

public sealed partial class GeneratedDocumentServiceClientSnippets
{
    /// <summary>Snippet for ImportDocuments</summary>
    /// <remarks>
    /// This snippet has been automatically generated and should be regarded as a code template only.
    /// It will require modifications to work:
    /// - It may require correct/in-range values for request initialization.
    /// - It may require specifying regional endpoints when creating the service client as shown in
    ///   https://cloud.google.com/dotnet/docs/reference/help/client-configuration#endpoint.
    /// </remarks>
    public void ImportDocumentsRequestObject()
    {
        // Create client
        DocumentServiceClient documentServiceClient = DocumentServiceClient.Create();
        // Initialize request argument(s)
        ImportDocumentsRequest request = new ImportDocumentsRequest
        {
            ParentAsBranchName = BranchName.FromProjectLocationDataStoreBranch("[PROJECT]", "[LOCATION]", "[DATA_STORE]", "[BRANCH]"),
            InlineSource = new ImportDocumentsRequest.Types.InlineSource(),
            ErrorConfig = new ImportErrorConfig(),
            ReconciliationMode = ImportDocumentsRequest.Types.ReconciliationMode.Unspecified,
            UpdateMask = new FieldMask(),
            AutoGenerateIds = false,
            IdField = "",
        };
        // Make the request
        Operation<ImportDocumentsResponse, ImportDocumentsMetadata> response = documentServiceClient.ImportDocuments(request);

        // Poll until the returned long-running operation is complete
        Operation<ImportDocumentsResponse, ImportDocumentsMetadata> completedResponse = response.PollUntilCompleted();
        // Retrieve the operation result
        ImportDocumentsResponse result = completedResponse.Result;

        // Or get the name of the operation
        string operationName = response.Name;
        // This name can be stored, then the long-running operation retrieved later by name
        Operation<ImportDocumentsResponse, ImportDocumentsMetadata> retrievedResponse = documentServiceClient.PollOnceImportDocuments(operationName);
        // Check if the retrieved long-running operation has completed
        if (retrievedResponse.IsCompleted)
        {
            // If it has completed, then access the result
            ImportDocumentsResponse retrievedResult = retrievedResponse.Result;
        }
    }
}

Go

詳細については、Vertex AI Agent Builder Go API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成


package main

import (
	"context"

	discoveryengine "cloud.google.com/go/discoveryengine/apiv1"
	discoveryenginepb "cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb"
)

func main() {
	ctx := context.Background()
	// This snippet has been automatically generated and should be regarded as a code template only.
	// It will require modifications to work:
	// - It may require correct/in-range values for request initialization.
	// - It may require specifying regional endpoints when creating the service client as shown in:
	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
	c, err := discoveryengine.NewDataStoreClient(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	defer c.Close()

	req := &discoveryenginepb.CreateDataStoreRequest{
		// TODO: Fill request struct fields.
		// See https://pkg.go.dev/cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb#CreateDataStoreRequest.
	}
	op, err := c.CreateDataStore(ctx, req)
	if err != nil {
		// TODO: Handle error.
	}

	resp, err := op.Wait(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	// TODO: Use resp.
	_ = resp
}

ドキュメントのインポート


package main

import (
	"context"

	discoveryengine "cloud.google.com/go/discoveryengine/apiv1"
	discoveryenginepb "cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb"
)

func main() {
	ctx := context.Background()
	// This snippet has been automatically generated and should be regarded as a code template only.
	// It will require modifications to work:
	// - It may require correct/in-range values for request initialization.
	// - It may require specifying regional endpoints when creating the service client as shown in:
	//   https://pkg.go.dev/cloud.google.com/go#hdr-Client_Options
	c, err := discoveryengine.NewDocumentClient(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	defer c.Close()

	req := &discoveryenginepb.ImportDocumentsRequest{
		// TODO: Fill request struct fields.
		// See https://pkg.go.dev/cloud.google.com/go/discoveryengine/apiv1/discoveryenginepb#ImportDocumentsRequest.
	}
	op, err := c.ImportDocuments(ctx, req)
	if err != nil {
		// TODO: Handle error.
	}

	resp, err := op.Wait(ctx)
	if err != nil {
		// TODO: Handle error.
	}
	// TODO: Use resp.
	_ = resp
}

Java

詳細については、Vertex AI Agent Builder Java API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成

import com.google.cloud.discoveryengine.v1.CollectionName;
import com.google.cloud.discoveryengine.v1.CreateDataStoreRequest;
import com.google.cloud.discoveryengine.v1.DataStore;
import com.google.cloud.discoveryengine.v1.DataStoreServiceClient;

public class SyncCreateDataStore {

  public static void main(String[] args) throws Exception {
    syncCreateDataStore();
  }

  public static void syncCreateDataStore() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (DataStoreServiceClient dataStoreServiceClient = DataStoreServiceClient.create()) {
      CreateDataStoreRequest request =
          CreateDataStoreRequest.newBuilder()
              .setParent(CollectionName.of("[PROJECT]", "[LOCATION]", "[COLLECTION]").toString())
              .setDataStore(DataStore.newBuilder().build())
              .setDataStoreId("dataStoreId929489618")
              .setCreateAdvancedSiteSearch(true)
              .setSkipDefaultSchemaCreation(true)
              .build();
      DataStore response = dataStoreServiceClient.createDataStoreAsync(request).get();
    }
  }
}

ドキュメントのインポート

import com.google.cloud.discoveryengine.v1.BranchName;
import com.google.cloud.discoveryengine.v1.DocumentServiceClient;
import com.google.cloud.discoveryengine.v1.ImportDocumentsRequest;
import com.google.cloud.discoveryengine.v1.ImportDocumentsResponse;
import com.google.cloud.discoveryengine.v1.ImportErrorConfig;
import com.google.protobuf.FieldMask;

public class SyncImportDocuments {

  public static void main(String[] args) throws Exception {
    syncImportDocuments();
  }

  public static void syncImportDocuments() throws Exception {
    // This snippet has been automatically generated and should be regarded as a code template only.
    // It will require modifications to work:
    // - It may require correct/in-range values for request initialization.
    // - It may require specifying regional endpoints when creating the service client as shown in
    // https://cloud.google.com/java/docs/setup#configure_endpoints_for_the_client_library
    try (DocumentServiceClient documentServiceClient = DocumentServiceClient.create()) {
      ImportDocumentsRequest request =
          ImportDocumentsRequest.newBuilder()
              .setParent(
                  BranchName.ofProjectLocationDataStoreBranchName(
                          "[PROJECT]", "[LOCATION]", "[DATA_STORE]", "[BRANCH]")
                      .toString())
              .setErrorConfig(ImportErrorConfig.newBuilder().build())
              .setUpdateMask(FieldMask.newBuilder().build())
              .setAutoGenerateIds(true)
              .setIdField("idField1629396127")
              .build();
      ImportDocumentsResponse response = documentServiceClient.importDocumentsAsync(request).get();
    }
  }
}

Node.js

詳細については、Vertex AI Agent Builder Node.js API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成

/**
 * This snippet has been automatically generated and should be regarded as a code template only.
 * It will require modifications to work.
 * It may require correct/in-range values for request initialization.
 * TODO(developer): Uncomment these variables before running the sample.
 */
/**
 *  Required. The parent resource name, such as
 *  `projects/{project}/locations/{location}/collections/{collection}`.
 */
// const parent = 'abc123'
/**
 *  Required. The DataStore google.cloud.discoveryengine.v1.DataStore  to
 *  create.
 */
// const dataStore = {}
/**
 *  Required. The ID to use for the
 *  DataStore google.cloud.discoveryengine.v1.DataStore, which will become
 *  the final component of the
 *  DataStore google.cloud.discoveryengine.v1.DataStore's resource name.
 *  This field must conform to RFC-1034 (https://tools.ietf.org/html/rfc1034)
 *  standard with a length limit of 63 characters. Otherwise, an
 *  INVALID_ARGUMENT error is returned.
 */
// const dataStoreId = 'abc123'
/**
 *  A boolean flag indicating whether user want to directly create an advanced
 *  data store for site search.
 *  If the data store is not configured as site
 *  search (GENERIC vertical and PUBLIC_WEBSITE content_config), this flag will
 *  be ignored.
 */
// const createAdvancedSiteSearch = true
/**
 *  A boolean flag indicating whether to skip the default schema creation for
 *  the data store. Only enable this flag if you are certain that the default
 *  schema is incompatible with your use case.
 *  If set to true, you must manually create a schema for the data store before
 *  any documents can be ingested.
 *  This flag cannot be specified if `data_store.starting_schema` is specified.
 */
// const skipDefaultSchemaCreation = true

// Imports the Discoveryengine library
const {DataStoreServiceClient} = require('@google-cloud/discoveryengine').v1;

// Instantiates a client
const discoveryengineClient = new DataStoreServiceClient();

async function callCreateDataStore() {
  // Construct request
  const request = {
    parent,
    dataStore,
    dataStoreId,
  };

  // Run request
  const [operation] = await discoveryengineClient.createDataStore(request);
  const [response] = await operation.promise();
  console.log(response);
}

callCreateDataStore();

ドキュメントのインポート

/**
 * This snippet has been automatically generated and should be regarded as a code template only.
 * It will require modifications to work.
 * It may require correct/in-range values for request initialization.
 * TODO(developer): Uncomment these variables before running the sample.
 */
/**
 *  The Inline source for the input content for documents.
 */
// const inlineSource = {}
/**
 *  Cloud Storage location for the input content.
 */
// const gcsSource = {}
/**
 *  BigQuery input source.
 */
// const bigquerySource = {}
/**
 *  FhirStore input source.
 */
// const fhirStoreSource = {}
/**
 *  Spanner input source.
 */
// const spannerSource = {}
/**
 *  Cloud SQL input source.
 */
// const cloudSqlSource = {}
/**
 *  Firestore input source.
 */
// const firestoreSource = {}
/**
 *  AlloyDB input source.
 */
// const alloyDbSource = {}
/**
 *  Cloud Bigtable input source.
 */
// const bigtableSource = {}
/**
 *  Required. The parent branch resource name, such as
 *  `projects/{project}/locations/{location}/collections/{collection}/dataStores/{data_store}/branches/{branch}`.
 *  Requires create/update permission.
 */
// const parent = 'abc123'
/**
 *  The desired location of errors incurred during the Import.
 */
// const errorConfig = {}
/**
 *  The mode of reconciliation between existing documents and the documents to
 *  be imported. Defaults to
 *  ReconciliationMode.INCREMENTAL google.cloud.discoveryengine.v1.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL.
 */
// const reconciliationMode = {}
/**
 *  Indicates which fields in the provided imported documents to update. If
 *  not set, the default is to update all fields.
 */
// const updateMask = {}
/**
 *  Whether to automatically generate IDs for the documents if absent.
 *  If set to `true`,
 *  Document.id google.cloud.discoveryengine.v1.Document.id s are
 *  automatically generated based on the hash of the payload, where IDs may not
 *  be consistent during multiple imports. In which case
 *  ReconciliationMode.FULL google.cloud.discoveryengine.v1.ImportDocumentsRequest.ReconciliationMode.FULL 
 *  is highly recommended to avoid duplicate contents. If unset or set to
 *  `false`, Document.id google.cloud.discoveryengine.v1.Document.id s have
 *  to be specified using
 *  id_field google.cloud.discoveryengine.v1.ImportDocumentsRequest.id_field,
 *  otherwise, documents without IDs fail to be imported.
 *  Supported data sources:
 *  * GcsSource google.cloud.discoveryengine.v1.GcsSource.
 *  GcsSource.data_schema google.cloud.discoveryengine.v1.GcsSource.data_schema 
 *  must be `custom` or `csv`. Otherwise, an INVALID_ARGUMENT error is thrown.
 *  * BigQuerySource google.cloud.discoveryengine.v1.BigQuerySource.
 *  BigQuerySource.data_schema google.cloud.discoveryengine.v1.BigQuerySource.data_schema 
 *  must be `custom` or `csv`. Otherwise, an INVALID_ARGUMENT error is thrown.
 *  * SpannerSource google.cloud.discoveryengine.v1.SpannerSource.
 *  * CloudSqlSource google.cloud.discoveryengine.v1.CloudSqlSource.
 *  * FirestoreSource google.cloud.discoveryengine.v1.FirestoreSource.
 *  * BigtableSource google.cloud.discoveryengine.v1.BigtableSource.
 */
// const autoGenerateIds = true
/**
 *  The field indicates the ID field or column to be used as unique IDs of
 *  the documents.
 *  For GcsSource google.cloud.discoveryengine.v1.GcsSource  it is the key of
 *  the JSON field. For instance, `my_id` for JSON `{"my_id": "some_uuid"}`.
 *  For others, it may be the column name of the table where the unique ids are
 *  stored.
 *  The values of the JSON field or the table column are used as the
 *  Document.id google.cloud.discoveryengine.v1.Document.id s. The JSON field
 *  or the table column must be of string type, and the values must be set as
 *  valid strings conform to RFC-1034 (https://tools.ietf.org/html/rfc1034)
 *  with 1-63 characters. Otherwise, documents without valid IDs fail to be
 *  imported.
 *  Only set this field when
 *  auto_generate_ids google.cloud.discoveryengine.v1.ImportDocumentsRequest.auto_generate_ids 
 *  is unset or set as `false`. Otherwise, an INVALID_ARGUMENT error is thrown.
 *  If it is unset, a default value `_id` is used when importing from the
 *  allowed data sources.
 *  Supported data sources:
 *  * GcsSource google.cloud.discoveryengine.v1.GcsSource.
 *  GcsSource.data_schema google.cloud.discoveryengine.v1.GcsSource.data_schema 
 *  must be `custom` or `csv`. Otherwise, an INVALID_ARGUMENT error is thrown.
 *  * BigQuerySource google.cloud.discoveryengine.v1.BigQuerySource.
 *  BigQuerySource.data_schema google.cloud.discoveryengine.v1.BigQuerySource.data_schema 
 *  must be `custom` or `csv`. Otherwise, an INVALID_ARGUMENT error is thrown.
 *  * SpannerSource google.cloud.discoveryengine.v1.SpannerSource.
 *  * CloudSqlSource google.cloud.discoveryengine.v1.CloudSqlSource.
 *  * FirestoreSource google.cloud.discoveryengine.v1.FirestoreSource.
 *  * BigtableSource google.cloud.discoveryengine.v1.BigtableSource.
 */
// const idField = 'abc123'

// Imports the Discoveryengine library
const {DocumentServiceClient} = require('@google-cloud/discoveryengine').v1;

// Instantiates a client
const discoveryengineClient = new DocumentServiceClient();

async function callImportDocuments() {
  // Construct request
  const request = {
    parent,
  };

  // Run request
  const [operation] = await discoveryengineClient.importDocuments(request);
  const [response] = await operation.promise();
  console.log(response);
}

callImportDocuments();

Python

詳細については、Vertex AI Agent Builder Python API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"


def create_data_store_sample(
    project_id: str,
    location: str,
    data_store_id: str,
) -> str:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.DataStoreServiceClient(client_options=client_options)

    # The full resource name of the collection
    # e.g. projects/{project}/locations/{location}/collections/default_collection
    parent = client.collection_path(
        project=project_id,
        location=location,
        collection="default_collection",
    )

    data_store = discoveryengine.DataStore(
        display_name="My Data Store",
        # Options: GENERIC, MEDIA, HEALTHCARE_FHIR
        industry_vertical=discoveryengine.IndustryVertical.GENERIC,
        # Options: SOLUTION_TYPE_RECOMMENDATION, SOLUTION_TYPE_SEARCH, SOLUTION_TYPE_CHAT, SOLUTION_TYPE_GENERATIVE_CHAT
        solution_types=[discoveryengine.SolutionType.SOLUTION_TYPE_SEARCH],
        # TODO(developer): Update content_config based on data store type.
        # Options: NO_CONTENT, CONTENT_REQUIRED, PUBLIC_WEBSITE
        content_config=discoveryengine.DataStore.ContentConfig.CONTENT_REQUIRED,
    )

    request = discoveryengine.CreateDataStoreRequest(
        parent=parent,
        data_store_id=data_store_id,
        data_store=data_store,
        # Optional: For Advanced Site Search Only
        # create_advanced_site_search=True,
    )

    # Make the request
    operation = client.create_data_store(request=request)

    print(f"Waiting for operation to complete: {operation.operation.name}")
    response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    metadata = discoveryengine.CreateDataStoreMetadata(operation.metadata)

    # Handle the response
    print(response)
    print(metadata)

    return operation.operation.name

ドキュメントのインポート

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"

# Examples:
# - Unstructured documents
#   - `gs://bucket/directory/file.pdf`
#   - `gs://bucket/directory/*.pdf`
# - Unstructured documents with JSONL Metadata
#   - `gs://bucket/directory/file.json`
# - Unstructured documents with CSV Metadata
#   - `gs://bucket/directory/file.csv`
# gcs_uri = "YOUR_GCS_PATH"

#  For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
    ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
    if location != "global"
    else None
)

# Create a client
client = discoveryengine.DocumentServiceClient(client_options=client_options)

# The full resource name of the search engine branch.
# e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}/branches/{branch}
parent = client.branch_path(
    project=project_id,
    location=location,
    data_store=data_store_id,
    branch="default_branch",
)

request = discoveryengine.ImportDocumentsRequest(
    parent=parent,
    gcs_source=discoveryengine.GcsSource(
        # Multiple URIs are supported
        input_uris=[gcs_uri],
        # Options:
        # - `content` - Unstructured documents (PDF, HTML, DOC, TXT, PPTX)
        # - `custom` - Unstructured documents with custom JSONL metadata
        # - `document` - Structured documents in the discoveryengine.Document format.
        # - `csv` - Unstructured documents with CSV metadata
        data_schema="content",
    ),
    # Options: `FULL`, `INCREMENTAL`
    reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
)

# Make the request
operation = client.import_documents(request=request)

print(f"Waiting for operation to complete: {operation.operation.name}")
response = operation.result()

# After the operation is complete,
# get information from operation metadata
metadata = discoveryengine.ImportDocumentsMetadata(operation.metadata)

# Handle the response
print(response)
print(metadata)

Ruby

詳細については、Vertex AI Agent Builder Ruby API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成

require "google/cloud/discovery_engine/v1"

##
# Snippet for the create_data_store call in the DataStoreService service
#
# This snippet has been automatically generated and should be regarded as a code
# template only. It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
# client as shown in https://cloud.google.com/ruby/docs/reference.
#
# This is an auto-generated example demonstrating basic usage of
# Google::Cloud::DiscoveryEngine::V1::DataStoreService::Client#create_data_store.
#
def create_data_store
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Cloud::DiscoveryEngine::V1::DataStoreService::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Cloud::DiscoveryEngine::V1::CreateDataStoreRequest.new

  # Call the create_data_store method.
  result = client.create_data_store request

  # The returned object is of type Gapic::Operation. You can use it to
  # check the status of an operation, cancel it, or wait for results.
  # Here is how to wait for a response.
  result.wait_until_done! timeout: 60
  if result.response?
    p result.response
  else
    puts "No response received."
  end
end

ドキュメントのインポート

require "google/cloud/discovery_engine/v1"

##
# Snippet for the import_documents call in the DocumentService service
#
# This snippet has been automatically generated and should be regarded as a code
# template only. It will require modifications to work:
# - It may require correct/in-range values for request initialization.
# - It may require specifying regional endpoints when creating the service
# client as shown in https://cloud.google.com/ruby/docs/reference.
#
# This is an auto-generated example demonstrating basic usage of
# Google::Cloud::DiscoveryEngine::V1::DocumentService::Client#import_documents.
#
def import_documents
  # Create a client object. The client can be reused for multiple calls.
  client = Google::Cloud::DiscoveryEngine::V1::DocumentService::Client.new

  # Create a request. To set request fields, pass in keyword arguments.
  request = Google::Cloud::DiscoveryEngine::V1::ImportDocumentsRequest.new

  # Call the import_documents method.
  result = client.import_documents request

  # The returned object is of type Gapic::Operation. You can use it to
  # check the status of an operation, cancel it, or wait for results.
  # Here is how to wait for a response.
  result.wait_until_done! timeout: 60
  if result.response?
    p result.response
  else
    puts "No response received."
  end
end

定期的な同期で Cloud Storage に接続する

データをインポートする前に、取り込むデータを準備します

次の手順では、Cloud Storage のロケーションを Vertex AI Search データコネクタに関連付けるデータコネクタを作成する方法と、作成するデータストアのロケーションにあるフォルダまたはファイルを指定する方法について説明します。データ コネクタの子データストアは、エンティティ データストアと呼ばれます。

データは、エンティティ データストアに定期的に同期されます。同期は、毎日、3 日ごと、5 日ごとに指定できます。

Console

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [データストアを作成] をクリックします。

  4. [ソース] ページで、[Cloud Storage] を選択します。

  5. インポートするデータの種類を選択します。

  6. [定期] をクリックします。

  7. 同期頻度(Vertex AI Search コネクタが Cloud Storage ロケーションと同期する頻度)を選択します。フリークエンシーは後で変更できます。

  8. [インポートするフォルダまたはファイルを選択] セクションで、[フォルダ] または [ファイル] を選択します。

  9. [参照] をクリックして、取り込み用に準備したデータを選択し、[選択] をクリックします。 または、[gs://] フィールドにロケーションを直接入力します。

  10. [続行] をクリックします。

  11. データ コネクタのリージョンを選択します。

  12. データ コネクタの名前を入力します。

  13. 省略可: 非構造化ドキュメントを選択した場合は、ドキュメントの解析オプションとチャンク処理オプションを選択できます。パーサーを比較するには、ドキュメントを解析するをご覧ください。チャンク処理の詳細については、RAG 用にドキュメントをチャンクするをご覧ください。

    OCR パーサーとレイアウト パーサーを使用すると、追加費用が発生する場合があります。Document AI 機能の料金をご覧ください。

    パーサーを選択するには、[ドキュメント処理オプション] を開き、使用するパーサー オプションを指定します。

  14. [作成] をクリックします。

    これで、データ コネクタが作成されました。このコネクタは、Cloud Storage のロケーションとデータを定期的に同期します。また、gcs_store という名前のエンティティ データストアも作成しました。

  15. 取り込みのステータスを確認するには、[データストア] ページに移動し、データ コネクタ名をクリックして、[データ] ページで詳細を表示します。

    [データ取り込みアクティビティ] タブ。[データ取り込みアクティビティ] タブのステータス列が [進行中] から [成功] に変わると、最初の取り込みが完了します。

    取り込みには、データのサイズに応じて、数分から数時間かかることがあります。

データソースを設定して初めてデータをインポートすると、設定時に選択した頻度でそのソースからデータが同期されます。データコネクタの作成から約 1 時間後に、最初の同期が行われます。次回の同期は、24 時間、72 時間、または 120 時間後に行われます。

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Google ドライブに接続

Google ドライブからデータを検索するには、次の手順で Google Cloud コンソールを使用してコネクタを作成します。

始める前に:

  • 接続する Google ドライブ インスタンスに使用しているアカウントと同じアカウントで Google Cloud コンソールにログインする必要があります。Vertex AI Search は、Google Workspace のお客様 ID を使用して Google ドライブに接続します。

  • Google ドライブのアクセス制御を設定します。アクセス制御の設定については、データソースのアクセス制御を使用するをご覧ください。

  • Google ドライブの高度な検索は非公開プレビュー版です。この機能は、Google ドライブ データストアで検索の要約とフォローアップ付き検索を使用する前提条件です。この機能を使用するには、代わりにドライブの高度なインデックス処理を使用するの手順に沿って操作してください。

Console

コンソールを使用して Google ドライブのデータを検索可能にするには、次の操作を行います。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで [Google ドライブ] を選択します。

  5. データストアのリージョンを選択します。

  6. データストアの名前を入力します。。[作成] をクリックします。

ドライブの高度なインデックス登録を使用する(限定公開プレビュー)

ドライブの高度なインデックス登録は限定公開プレビュー版です。

検索の要約とフォローアップ検索で Google ドライブを使用する場合は、次の手順を行います。

始める前に:

  • ドライブの高度なインデックス作成を有効にするには、Google Workspace の特権管理者である必要があります。これは、高度なドライブ インデックス登録では、Vertex AI Search が Google ドライブ データをインデックスに登録するためです。
  • この機能を使用するには、許可リストに追加されている必要があります。

Console

コンソールを使用して、高度な Google ドライブ インデックスを含む Google ドライブ データストアを作成する手順は次のとおりです。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで [Google ドライブ] を選択します。

  5. [ドライブの高度なインデックス登録] を選択します。

  6. Google Workspace のメールアドレスを入力します。

  7. [ドメイン全体の委任を設定する] セクションで手順を確認し、そのセクションのステップ 4 で指定されているサービス アカウント クライアント ID をメモします。

  8. ドメイン全体の委任を設定する:

    1. Google Workspace 管理コンソールの [ドメイン全体の委任] ページに移動し、特権管理者アカウントでログインします。
    2. [新しく追加] をクリックします。
    3. メモしたサービス アカウントのクライアント ID を入力します。(この ID は、エージェント ビルダー コンソールの [ドメイン全体の委任を設定する] セクションの手順で確認できます)。
    4. 次の OAuth スコープを入力します。

      https://www.googleapis.com/auth/drive.readonly,
      https://www.googleapis.com/auth/admin.directory.user.readonly,
      https://www.googleapis.com/auth/admin.directory.group.readonly,
      https://www.googleapis.com/auth/admin.directory.domain.readonly,
      https://www.googleapis.com/auth/admin.reports.audit.readonly
      
    5. [承認] をクリックします。

  9. Agent Builder コンソールで、[続行] をクリックします。

  10. データストアのリージョンを選択します。

  11. データストアの名前を入力します。

  12. [作成] をクリックします。取り込みには、データのサイズに応じて、数分から数時間かかることがあります。データストアを使用して検索する前に、少なくとも 1 時間待機してください。

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Gmail に接続する

Gmail からデータを検索するには、次の手順でデータストアを作成し、Google Cloud コンソールを使用してデータを取り込みます。

始める前に:

  • 接続する Google Workspace インスタンスに使用するアカウントで Google Cloud コンソールにログインする必要があります。Vertex AI Search は、Google Workspace のお客様 ID を使用して Gmail に接続します。

  • Gmail のアクセス制御を設定します。アクセス制御の設定については、データソースのアクセス制御を使用するをご覧ください。

Console

コンソールを使用して Gmail データを検索可能にするには、次の操作を行います。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで、[Google Gmail] を選択します。

  5. データストアのリージョンを選択します。

  6. データストアの名前を入力します。

  7. [作成] をクリックします。

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Google サイトに接続する

Google Sites からデータを検索するには、次の手順で Google Cloud コンソールを使用してコネクタを作成します。

始める前に:

  • 接続する Google Workspace インスタンスに使用するアカウントで Google Cloud コンソールにログインする必要があります。Vertex AI Search は、Google Workspace のお客様 ID を使用して Google Sites に接続します。

  • Google サイトのアクセス制御を設定します。アクセス制御の設定については、データソースのアクセス制御を使用するをご覧ください。

Console

コンソールを使用して Google サイトのデータを検索可能にするには、次の操作を行います。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで、[Google サイト] を選択します。

  5. データストアのリージョンを選択します。

  6. データストアの名前を入力します。

  7. [作成] をクリックします。

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Google カレンダーに接続する

Google カレンダーからデータを検索するには、次の手順で Google Cloud コンソールを使用してコネクタを作成します。

始める前に:

  • 接続する Google Workspace インスタンスに使用するアカウントで Google Cloud コンソールにログインする必要があります。Vertex AI Search は、Google Workspace のお客様 ID を使用して Google カレンダーに接続します。

  • Google カレンダーのアクセス制御を設定します。アクセス制御の設定については、データソースのアクセス制御を使用するをご覧ください。

Console

コンソールを使用して Google カレンダーのデータを検索可能にするには、次の操作を行います。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで、[Google カレンダー] を選択します。

  5. データストアのリージョンを選択します。

  6. データストアの名前を入力します。

  7. [作成] をクリックします。

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Google グループに接続する

Google グループからデータを検索するには、次の手順で Google Cloud コンソールを使用してコネクタを作成します。

始める前に:

  • 接続する Google Workspace インスタンスに使用するアカウントで Google Cloud コンソールにログインする必要があります。Vertex AI Search は、Google Workspace お客様 ID を使用して Google グループに接続します。

  • Google グループのアクセス制御を設定します。アクセス制御の設定については、データソースのアクセス制御を使用するをご覧ください。

Console

コンソールを使用して Google グループのデータを検索可能にするには、次の操作を行います。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで [Google グループ] を選択します。

  5. データストアのリージョンを選択します。

  6. データストアの名前を入力します。

  7. [作成] をクリックします。取り込みには、データのサイズに応じて、数分から数時間かかることがあります。データストアを使用して検索する前に、少なくとも 1 時間待機してください。

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Google Workspace からユーザーデータを同期することで、チームのユーザー検索を設定できます。このデータは、データストアの作成後に Vertex AI Search と継続的に同期されます。

ディレクトリ内のユーザーは、名前、メールアドレス、組織、プロフィール写真など、利用可能なプロフィール情報がそれぞれ表示されるカードとして検索結果に表示されます。カードをクリックすると、そのユーザーの詳細ページが表示されます。

前提条件

  1. ユーザーがアプリにログインする際に使用する ID プロバイダを決定します。サードパーティの ID プロバイダを使用している場合は、管理者が ID プロバイダを Google Workspace と連携させる必要があります。連携の計画と設定には、かなりの時間がかかる場合があります。詳細については、データソースのアクセス制御を使用するをご覧ください。

  2. Google Workspace 管理者は、Google Workspace データでのユーザー検索を有効にする必要があります。手順は次のとおりです。

    1. 管理者アカウントで Google 管理コンソールにログインします。
    2. 管理コンソールで、[ディレクトリ] > [ディレクトリ設定] に移動します。
    3. [連絡先の共有] をオンにします。
  3. Google Workspace を接続する予定のアカウントで Google Cloud コンソールにログインします。

  4. ID プロバイダを接続するの手順に沿って ID プロバイダに接続し、プロバイダとして Google Identity を指定します。

Google Workspace ディレクトリの詳細については、Google Workspace のドキュメントの概要: ディレクトリの設定と管理をご覧ください。

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Cloud SQL からインポート

Cloud SQL からデータを取り込むには、次の手順で Cloud SQL アクセスを設定し、データストアを作成してデータを取り込みます。

Cloud SQL インスタンスのステージング バケット アクセスを設定する

Cloud SQL からデータを取り込む場合、データはまず Cloud Storage バケットにステージングされます。Cloud SQL インスタンスに Cloud Storage バケットへのアクセス権を付与する手順は次のとおりです。

  1. Google Cloud コンソールの [SQL] ページに移動します。

    SQL

  2. インポート元の Cloud SQL インスタンスをクリックします。

  3. インスタンスのサービス アカウントの ID(メールアドレスのような ID)をコピーします(例: p9876-abcd33f@gcp-sa-cloud-sql.iam.gserviceaccount.com)。

  4. [IAM と管理] ページに移動

    IAM と管理

  5. [アクセス権を付与] をクリックします。

  6. [新しいプリンシパル] で、インスタンスのサービス アカウント ID を入力し、[Cloud Storage] > [ストレージ管理者] ロールを選択します。

  7. [保存] をクリックします。

次は:

別のプロジェクトから Cloud SQL へのアクセスを設定する

Vertex AI Search に別のプロジェクトの Cloud SQL データへのアクセス権を付与する手順は次のとおりです。

  1. 次の PROJECT_NUMBER 変数を Vertex AI Search プロジェクト番号に置き換えて、コードブロックの内容をコピーします。これは Vertex AI Search サービス アカウント ID です。

    service-PROJECT_NUMBER@gcp-sa-discoveryengine.iam.gserviceaccount.com`
    
  2. [IAM と管理] ページに移動

    IAM と管理

  3. [IAM と管理] ページで Cloud SQL プロジェクトに切り替え、[アクセス権を付与] をクリックします。

  4. [新しいプリンシパル] で、サービス アカウントの ID を入力し、[Cloud SQL] > [Cloud SQL 閲覧者] ロールを選択します。

  5. [保存] をクリックします。

次に、Cloud SQL からデータをインポートするに進みます。

Cloud SQL からデータをインポートする

Console

コンソールを使用して Cloud SQL からデータを取り込む手順は次のとおりです。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで、[Cloud SQL] を選択します。

  5. インポートするデータのプロジェクト ID、インスタンス ID、データベース ID、テーブル ID を指定します。

  6. [参照] をクリックして、データをエクスポートする中間 Cloud Storage のロケーションを選択し、[選択] をクリックします。または、[gs://] フィールドにロケーションを直接入力します。

  7. サーバーレス エクスポートを有効にするかどうかを選択します。サーバーレス エクスポートには追加料金がかかります。サーバーレス エクスポートの詳細については、Cloud SQL ドキュメントのエクスポートによるパフォーマンスへの影響を最小限に抑えるをご覧ください。

  8. [続行] をクリックします。

  9. データストアのリージョンを選択します。

  10. データストアの名前を入力します。

  11. [作成] をクリックします。

  12. 取り込みのステータスを確認するには、[データストア] ページに移動し、データストア名をクリックして、[データ] ページで詳細を表示します。[アクティビティ] タブのステータス列が [進行中] から [インポート完了] に変わると、取り込みが完了します。

    取り込みには、データのサイズに応じて、数分から数時間かかることがあります。

REST

コマンドラインを使用してデータストアを作成し、Cloud SQL からデータを取り込む手順は次のとおりです。

  1. データストアの作成

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
    -d '{
      "displayName": "DISPLAY_NAME",
      "industryVertical": "GENERIC",
      "solutionTypes": ["SOLUTION_TYPE_SEARCH"],
    }'
    

    以下を置き換えます。

    • PROJECT_ID: プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • DISPLAY_NAME: データストアの表示名。これは Google Cloud コンソールに表示される場合があります。
  2. Cloud SQL からデータをインポートします。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents:import" \
      -d '{
        "cloudSqlSource": {
          "projectId": "SQL_PROJECT_ID",
          "instanceId": "INSTANCE_ID",
          "databaseId": "DATABASE_ID",
          "tableId": "TABLE_ID",
          "gcsStagingDir": "STAGING_DIRECTORY"
        },
        "reconciliationMode": "RECONCILIATION_MODE",
        "autoGenerateIds": "AUTO_GENERATE_IDS",
        "idField": "ID_FIELD",
      }'
    

    以下を置き換えます。

    • PROJECT_ID: Vertex AI Search プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • SQL_PROJECT_ID: Cloud SQL プロジェクトの ID。
    • INSTANCE_ID: Cloud SQL インスタンスの ID。
    • DATABASE_ID: Cloud SQL データベースの ID。
    • TABLE_ID: Cloud SQL テーブルの ID。
    • STAGING_DIRECTORY: 省略可。Cloud Storage ディレクトリ(例: gs://<your-gcs-bucket>/directory/import_errors)。
    • RECONCILIATION_MODE: 省略可。値は FULL、および INCREMENTAL です。デフォルトは INCREMENTAL です。INCREMENTAL を指定すると、Cloud SQL からデータストアへのデータの増分更新が行われます。これにより、アップサート オペレーションが実行され、新しいドキュメントを追加し、既存のドキュメントを更新された同じ ID のドキュメントで置き換えます。FULL を指定すると、データストア内のドキュメントが完全に再ベース化されます。つまり、新しいドキュメントと更新されたドキュメントがデータストアに追加され、Cloud SQL にないドキュメントがデータストアから削除されます。FULL モードは、不要になったドキュメントを自動的に削除する場合に便利です。

Python

詳細については、Vertex AI Agent Builder Python API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"


def create_data_store_sample(
    project_id: str,
    location: str,
    data_store_id: str,
) -> str:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.DataStoreServiceClient(client_options=client_options)

    # The full resource name of the collection
    # e.g. projects/{project}/locations/{location}/collections/default_collection
    parent = client.collection_path(
        project=project_id,
        location=location,
        collection="default_collection",
    )

    data_store = discoveryengine.DataStore(
        display_name="My Data Store",
        # Options: GENERIC, MEDIA, HEALTHCARE_FHIR
        industry_vertical=discoveryengine.IndustryVertical.GENERIC,
        # Options: SOLUTION_TYPE_RECOMMENDATION, SOLUTION_TYPE_SEARCH, SOLUTION_TYPE_CHAT, SOLUTION_TYPE_GENERATIVE_CHAT
        solution_types=[discoveryengine.SolutionType.SOLUTION_TYPE_SEARCH],
        # TODO(developer): Update content_config based on data store type.
        # Options: NO_CONTENT, CONTENT_REQUIRED, PUBLIC_WEBSITE
        content_config=discoveryengine.DataStore.ContentConfig.CONTENT_REQUIRED,
    )

    request = discoveryengine.CreateDataStoreRequest(
        parent=parent,
        data_store_id=data_store_id,
        data_store=data_store,
        # Optional: For Advanced Site Search Only
        # create_advanced_site_search=True,
    )

    # Make the request
    operation = client.create_data_store(request=request)

    print(f"Waiting for operation to complete: {operation.operation.name}")
    response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    metadata = discoveryengine.CreateDataStoreMetadata(operation.metadata)

    # Handle the response
    print(response)
    print(metadata)

    return operation.operation.name

ドキュメントのインポート

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# sql_project_id = "YOUR_SQL_PROJECT_ID"
# sql_instance_id = "YOUR_SQL_INSTANCE_ID"
# sql_database_id = "YOUR_SQL_DATABASE_ID"
# sql_table_id = "YOUR_SQL_TABLE_ID"

#  For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
    ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
    if location != "global"
    else None
)

# Create a client
client = discoveryengine.DocumentServiceClient(client_options=client_options)

# The full resource name of the search engine branch.
# e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}/branches/{branch}
parent = client.branch_path(
    project=project_id,
    location=location,
    data_store=data_store_id,
    branch="default_branch",
)

request = discoveryengine.ImportDocumentsRequest(
    parent=parent,
    cloud_sql_source=discoveryengine.CloudSqlSource(
        project_id=sql_project_id,
        instance_id=sql_instance_id,
        database_id=sql_database_id,
        table_id=sql_table_id,
    ),
    # Options: `FULL`, `INCREMENTAL`
    reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
)

# Make the request
operation = client.import_documents(request=request)

print(f"Waiting for operation to complete: {operation.operation.name}")
response = operation.result()

# After the operation is complete,
# get information from operation metadata
metadata = discoveryengine.ImportDocumentsMetadata(operation.metadata)

# Handle the response
print(response)
print(metadata)

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Spanner からインポートする

Spanner からデータを取り込むには、次の手順でデータストアを作成し、Google Cloud コンソールまたは API を使用してデータを取り込みます。

別のプロジェクトから Spanner へのアクセスを設定する

Spanner データが Vertex AI Search と同じプロジェクトにある場合は、Spanner からデータをインポートするに進みます。

Vertex AI Search に別のプロジェクトの Spanner データへのアクセス権を付与する手順は次のとおりです。

  1. 次の PROJECT_NUMBER 変数を Vertex AI Search プロジェクト番号に置き換えて、このコードブロックの内容をコピーします。これは Vertex AI Search サービス アカウント ID です。

    service-PROJECT_NUMBER@gcp-sa-discoveryengine.iam.gserviceaccount.com
    
  2. [IAM と管理] ページに移動

    IAM と管理

  3. [IAM と管理] ページで Spanner プロジェクトに切り替え、[アクセス権を付与] をクリックします。

  4. [新しいプリンシパル] で、サービス アカウントの ID を入力し、次のいずれかを選択します。

    • インポート中にデータブーストを使用しない場合は、[Cloud Spanner > Cloud Spanner データベース読み取り] ロールを選択します。
    • インポート中にデータブーストを使用する場合は、[Cloud Spanner] > [Cloud Spanner データベース管理者] ロール、または [Cloud Spanner データベース読み取り]spanner.databases.useDataBoost の権限を持つカスタムロールを選択します。Data Boost の詳細については、Spanner ドキュメントの Data Boost の概要をご覧ください。
  5. [保存] をクリックします。

次に、Spanner からデータをインポートするに進みます。

Spanner からデータをインポートする

Console

コンソールを使用して Spanner からデータを取り込む手順は次のとおりです。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで、[Cloud Spanner] を選択します。

  5. インポートするデータのプロジェクト ID、インスタンス ID、データベース ID、テーブル ID を指定します。

  6. Data Boost を有効にするかどうかを選択します。Data Boost の詳細については、Spanner ドキュメントの Data Boost の概要をご覧ください。

  7. [続行] をクリックします。

  8. データストアのリージョンを選択します。

  9. データストアの名前を入力します。

  10. [作成] をクリックします。

  11. 取り込みのステータスを確認するには、[データストア] ページに移動し、データストア名をクリックして、[データ] ページで詳細を表示します。[アクティビティ] タブのステータス列が [進行中] から [インポート完了] に変わると、取り込みが完了します。

    取り込みには、データのサイズに応じて、数分から数時間かかることがあります。

REST

コマンドラインを使用してデータストアを作成し、Spanner からデータを取り込む手順は次のとおりです。

  1. データストアの作成

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
    -d '{
      "displayName": "DISPLAY_NAME",
      "industryVertical": "GENERIC",
      "solutionTypes": ["SOLUTION_TYPE_SEARCH"],
      "contentConfig": "CONTENT_REQUIRED",
    }'
    

    以下を置き換えます。

    • PROJECT_ID: Vertex AI Search プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • DISPLAY_NAME: データストアの表示名。これは Google Cloud コンソールに表示される場合があります。
  2. Spanner からデータをインポートします。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents:import" \
      -d '{
        "cloudSpannerSource": {
          "projectId": "SPANNER_PROJECT_ID",
          "instanceId": "INSTANCE_ID",
          "databaseId": "DATABASE_ID",
          "tableId": "TABLE_ID",
          "enableDataBoost": "DATA_BOOST_BOOLEAN"
        },
        "reconciliationMode": "RECONCILIATION_MODE",
        "autoGenerateIds": "AUTO_GENERATE_IDS",
        "idField": "ID_FIELD",
      }'
    

    以下を置き換えます。

    • PROJECT_ID: Vertex AI Search プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。
    • SPANNER_PROJECT_ID: Spanner プロジェクトの ID。
    • INSTANCE_ID: Spanner インスタンスの ID。
    • DATABASE_ID: Spanner データベースの ID。
    • TABLE_ID: Spanner テーブルの ID。
    • DATA_BOOST_BOOLEAN: 省略可。Data Boost をオンにするかどうか。Data Boost の詳細については、Spanner ドキュメントの Data Boost の概要をご覧ください。
    • RECONCILIATION_MODE: 省略可。値は FULL、および INCREMENTAL です。デフォルトは INCREMENTAL です。INCREMENTAL を指定すると、Spanner からデータストアへのデータの増分更新が行われます。これにより、アップサート オペレーションが実行され、新しいドキュメントを追加し、既存のドキュメントを更新された同じ ID のドキュメントで置き換えます。FULL を指定すると、データストア内のドキュメントが完全に再ベース化されます。つまり、新しいドキュメントと更新されたドキュメントがデータストアに追加され、Spanner にないドキュメントがデータストアから削除されます。FULL モードは、不要になったドキュメントを自動的に削除する場合に便利です。
    • AUTO_GENERATE_IDS: 省略可。ドキュメント ID を自動生成するかどうかを指定します。true に設定すると、ドキュメント ID はペイロードのハッシュに基づいて生成されます。生成されたドキュメント ID は、複数のインポートで整合性が維持されない場合があります。複数のインポートで ID を自動生成する場合は、ドキュメント ID の整合性を維持するために、reconciliationModeFULL に設定することを強くおすすめします。

    • ID_FIELD: 省略可。ドキュメント ID のフィールドを指定します。

Python

詳細については、Vertex AI Agent Builder Python API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"


def create_data_store_sample(
    project_id: str,
    location: str,
    data_store_id: str,
) -> str:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.DataStoreServiceClient(client_options=client_options)

    # The full resource name of the collection
    # e.g. projects/{project}/locations/{location}/collections/default_collection
    parent = client.collection_path(
        project=project_id,
        location=location,
        collection="default_collection",
    )

    data_store = discoveryengine.DataStore(
        display_name="My Data Store",
        # Options: GENERIC, MEDIA, HEALTHCARE_FHIR
        industry_vertical=discoveryengine.IndustryVertical.GENERIC,
        # Options: SOLUTION_TYPE_RECOMMENDATION, SOLUTION_TYPE_SEARCH, SOLUTION_TYPE_CHAT, SOLUTION_TYPE_GENERATIVE_CHAT
        solution_types=[discoveryengine.SolutionType.SOLUTION_TYPE_SEARCH],
        # TODO(developer): Update content_config based on data store type.
        # Options: NO_CONTENT, CONTENT_REQUIRED, PUBLIC_WEBSITE
        content_config=discoveryengine.DataStore.ContentConfig.CONTENT_REQUIRED,
    )

    request = discoveryengine.CreateDataStoreRequest(
        parent=parent,
        data_store_id=data_store_id,
        data_store=data_store,
        # Optional: For Advanced Site Search Only
        # create_advanced_site_search=True,
    )

    # Make the request
    operation = client.create_data_store(request=request)

    print(f"Waiting for operation to complete: {operation.operation.name}")
    response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    metadata = discoveryengine.CreateDataStoreMetadata(operation.metadata)

    # Handle the response
    print(response)
    print(metadata)

    return operation.operation.name

ドキュメントのインポート

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# spanner_project_id = "YOUR_SPANNER_PROJECT_ID"
# spanner_instance_id = "YOUR_SPANNER_INSTANCE_ID"
# spanner_database_id = "YOUR_SPANNER_DATABASE_ID"
# spanner_table_id = "YOUR_SPANNER_TABLE_ID"

#  For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
    ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
    if location != "global"
    else None
)

# Create a client
client = discoveryengine.DocumentServiceClient(client_options=client_options)

# The full resource name of the search engine branch.
# e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}/branches/{branch}
parent = client.branch_path(
    project=project_id,
    location=location,
    data_store=data_store_id,
    branch="default_branch",
)

request = discoveryengine.ImportDocumentsRequest(
    parent=parent,
    spanner_source=discoveryengine.SpannerSource(
        project_id=spanner_project_id,
        instance_id=spanner_instance_id,
        database_id=spanner_database_id,
        table_id=spanner_table_id,
    ),
    # Options: `FULL`, `INCREMENTAL`
    reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
)

# Make the request
operation = client.import_documents(request=request)

print(f"Waiting for operation to complete: {operation.operation.name}")
response = operation.result()

# After the operation is complete,
# get information from operation metadata
metadata = discoveryengine.ImportDocumentsMetadata(operation.metadata)

# Handle the response
print(response)
print(metadata)

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Firestore からインポートする

Firestore からデータを取り込むには、次の手順でデータストアを作成し、Google Cloud コンソールまたは API を使用してデータを取り込みます。

Firestore データが Vertex AI Search と同じプロジェクトにある場合は、Firestore からデータをインポートするに進みます。

Firestore データが Vertex AI Search プロジェクトとは異なるプロジェクトにある場合は、Firestore へのアクセスを設定するに進みます。

別のプロジェクトから Firestore へのアクセスを設定する

Vertex AI Search に別のプロジェクトの Firestore データへのアクセス権を付与する手順は次のとおりです。

  1. 次の PROJECT_NUMBER 変数を Vertex AI Search プロジェクト番号に置き換えて、このコードブロックの内容をコピーします。これは Vertex AI Search サービス アカウント ID です。

    service-PROJECT_NUMBER@gcp-sa-discoveryengine.iam.gserviceaccount.com
    
  2. [IAM と管理] ページに移動

    IAM と管理

  3. [IAM と管理] ページで Firestore プロジェクトに切り替え、[アクセス権を付与] をクリックします。

  4. [新しいプリンシパル] で、インスタンスのサービス アカウント ID を入力し、[Datastore] > [Cloud Datastore インポート / エクスポート管理者] ロールを選択します。

  5. [保存] をクリックします。

  6. Vertex AI Search プロジェクトに戻ります。

次に、Firestore からデータをインポートするに移動します。

Firestore からデータをインポートする

Console

コンソールを使用して Firestore からデータを取り込む手順は次のとおりです。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. [データストア] ページに移動します。

  3. [新しいデータストア] をクリックします。

  4. [ソース] ページで [Firestore] を選択します。

  5. インポートするデータのプロジェクト ID、データベース ID、コレクション ID を指定します。

  6. [続行] をクリックします。

  7. データストアのリージョンを選択します。

  8. データストアの名前を入力します。

  9. [作成] をクリックします。

  10. 取り込みのステータスを確認するには、[データストア] ページに移動し、データストア名をクリックして、[データ] ページで詳細を表示します。[アクティビティ] タブのステータス列が [進行中] から [インポート完了] に変わると、取り込みが完了します。

    取り込みには、データのサイズに応じて、数分から数時間かかることがあります。

REST

コマンドラインを使用してデータストアを作成し、Firestore からデータを取り込む手順は次のとおりです。

  1. データストアの作成

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
    -d '{
      "displayName": "DISPLAY_NAME",
      "industryVertical": "GENERIC",
      "solutionTypes": ["SOLUTION_TYPE_SEARCH"],
    }'
    

    以下を置き換えます。

    • PROJECT_ID: プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • DISPLAY_NAME: データストアの表示名。これは Google Cloud コンソールに表示される場合があります。
  2. Firestore からデータをインポートします。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents:import" \
      -d '{
        "firestoreSource": {
          "projectId": "FIRESTORE_PROJECT_ID",
          "databaseId": "DATABASE_ID",
          "collectionId": "COLLECTION_ID",
        },
        "reconciliationMode": "RECONCILIATION_MODE",
        "autoGenerateIds": "AUTO_GENERATE_IDS",
        "idField": "ID_FIELD",
      }'
    

    以下を置き換えます。

    • PROJECT_ID: Vertex AI Search プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • FIRESTORE_PROJECT_ID: Firestore プロジェクトの ID。
    • DATABASE_ID: Firestore データベースの ID。
    • COLLECTION_ID: Firestore コレクションの ID。
    • RECONCILIATION_MODE: 省略可。値は FULL、および INCREMENTAL です。デフォルトは INCREMENTAL です。INCREMENTAL を指定すると、Firestore からデータストアへのデータの増分更新が行われます。これにより、アップサート オペレーションが実行され、新しいドキュメントを追加し、既存のドキュメントを更新された同じ ID のドキュメントで置き換えます。FULL を指定すると、データストア内のドキュメントが完全に再ベース化されます。つまり、新しいドキュメントと更新されたドキュメントがデータストアに追加され、Firestore にないドキュメントがデータストアから削除されます。FULL モードは、不要になったドキュメントを自動的に削除する場合に便利です。
    • AUTO_GENERATE_IDS: 省略可。ドキュメント ID を自動生成するかどうかを指定します。true に設定すると、ドキュメント ID はペイロードのハッシュに基づいて生成されます。生成されたドキュメント ID は、複数のインポートで整合性が維持されない場合があります。複数のインポートで ID を自動生成する場合は、ドキュメント ID の整合性を維持するために、reconciliationModeFULL に設定することを強くおすすめします。
    • ID_FIELD: 省略可。ドキュメント ID のフィールドを指定します。

Python

詳細については、Vertex AI Agent Builder Python API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"


def create_data_store_sample(
    project_id: str,
    location: str,
    data_store_id: str,
) -> str:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.DataStoreServiceClient(client_options=client_options)

    # The full resource name of the collection
    # e.g. projects/{project}/locations/{location}/collections/default_collection
    parent = client.collection_path(
        project=project_id,
        location=location,
        collection="default_collection",
    )

    data_store = discoveryengine.DataStore(
        display_name="My Data Store",
        # Options: GENERIC, MEDIA, HEALTHCARE_FHIR
        industry_vertical=discoveryengine.IndustryVertical.GENERIC,
        # Options: SOLUTION_TYPE_RECOMMENDATION, SOLUTION_TYPE_SEARCH, SOLUTION_TYPE_CHAT, SOLUTION_TYPE_GENERATIVE_CHAT
        solution_types=[discoveryengine.SolutionType.SOLUTION_TYPE_SEARCH],
        # TODO(developer): Update content_config based on data store type.
        # Options: NO_CONTENT, CONTENT_REQUIRED, PUBLIC_WEBSITE
        content_config=discoveryengine.DataStore.ContentConfig.CONTENT_REQUIRED,
    )

    request = discoveryengine.CreateDataStoreRequest(
        parent=parent,
        data_store_id=data_store_id,
        data_store=data_store,
        # Optional: For Advanced Site Search Only
        # create_advanced_site_search=True,
    )

    # Make the request
    operation = client.create_data_store(request=request)

    print(f"Waiting for operation to complete: {operation.operation.name}")
    response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    metadata = discoveryengine.CreateDataStoreMetadata(operation.metadata)

    # Handle the response
    print(response)
    print(metadata)

    return operation.operation.name

ドキュメントのインポート

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# firestore_project_id = "YOUR_FIRESTORE_PROJECT_ID"
# firestore_database_id = "YOUR_FIRESTORE_DATABASE_ID"
# firestore_collection_id = "YOUR_FIRESTORE_COLLECTION_ID"

#  For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
    ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
    if location != "global"
    else None
)

# Create a client
client = discoveryengine.DocumentServiceClient(client_options=client_options)

# The full resource name of the search engine branch.
# e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}/branches/{branch}
parent = client.branch_path(
    project=project_id,
    location=location,
    data_store=data_store_id,
    branch="default_branch",
)

request = discoveryengine.ImportDocumentsRequest(
    parent=parent,
    firestore_source=discoveryengine.FirestoreSource(
        project_id=firestore_project_id,
        database_id=firestore_database_id,
        collection_id=firestore_collection_id,
    ),
    # Options: `FULL`, `INCREMENTAL`
    reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
)

# Make the request
operation = client.import_documents(request=request)

print(f"Waiting for operation to complete: {operation.operation.name}")
response = operation.result()

# After the operation is complete,
# get information from operation metadata
metadata = discoveryengine.ImportDocumentsMetadata(operation.metadata)

# Handle the response
print(response)
print(metadata)

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

Bigtable からインポートする

Bigtable からデータを取り込むには、次の手順でデータストアを作成し、API を使用してデータを取り込みます。

Bigtable アクセスを設定する

Vertex AI Search に別のプロジェクトにある Bigtable データへのアクセス権を付与する手順は次のとおりです。

  1. 次の PROJECT_NUMBER 変数を Vertex AI Search プロジェクト番号に置き換えてから、このコードブロックの内容をコピーします。これは Vertex AI Search サービス アカウント ID です。

    service-PROJECT_NUMBER@gcp-sa-discoveryengine.iam.gserviceaccount.com`
    
  2. [IAM と管理] ページに移動

    IAM と管理

  3. [IAM と管理] ページで Bigtable プロジェクトに切り替え、[アクセス権を付与] をクリックします。

  4. [新しいプリンシパル] で、インスタンスのサービス アカウント ID を入力し、[Bigtable] > [Bigtable 読み取りユーザー] ロールを選択します。

  5. [保存] をクリックします。

  6. Vertex AI Search プロジェクトに戻ります。

次に、Bigtable からデータをインポートするに進みます。

Bigtable からデータをインポートする

REST

コマンドラインを使用してデータストアを作成し、Bigtable からデータを取り込む手順は次のとおりです。

  1. データストアの作成

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
    -d '{
      "displayName": "DISPLAY_NAME",
      "industryVertical": "GENERIC",
      "solutionTypes": ["SOLUTION_TYPE_SEARCH"],
    }'
    

    以下を置き換えます。

    • PROJECT_ID: プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • DISPLAY_NAME: データストアの表示名。これは Google Cloud コンソールに表示される場合があります。
  2. Bigtable からデータをインポートします。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents:import" \
      -d '{
        "bigtableSource ": {
          "projectId": "BIGTABLE_PROJECT_ID",
          "instanceId": "INSTANCE_ID",
          "tableId": "TABLE_ID",
          "bigtableOptions": {
            "keyFieldName": "KEY_FIELD_NAME",
            "families": {
              "key": "KEY",
              "value": {
                "fieldName": "FIELD_NAME",
                "encoding": "ENCODING",
                "type": "TYPE",
                "columns": [
                  {
                    "qualifier": "QUALIFIER",
                    "fieldName": "FIELD_NAME",
                    "encoding": "COLUMN_ENCODING",
                    "type": "COLUMN_VALUES_TYPE"
                  }
                ]
              }
             }
             ...
          }
        },
        "reconciliationMode": "RECONCILIATION_MODE",
        "autoGenerateIds": "AUTO_GENERATE_IDS",
        "idField": "ID_FIELD",
      }'
    

    以下を置き換えます。

    • PROJECT_ID: Vertex AI Search プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。ID に使用できるのは小文字、数字、アンダースコア、ハイフンのみです。
    • BIGTABLE_PROJECT_ID: Bigtable プロジェクトの ID。
    • INSTANCE_ID: Bigtable インスタンスの ID。
    • TABLE_ID: Bigtable テーブルの ID。
    • KEY_FIELD_NAME: これは省略可能ですが、指定することをおすすめします。Vertex AI Search への取り込み後に行キー値に使用するフィールド名。
    • KEY: 必須。列ファミリー キーの文字列値。
    • ENCODING: 省略可。型が STRING でない場合に値のエンコード モード。これは、columns に列を指定してエンコードを指定することによって、特定の列に対してオーバーライドできます。
    • COLUMN_TYPE: 省略可。この列ファミリーの値の型。
    • QUALIFIER: 必須。列の修飾子。
    • FIELD_NAME: これは省略可能ですが、指定することをおすすめします。Vertex AI Search への取り込み後にこの列に使用するフィールド名。
    • COLUMN_ENCODING: 省略可。型が STRING ではない特定の列の値のエンコード モード。
    • RECONCILIATION_MODE: 省略可。値は FULL、および INCREMENTAL です。デフォルトは INCREMENTAL です。INCREMENTAL を指定すると、Bigtable からデータストアへのデータの増分更新が行われます。これにより、アップサート オペレーションが実行され、新しいドキュメントを追加し、既存のドキュメントを更新された同じ ID のドキュメントで置き換えます。FULL を指定すると、データストア内のドキュメントが完全に再ベース化されます。つまり、新しいドキュメントと更新されたドキュメントがデータストアに追加され、Bigtable にないドキュメントがデータストアから削除されます。FULL モードは、不要になったドキュメントを自動的に削除する場合に便利です。
    • AUTO_GENERATE_IDS: 省略可。ドキュメント ID を自動生成するかどうかを指定します。true に設定すると、ドキュメント ID はペイロードのハッシュに基づいて生成されます。生成されたドキュメント ID は、複数のインポートで整合性が維持されない場合があります。複数のインポートで ID を自動生成する場合は、ドキュメント ID の整合性を維持するために、reconciliationModeFULL に設定することを強くおすすめします。

      autoGenerateIds は、bigquerySource.dataSchemacustom に設定されている場合にのみ指定します。それ以外の場合は、INVALID_ARGUMENT エラーが返されます。autoGenerateIds を指定しない場合、または false に設定しない場合は、idField を指定する必要があります。そうしないと、ドキュメントのインポートに失敗します。

    • ID_FIELD: 省略可。ドキュメント ID のフィールドを指定します。

Python

詳細については、Vertex AI Agent Builder Python API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"


def create_data_store_sample(
    project_id: str,
    location: str,
    data_store_id: str,
) -> str:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.DataStoreServiceClient(client_options=client_options)

    # The full resource name of the collection
    # e.g. projects/{project}/locations/{location}/collections/default_collection
    parent = client.collection_path(
        project=project_id,
        location=location,
        collection="default_collection",
    )

    data_store = discoveryengine.DataStore(
        display_name="My Data Store",
        # Options: GENERIC, MEDIA, HEALTHCARE_FHIR
        industry_vertical=discoveryengine.IndustryVertical.GENERIC,
        # Options: SOLUTION_TYPE_RECOMMENDATION, SOLUTION_TYPE_SEARCH, SOLUTION_TYPE_CHAT, SOLUTION_TYPE_GENERATIVE_CHAT
        solution_types=[discoveryengine.SolutionType.SOLUTION_TYPE_SEARCH],
        # TODO(developer): Update content_config based on data store type.
        # Options: NO_CONTENT, CONTENT_REQUIRED, PUBLIC_WEBSITE
        content_config=discoveryengine.DataStore.ContentConfig.CONTENT_REQUIRED,
    )

    request = discoveryengine.CreateDataStoreRequest(
        parent=parent,
        data_store_id=data_store_id,
        data_store=data_store,
        # Optional: For Advanced Site Search Only
        # create_advanced_site_search=True,
    )

    # Make the request
    operation = client.create_data_store(request=request)

    print(f"Waiting for operation to complete: {operation.operation.name}")
    response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    metadata = discoveryengine.CreateDataStoreMetadata(operation.metadata)

    # Handle the response
    print(response)
    print(metadata)

    return operation.operation.name

ドキュメントのインポート

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# bigtable_project_id = "YOUR_BIGTABLE_PROJECT_ID"
# bigtable_instance_id = "YOUR_BIGTABLE_INSTANCE_ID"
# bigtable_table_id = "YOUR_BIGTABLE_TABLE_ID"

#  For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
    ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
    if location != "global"
    else None
)

# Create a client
client = discoveryengine.DocumentServiceClient(client_options=client_options)

# The full resource name of the search engine branch.
# e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}/branches/{branch}
parent = client.branch_path(
    project=project_id,
    location=location,
    data_store=data_store_id,
    branch="default_branch",
)

bigtable_options = discoveryengine.BigtableOptions(
    families={
        "family_name_1": discoveryengine.BigtableOptions.BigtableColumnFamily(
            type_=discoveryengine.BigtableOptions.Type.STRING,
            encoding=discoveryengine.BigtableOptions.Encoding.TEXT,
            columns=[
                discoveryengine.BigtableOptions.BigtableColumn(
                    qualifier="qualifier_1".encode("utf-8"),
                    field_name="field_name_1",
                ),
            ],
        ),
        "family_name_2": discoveryengine.BigtableOptions.BigtableColumnFamily(
            type_=discoveryengine.BigtableOptions.Type.INTEGER,
            encoding=discoveryengine.BigtableOptions.Encoding.BINARY,
        ),
    }
)

request = discoveryengine.ImportDocumentsRequest(
    parent=parent,
    bigtable_source=discoveryengine.BigtableSource(
        project_id=bigtable_project_id,
        instance_id=bigtable_instance_id,
        table_id=bigtable_table_id,
        bigtable_options=bigtable_options,
    ),
    # Options: `FULL`, `INCREMENTAL`
    reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
)

# Make the request
operation = client.import_documents(request=request)

print(f"Waiting for operation to complete: {operation.operation.name}")
response = operation.result()

# After the operation is complete,
# get information from operation metadata
metadata = discoveryengine.ImportDocumentsMetadata(operation.metadata)

# Handle the response
print(response)
print(metadata)

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

AlloyDB for PostgreSQL からのインポート

AlloyDB for PostgreSQL からデータを取り込むには、次の手順でデータストアを作成し、Google Cloud コンソールまたは API を使用してデータを取り込みます。

AlloyDB for PostgreSQL データが Vertex AI Search プロジェクトと同じプロジェクトにある場合は、AlloyDB for PostgreSQL からデータをインポートするに進みます。

AlloyDB for PostgreSQL データが Vertex AI Search プロジェクトとは異なるプロジェクトにある場合は、AlloyDB for PostgreSQL へのアクセスを設定するに進みます。

別のプロジェクトから AlloyDB for PostgreSQL へのアクセスを設定する

Vertex AI Search に別のプロジェクトの AlloyDB for PostgreSQL データへのアクセス権を付与する手順は次のとおりです。

  1. 次の PROJECT_NUMBER 変数を Vertex AI Search プロジェクト番号に置き換えて、このコードブロックの内容をコピーします。これは Vertex AI Search サービス アカウント ID です。

    service-PROJECT_NUMBER@gcp-sa-discoveryengine.iam.gserviceaccount.com
    
  2. AlloyDB for PostgreSQL データが存在する Google Cloud プロジェクトに切り替えます。

  3. IAM ページに移動します。

    IAM

  4. [アクセス権を付与] をクリックします。

  5. [新しいプリンシパル] で、Vertex AI Search サービス アカウント ID を入力し、[Cloud AlloyDB] > [Cloud AlloyDB 管理者] ロールを選択します。

  6. [保存] をクリックします。

  7. Vertex AI Search プロジェクトに戻ります。

次に、AlloyDB for PostgreSQL からデータをインポートするに進みます。

AlloyDB for PostgreSQL からデータをインポートする

Console

コンソールを使用して AlloyDB for PostgreSQL からデータを取り込む手順は次のとおりです。

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. ナビゲーション メニューで [データストア] をクリックします。

  3. [データストアを作成] をクリックします。

  4. [ソース] ページで [AlloyDB] を選択します。

  5. インポートするデータのプロジェクト ID、ロケーション ID、クラスタ ID、データベース ID、テーブル ID を指定します。

  6. [続行] をクリックします。

  7. データストアのリージョンを選択します。

  8. データストアの名前を入力します。

  9. [作成] をクリックします。

  10. 取り込みのステータスを確認するには、[データストア] ページに移動し、データストア名をクリックして、[データ] ページで詳細を表示します。[アクティビティ] タブのステータス列が [進行中] から [インポート完了] に変わると、取り込みが完了します。

    取り込みには、データのサイズに応じて、数分から数時間かかることがあります。

REST

コマンドラインを使用してデータストアを作成し、AlloyDB for PostgreSQL からデータを取り込む手順は次のとおりです。

  1. データストアの作成

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
    -d '{
      "displayName": "DISPLAY_NAME",
      "industryVertical": "GENERIC",
      "solutionTypes": ["SOLUTION_TYPE_SEARCH"],
    }'
    

    以下を置き換えます。

    • PROJECT_ID: プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • DISPLAY_NAME: データストアの表示名。これは Google Cloud コンソールに表示される場合があります。
  2. AlloyDB for PostgreSQL からデータをインポートします。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents:import" \
      -d '{
        "alloydbSource": {
          "projectId": "ALLOYDB_PROJECT_ID",
          "locationId": "LOCATION_ID",
          "clusterId": "CLUSTER_ID",
          "databaseId": "DATABASE_ID",
          "tableId": "TABLE_ID",
        },
        "reconciliationMode": "RECONCILIATION_MODE",
        "autoGenerateIds": "AUTO_GENERATE_IDS",
        "idField": "ID_FIELD",
      }'
    

    以下を置き換えます。

    • PROJECT_ID: Vertex AI Search プロジェクトの ID。
    • DATA_STORE_ID: データストアの ID。ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • ALLOYDB_PROJECT_ID: AlloyDB for PostgreSQL プロジェクトの ID。
    • LOCATION_ID: AlloyDB for PostgreSQL のロケーションの ID。
    • CLUSTER_ID: AlloyDB for PostgreSQL クラスタの ID。
    • DATABASE_ID: AlloyDB for PostgreSQL データベースの ID。
    • TABLE_ID: AlloyDB for PostgreSQL テーブルの ID。
    • RECONCILIATION_MODE: 省略可。値は FULL、および INCREMENTAL です。デフォルトは INCREMENTAL です。INCREMENTAL を指定すると、AlloyDB for PostgreSQL からデータストアへのデータの増分更新が行われます。これにより、アップサート オペレーションが実行され、新しいドキュメントを追加し、既存のドキュメントを更新された同じ ID のドキュメントで置き換えます。FULL を指定すると、データストア内のドキュメントが完全に再ベース化されます。つまり、新しいドキュメントと更新されたドキュメントがデータストアに追加され、AlloyDB for PostgreSQL にないドキュメントがデータストアから削除されます。FULL モードは、不要になったドキュメントを自動的に削除する場合に便利です。
    • AUTO_GENERATE_IDS: 省略可。ドキュメント ID を自動生成するかどうかを指定します。true に設定すると、ドキュメント ID はペイロードのハッシュに基づいて生成されます。生成されたドキュメント ID は、複数のインポートで整合性が維持されない場合があります。複数のインポートで ID を自動生成する場合は、ドキュメント ID の整合性を維持するために、reconciliationModeFULL に設定することを強くおすすめします。
    • ID_FIELD: 省略可。ドキュメント ID のフィールドを指定します。

Python

詳細については、Vertex AI Agent Builder Python API のリファレンス ドキュメントをご覧ください。

Vertex AI Agent Builder に対する認証を行うには、アプリケーションのデフォルト認証情報を設定します。 詳細については、ローカル開発環境の認証の設定をご覧ください。

データストアを作成


from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"


def create_data_store_sample(
    project_id: str,
    location: str,
    data_store_id: str,
) -> str:
    #  For more information, refer to:
    # https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
    client_options = (
        ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
        if location != "global"
        else None
    )

    # Create a client
    client = discoveryengine.DataStoreServiceClient(client_options=client_options)

    # The full resource name of the collection
    # e.g. projects/{project}/locations/{location}/collections/default_collection
    parent = client.collection_path(
        project=project_id,
        location=location,
        collection="default_collection",
    )

    data_store = discoveryengine.DataStore(
        display_name="My Data Store",
        # Options: GENERIC, MEDIA, HEALTHCARE_FHIR
        industry_vertical=discoveryengine.IndustryVertical.GENERIC,
        # Options: SOLUTION_TYPE_RECOMMENDATION, SOLUTION_TYPE_SEARCH, SOLUTION_TYPE_CHAT, SOLUTION_TYPE_GENERATIVE_CHAT
        solution_types=[discoveryengine.SolutionType.SOLUTION_TYPE_SEARCH],
        # TODO(developer): Update content_config based on data store type.
        # Options: NO_CONTENT, CONTENT_REQUIRED, PUBLIC_WEBSITE
        content_config=discoveryengine.DataStore.ContentConfig.CONTENT_REQUIRED,
    )

    request = discoveryengine.CreateDataStoreRequest(
        parent=parent,
        data_store_id=data_store_id,
        data_store=data_store,
        # Optional: For Advanced Site Search Only
        # create_advanced_site_search=True,
    )

    # Make the request
    operation = client.create_data_store(request=request)

    print(f"Waiting for operation to complete: {operation.operation.name}")
    response = operation.result()

    # After the operation is complete,
    # get information from operation metadata
    metadata = discoveryengine.CreateDataStoreMetadata(operation.metadata)

    # Handle the response
    print(response)
    print(metadata)

    return operation.operation.name

ドキュメントのインポート

from google.api_core.client_options import ClientOptions
from google.cloud import discoveryengine_v1 as discoveryengine

# TODO(developer): Uncomment these variables before running the sample.
# project_id = "YOUR_PROJECT_ID"
# location = "YOUR_LOCATION" # Values: "global"
# data_store_id = "YOUR_DATA_STORE_ID"
# alloy_db_project_id = "YOUR_ALLOY_DB_PROJECT_ID"
# alloy_db_location_id = "YOUR_ALLOY_DB_LOCATION_ID"
# alloy_db_cluster_id = "YOUR_ALLOY_DB_CLUSTER_ID"
# alloy_db_database_id = "YOUR_ALLOY_DB_DATABASE_ID"
# alloy_db_table_id = "YOUR_ALLOY_DB_TABLE_ID"

# For more information, refer to:
# https://cloud.google.com/generative-ai-app-builder/docs/locations#specify_a_multi-region_for_your_data_store
client_options = (
    ClientOptions(api_endpoint=f"{location}-discoveryengine.googleapis.com")
    if location != "global"
    else None
)

# Create a client
client = discoveryengine.DocumentServiceClient(client_options=client_options)

# The full resource name of the search engine branch.
# e.g. projects/{project}/locations/{location}/dataStores/{data_store_id}/branches/{branch}
parent = client.branch_path(
    project=project_id,
    location=location,
    data_store=data_store_id,
    branch="default_branch",
)

request = discoveryengine.ImportDocumentsRequest(
    parent=parent,
    alloy_db_source=discoveryengine.AlloyDbSource(
        project_id=alloy_db_project_id,
        location_id=alloy_db_location_id,
        cluster_id=alloy_db_cluster_id,
        database_id=alloy_db_database_id,
        table_id=alloy_db_table_id,
    ),
    # Options: `FULL`, `INCREMENTAL`
    reconciliation_mode=discoveryengine.ImportDocumentsRequest.ReconciliationMode.INCREMENTAL,
)

# Make the request
operation = client.import_documents(request=request)

print(f"Waiting for operation to complete: {operation.operation.name}")
response = operation.result()

# After the operation is complete,
# get information from operation metadata
metadata = discoveryengine.ImportDocumentsMetadata(operation.metadata)

# Handle the response
print(response)
print(metadata)

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

API を使用して構造化 JSON データをアップロードする

API を使用して JSON ドキュメントまたはオブジェクトを直接アップロードする手順は次のとおりです。

データをインポートする前に、取り込むデータを準備します

REST

コマンドラインを使用してデータストアを作成し、構造化 JSON データをインポートする手順は次のとおりです。

  1. データストアの作成

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
    -d '{
      "displayName": "DATA_STORE_DISPLAY_NAME",
      "industryVertical": "GENERIC",
      "solutionTypes": ["SOLUTION_TYPE_SEARCH"]
    }'
    

    以下を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • DATA_STORE_ID: 作成する Vertex AI Search データストアの ID。この ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • DATA_STORE_DISPLAY_NAME: 作成する Vertex AI Search データストアの表示名。
  2. 構造化データをインポートします。

    データのアップロードには、次のような方法があります。

    • JSON ドキュメントをアップロードします。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents?documentId=DOCUMENT_ID" \
      -d '{
        "jsonData": "JSON_DOCUMENT_STRING"
      }'
      

      以下を置き換えます。

      • DOCUMENT_ID: ドキュメントの一意の ID。この ID は 63 文字以下で、小文字、数字、アンダースコア、ハイフンのみを使用できます。
      • JSON_DOCUMENT_STRING: JSON ドキュメントを 1 つの文字列として指定します。これは、前の手順で指定した JSON スキーマに準拠している必要があります。次に例を示します。

        { \"title\": \"test title\", \"categories\": [\"cat_1\", \"cat_2\"], \"uri\": \"test uri\"}
        
    • JSON オブジェクトをアップロードします。

      curl -X POST \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents?documentId=DOCUMENT_ID" \
      -d '{
        "structData": JSON_DOCUMENT_OBJECT
      }'
      

      JSON_DOCUMENT_OBJECT は、JSON オブジェクトとして JSON ドキュメントを置き換えます。これは、前の手順で指定した JSON スキーマに準拠している必要があります。次に例を示します。

      ```json
      {
        "title": "test title",
        "categories": [
          "cat_1",
          "cat_2"
        ],
        "uri": "test uri"
      }
      ```
      
    • JSON ドキュメントで更新します。

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents/DOCUMENT_ID" \
      -d '{
        "jsonData": "JSON_DOCUMENT_STRING"
      }'
      
    • JSON オブジェクトで更新します。

      curl -X PATCH \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://discoveryengine.googleapis.com/v1beta/projects/PROJECT_ID/locations/global/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/documents/DOCUMENT_ID" \
      -d '{
        "structData": JSON_DOCUMENT_OBJECT
      }'
      

次のステップ

  • データストアをアプリにアタッチするには、検索アプリを作成するの手順に沿ってアプリを作成し、データストアを選択します。

  • アプリとデータストアが設定された後に検索結果が表示される様子をプレビューするには、検索結果を取得するをご覧ください。

データの取り込みに関するトラブルシューティング

データの取り込みで問題が発生した場合は、次のヒントをご確認ください。

  • 顧客管理の暗号鍵を使用していて、データのインポートが失敗する場合(エラー メッセージ The caller does not have permission が表示される場合)は、鍵の CryptoKey 暗号化/復号 IAM ロール(roles/cloudkms.cryptoKeyEncrypterDecrypter)が Cloud Storage サービス エージェントに付与されていることを確認します。詳細については、顧客管理の暗号鍵の始める前にをご覧ください。

  • 高度なウェブサイト インデックス登録を使用していて、データストアのドキュメント使用量が想定よりもはるかに少ない場合は、インデックス登録に指定した URL パターンを確認し、指定した URL パターンがインデックス登録するページをカバーしていることを確認します。必要に応じて、URL パターンを拡張します。たとえば、*.en.example.com/* を使用した場合は、インデックス登録するサイトに *.example.com/* を追加する必要があります。

Terraform を使用してデータストアを作成する

Terraform を使用して空のデータストアを作成できます。空のデータストアを作成したら、Google Cloud コンソールまたは API コマンドを使用してデータストアにデータを取り込むことができます。

Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。

Terraform を使用して空のデータストアを作成するには、 google_discovery_engine_data_store をご覧ください。