Criar um repositório de dados de pesquisa de saúde

Para pesquisar dados clínicos na Vertex AI para Pesquisa, siga um destes fluxos de trabalho:

  • Crie um repositório de dados de saúde, importe dados do FHIR R4 para ele, conecte-o a um app de pesquisa de saúde e consulte os dados clínicos.
  • Crie um app de pesquisa de saúde, crie um repositório de dados de saúde e importe dados do FHIR R4 para o repositório durante o processo de criação do app e consulte os dados clínicos. Para mais informações, consulte Criar um app de pesquisa de saúde.

Esta página descreve o primeiro método.

Sobre a frequência de importação de dados

É possível importar dados do FHIR R4 para um repositório de dados das seguintes maneiras:

  • Importação em lote: uma importação única. Os dados são importados para um repositório de dados. Para outras importações incrementais, consulte Atualizar dados de saúde.

  • Importação de streaming (pré-lançamento): uma importação de dados de streaming quase em tempo real. Todas as mudanças incrementais no armazenamento de FHIR de origem são sincronizadas no repositório de dados da Vertex AI para Pesquisa. O streaming requer um conector de dados, que é um tipo de repositório de dados que contém uma entidade. Uma entidade também é uma instância de repositório de dados.

    A taxa de streaming de dados de um determinado projeto do Google Cloud depende das cotas a seguir. Se você exceder a cota, poderá ocorrer atrasos no streaming.

    • O número de gravações pendentes de streaming do FHIR ou do BigQuery por minuto. Para mais informações, consulte Cotas e limites.
    • O número de operações de leitura do FHIR por minuto por região. Para mais informações, consulte Cotas do FHIR da API Cloud Healthcare.

É possível selecionar a frequência de importação de dados no momento da criação do repositório de dados, e não é possível mudar essa configuração mais tarde.

A importação de streaming está disponível para todos os recursos compatíveis com a Vertex AI para Pesquisa. Para mais informações, consulte a Referência do esquema de dados do FHIR R4 para cuidados de saúde.

Antes de começar

Antes de criar o repositório de dados de saúde e importar dados para ele, cumpra estes requisitos:

  • Entenda a relação entre apps e armazenamentos de dados para a pesquisa de saúde. Para mais informações, consulte Sobre apps e repositórios de dados.

  • Prepare seus dados FHIR para transferência.

  • A Vertex AI para Pesquisa de saúde fornece serviços de pesquisa apenas na multirregião dos EUA (us). Portanto, o app de pesquisa de saúde e os repositórios de dados precisam estar na multirregião us.

Criar um repositório de dados

É possível criar um repositório de dados no console do Google Cloud ou usando a API. As duas abordagens diferem da seguinte maneira:

  • No console do Google Cloud: selecione o armazenamento FHIR de origem na API Cloud Healthcare e importe dados FHIR como parte do processo de criação de armazenamento de dados de pesquisa de saúde. Para transmitir dados FHIR (pré-lançamento), a loja de FHIR de origem precisa estar no mesmo projeto do Google Cloud que a repositório de dados de destino da Vertex AI para Pesquisa.
  • Pela API REST: é possível importar dados FHIR de um armazenamento FHIR da API Cloud Healthcare que esteja no mesmo projeto do Google Cloud ou em outro.
    1. Use o método dataStores.create para criar um repositório de dados de saúde.
    2. Use o método documents.import para especificar o armazenamento FHIR na API Cloud Healthcare e importar dados R4 do FHIR.

Para criar um repositório de dados de saúde, siga estas etapas.

Console

  1. No Console do Google Cloud, acesse a página Criador de agentes.

    Agent Builder.

  2. No menu de navegação, clique em Repositórios de dados.

  3. Clique em Criar repositório de dados.

  4. No painel Selecionar uma fonte de dados, escolha API Healthcare (FHIR) como sua fonte de dados.
  5. Para importar dados do armazenamento FHIR, faça o seguinte:
    • Selecione o armazenamento FHIR na lista de opções disponíveis:
      1. Abra o campo Armazenamento FHIR.
      2. Nessa lista, selecione um conjunto de dados que esteja em um local permitido e, em seguida, selecione um armazenamento de FHIR que use a versão R4.

        Para transmitir dados FHIR (pré-lançamento), a loja de FHIR de origem precisa estar no mesmo projeto do Google Cloud que a repositório de dados de destino da Vertex AI para Pesquisa.

    • Insira o armazenamento FHIR manualmente:
      1. Abra o campo Armazenamento FHIR.
      2. Clique em Inserir o armazenamento FHIR manualmente.
      3. Na caixa de diálogo Nome da loja FHIR, insira o nome completo da loja FHIR no seguinte formato:

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

      4. Clique em Salvar.
  6. Na seção Sincronização, selecione uma das seguintes opções. Essa seleção não pode ser alterada após a criação do repositório de dados.
    • Única: para realizar uma importação única de dados em lote. Para mais importações incrementais, consulte Atualizar dados de saúde.
    • Streaming: para realizar uma importação de dados de streaming quase em tempo real. Para transmitir dados, crie um conector de dados, que é um tipo de repositório de dados. Este é um recurso em fase de pré-lançamento. Para configurar um repositório de dados de streaming usando a API REST, entre em contato com o engenheiro de clientes.
  7. Na seção Qual é o esquema desses dados?, selecione uma destas opções:
    • Esquema predefinido do Google: para manter as configurações de esquema definidas pelo Google, como indexabilidade, capacidade de pesquisa e recuperação, para os recursos e elementos do FHIR compatíveis. Depois de selecionar essa opção, não será possível atualizar o esquema após a criação do repositório de dados. Se você quiser mudar o esquema após a criação do repositório de dados, selecione a opção Esquema personalizado (pré-lançamento).
      1. Clique em Continuar.
      2. No campo Nome do repositório de dados, insira um nome para o repositório.
      3. Clique em Criar.
      4. O repositório de dados que você criou é listado na página Repositórios de dados.

    • Esquema personalizado (pré-lançamento): para definir suas próprias configurações de esquema, como indexabilidade, capacidade de pesquisa e recuperação, para os recursos e elementos do FHIR com suporte. Este é um recurso em fase de pré-lançamento. Para configurar um esquema configurável, entre em contato com o Engenheiro de clientes.
      1. Clique em Continuar.
      2. Revise o esquema, expanda cada campo e edite as configurações.
      3. Clique em Adicionar novos campos para adicionar novos campos aos recursos FHIR compatíveis. Não é possível remover os campos fornecidos no esquema definido pelo Google.
      4. Clique em Continuar.
      5. No campo Nome do conector de dados, insira um nome para o conector.
      6. Clique em Criar.
      7. O conector de dados criado é listado na página Repositórios de dados. O armazenamento FHIR de origem é adicionado como uma entidade no conector de dados.

  8. Clique em Continuar.

REST

  1. Crie um repositório de dados.

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

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud.
    • DATA_STORE_ID: o ID do repositório de dados da Vertex AI para Pesquisa que você quer criar. Esse ID só pode conter letras minúsculas, dígitos, sublinhados e hifens.
    • DATA_STORE_DISPLAY_NAME: o nome de exibição do repositório de dados da Vertex AI para Pesquisa que você quer criar.
  2. Se a loja de FHIR de origem e a repositório de dados da Vertex AI para Pesquisa de destino estiverem no mesmo projeto do Google Cloud, chame o método a seguir para realizar uma importação em lote única. Se eles não estiverem no mesmo projeto, vá para a próxima etapa.

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

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud.
    • DATA_STORE_ID: o ID do repositório de dados da Vertex AI para Pesquisa.
    • CLOUD_HEALTHCARE_DATASET_ID: o ID do conjunto de dados da API Cloud Healthcare que contém o armazenamento FHIR de origem.
    • CLOUD_HEALTHCARE_DATASET_LOCATION: o local do conjunto de dados da API Cloud Healthcare que contém o armazenamento FHIR de origem.
    • FHIR_STORE_ID: o ID da loja FHIR R4 da API Cloud Healthcare.
  3. Se a loja de FHIR de origem e a repositório de dados de destino da Vertex AI para Pesquisa estiverem em projetos diferentes do Google Cloud, chame o método a seguir para realizar uma importação em lote única. Se eles estiverem no mesmo projeto, volte para a etapa 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"}
    }'
    

    Substitua:

    • TARGET_PROJECT_ID: o ID do projeto do Google Cloud que contém o repositório de dados da Vertex AI para Pesquisa.
    • DATA_STORE_ID: o ID do repositório de dados da Vertex AI para Pesquisa.
    • SOURCE_PROJECT_ID: o ID do projeto do Google Cloud que contém o conjunto de dados da API Cloud Healthcare e a loja FHIR.
    • CLOUD_HEALTHCARE_DATASET_ID: o ID do conjunto de dados da API Cloud Healthcare que contém o armazenamento FHIR de origem.
    • CLOUD_HEALTHCARE_DATASET_LOCATION: o local do conjunto de dados da API Cloud Healthcare que contém o armazenamento FHIR de origem.
    • FHIR_STORE_ID: o ID da loja FHIR R4 da API Cloud Healthcare.
  4. Opcional: para configurar uma importação de dados de streaming (pré-lançamento) usando a API REST, entre em contato com seu engenheiro de atendimento ao cliente.

Python

Para mais informações, consulte a documentação de referência da API Python do Vertex AI Agent Builder.

Para autenticar no Vertex AI Agent Builder, configure o Application Default Credentials. Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local.

Criar um repositório de dados


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)

Verificar a criação do repositório de dados e a importação de dados FHIR

Esta tarefa mostra como verificar se um repositório de dados foi criado e se os dados do FHIR foram importados para o repositório.

  • No console do Google Cloud: selecione o repositório de dados e verifique os detalhes dele.
  • Pela API REST:
    1. Use o método dataStores.get para conferir os detalhes do repositório de dados de saúde.
    2. Use o método operations.get para conferir os detalhes da operação de importação.

Para verificar a criação e a importação de dados do repositório de dados, siga estas etapas.

Console

  1. No Console do Google Cloud, acesse a página Criador de agentes.

    Agent Builder.

  2. No menu de navegação, clique em Repositórios de dados.

    A página Armazenamentos de dados mostra uma lista de repositórios de dados no seu projeto do Google Cloud com os detalhes deles.

  3. Verifique se o repositório de dados ou o conector de dados que você criou está na lista de repositórios de dados.

  4. Selecione o repositório de dados ou o conector de dados e verifique os detalhes.

    • Para um repositório de dados:
      • A tabela de resumo lista os seguintes detalhes:
        • O ID, o tipo e a região do repositório de dados.
        • O número de documentos que indicam o número de recursos FHIR importados.
        • O carimbo de data/hora em que o último documento foi importado.
        • Opcionalmente, clique em Ver detalhes para conferir os detalhes da importação de documentos, como detalhes sobre uma importação bem-sucedida, parcial ou com falha.
      • A guia Documentos lista os IDs dos recursos FHIR importados e os tipos de recursos em uma tabela paginada. É possível filtrar essa tabela para verificar se um recurso específico foi importado.
      • A guia Atividade lista os detalhes da importação de documentos, como os detalhes sobre uma importação bem-sucedida, parcial ou com falha.
    • Para um conector de dados:
      • A tabela de resumo lista os seguintes detalhes:
        • O ID, o tipo e a região da coleção.
        • O nome do app conectado.
        • O estado do conector, que pode ser ativo ou pausado.
      • A tabela Entidades mostra a entidade no conector de dados. O nome da entidade é o nome da loja FHIR de origem. O ID da entidade é o ID do conector de dados anexado ao nome do armazenamento FHIR de origem.
        • Clique no nome da entidade para conferir os detalhes. Como uma entidade é uma instância de repositório de dados em um conector de dados, os detalhes da entidade são iguais aos detalhes de um repositório de dados.
  5. Na guia Esquema, confira as propriedades dos recursos e elementos do FHIR com suporte. Clique em Editar para configurar o esquema. Este é um recurso de pré-lançamento privado. Para configurar um esquema configurável, entre em contato com o engenheiro de clientes.

REST

  1. Verifique a criação do repositório de dados.

    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"
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud.
    • DATA_STORE_ID: o ID do repositório de dados da Vertex AI para Pesquisa.
  2. Verifique se a operação de importação de dados FHIR foi concluída.

    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"
    

    Substitua:

    • PROJECT_ID: o ID do seu projeto do Google Cloud.
    • DATA_STORE_ID: o ID do repositório de dados da Vertex AI para Pesquisa.
    • IMPORT_OPERATION_ID: o ID da operação de longa duração que é retornado quando você chama o método import.

A seguir