建立醫療照護搜尋資料儲存庫

如要在 Vertex AI Search 中搜尋臨床資料,您可以按照下列任一工作流程操作:

  • 建立醫療照護資料儲存庫、將 FHIR R4 資料匯入資料儲存庫、將其連結至醫療照護搜尋應用程式,然後查詢臨床資料。
  • 建立醫療照護搜尋應用程式、建立醫療照護資料儲存庫,並在應用程式建立程序中將 FHIR R4 資料匯入資料儲存庫,以及查詢臨床資料。詳情請參閱「建立醫療搜尋應用程式」。

本頁面將說明第一���方���。

關於資料匯入頻率

您可以透過下列方式,將 FHIR R4 資料匯入資料儲存庫:

  • 批次匯入:一次性匯入。資料會以批次方式匯入資料儲存庫。如要進一步瞭解如何匯入增量資料,請參閱「重新整理醫療保健資料」。

  • 串流匯入:近乎即時的串流資料匯入。來源 FHIR 儲存庫中的任何增量變更都會在 Vertex AI Search 資料儲存庫中同步處理。串流功能需要資料連接器,這是一種資料儲存庫類型。如要建立資料連接器,您必須設定集合。資料連接器包含實體,這也是資料儲存庫的執行個體。

    您也可以暫停及繼續串流,並視需要手動同步處理。詳情請參閱「管理醫療保健搜尋資料儲存庫」。

    特定 Google Cloud 專案的資料串流速率取決於下列配額。如果超出配額,可能會發生串流延遲的情形。

您可以在建立資料儲存庫時選取資料匯入頻率,且日後無法變更這項設定。

事前準備

建立醫療照護資料儲存庫並匯入資料前,請先瞭解下列事項:

  • 醫療照護搜尋應用程式與資料儲存庫之間的關係。詳情請參閱「關於應用程式和資料儲存庫」。

  • 準備 FHIR 資料以供攝入

  • Vertex AI Search for healthcare 僅在美國多區域 (us) 提供搜尋服務,因此醫療照護搜尋應用程式和資料儲存庫必須位於 us 多區域。

  • 如果您要從一個 Google Cloud 專案的 Cloud Healthcare API FHIR 儲存庫匯入醫療照護資料,並將其匯入另一個 Google Cloud 專案的 Vertex AI Search 資料儲存庫,且您使用的是 VPC Service Controls,則這兩個專案必須位於相同的範���內。

建立資料儲存庫並匯入資料

您可以在Google Cloud 控制台中建立資料儲存庫,並使用 API 匯入 FHIR R4 資料,方法如下:

建立靜態資料儲存庫,並執行一次性的批次匯入作業

本節說明如何建立 Vertex AI Search 資料儲存庫,其中只能執行批次匯入作業。您可以在首次建立資料儲存庫時匯入批次資料,並視需要執行遞增批次匯入作業

控制台

  1. 前往 Google Cloud 控制台的「AI Applications」頁面。

    AI 應用程式

  2. 在導覽選單中,按一下「資料儲存庫」

  3. 按一下 「建立資料儲存庫」

  4. 在「Select a data source」(選取資料來源) 窗格中,選取「Healthcare API (FHIR)」做為資料來源。
  5. 如要從 FHIR 儲存庫匯入資料,請執行下列任一操作:
    • 從可用 FHIR 儲存庫清單中選取 FHIR 儲存庫:
      1. 展開「FHIR 儲存庫」欄位。
      2. 在這個清單中,選取位於允許位置的資料集,然後選取使用 FHIR 4.0 版的 FHIR 儲存庫。
    • 手動輸入 FHIR 儲存庫:
      1. 展開「FHIR 儲存庫」欄位。
      2. 按一下「手動輸入 FHIR 存放區」
      3. 在「FHIR 儲存庫名稱」對話方塊中,輸入 FHIR 儲存庫的完整名稱,格式如下:

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

      4. 按一下 [儲存]
  6. 在「同步處理」部分中,選取下列其中一個選項。資料儲存庫建立後,即無法變更這項選項。
    • 一次性:執行一次性的批次資料匯入作業。如要進一步瞭解增量匯入作業,請參閱「重新整理醫療保健資料」。
    • 串流:執行近乎即時的串流資料匯入作業。如要串流資料,您必須建立資料連接器,這是一種資料儲存庫。如要使用 REST API 設定串流資料儲存庫,請與客戶工程師聯絡。
  7. 在「這項資料的結構定義是什麼?」部分,選取下列其中一個選項:
    • Google 預先定義的結構定義:針對支援的 FHIR 資源和元素,保留 Google 定義的結構定義設定,例如可索引、可搜尋和可擷取。選取這個選項後,您就無法在建立資料儲存庫後更新結構定義。如果您想在建立資料儲存庫後變更架構,請選取「自訂架構」選項。
      1. 按一下「繼續」
      2. 在「資料儲存庫名稱」欄位中,輸入資料儲存庫的名稱。
      3. 按一下 [建立]。
      4. 您建立的資料儲存庫會列在「資料儲存庫」頁面。

    • 自訂結構定義:為支援的 FHIR 資源和元素定義專屬的結構定義設定,例如索引、搜尋和擷取功能。如要設定可設定的結構定義,請與客戶工程師聯絡。
      1. 按一下「繼續」
      2. 查看結構定義、展開每個欄位,然後編輯欄位設定。
      3. 按一下「Add new fields」,即可在支援的 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/v1/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"],
        "healthcareFhirConfig":
          {
            "enableConfigurableSchema": CONFIGURABLE_SCHEMA_TRUE|FALSE
          }
    }'
    

    更改下列內容:

    • PROJECT_ID: Google Cloud 專案的 ID。
    • DATA_STORE_ID:您要建立的 Vertex AI Search 資料儲存庫 ID。這個 ID 只能包含小寫英文字母、數字、底線和連字號。
    • DATA_STORE_DISPLAY_NAME:您要建立的 Vertex AI Search 資料儲存庫������名稱。
    • CONFIGURABLE_SCHEMA_TRUE|FALSE:布林值,如果設為 true,您可以使用 schema.update 方法設定資料儲存庫結構定義。
  2. 如果來源 FHIR 儲存庫和目標 Vertex AI Search 資料儲存庫位於同一個 Google Cloud 專案中,請呼叫下列方法,執行一次性批次匯入作業。如果不屬於同一個專案,請進行下一個步驟。

    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/v1/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 專案中,請呼叫下列方法來執行一次性批次匯入作業。如果是同一個專案,請返回上一個步驟。

    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/v1/projects/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"}
    }'
    

    更改下列內容:

    • 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。

Python

詳情請參閱 AI Applications Python API 參考說明文件

如要向 AI Applications 進行驗證,請設定應用程式預設憑證。詳情請參閱「為本機開發環境設定驗證機制」。

建立資料儲存庫


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)

���續步驟

建立串流資料儲存庫並設定串流匯入作業

本節說明如何建立串流 Vertex AI Search 資料儲存庫,持續串流 Cloud Healthcare API FHIR 儲存庫中的變更。

控制台

  1. 前往 Google Cloud 控制台的「AI Applications」頁面。

    AI 應用程式

  2. 在導覽選單中,按一下「資料儲存庫」

  3. 按一下 「建立資料儲存庫」

  4. 在「Select a data source」(選取資料來源) 窗格中,選取「Healthcare API (FHIR)」做為資料來源。
  5. 如要從 FHIR 儲存庫匯入資料,請執行下列任一操作:
    • 從可用 FHIR 儲存庫清單中選取 FHIR 儲存庫:
      1. 展開「FHIR 儲存庫」欄位。
      2. 在這個清單中,選取位於允許位置的資料集,然後選取使用 FHIR 4.0 版的 FHIR 儲存庫。
    • 手動輸入 FHIR 儲存庫:
      1. 展開「FHIR 儲存庫」欄位。
      2. 按一下「手動輸入 FHIR 存放區」
      3. 在「FHIR 儲存庫名稱」對話方塊中,輸入 FHIR 儲存庫的完整名稱,格式如下:

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

      4. 按一下 [儲存]
  6. 在「同步處理」部分中,選取下列其中一個選項。資料儲存庫建立後,���無法變更這項選項。
    • 一次性:執行一次性的批次資料匯入作業。如要進一步瞭解增量匯入作業,請參閱「重新整理醫療保健資料」。
    • 串流:執行近乎即時的串流資料匯入作業。如要串流資料,您必須建立資料連接器,這是一種資料儲存庫。如要使用 REST API 設定串流資料儲存庫,請與客戶工程師聯絡。
  7. 在「這項資料的結構定義是什麼?」部分,選取下列其中一個選項:
    • Google 預先定義的結構定義:針對支援的 FHIR 資源和元素,保留 Google 定義的結構定義設定,例如可索引、可搜尋和可擷取。選取這個選項後,您就無法在建立資料儲存庫後更新結構定義。如果您想在建立資料儲存庫後變更架構,請選取「自訂架構」選項。
      1. 按一下「繼續」
      2. 在「資料儲存庫名稱」欄位中,輸入資料儲存庫的名稱。
      3. 按一下 [建立]。
      4. 您建立的資料儲存庫會列在「資料儲存庫」頁面。

    • 自訂結構定義:為支援的 FHIR 資源和元素定義專屬的結構定義設定,例如索引、搜尋和擷取功能。如要設定可設定的結構定義,請與客戶工程師聯絡。
      1. 按一下「繼續」
      2. 查看結構定義、展開每個欄位,然後編���欄位設定。
      3. 按一下「Add new fields」,即可在支援的 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:setUpDataConnector" \
    -d ' {
      "collectionId": "COLLECTION_ID",
      "collectionDisplayName": "COLLECTION_NAME",
      "dataConnector": {
      "dataSource": "gcp_fhir",
      "params": {
          "instance_uri": "projects/SOURCE_PROJECT_ID/locations/CLOUD_HEALTHCARE_DATASET_LOCATION/datasets/CLOUD_HEALTHCARE_DATASET_ID"
        },
        "entities": [
          {
            "entityName": "FHIR_STORE_NAME"
            "healthcareFhirConfig": {
              "enableConfigurableSchema": CONFIGURABLE_SCHEMA_TRUE|FALSE,
              "enableStaticIndexingForBatchIngestion": STATIC_INDEXING_TRUE|FALSE
            }
          }
        ],
        "syncMode": "STREAMING"
      }
    }'
    

    更改下列內容:

    • PROJECT_ID: Google Cloud 專案的 ID。
    • COLLECTION_ID:您要串流 FHIR R4 資料的集合 ID。
    • COLLECTION_NAME:您要串流 FHIR R4 資料的集合名稱。
    • 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。
    • CONFIGURABLE_SCHEMA_TRUE|FALSE:布林值,如果設為 true,您可以使用 schema.update 方法設定資料儲存庫結構定義。
    • STATIC_INDEXING_TRUE|FALSE:布林值,如果設為 true,您就能以較高的索引配額匯入歷史資料。當您預期搜尋應用程式會遇到較大量的資料時,這項功能就很實用。不過,個別記錄的索引時間會較長。Google 強烈建議您將這個欄位設為 true
    • 如果集合建立成功,資料連接器就會新增至 Google Cloud 控制台「資料儲存庫」頁面中的資料儲存庫清單。
    • 建立的資料連接器包含實體,其名稱與您要串流資料的 FHIR R4 儲存庫相同。

後續步驟

驗證資料儲存庫建立作業和 FHIR 資料匯入作業

本任務將說明如何驗證資料儲存庫是否已成功建立,以及 FHIR 資料是否已成功匯入資料儲存庫。

  • 在 Google Cloud 控制台:選取資料儲存庫並確認詳細資料。
  • 透過 REST API:
    1. 使用 dataStores.get 方法取得醫療照護資料儲存庫詳細資料。
    2. 使用 operations.get 方法取得匯入作業的詳細資料。

如要驗證資料儲存庫建立和資料匯入作業,請完成下列步驟。

控制台

  1. 前往 Google Cloud 控制台的「AI Applications」頁面。

    AI 應用程式

  2. 在導覽選單中,按一下「資料儲存庫」

    「資料儲存庫」頁面會列出 Google Cloud專案中的資料儲存庫清單,並顯示詳細資料。

  3. 確認您建立的資料儲存庫或資料連接器是否在資料儲存庫清單中。在資料儲存庫清單中,串流資料的資料連接器包含與 Cloud Healthcare API FHIR 儲存庫同名的資料儲存庫。

  4. 選取資料儲存庫或資料連接器,並確認詳細資料。

    • 資料儲存庫:
      • 摘要表格會列出下列詳細資料:
        • 資料儲存庫 ID、類型和區域。
        • 文件數量,表示匯入的 FHIR 資源數量。
        • 上次匯入文件的時間戳記。
        • 您可以按一下「查看詳細資料」,查看文件匯入詳細資料,例如匯入成功、部分成功或失敗的詳細資料。
      • 「文件」分頁會在分頁表格中列出已匯入 FHIR 資源的資源 ID 和資源類型。您可以篩選這個表格,確認是否已匯入特定資源。
      • 「活動」分頁會列出文件匯入詳細資料,例如匯入成功、部分成功或匯入失敗的詳細資料。
    • 資料連接器:
      • 摘要表格會列出下列詳細資料:
        • 集合 ID、類型和區域。
        • 已連結應用程式的名稱。
        • 連接器的狀態,可能是「有效」或「已暫停」。
      • 「實體」表格會顯示資料連接器中的實體。實體名稱是來源 FHIR 儲存庫名稱。實體 ID 是資料連接器 ID 加上來源 FHIR 儲存庫名稱。
        • 按一下實體名稱即可查看詳細資料。實體是資料連接器中的資料儲存庫例項,因此實體詳細資料與資料儲存庫詳細資料相同。
  5. 在「Schema」分頁中,查看支援的 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/v1/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/v1/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

後續步驟