의료 검색 데이터 스토어 만들기

Vertex AI Search에서 임상 데이터를 검색하려면 다음 워크플로 중 하나를 따르면 됩니다.

  • 의료 데이터 스토어를 만들고 FHIR R4 데이터를 데이터 스토어로 가져와 의료 검색 앱에 연결한 후 임상 데이터를 쿼리합니다.
  • 의료 검색 앱을 만들고, 의료 데이터 스토어를 만들고, 앱 생성 프로세스 중 데이터 스토어에 FHIR R4 데이터를 가져오고, 임상 데이터를 쿼리합니다. 자세한 내용은 의료 검색 앱 만들기를 참조하세요.

이 페이지에서는 첫 번째 방법을 설명합니다.

데이터 가져오기 빈도에 대한 정보

다음과 같은 방법으로 FHIR R4 데이터를 데이터 스토어로 가져올 수 있습니다.

  • 일괄 가져오기: 한 번에 가져오기를 수행합니다. 데이터를 데이터 스토어로 가져옵니다. 추가 증분 가져오기에 관한 자세한 내용은 의료 데이터 새로고침을 참조하세요.

  • 스트리밍 가져오기(미리보기): 거의 실시간으로 데이터 가져오기를 스트리밍합니다. 소스 FHIR 스토어의 모든 증분 변경사항은 Vertex AI Search 데이터 스토어에서 동기화됩니다. 스트리밍에는 항목이 포함된 데이터 스토어 유형인 데이터 커넥터가 필요합니다. 항목은 데이터 스토어 인스턴스이기도 합니다.

    지정된 Google Cloud 프로젝트의 데이터 스트리밍 속도는 다음 할당량에 따라 달라집니다. 할당량을 초과하면 스트리밍 지연이 발생할 수 있습니다.

데이터 스토어를 만들 때 데이터 가져오기 빈도를 선택하고 나중에 이 구성을 변경할 수는 없습니다.

가져오기 스트리밍은 Vertex AI Search가 지원하는 모든 리소스에 사용할 수 있습니다. 자세한 내용은 의료 FHIR R4 데이터 스키마 참조를 참조하세요.

시작하기 전에

의료 데이터 스토어를 만들고 여기에 데이터를 가져오기 전에 다음 요구사항을 완료합니다.

데이터 스토어 만들기

Google Cloud 콘솔에서 또는 API를 사용하여 데이터 스토어를 만들 수 있습니다. 두 가지 접근 방법에는 다음과 같은 차이가 있습니다.

  • 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 데이터를 가져옵니다.

의료 데이터 스토어를 만들려면 다음 단계를 수행합니다.

콘솔

  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. 동기화 섹션에서 다음 옵션 중 하나를 선택합니다. 데이터 스토어가 생성된 후에는 이 선택 사항을 변경할 수 없습니다.
    • 일회성: 일회성 일괄 데이터 가져오기를 수행합니다. 추가 증분 가져오기에 관한 자세한 내용은 의료 데이터 새로고침을 참조하세요.
    • 스트리밍: 거의 실시간으로 스트리밍 데이터 가져오기를 수행합니다. 데이터를 스트리밍하려면 데이터 스토어의 한 유형인 데이터 커넥터를 만들어야 합니다. 이 기능은 미리보기 기능입니다. 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 프로젝트에 있으면 다음 메서드를 호출하여 일회성 일괄 가져오기를 수행합니다. 동일한 프로젝트에 있지 않으면 다음 단계로 이동합니다.

    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 프로젝트에 있으면 다음 메서드를 호출하여 일회성 일괄 가져오기를 수행합니다. 동일한 프로젝트에 있으면 이전 단계로 돌아갑니다.

    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 메서드를 사용하여 가져오기 작업의 세부정보를 가져옵니다.

데이터 스토어 생성 및 데이터 가져오기를 확인하려면 다음 단계를 완료하세요.

콘솔

  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입니다.

다음 단계