搜索医疗保健数据

将 FHIR R4 数据导入到医疗保健搜索应用后,您可以查询导入的数据以获取相关结果。您可以使用以下类型的查询进行搜索:

  • 关键字查询
  • 自然语言查询
  • 自然语言查询和生成式 AI 回答

此外,您还可以使用日期过滤查询过滤搜索结果。如需了解详情,请参阅定义 resource_datetime 过滤条件

在 Google Cloud 控制台中进行搜索时,您必须先提供患者 ID,并且一次只能搜索单个患者的数据。使用 REST API 进行搜索时,您可以搜索整个数据存储区。

本页介绍了如何使用各种类型的查询搜索医疗保健数据。

Vertex AI Search 用于搜索医疗保健数据的预期用途

Vertex AI Search 的预期用途并非提供与预防、诊断或治疗疾病相关的信息。本产品不针对与诊断或治疗建议相关的问题提供解答。本产品的预期用途是检索和总结用户提供的现有医疗信息。

由于测试数据有限,此产品可能适用于 0-18 周岁和 85 周岁及以上的年龄段,也可能不适用。因此,在查看生成的输出时,客户必须考虑其源数据中子群体的代表性。

以下是此产品的预期用途的一些示例:

  • 探索性查询,用于查找与某个主题相关的患者信息:

    • “Summarize the aspirin uses”
    • “blood pressure”
    • “糖尿病管理?”
  • 导航查询,用于查找可映射到结构化查询的特定资源:

    • “Show me the most recent a1c”(显示最近的 a1c)
  • 提取式问题和答案,用于回答证据可能分散在多个资源中的特定问题:

    • “此患者是否曾接受过头孢菌素治疗?”
    • “患者是否曾接受过精神病学评估”

以下示例说明了此产品适合用于哪些用途:

  • 诊断建议和治疗建议:

    • “What is the differential diagnosis for this patient?”
    • “我应该为患者开具哪些药物处方?”

查询指南

以下准则可帮助您构建查询,以获得更准确的搜索结果:

  • 搜索具有特定意图的查询:由于模型不知道您要查找的内容,因此最好提供有针对性的查询,而不是模糊的查询。例如,搜索关键字“高血压”比搜索关键字“摘要”更合适。虽然查询“高血压”会从相关文档中显示特定结果,但查询“摘要”可能会从不相关的文档中显示结果。

  • 保留上下文:由于搜索不是对话,因此最好为每次查询提供完整的上下文。例如,如果您的初始询问是“高血压”,并且您想跟进同一主题,那么“何时诊断出高血压”比“何时诊断出”更适合作为第二个询问。

  • 简化查询:请尽可能将复杂的查询拆分为更简单的查询。例如,不要搜索“肌酐和白蛋白”,而是根据您的目标,分别创建“肌酐”“白蛋白”和“肌酐/白蛋白比率”的不同查询。

  • 避免要求推理:如果模型可以从搜索到的文档中逐字返回信息,而不是根据搜索到的信息进行计算或推理,则搜索功能会提供更精确的结果。例如,您可以查询“患者体重变化了多少”,也可以查询“列出过去 10 次访问中的患者体重”,然后单独计算体重变化。

准备工作

在搜索之前,请执行以下操作:

您可以使用关键字搜索医疗保健数据存储区。例如,您可以使用“a1c”“胰岛素”或“溃疡”等关键字进行搜索,以获取相关的 FHIR 资源。

以下图片显示了关键字为“脂质”时的搜索结果。此示例不包含摘要或生成式 AI 回答。

查询是“脂质”。
图 1:使用关键字进行搜索。

如需使用关键字进行搜索,请完成以下步骤。

控制台

  1. 在 Google Cloud 控制台中,前往 Agent Builder 页面。

    Agent Builder

  2. 选择要查询的医疗保健搜索应用。

  3. 在导航菜单中,点击预览

  4. 患者 ID 字段中,输入您要查询数据的患者的 ID。患者 ID 区分大小写。

  5. Enter 键或点击预览以提交患者 ID。

  6. 在此处搜索搜索栏中,输入要搜索的关键字。

    如果您启用了自动补全功能,则在输入时,搜索栏下方会显示自动补全建议列表。

  7. Enter 键提交查询。

    • 搜索结果会显示在分页表格中,这些表格会根据 FHIR 资源类型进行分类。
    • 默认情况下,所有 FHIR 资源类型的搜索结果均按时间倒序显示。
  8. 可选。如需过滤结果,请选择搜索栏下方的一种或多种 FHIR 资源类别。

  9. 可选。如需按与 Composition、DocumentReference 和 DiagnosticReport 资源的相关性对结果进行排序,请点击排序:按时间倒序过滤条件,然后从列表中选择相关性。如需了解详情,请参阅对医疗保健搜索结果进行排序

REST

以下示例展示了如何在医疗保健搜索应用中使用关键字搜索单个患者的 FHIR R4 数据。此示例使用 servingConfigs.search 方法。

默认情况下,搜索结果会按时间倒序返回。 在 Composition、DiagnosticReport 和 DocumentReference 资源中进行搜索时,您可以按相关性对搜索结果进行排序。如需了解详情,请参阅对医疗保健搜索结果进行排序

  1. 使用关键字进行搜索。

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://us-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/us/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
    "query": "KEYWORD_QUERY",
    "filter": "patientId: ANY(\"PATIENT_ID\")",
    "contentSearchSpec":{"snippetSpec":{"returnSnippet":true}}
    }'
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • APP_ID:您要查询的 Vertex AI Search 应用的 ID。
    • KEYWORD_QUERY:您要搜索过滤后的患者的患者临床数据中的关键字,例如“糖尿病”或“血糖”。
    • PATIENT_ID:您要搜索其数据的患者的资源 ID。

借助 Vertex AI Search,您可以获得复杂自然语言查询的结果。例如,下图显示了自然语言查询“与糖尿病相关的实验室结果”的结果。

查询是“患者的血脂实验室结果是什么”。
图 2. 使用自然语言查询进行搜索。

如需使用自然语言查询进行搜索,请完成以下步骤。

控制台

  1. 在 Google Cloud 控制台中,前往 Agent Builder 页面。

    Agent Builder

  2. 选择要查询的医疗保健搜索应用。

  3. 在导航菜单中,点击预览

  4. 患者 ID 字段中,输入您要查询数据的患者的患者 ID。患者 ID 区分大小写。

  5. Enter 键或点击预览以提交患者 ID。

  6. 在此处搜索搜索栏中,输入自然语言查询,例如“与糖尿病相关的实验室结果”。

    如果您启用了自动补全功能,则在输入时,搜索栏下方会显示自动补全建议列表。

  7. Enter 键提交查询。

    • 搜索结果会显示在分页表格中,这些表格会根据 FHIR 资源类型进行分类。
    • 默认情况下,所有 FHIR 资源类型的搜索结果均按时间倒序显示。
  8. 可选。选择搜索栏下方的 FHIR 资源类别,以过滤结果。

  9. 可选。如需按与 Composition、DocumentReference 和 DiagnosticReport 资源的相关性对结果进行排序,请点击排序:按时间倒序过滤条件,然后从列表中选择相关性。如需了解详情,请参阅对医疗保健搜索结果进行排序

REST

以下示例展示了如何使用自然语言查询在医疗保健搜索应用中搜索单个患者的 FHIR R4 数据。此示例使用 servingConfigs.search 方法。如需使用自然语言查询进行搜索,您必须将 naturalLanguageQueryUnderstandingSpec 字段添加到请求正文中。

默认情况下,搜索结果会按时间倒序返回。 在 Composition、DiagnosticReport 和 DocumentReference 资源中进行搜索时,您可以按相关性对搜索结果进行排序。如需了解详情,请参阅对医疗保健搜索结果进行排序

  1. 使用自然语言发布查询。

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://us-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/us/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
    "query": "NATURAL_LANGUAGE_QUERY",
    "filter": "patientId: ANY(\"PATIENT_ID\")",
    "contentSearchSpec":{"snippetSpec":{"returnSnippet":true}},
    "naturalLanguageQueryUnderstandingSpec":{"filterExtractionCondition":"ENABLED"}
    }'
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • APP_ID:您要查询的 Vertex AI Search 应用的 ID。
    • NATURAL_LANGUAGE_QUERY:自然语言查询,例如“与糖尿病相关的实验室结果”或“患者目前是否正在服用任何药物”。
    • PATIENT_ID:您要搜索其数据的患者的资源 ID。

使用自然语言查询进行搜索,并获得生成式 AI 回答

使用自然语言查询搜索患者的 FHIR 数据时,您可以选择在搜索结果中获取生成式 AI 回答。该回答会总结搜索结果,还会显示生成该回答时所用的参考信息。

使用控制台时,您可以为生成式 AI 回答选择大语言模型 (LLM)。如需了解详情,请参阅为医疗保健数据配置搜索结果

使用 REST API 时,您可以指定以下 LLM 模型之一,以便在 version 字段中获得生成式 AI 回答:

  • gemini-1.5-flash-001/answer_gen/v1stable:基于 gemini-1.5-flash-001 模型的稳定正式版模型。如需了解详情,请参阅正式版 (GA) 模型
  • gemini-1.0-pro-002/answer_gen/v1:基于 gemini-1.0-pro-002 模型的 Vertex AI Search。如需了解详情,请参阅正式版 (GA) 模型
  • medlm-medium/answer_gen/v1preview:基于 MedLM 模型的预览模型。如需了解详情,请参阅 MedLM 模型

下图显示了一个自然语言询问和生成式 AI 回答示例。搜索摘要会汇总相关搜索结果中的发现,从而为查询提供答案。您可以展开包含引文的细分,查看用于生成所选细分的参考信息。并非所有生成的回答都带有引文。

查询是“患者的血脂实验结果是什么”。搜索结果以表格格式显示。搜索结果随附生成式 AI 生成的摘要,其中显示“患者没有已知过敏症”。
图 3. 使用自然语言查询进行搜索,并通过生成式 AI 获取回答。

如需使用生成式 AI 回答进行搜索,请执行以下操作:

控制台

  1. 在 Google Cloud 控制台中,前往 Agent Builder 页面。

    Agent Builder

  2. 选择要查询的医疗保健搜索应用。

  3. 在导航菜单中,点击配置

  4. 自定义搜索微件:

    1. 搜索类型字段中,选择包含回答的搜索
    2. 选择要用于生成摘要的模型。如需了解详情,请参阅为医疗数据配置搜索结果
    3. 保存并发布您的偏好设置。
  5. 在导航菜单中,点击预览

  6. 患者 ID 字段中,输入您要查询数据的患者的患者 ID。患者 ID 区分大小写。

  7. Enter 键或点击预览以提交患者 ID。

  8. 在此处搜索搜索栏中,输入自然语言查询,例如“nsaids”“患者的血脂实验结果是什么”或“最新的 A1C 结果是什么”。

    如果您启用了自动补全功能,则在输入时,搜索栏下方会显示自动补全建议列表。

  9. Enter 键提交查询。

    • 生成式 AI 回答会显示在搜索栏下方。
    • 搜索结果会显示在分页表格中,这些表格会根据 FHIR 资源类型进行分类。
    • 默认情况下,所有 FHIR 资源类型的搜索结果均按时间倒序显示。
  10. 可选。展开包含引文的回答部分,查看搜索结果中的参考文献。

  11. 可选。选择搜索栏下方的 FHIR 资源类别,以过滤结果。

  12. 可选。如需按与 Composition、DocumentReference 和 DiagnosticReport 资源的相关性对结果进行排序,请点击排序:按时间倒序过滤条件,然后从列表中选择相关性。如需了解详情,请参阅对医疗保健搜索结果进行排序

REST

以下示例展示了如何在医疗保健搜索应用中使用包含生成式 AI 回答的自然语言查询搜索单个患者的 FHIR R4 数据。此示例使用 servingConfigs.search 方法。

  • 如需使用自然语言查询进行搜索,您必须将 naturalLanguageQueryUnderstandingSpec 字段添加到请求正文中。
  • 如需添加内嵌引文索引,您必须添加 includeCitations 字段。这是一个布尔字段,默认值设为 false

默认情况下,搜索结果会按时间倒序返回。 在 Composition、DiagnosticReport 和 DocumentReference 资源中进行搜索时,您可以按相关性对搜索结果进行排序。如需了解详情,请参阅对医疗保健搜索结果进行排序

  1. 使用自然语言发布查询。

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://us-discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/us/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
      -d '{
            "query": "QUERY",
            "filter": "patientId: ANY(\"PATIENT_ID\")",
            "contentSearchSpec": {
              "snippetSpec": {
                "returnSnippet": true
              },
              "summarySpec": {
                "summaryResultCount": 1,
                "includeCitations": true,
                "modelSpec": {
                  "version": "MODEL_VERSION"
                }
              }
            },
            "naturalLanguageQueryUnderstandingSpec": {
              "filterExtractionCondition": "ENABLED"
            }
          }'
    

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。
    • APP_ID:您要查询的 Vertex AI Search 应用的 ID。
    • QUERY:自然语言查询,例如“nsaids”“患者的血脂实验室结果是什么”或“最近的 A1C 结果是什么”。如果查询包含单引号 ',您必须将其替换为单引号的数字字符引用:'
    • PATIENT_ID:您要搜索其数据的患者的资源 ID。
    • MODEL_VERSION:您要用于生成回答的模型版本。