MedLM API

MedLM は、医療業界向けにファインチューニングされた基盤モデルのファミリーです。Med-PaLM 2 は、MedLM を支える Google Research が開発したテキストベースのモデルの一つで、米国医師免許試験(USMLE)形式の質問に回答し、人間の専門家レベルに到達した最初の AI システムです。これらのモデルの開発は、医療関連の質問への回答や要約の下書きなど、特定のお客様のニーズに基づいています。

MedLM モデルカード

MedLM モデルカードには、MedLM の用途、データの概要、安全性に関する情報など、モデルの詳細が表示されます。MedLM モデルカードの PDF 版をダウンロードするには、次のリンクをクリックします。

MedLM モデルカードをダウンロードする

ユースケース

  • 質問応答: 医療関連の質問に対して、回答のドラフトをテキストで提供します。
  • 要約: 元のテキストから得た関連情報を組み込んだ短縮版ドキュメント(事後訪問の概要、病歴、身体検査のメモなど)のドラフトを作成します。

テキスト プロンプトの設計について詳しくは、テキスト プロンプトを設計するをご覧ください。

HTTP リクエスト

MedLM-medium(medlm-medium:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/us-central1/publishers/google/models/medlm-medium:predict

MedLM-large(medlm-large:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/{PROJECT_ID}/locations/us-central1/publishers/google/models/medlm-large:predict

詳細については、predict メソッドをご覧ください。

モデル バージョン

MedLM では、次のモデルが用意されています。

  • MedLM-medium(medlm-medium
  • MedLM-large(medlm-large

次の表に、利用可能なモデルの安定版を示します。

medlm-medium モデル リリース日
medlm-medium 2023 年 12 月 13 日
medlm-large モデル リリース日
medlm-large 2023 年 12 月 13 日

MedLM-medium と MedLM-large には個別のエンドポイントがあり、お客様のユースケースに柔軟に対応します。MedLM-medium は、お客様により良いスループットを提供し、より新しいデータを保持しています。MedLM-large はプレビュー段階のものと同じモデルです。どちらのモデルも、プロダクトのライフサイクルの中で継続的に更新されます。このページでは、「MedLM」は両方のモデルを指します。

詳細については、モデルのバージョンとライフサイクルをご覧ください。

MedLM の安全フィルタと属性

MedLM API で処理されるコンテンツは、「有害なカテゴリ」や機密情報とみなされるトピックなど、安全属性のリストに照らして評価されます。「私は言語モデルにすぎないので、それについてはお手伝いできません」といった代替レスポンスが表示される場合は、プロンプトかレスポンスのいずれかによって、安全フィルタが作動していることを意味します。

安全性のしきい値

Vertex AI Studio を使用する場合は、調整可能な安全フィルタのしきい値を使用して、有害な可能性があるレスポンスが表示される可能性を確認できます。モデルのレスポンスは、ハラスメント、ヘイトスピーチ、危険なコンテンツ、性的描写が露骨なコンテンツが含まれている可能性に基づいてブロックされます。安全フィルタの設定は、Vertex AI Studio のプロンプト フィールドの右側にあります。block mostblock someblock few の 3 つのオプションから選択できます。

コンソールの画像

信頼性と重大度のしきい値のテスト

Google の安全フィルタをテストし、ビジネスに適した信頼度のしきい値を定義できます。これらのしきい値を使用することで、Google の利用ポリシーや利用規約に違反するコンテンツを検出し、適切な措置を取ることができます。

信頼スコアは予測にすぎないため、信頼性や精度については信頼スコアを過信しないでください。Google は、ビジネス上の意思決定のためにこれらのスコアを解釈または使用することに対して責任を負いません。

このテクノロジーを安全かつ責任を持って利用するには、組み込まれている技術的な安全保護対策に加えて、ユースケース、ユーザー、ビジネス コンテキストに固有の他のリスクを考慮することが重要です。

次のことをおすすめします。

  1. アプリケーションのセキュリティ リスクを評価する。
  2. 安全性のリスクを軽減するための調整を検討する。
  3. ユースケースに適した安全性テストを実施する。
  4. ユーザーからのフィードバックを求め、コンテンツをモニタリングする。

詳細については、責任ある AI に関する Google の推奨事項をご覧ください。

リクエストの本文

{
  "instances": [
    {
      "content": string
    }
  ],
  "parameters": {
    "temperature": number,
    "maxOutputTokens": integer,
    "topK": integer,
    "topP": number
  }
}

medlm-medium モデルと medlm-large モデルでは、次のパラメータを使用します。詳細については、テキスト プロンプトを設計するをご覧ください。

パラメータ 説明 使用できる値

content

モデルのレスポンスを生成するためのテキスト入力。プロンプトには、プリアンブル、質問、提案、指示、例を含めることができます。 テキスト

temperature

温度は、レスポンス生成時のサンプリングに使用されます。レスポンス生成は、topPtopK が適用された場合に発生します。温度は、トークン選択のランダム性の度合いを制御します。温度が低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度が 0 の場合、確率が最も高いトークンが常に選択されます。この場合、特定のプロンプトに対するレスポンスはほとんど確定的ですが、わずかに変動する可能性は残ります。

モデルが返すレスポンスが一般的すぎたり、短すぎたり、フォールバック(代替)レスポンスが返ってきたりする場合は、Temperature を高くしてみてください。

0.0–1.0

Default: 0.2

maxOutputTokens

レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。

レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。

1–8192(medlm-medium)

1–1024(medlm-large)

topK

Top-K は、モデルが出力用にトークンを選択する方法を変更します。Top-K が 1 の場合、次に選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものであることになります(グリーディ デコードとも呼ばれます)。Top-K が 3 の場合は、最も確率が高い上位 3 つのトークンから次のトークン選択されることになります(温度を使用します)。

トークン選択のそれぞれのステップで、最も高い確率を持つ Top-K のトークンがサンプリングされます。その後、トークンは Top-P に基づいてさらにフィルタリングされ、最終的なトークンは温度サンプリングを用いて選択されます。

ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。

1–40

Default: 40

topP

Top-P は、モデルが出力用にトークンを選択する方法を変更します。トークンは、確率の合計が Top-P 値に等しくなるまで、確率の高いもの(Top-K を参照)から低いものへと選択されます。たとえば、トークン A、B、C の確率が 0.3、0.2、0.1 であり、Top-P 値が 0.5 であるとします。この場合、モデルは温度を使用して A または B を次のトークンとして選択し、C は候補から除外します。

ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。

0.0–1.0

Default: 0.8

リクエストの例

MedLM API を使用する際は、プロンプト エンジニアリングを組み込むことが重要です。たとえば、各プロンプトの先頭には、タスク固有の適切な指示を記述することを強くおすすめします。詳細は、プロンプト デザインの概要をご覧ください。

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_ID: 実際のプロジェクト ID
  • MEDLM_MODEL: MedLM モデル(medlm-medium または medlm-large)。

HTTP メソッドと URL:

POST https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MEDLM_MODEL:predict

リクエストの本文(JSON):

{
  "instances": [
    {
      "content": "Question: What causes you to get ringworm?"
    }
  ],
  "parameters": {
    "temperature": 0,
    "maxOutputTokens": 256,
    "topK": 40,
    "topP": 0.95
  }
}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

cat > request.json << 'EOF'
{
  "instances": [
    {
      "content": "Question: What causes you to get ringworm?"
    }
  ],
  "parameters": {
    "temperature": 0,
    "maxOutputTokens": 256,
    "topK": 40,
    "topP": 0.95
  }
}
EOF

その後、次のコマンドを実行して REST リクエストを送信します。

curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MEDLM_MODEL:predict"

PowerShell

リクエスト本文を request.json という名前のファイルに保存します。ターミナルで次のコマンドを実行して、このファイルを現在のディレクトリに作成または上書きします。

@'
{
  "instances": [
    {
      "content": "Question: What causes you to get ringworm?"
    }
  ],
  "parameters": {
    "temperature": 0,
    "maxOutputTokens": 256,
    "topK": 40,
    "topP": 0.95
  }
}
'@  | Out-File -FilePath request.json -Encoding utf8

その後、次のコマンドを実行して REST リクエストを送信します。

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }

Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://us-central1-aiplatform.googleapis.com/v1/projects/PROJECT_ID/locations/us-central1/publishers/google/models/MEDLM_MODEL:predict" | Select-Object -Expand Content
 

レスポンスの本文

{
  "predictions": [
    {
      "content": string,
      "citationMetadata": {
        "citations": [
          {
            "startIndex": integer,
            "endIndex": integer,
            "url": string,
            "title": string,
            "license": string,
            "publicationDate": string
          }
        ]
      },
      "logprobs": {
        "tokenLogProbs": [ float ],
        "tokens": [ string ],
        "topLogProbs": [ { map<string, float> } ]
      },
      "safetyAttributes": {
        "categories": [ string ],
        "blocked": boolean,
        "scores": [ float ],
        "errors": [ int ]
      }
    }
  ],
  "metadata": {
    "tokenMetadata": {
      "input_token_count": {
        "total_tokens": integer,
        "total_billable_characters": integer
      },
      "output_token_count": {
        "total_tokens": integer,
        "total_billable_characters": integer
      }
    }
  }
}
レスポンス要素 説明
content 入力テキストから生成された結果。
categories 生成されたコンテンツに関連付けられた安全性属性カテゴリの表示名。順序がスコアと一致する。
scores 各カテゴリの信頼スコア。値が大きいほど、信頼度が高くなります。
blocked モデルの入力または出力がブロックされたかどうかを示すフラグ。
errors 入力または出力がブロックされた理由を示すエラーコード。エラーコードのリストについては、安全フィルタと属性をご覧ください。
startIndex 引用が開始される予測出力のインデックス(両端を含む)。0 以上 end_index 未満の値を指定する必要があります。
endIndex 引用が終了する予測出力のインデックス(終了箇所は含まない)。start_index より大きく、len(output) より小さい値にする必要があります。
url この引用に関連付けられている URL。この URL が存在する場合は、この引用元のウェブページにリンクされています。考えられる URL には、ニュース ウェブサイトや GitHub リポジトリなどがあります。
title この引用に関連付けられているタイトル。存在する場合は、この引用のソースのタイトルを指します。考えられるタイトルには、ニュース タイトルや書籍名などがあります。
license この引用に関連付けられているライセンス。存在する場合は、この引用元のライセンスを指します。ライセンスの例としては、MIT ライセンスなどのコード ライセンスが挙げられます。
publicationDate この引用に関連付けられている公開日。存在する場合は、この引用の出典が公開された日付を指します。使用できる形式は、YYYY、YYYY-MM、YYYY-MM-DD です。
input_token_count 入力トークンの数。これは、すべてのプロンプト、接頭辞、接尾辞にわたるトークンの総数です。
output_token_count 出力トークンの数。すべての予測における content 内のトークンの合計数です。
tokens サンプリングされたトークン。
tokenLogProbs サンプリングされたトークンのログ確率。
topLogProb 各ステップで最も可能性の高い候補トークンとそのログ確率。
logprobs logprobs パラメータの結果。candidates に対する 1 対 1 のマッピング。

レスポンスの例

{
  "predictions": [
    {
      "citationMetadata": {
        "citations": []
      },
      "content": "\n\nAnswer and Explanation:\nRingworm is a fungal infection of the skin that is caused by a type of fungus called dermatophyte. Dermatophytes can live on the skin, hair, and nails, and they can be spread from person to person through direct contact or through contact with contaminated objects.\n\nRingworm can cause a variety of symptoms, including:\n\n* A red, itchy rash\n* A raised, circular border\n* Blisters or scales\n* Hair loss\n\nRingworm is most commonly treated with antifungal medications, which can be applied to the skin or taken by mouth. In some cases, surgery may be necessary to remove infected hair or nails.",
      "safetyAttributes": {
        "scores": [
          1
        ],
        "blocked": false,
        "categories": [
          "Health"
        ]
      }
    }
  ],
  "metadata": {
    "tokenMetadata": {
      "outputTokenCount": {
        "totalTokens": 140,
        "totalBillableCharacters": 508
      },
      "inputTokenCount": {
        "totalTokens": 10,
        "totalBillableCharacters": 36
      }
    }
  }
}

生成 AI モデルからのレスポンスをストリーミングする

パラメータは、API に対するストリーミング リクエストと非ストリーミング リクエストで同じです。

REST API を使用してサンプルコードのリクエストとレスポンスを表示するには、REST API の使用例をご覧ください。

Vertex AI SDK for Python を使用してサンプルコードのリクエストとレスポンスを表示するには、Vertex AI SDK for Python の使用例をご覧ください。