Crea un almacén de datos de búsqueda de atención médica

Para buscar datos clínicos en Vertex AI Search, puedes seguir uno de estos flujos de trabajo:

  • Crea un almacén de datos de atención médica, importa datos de FHIR R4 al almacén de datos, conéctalo a una app de búsqueda de atención médica y consulta los datos clínicos.
  • Crea una app de búsqueda de atención médica, crea un almacén de datos de atención médica y, luego, importa datos de FHIR R4 al almacén de datos durante el proceso de creación de la app y consulta los datos clínicos. Para obtener más información, consulta Cómo crear una app de búsqueda de atención médica.

En esta página, se describe el primer método.

Acerca de la frecuencia de importación de datos

Puedes importar datos de FHIR R4 a un almacén de datos de las siguientes maneras:

  • Importación por lotes: Es una importación única. Los datos se importan a un almacén de datos. Para obtener más información sobre las importaciones incrementales, consulta Cómo actualizar los datos de atención médica.

  • Importación de transmisión (versión preliminar): Es una importación de datos de transmisión casi en tiempo real. Cualquier cambio incremental en el almacén de FHIR de origen se sincroniza en el almacén de datos de Vertex AI Search. La transmisión requiere un conector de datos, que es un tipo de almacén de datos que contiene una entidad. Una entidad también es una instancia del almacén de datos.

    La tasa de transmisión de datos de un proyecto de Google Cloud determinado depende de las siguientes cuotas. Si superas la cuota, es posible que experimentes retrasos en la transmisión.

    • Es la cantidad de operaciones de escritura de transmisión pendientes de FHIR o BigQuery por minuto. Para obtener más información, consulta Cuotas y límites.
    • Es la cantidad de operaciones de lectura de FHIR por minuto por región. Para obtener más información, consulta Cuotas de FHIR de la API de Cloud Healthcare.

Puedes seleccionar la frecuencia de importación de datos en el momento de la creación del almacén de datos y no puedes cambiar esta configuración más adelante.

La importación de transmisión está disponible para todos los recursos que admite Vertex AI Search. Para obtener más información, consulta la referencia del esquema de datos de FHIR R4 para la atención médica.

Antes de comenzar

Antes de crear el almacén de datos de atención médica y de importar datos a él, completa estos requisitos:

  • Comprende la relación entre las apps y los almacenes de datos para la búsqueda de atención médica. Para obtener más información, consulta Acerca de las apps y los almacenes de datos.

  • Prepara tus datos de FHIR para la transferencia.

  • Vertex AI Search para atención médica proporciona servicios de búsqueda solo en la multirregión de EE.UU. (us). Por lo tanto, tu app de búsqueda de atención médica y tus almacenes de datos deben residir en la multirregión us.

Crea un almacén de datos

Puedes crear un almacén de datos en la consola de Google Cloud o con la API. Los dos enfoques difieren de la siguiente manera:

  • En la consola de Google Cloud, selecciona el almacén de FHIR de origen en la API de Cloud Healthcare y, luego, importa los datos de FHIR como parte del proceso de creación del almacén de datos de búsqueda de atención médica. Para transmitir datos de FHIR (versión preliminar), tu almacén de FHIR de origen debe estar en el mismo proyecto de Google Cloud que el almacén de datos de destino de la Búsqueda de Vertex AI.
  • A través de la API de REST: Puedes importar datos de FHIR desde un almacén de FHIR de la API de Cloud Healthcare que se encuentra en el mismo proyecto de Google Cloud o en uno diferente.
    1. Usa el método dataStores.create para crear un almacén de datos de atención médica.
    2. Usa el método documents.import para especificar el almacén de FHIR en la API de Cloud Healthcare y para importar datos de FHIR R4.

Para crear un almacén de datos de atención médica, completa los siguientes pasos.

Console

  1. En la consola de Google Cloud, ve a la página Agent Builder.

    Agent Builder

  2. En el menú de navegación, haz clic en Almacenes de datos.

  3. Haz clic en Crear almacén de datos.

  4. En el panel Selecciona una fuente de datos, elige API de Healthcare (FHIR) como fuente de datos.
  5. Para importar datos de tu almacén de FHIR, realiza una de las siguientes acciones:
    • Selecciona el almacén de FHIR de la lista de almacenes de FHIR disponibles:
      1. Expande el campo Tienda de FHIR.
      2. En esta lista, selecciona un conjunto de datos que resida en una ubicación permitida y, luego, selecciona un almacén de FHIR que use la versión R4 de FHIR.

        Para transmitir datos de FHIR (versión preliminar), tu almacén de FHIR de origen debe estar en el mismo proyecto de Google Cloud que el almacén de datos de destino de Vertex AI Search.

    • Ingresa el almacén de FHIR de forma manual:
      1. Expande el campo Tienda de FHIR.
      2. Haz clic en Ingresar almacén de FHIR manualmente.
      3. En el diálogo Nombre del almacén de FHIR, ingresa el nombre completo del almacén de FHIR en el siguiente formato:

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

      4. Haz clic en Guardar.
  6. En la sección Synchronization, selecciona una de las siguientes opciones. No se puede cambiar esta selección después de crear el almacén de datos.
    • Única: Para realizar una importación de datos por lotes única. Para obtener más información sobre las importaciones incrementales, consulta Cómo actualizar datos de atención médica.
    • Transmisión: Para realizar una importación de datos de transmisión casi en tiempo real. Para transmitir datos, debes crear un conector de datos, que es un tipo de almacén de datos. Esta es una función de versión preliminar. Para configurar un almacén de datos de transmisión con la API de REST, comunícate con tu ingeniero de atención al cliente.
  7. En la sección ¿Cuál es el esquema para estos datos?, selecciona una de estas opciones:
    • Esquema predefinido de Google: Para retener las configuraciones de esquemas definidas por Google, como la indexabilidad, la capacidad de búsqueda y la recuperabilidad, para los recursos y elementos de FHIR compatibles. Una vez que selecciones esta opción, no podrás actualizar el esquema después de crear el almacén de datos. Si quieres poder cambiar el esquema después de crear el almacén de datos, selecciona la opción Esquema personalizado (versión preliminar).
      1. Haga clic en Continuar.
      2. En el campo Nombre de tu almacén de datos, ingresa un nombre para tu almacén de datos.
      3. Haz clic en Crear.
      4. El almacén de datos que creaste aparecerá en la página Almacenes de datos.

    • Esquema personalizado (versión preliminar): Para definir tus propias configuraciones de esquemas, como la indexabilidad, la capacidad de búsqueda y la recuperabilidad, para los recursos y elementos de FHIR compatibles. Esta es una función de versión preliminar. Para configurar un esquema configurable, comunícate con tu ingeniero de atención al cliente.
      1. Haga clic en Continuar.
      2. Revisa el esquema, expande cada campo y edita su configuración.
      3. Haz clic en Agregar campos nuevos para agregar campos nuevos a los recursos de FHIR compatibles. No puedes quitar los campos proporcionados en el esquema definido por Google.
      4. Haga clic en Continuar.
      5. En el campo Nombre de tu conector de datos, ingresa un nombre para el conector.
      6. Haz clic en Crear.
      7. El conector de datos que creaste aparece en la página Almacenes de datos. El almacén de FHIR de origen se agrega como una entidad dentro del conector de datos.

  8. Haga clic en Continuar.

REST

  1. Crea un almacén de datos.

    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"]
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • DATA_STORE_ID: El ID del almacén de datos de Vertex AI Search que deseas crear. Este ID solo puede contener letras en minúscula, dígitos, guiones bajos y guiones.
    • DATA_STORE_DISPLAY_NAME: Es el nombre visible del almacén de datos de Vertex AI Search que deseas crear.
  2. Si el almacén de FHIR de origen y el almacén de datos de destino de Vertex AI Search están en el mismo proyecto de Google Cloud, llama al siguiente método para realizar una importación por lotes única. Si no están en el mismo proyecto, ve al siguiente paso.

    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"}
    }'
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • DATA_STORE_ID: el ID del almacén de datos de Vertex AI Search.
    • CLOUD_HEALTHCARE_DATASET_ID: El ID del conjunto de datos de la API de Cloud Healthcare que contiene el almacén de FHIR de origen.
    • CLOUD_HEALTHCARE_DATASET_LOCATION: Es la ubicación del conjunto de datos de la API de Cloud Healthcare que contiene el almacén de FHIR de origen.
    • FHIR_STORE_ID: Es el ID del almacén de FHIR R4 de la API de Cloud Healthcare.
  3. Si el almacén de FHIR de origen y el almacén de datos de destino de Vertex AI Search están en diferentes proyectos de Google Cloud, llama al siguiente método para realizar una importación por lotes única. Si están en el mismo proyecto, vuelve al paso anterior.

    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"}
    }'
    

    Reemplaza lo siguiente:

    • TARGET_PROJECT_ID: El ID del proyecto de Google Cloud que contiene el almacén de datos de Vertex AI Search.
    • DATA_STORE_ID: el ID del almacén de datos de Vertex AI Search.
    • SOURCE_PROJECT_ID: Es el ID del proyecto de Google Cloud que contiene el conjunto de datos de la API de Cloud Healthcare y el almacén de FHIR.
    • CLOUD_HEALTHCARE_DATASET_ID: El ID del conjunto de datos de la API de Cloud Healthcare que contiene el almacén de FHIR de origen.
    • CLOUD_HEALTHCARE_DATASET_LOCATION: Es la ubicación del conjunto de datos de la API de Cloud Healthcare que contiene el almacén de FHIR de origen.
    • FHIR_STORE_ID: Es el ID del almacén de FHIR R4 de la API de Cloud Healthcare.
  4. Opcional: Para configurar una importación de datos de transmisión (versión preliminar) con la API de REST, comunícate con tu ingeniero de atención al cliente.

Python

Para obtener más información, consulta la documentación de referencia de la API de Python del compilador de agentes de Vertex AI.

Para autenticarte en Vertex AI Agent Builder, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para un entorno de desarrollo local.

Crea un almacén de datos


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

Importar documentos

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)

Verifica la creación del almacén de datos y la importación de datos de FHIR

En esta tarea, se muestra cómo verificar si se creó un almacén de datos correctamente y si los datos de FHIR se importaron al almacén de datos correctamente.

  • En la consola de Google Cloud, selecciona el almacén de datos y verifica sus detalles.
  • A través de la API de REST:
    1. Usa el método dataStores.get para obtener los detalles del almacén de datos de atención médica.
    2. Usa el método operations.get para obtener los detalles de la operación de importación.

Para verificar la creación y la importación de datos del almacén de datos, completa los siguientes pasos.

Console

  1. En la consola de Google Cloud, ve a la página Agent Builder.

    Agent Builder

  2. En el menú de navegación, haz clic en Almacenes de datos.

    En la página Almacenes de datos, se muestra una lista de los almacenes de datos de tu proyecto de Google Cloud con sus detalles.

  3. Verifica si el almacén de datos o el conector de datos que creaste se encuentra en la lista de almacenes de datos.

  4. Selecciona el almacén de datos o el conector de datos y verifica sus detalles.

    • Para un almacén de datos, sigue estos pasos:
      • En la tabla de resumen, se incluyen los siguientes detalles:
        • El ID, el tipo y la región del almacén de datos
        • Es la cantidad de documentos que indica la cantidad de recursos FHIR importados.
        • La marca de tiempo de la última vez que se importó un documento.
        • De manera opcional, haz clic en Ver detalles para ver los detalles de la importación de documentos, como los detalles sobre una importación correcta, parcial o fallida.
      • En la pestaña Documentos, se enumeran los IDs de los recursos de FHIR importados y sus tipos de recursos en una tabla paginada. Puedes filtrar esta tabla para verificar si se importó un recurso en particular.
      • En la pestaña Actividad, se enumeran los detalles de la importación de documentos, como los detalles de una importación correcta, parcial o fallida.
    • Para un conector de datos, haz lo siguiente:
      • En la tabla de resumen, se incluyen los siguientes detalles:
        • El ID, el tipo y la región de la colección
        • Es el nombre de la app conectada.
        • Es el estado del conector, que puede ser activo o detenido.
      • La tabla Entidades muestra la entidad dentro del conector de datos. El nombre de la entidad es el nombre del almacén de FHIR de origen. El ID de la entidad es el ID del conector de datos al que se le agrega el nombre del almacén de FHIR de origen.
        • Haz clic en el nombre de la entidad para ver sus detalles. Dado que una entidad es una instancia de almacén de datos dentro de un conector de datos, los detalles de la entidad son los mismos que los detalles de un almacén de datos.
  5. En la pestaña Esquema, consulta las propiedades de los recursos y elementos de FHIR compatibles. Haz clic en Editar para configurar el esquema. Esta es una función de vista previa privada. Para configurar un esquema configurable, comunícate con tu ingeniero de atención al cliente.

REST

  1. Verifica la creación del almacén de datos.

    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"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • DATA_STORE_ID: el ID del almacén de datos de Vertex AI Search.
  2. Verifica si la operación de importación de datos de FHIR está completa.

    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"
    

    Reemplaza lo siguiente:

    • PROJECT_ID: El ID del proyecto de Google Cloud.
    • DATA_STORE_ID: el ID del almacén de datos de Vertex AI Search.
    • IMPORT_OPERATION_ID: Es el ID de la operación de larga duración que se muestra cuando llamas al método import.

¿Qué sigue?