医療データを検索する

FHIR R4 データを医療検索アプリにインポートしたら、インポートしたデータに対してクエリを実行して関連する結果を取得できます。検索できるクエリの種類は次のとおりです。

  • キーワード検索
  • 自然言語によるクエリ
  • 生成 AI の回答を含む自然言語クエリ

また、日付で絞り込んだクエリを使用して検索結果を絞り込むこともできます。詳細については、resource_datetime フィルタを定義するをご覧ください。

Google Cloud コンソールで検索する場合は、まず患者 ID を指定して、一度に 1 人の患者のデータに対して検索する必要があります。REST API を使用して検索する場合は、データストア全体を検索できます。

このページでは、さまざまなタイプのクエリを使用して医療データを検索する方法について説明します。

医療データの検索に対する Vertex AI Search の意図する使用

Vertex AI Search の意図する使用は、病気や疾患の予防、診断、治療に関する情報を提供することです。診断や治療の推奨に関する質問は、このプロダクトでの対応を意図していません。このプロダクトの目的は、ユーザーが提供した既存の医療情報を取得して要約することです。

テストデータが限られているため、このプロダクトは年齢層 0 から 18 歳と 85 歳以上に適している場合とそうでない場合があります。したがって、生成された出力をレビューする際は、ソースデータ内のサブポピュレーションの代表性を考慮する必要があります。

このプロダクトの意図する用途の例を以下に示します。

  • トピックに関連する患者の情報を検索するための探索クエリ:

    • 「アスピリンの用途を要約してください」
    • 「血圧」
    • 「糖尿病の管理とは?」
  • 構造化クエリにマッピングできる特定のリソースを見つけるためのナビゲーション クエリ:

    • 「最新の A1C 値を教えて」
  • 抽出型の質問と回答: 証拠がリソースに分散している可能性がある特定の質問に回答します。

    • 「この患者はセファロスポリンで治療されたことがありますか」
    • 「患者は精神科の評価を受けたことがありますか」

以下は、このプロダクトの意図する使用ではありません

  • 診断の推奨事項と治療の推奨事項:

    • 「この患者の鑑別診断は?」
    • 「患者にどのような薬を処方すればよいですか?」

始める前に

検索する前に、次のことを行います。

キーワードを使用して、医療データストアを検索できます。たとえば、「a1c」、「インシュリン」、「潰瘍」などのキーワードを使用して検索すると、関連する FHIR リソースを取得できます。

次の画像は、キーワードが「脂質」の場合の検索結果を示しています。この例には、サマリーや生成 AI の回答は含まれていません。

クエリは「脂質」です。
図 1. キーワードを使用して検索します。

キーワードを使用して検索するには、次の手順を完了します。

Console

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. クエリを実行する医療検索アプリを選択します。

  3. ナビゲーション メニューで [プレビュー] をクリックします。

  4. [患者 ID] フィールドに、データをクエリする患者の ID を入力します。患者 ID では大文字と小文字が区別されます。

  5. Enter キーを押すか、[プレビュー] をクリックして患者 ID を送信します。

  6. [ここで検索] 検索バーに検索キーワードを入力します。

    予測入力を有効にしている場合、入力すると検索バーの下に予測入力の候補が表示されます。

  7. Enter キーを押してクエリを送信します。

    • 検索結果は、FHIR リソースタイプに基づいて分類されたページネーションされた表に表示されます。
    • デフォルトでは、すべての FHIR リソースタイプの検索結果は時系列の逆順に表示されます。
  8. 省略可。結果をフィルタするには、検索バーの下にある FHIR リソース カテゴリを 1 つ以上選択します。

  9. 省略可。Composition、DocumentReference、DiagnosticReport リソースとの関連性に応じて結果を並べ替えるには、[並べ替え: 時系列逆順] フィルタをクリックし、リストから [関連性] を選択します。詳細については、医療検索結果を並べ替えるをご覧ください。

REST

次のサンプルは、キーワードを使用して医療検索アプリで 1 人の患者の 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: フィルタされた患者の患者臨床データ全体で検索するキーワード(「糖尿病」や「a1c」など)。
    • PATIENT_ID: データを検索する患者のリソース ID。

Vertex AI Search を使用すると、複雑な自然言語クエリの結果を取得できます。たとえば、次の画像は、「糖尿病に関連する検査結果」という自然言語クエリの結果を示しています。

クエリは「患者の脂質検査結果は?」です。
図 2. 自然言語クエリを使用して検索します。

自然言語クエリを使用して検索するには、次の操作を行います。

Console

  1. Google Cloud コンソールで、[Agent Builder] ページに移動します。

    Agent Builder

  2. クエリを実行する医療検索アプリを選択します。

  3. ナビゲーション メニューで [プレビュー] をクリックします。

  4. [患者 ID] フィールドに、データをクエリする患者の患者 ID を入力します。患者 ID では大文字と小文字が区別されます。

  5. Enter キーを押すか、[プレビュー] をクリックして患者 ID を送信します。

  6. [ここで検索] 検索バーに、自然言語のクエリ(「糖尿病に関連する検査結果」など)を入力します。

    予測入力を有効にしている場合、入力すると検索バーの下に予測入力の候補が表示されます。

  7. Enter キーを押してクエリを送信します。

    • 検索結果は、FHIR リソースタイプに基づいて分類されたページネーションされた表に表示されます。
    • デフォルトでは、すべての FHIR リソースタイプの検索結果は時系列の逆順に表示されます。
  8. 省略可。検索バーの下にある FHIR リソース カテゴリを 1 つ以上選択して、結果をフィルタします。

  9. 省略可。Composition、DocumentReference、DiagnosticReport リソースとの関連性に応じて結果を並べ替えるには、[並べ替え: 時系列逆順] フィルタをクリックし、リストから [関連性] を選択します。詳細については、医療検索結果を並べ替えるをご覧ください。

REST

次のサンプルは、自然言語クエリを使用して、医療検索アプリで 1 人の患者の 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/v1 または stable: 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/v1 または preview: MedLM モデルをベースにしたプレビュー モデル。詳細については、MedLM モデルをご覧ください。

次の図は、生成 AI の回答を含む自然言語クエリの例を示しています。検索サマリーは、関連する検索結果から得られた情報を要約して、クエリの回答を提供します。引用のあるセグメントを開くと、選択したセグメントの生成に使用された参照を確認できます。生成された回答に引用が含まれていない場合があります。

クエリは「患者の脂質検査結果は何ですか」です。検索結果は表形式で表示されます。検索結果には、生成 AI によって生成された「患者に既知のアレルギーはありません」というサマリーが表示されます。
図 3. 生成 AI の回答を含む自然言語クエリを使用して検索します。

生成 AI の回答付きで検索するには、次の操作を行います。

Console

  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 リソース カテゴリを 1 つ以上選択して、結果をフィルタします。

  12. 省略可。Composition、DocumentReference、DiagnosticReport リソースとの関連性に応じて結果を並べ替えるには、[並べ替え: 時系列逆順] フィルタをクリックし、リストから [関連性] を選択します。詳細については、医療検索結果を並べ替えるをご覧ください。

REST

次のサンプルは、生成 AI の回答を含む自然言語クエリを使用して、医療検索アプリで 1 人の患者の 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: 回答の生成に使用するモデル バージョン。