医療検索データストアを作成する

Vertex AI Search で臨床データを検索するには、次のいずれかのワークフローに沿って操作します。

  • ヘルスケア データストアを作成し、FHIR R4 データをデータストアにインポートして医療検索アプリに接続し、臨床データをクエリします。
  • 医療検索アプリを作成し、ヘルスケア データストアを作成して、アプリの作成プロセス中に FHIR R4 データをデータストアにインポートし、臨床データをクエリします。 詳細については、医療検索アプリを作成するをご覧ください。

このページでは、最初の方法について説明します。

データ インポートの頻度について

FHIR R4 データをデータストアにインポートするには、次の方法があります。

  • 一括インポート: 1 回限りのインポート。データがデータストアにインポートされます。その他の増分インポートについては、ヘルスケア データを更新するをご覧ください。

  • ストリーミング インポート(プレビュー版): ニア リアルタイムのストリーミング データのインポート。ソース FHIR ストアの増分変更は、Vertex AI Search データストアで同期されます。ストリーミングにはデータコネクタが必要です。これは、エンティティを含むデータストアの一種です。エンティティはデータストア インスタンスでもあります。

    特定の Google Cloud プロジェクトのデータ ストリーミング レートは、次の割り当てによって異なります。割り当てを超えると、ストリーミングが遅延する可能性があります。

    • 1 分あたりの保留中の FHIR または BigQuery ストリーミング書き込みの数。 詳細については、割り当てと上限をご覧ください。
    • 1 分間、1 リージョンあたりの FHIR 読み取りオペレーション数。詳細については、Cloud Healthcare API FHIR の割り当てをご覧ください。

データ インポートの頻度は、データストアの作成時に選択できます。この構成は後で変更できません。

ストリーミング インポートは、Vertex AI Search がサポートするすべてのリソースで使用できます。詳細については、Healthcare FHIR R4 データスキーマ リファレンスをご覧ください。

始める前に

ヘルスケア データストアを作成してデータをインポートする前に、次の要件を満たしてください。

  • 医療検索のアプリとデータストアの関係を理解します。 詳細については、アプリとデータストアについてをご覧ください。

  • 取り込む FHIR データを準備します。

  • Vertex AI Search for Healthcare は、米国のマルチリージョン(us)でのみ検索サービスを提供します。したがって、医療検索アプリとデータストアは us マルチリージョンに配置する必要があります。

データストアを作成

データストアは、Google Cloud コンソールまたは API を使用して作成できます。2 つのアプローチの違いは次のとおりです。

  • Google Cloud コンソールで、Cloud Healthcare API のソース FHIR ストアを選択し、医療検索データストアの作成プロセスの一部として FHIR データをインポートします。FHIR データをストリーミングするには(プレビュー版)、ソース FHIR ストアが宛先 Vertex AI Search データストアと同じ Google Cloud プロジェクトに存在する必要があります。
  • REST API を使用: 同じ Google Cloud プロジェクト内または別のプロジェクト内の Cloud Healthcare API FHIR ストアから FHIR データをインポートできます。
    1. dataStores.create メソッドを使用して、医療データストアを作成します。
    2. documents.import メソッドを使用して、Cloud Healthcare API で FHIR ストアを指定し、FHIR R4 データをインポートします。

ヘルスケア データストアを作成する手順は次のとおりです。

Console

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

    Agent Builder

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

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

  4. [データソースを選択] ペインで、データソースとして [Healthcare API(FHIR)] を選択します。
  5. FHIR ストアからデータをインポートするには、次のいずれかを行います。
    • 使用可能な FHIR ストアのリストから FHIR ストアを選択します。
      1. [FHIR ストア] フィールドを開きます。
      2. このリストで、許可されたロケーションにあるデータセットを選択し、FHIR バージョン R4 を使用する FHIR ストアを選択します。

        FHIR データをストリーミングするには(プレビュー版)、ソース FHIR ストアが宛先 Vertex AI Search データストアと同じ Google Cloud プロジェクトに存在する必要があります。

    • FHIR ストアを手動で入力します。
      1. [FHIR ストア] フィールドを開きます。
      2. [FHIR ストアを手動で入力] をクリックします。
      3. [FHIR ストア名] ダイアログで、FHIR ストアの完全な名前を次の形式で入力します。

        project/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID

      4. [保存] をクリックします。
  6. [ロケーション] セクションで、次のいずれかのオプションを選択します。 この選択は、データストアの作成後に変更することはできません
    • 1 回限り: 1 回限りの一括データ インポートを実行します。増分インポートの詳細については、ヘルスケア データを更新するをご覧ください。
    • ストリーミング: ニア リアルタイムのストリーミング データのインポートを実行します。データをストリーミングするには、データストアの一種であるデータコネクタを作成する必要があります。これはプレビュー機能です。REST API を使用してストリーミング データストアを設定するには、カスタマー エンジニアにお問い合わせください。
  7. [このデータのスキーマ] セクションで、次のいずれかのオプションを選択します。
    • Google の事前定義スキーマ: サポートされている FHIR リソースと要素に対して、Google が定義したスキーマ構成(インデックス登録可能性、検索可能性、取得可能性など)を保持します。このオプションを選択すると、データストアの作成後にスキーマを更新することはできません。データストアの作成後にスキーマを変更できるようにするには、[カスタム スキーマ(プレビュー)] オプションを選択します。
      1. [続行] をクリックします。
      2. [データストア名] フィールドに、データストアの名前を入力します。
      3. [作成] をクリックします。
      4. 作成したデータストアが [データストア] ページに表示されます。

    • カスタム スキーマ(プレビュー): サポートされている FHIR リソースと要素に独自のスキーマ構成(インデックス登録可能性、検索可能性、取得可能性など)を定義します。これはプレビュー機能です。構成可能なスキーマを設定するには、カスタマー エンジニアにお問い合わせください。
      1. [続行] をクリックします。
      2. スキーマを確認し、各フィールドを開いてフィールドの設定を編集します。
      3. [新しいフィールドを追加] をクリックして、サポートされている FHIR リソースに新しいフィールドを追加します。Google 定義のスキーマで指定されているフィールドは削除できません。
      4. [続行] をクリックします。
      5. [データ コネクタ名] フィールドに、データ コネクタの名前を入力します。
      6. [作成] をクリックします。
      7. 作成したデータコネクタが [データストア] ページに表示されます。 ソース FHIR ストアがデータコネクタ内にエンティティとして追加されます。

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

REST

  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://us-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/us/collections/default_collection/dataStores?dataStoreId=DATA_STORE_ID" \
     -d '{
        "displayName": "DATA_STORE_DISPLAY_NAME",
        "industryVertical": "HEALTHCARE_FHIR",
        "solutionTypes": ["SOLUTION_TYPE_SEARCH"],
        "searchTier": "STANDARD",
        "searchAddOns": ["LLM"]
    }'
    

    以下を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • DATA_STORE_ID: 作成する Vertex AI Search データストアの ID。この ID に使用できるのは、小文字、数字、アンダースコア、ハイフンのみです。
    • DATA_STORE_DISPLAY_NAME: 作成する Vertex AI Search データストアの表示名。
  2. ソース FHIR ストアとターゲット Vertex AI Search データストアが同じ Google Cloud プロジェクトにある場合は、次のメソッドを呼び出して 1 回限りの一括インポートを実行します。同じプロジェクトにない場合は、次のステップに進みます。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -H "X-Goog-User-Project: PROJECT_ID" \
    "https://us-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/us/dataStores/DATA_STORE_ID/branches/0/documents:import" \
    -d '{
       "reconciliation_mode": "FULL",
       "fhir_store_source": {"fhir_store": "projects/PROJECT_ID/locations/CLOUD_HEALTHCARE_DATASET_LOCATION/datasets/CLOUD_HEALTHCARE_DATASET_ID/fhirStores/FHIR_STORE_ID"}
    }'
    

    以下を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • DATA_STORE_ID: Vertex AI Search データストアの ID。
    • CLOUD_HEALTHCARE_DATASET_ID: ソース FHIR ストアを含む Cloud Healthcare API データセットの ID。
    • CLOUD_HEALTHCARE_DATASET_LOCATION: ソース FHIR ストアを含む Cloud Healthcare API データセットのロケーション。
    • FHIR_STORE_ID: Cloud Healthcare API FHIR R4 ストアの ID。
  3. ソース FHIR ストアとターゲット Vertex AI Search データストアが異なる Google Cloud プロジェクトにある場合は、次のメソッドを呼び出して 1 回限りの一括インポートを実行します。同じプロジェクトにある場合は、前の手順に戻ります。

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -H "X-Goog-User-Project: TARGET_PROJECT_ID" \
    "https://us-discoveryengine.googleapis.com/v1alpha/projects/TARGET_PROJECT_ID/locations/us/dataStores/DATA_STORE_ID/branches/0/documents:import" \
    -d '{
       "reconciliation_mode": "FULL",
       "fhir_store_source": {"fhir_store": "projects/SOURCE_PROJECT_ID/locations/CLOUD_HEALTHCARE_DATASET_LOCATION/datasets/CLOUD_HEALTHCARE_DATASET_ID/fhirStores/FHIR_STORE_ID"}
    }'
    

    以下を置き換えます。

    • TARGET_PROJECT_ID: Vertex AI Search データストアを含む Google Cloud プロジェクトの ID。
    • DATA_STORE_ID: Vertex AI Search データストアの ID。
    • SOURCE_PROJECT_ID: Cloud Healthcare API データセットと FHIR ストアを含む Google Cloud プロジェクトの ID。
    • CLOUD_HEALTHCARE_DATASET_ID: ソース FHIR ストアを含む Cloud Healthcare API データセットの ID。
    • CLOUD_HEALTHCARE_DATASET_LOCATION: ソース FHIR ストアを含む Cloud Healthcare API データセットのロケーション。
    • FHIR_STORE_ID: Cloud Healthcare API FHIR R4 ストアの ID。
  4. 省略可: REST API を使用してストリーミング データのインポート(プレビュー)を設定するには、カスタマー エンジニアにお問い合わせください。

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: "us"
# data_store_id = "YOUR_DATA_STORE_ID"
# healthcare_project_id = "YOUR_HEALTHCARE_PROJECT_ID"
# healthcare_location = "YOUR_HEALTHCARE_LOCATION"
# healthcare_dataset_id = "YOUR_HEALTHCARE_DATASET_ID"
# healthcare_fihr_store_id = "YOUR_HEALTHCARE_FHIR_STORE_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,
    fhir_store_source=discoveryengine.FhirStoreSource(
        fhir_store=client.fhir_store_path(
            healthcare_project_id,
            healthcare_location,
            healthcare_dataset_id,
            healthcare_fihr_store_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)

データストアの作成と FHIR データのインポートを確認する

このタスクでは、データストアが正常に作成されたかどうか、FHIR データがデータストアに正常にインポートされたかどうかを確認する方法について説明します。

  • Google Cloud コンソールで、データストアを選択し、詳細を確認します。
  • REST API を使用する:
    1. dataStores.get メソッドを使用して、ヘルスケア データストアの詳細を取得します。
    2. インポート オペレーションの詳細を取得するには、operations.get メソッドを使用します。

データストアの作成とデータのインポートを確認する手順は次のとおりです。

Console

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

    Agent Builder

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

    [データストア] ページに、Google Cloud プロジェクト内のデータストアのリストと詳細が表示されます。

  3. 作成したデータストアまたはデータコネクタがデータストアのリストに含まれていることを確認します。

  4. データストアまたはデータコネクタを選択し、詳細を確認します。

    • データストアの場合:
      • 概要の表には、次の詳細が表示されます。
        • データストア ID、タイプ、リージョン。
        • インポートされた FHIR リソースの数を示すドキュメントの数。
        • ドキュメントが最後にインポートされたときのタイムスタンプ。
        • 必要に応じて、[詳細を表示] をクリックして、ドキュメントのインポートの詳細(インポートの成功、部分的な成功、失敗の詳細など)を確認します。
      • [ドキュメント] タブには、インポートされた FHIR リソースのリソース ID とリソースタイプがページネーションされた表に表示されます。このテーブルをフィルタして、特定のリソースがインポートされたかどうかを確認できます。
      • [アクティビティ] タブには、インポートの成功、部分的な成功、失敗に関する詳細など、ドキュメントのインポートの詳細が表示されます。
    • データコネクタの場合:
      • 概要の表には、次の詳細が表示されます。
        • コレクション ID、タイプ、リージョン。
        • 接続されたアプリの名前。
        • コネクタの状態(アクティブまたは一時停止)。
      • [エンティティ] テーブルには、データ コネクタ内のエンティティが表示されます。エンティティの名前は、ソース FHIR ストア名です。エンティティの ID は、ソース FHIR ストア名が付加されたデータ コネクタの ID です。
        • ポリシー名をクリックして、その詳細を確認します。エンティティはデータコネクタ内のデータストア インスタンスであるため、エンティティの詳細はデータストアの詳細と同じです。
  5. [スキーマ] タブで、サポートされている FHIR リソースと要素のプロパティを表示します。[編集] をクリックしてスキーマを構成します。これは非公開プレビュー機能です。構成可能なスキーマを設定するには、カスタマー エンジニアにお問い合わせください。

REST

  1. データストアの作成を確認します。

    curl -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json"\
     -H "X-Goog-User-Project: PROJECT_ID" \
     "https://us-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/us/collections/default_collection/dataStores/DATA_STORE_ID"
    

    以下を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • DATA_STORE_ID: Vertex AI Search データストアの ID。
  2. FHIR データのインポート オペレーションが完了しているかどうかを確認します。

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://us-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/us/collections/default_collection/dataStores/DATA_STORE_ID/branches/0/operations/IMPORT_OPERATION_ID"
    

    以下を置き換えます。

    • PROJECT_ID: Google Cloud プロジェクトの ID。
    • DATA_STORE_ID: Vertex AI Search データストアの ID。
    • IMPORT_OPERATION_ID: import メソッドを呼び出したときに返される長時間実行オペレーションのオペレーション ID

次のステップ